From d23aee017e023e75bb03627f3b959ed8ee171189 Mon Sep 17 00:00:00 2001 From: AaronDavidNewman Date: Tue, 1 Oct 2024 17:47:48 -0500 Subject: [PATCH] Update executables for release --- build/styles/dialogs.css | 1 + release/html/smoosic.html | 13 +- release/smoosic.js | 14173 +++++++++++++++--------- release/smoosic.js.map | 2 +- release/styles/bravura-font-codes.css | 469 +- release/styles/dialogs.css | 190 +- release/styles/fonts.css | 6 + release/styles/fonts/smoosic.json | 2 +- release/styles/fonts/smoosic.svg | 2 + release/styles/fonts/smoosic.ttf | Bin 73992 -> 77236 bytes release/styles/fonts/smoosic.woff | Bin 74068 -> 77312 bytes release/styles/images/metronome.svg | 242 + release/styles/media.css | 16 +- release/styles/menus.css | 22 +- release/styles/ribbon.css | 320 +- src/render/sui/piano.ts | 3 +- src/smo/data/score.ts | 2 +- src/smo/data/scoreModifiers.ts | 4 +- 18 files changed, 9912 insertions(+), 5555 deletions(-) create mode 100644 release/styles/images/metronome.svg diff --git a/build/styles/dialogs.css b/build/styles/dialogs.css index f96eb141..0d7098ca 100644 --- a/build/styles/dialogs.css +++ b/build/styles/dialogs.css @@ -483,6 +483,7 @@ button.button-array.initial { width: 35px; height: 35px; position:relative; + user-select: none; } .smoControl button.button-array.pushed { font-weight: bold; diff --git a/release/html/smoosic.html b/release/html/smoosic.html index 5c4119a6..10d9c920 100644 --- a/release/html/smoosic.html +++ b/release/html/smoosic.html @@ -3,21 +3,18 @@ Smoosic Editor - + - - - - - - - + + + + diff --git a/release/smoosic.js b/release/smoosic.js index 3de45067..4ff69ab4 100644 --- a/release/smoosic.js +++ b/release/smoosic.js @@ -484,8 +484,7 @@ class SuiApplication { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ModalEventHandler: () => (/* binding */ ModalEventHandler), -/* harmony export */ ModalEventHandlerProxy: () => (/* binding */ ModalEventHandlerProxy), -/* harmony export */ SimpleEventHandler: () => (/* binding */ SimpleEventHandler) +/* harmony export */ ModalEventHandlerProxy: () => (/* binding */ ModalEventHandlerProxy) /* harmony export */ }); /** * Shared interface for menus, dialogs, etc that can @@ -494,24 +493,6 @@ __webpack_require__.r(__webpack_exports__); */ class ModalEventHandler { } -class SimpleEventHandler extends ModalEventHandler { - ; - constructor(mouseMove, mouseClick, keyHandler) { - super(); - this.mouseMoveHandler = mouseMove; - this.mouseClickHandler = mouseClick; - this.evKeyHandler = keyHandler; - } - mouseMove(ev) { - this.mouseMove(ev); - } - mouseClick(ev) { - this.mouseClick(ev); - } - evKey(ev) { - this.evKeyHandler(ev); - } -} /** * Dependency injection, sends events to a proxy object, gets around some * cyclic dependencies when bootstrapping the application. @@ -522,6 +503,7 @@ class ModalEventHandlerProxy { this._handler = null; this.unbound = true; this.keydownHandler = null; + this.keyupHandler = null; this.mouseMoveHandler = null; this.mouseClickHandler = null; this.eventSource = evSource; @@ -536,6 +518,11 @@ class ModalEventHandlerProxy { this._handler.evKey(ev); } } + keyUp(ev) { + if (this._handler) { + this._handler.keyUp(ev); + } + } mouseMove(ev) { if (this._handler) { this._handler.mouseMove(ev); @@ -550,6 +537,7 @@ class ModalEventHandlerProxy { this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove'); this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick'); this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey'); + this.keyupHandler = this.eventSource.bindKeyupHandler(this, 'keyUp'); } unbindKeyboardForModal(dialog) { if (this.unbound) { @@ -744,7 +732,8 @@ class SuiDom { .append(b('div').classes('key-right-ctrl'))) .append(b('div').classes('controls-top').attr('id', 'controls-top'))) .append(b('div').classes('media') - .append(b('div').classes('controls-left').attr('id', 'controls-left')))); + .append(b('div').classes('d-flex flex-column flex-shrink-0 p-3 bg-body-tertiary') + .append(b('ul').classes('nav nav-pills flex-column mb-auto').attr('id', 'controls-left'))))); uiDomContainer.append(r.dom()[0]); const scrollRegion = document.createElement('div'); $(scrollRegion).attr('id', SuiDom.scrollRegionId).addClass('musicRelief'); @@ -957,10 +946,39 @@ class SuiEventHandler { menuHelp() { _ui_help__WEBPACK_IMPORTED_MODULE_4__.SuiHelp.displayHelp(); } + keyUp(evdata) { + if (!evdata.ctrlKey && SuiEventHandler.ctrlKeyPressed) { + $('body').removeClass('ctrl-key'); + SuiEventHandler.ctrlKeyPressed = false; + } + if (!evdata.shiftKey && SuiEventHandler.shiftKeyPressed) { + $('body').removeClass('shift-key'); + SuiEventHandler.shiftKeyPressed = false; + } + if (!evdata.altKey && SuiEventHandler.altKeyPressed) { + $('body').removeClass('alt-key'); + SuiEventHandler.altKeyPressed = false; + } + } + handleMetaKeyDown(evdata) { + if (evdata.ctrlKey && !SuiEventHandler.ctrlKeyPressed) { + $('body').addClass('ctrl-key'); + SuiEventHandler.ctrlKeyPressed = true; + } + if (evdata.shiftKey && !SuiEventHandler.shiftKeyPressed) { + $('body').addClass('shift-key'); + SuiEventHandler.shiftKeyPressed = true; + } + if (evdata.altKey && !SuiEventHandler.altKeyPressed) { + $('body').addClass('alt-key'); + SuiEventHandler.altKeyPressed = true; + } + } evKey(evdata) { if ($('body').hasClass('translation-mode')) { return; } + this.handleMetaKeyDown(evdata); if (SuiEventHandler.debugMask) { console.log("KeyboardEvent: key='" + evdata.key + "' | code='" + evdata.code + "'" @@ -975,10 +993,6 @@ class SuiEventHandler { if (dataCopy.key == '?') { _ui_help__WEBPACK_IMPORTED_MODULE_4__.SuiHelp.displayHelp(); } - if (dataCopy.key == '/') { - // set up menu DOM. - this.menus.slashMenuMode(this.completeNotifier); - } if (dataCopy.key == 'Enter') { this.trackerModifierSelect(dataCopy); } @@ -1033,6 +1047,9 @@ class SuiEventHandler { } SuiEventHandler.reentry = false; SuiEventHandler.debugMask = 0; +SuiEventHandler.altKeyPressed = false; +SuiEventHandler.ctrlKeyPressed = false; +SuiEventHandler.shiftKeyPressed = false; /***/ }), @@ -1274,7 +1291,7 @@ class SuiKeyCommands { interval(keyEvent) { return __awaiter(this, void 0, void 0, function* () { // code='Digit3' - var interval = parseInt(keyEvent.keyCode, 10) - 49; // 48 === '0', 0 indexed + var interval = parseInt(keyEvent.keyCode.toString(), 10) - 49; // 48 === '0', 0 indexed if (isNaN(interval) || interval < 1 || interval > 7) { return; } @@ -3643,7 +3660,9 @@ class smoSerialize { "th": "tabStaves", "uh": "noteId", "vh": "tupletId", - "wh": "metadata" }`; + "wh": "metadata", + "xh": "tupletTrees", + "yh": "displayString" }`; return JSON.parse(_tm); } static get valueTokens() { @@ -4340,7 +4359,7 @@ function getGlyphWidth(smoGlyph) { */ function getSlashGlyph() { // vexNote = new VF.GlyphNote('\uE504', { duration }); - return new VF.GlyphNote(new VF.Glyph('repeat1Bar', 38), { duration: 'w' }, { line: 2 }); + return new VF.GlyphNote(new VF.Glyph('repeatBarSlash', 38), { duration: 'w' }, { line: 2 }); } function getRepeatBar() { return new VF.GlyphNote(new VF.Glyph('repeat1Bar', 38), { duration: 'w' }, { line: 2 }); @@ -4395,11 +4414,7 @@ function getVexTuplets(params) { return vexTuplet; } function getVexNoteParameters(params) { - // If this is a tuplet, we only get the duration so the appropriate stem - // can be rendered. Vex calculates the actual ticks later when the tuplet is made - var duration = params.isTuplet ? - params.closestTicks : - params.exactTicks; + var duration = params.stemTicks; if (typeof (duration) === 'undefined') { console.warn('bad duration in measure ' + params.measureIndex); duration = '8'; @@ -4464,10 +4479,10 @@ function createSlur(params) { x_shift: params.xShift, y_shift: params.yShift, cps: params.cps, - invert: params.invert, + openingDirection: params.openingDirection, position: params.position, position_end: params.positionEnd - }); + }); // any until opening direction is imported return curve; } function createTie(params) { @@ -4596,13 +4611,13 @@ const ChordSymbolGlyphs = { code: 'csymMajorSeventh', }, csymMinor: { - code: 'minor', + code: 'csymMinor', }, minor: { - code: 'minor', + code: 'csymMinor', }, '-': { - code: 'minor', + code: 'csymMinor', }, '(': { code: 'csymParensLeftTall', @@ -6594,6 +6609,9 @@ class SuiLayoutFormatter { // TODO: Consider engraving font and adjust grace note size? noteWidth += (headWidth + _vex_glyphDimensions__WEBPACK_IMPORTED_MODULE_2__.vexGlyph.dimensions.noteHead.spacingRight) * note.graceNotes.length; noteWidth += dotWidth * dots + _vex_glyphDimensions__WEBPACK_IMPORTED_MODULE_2__.vexGlyph.dimensions.dot.spacingRight * dots; + if (!note.isRest() && note.endBeam) { + noteWidth += _vex_glyphDimensions__WEBPACK_IMPORTED_MODULE_2__.vexGlyph.dimensions.flag.width; + } note.pitches.forEach((pitch) => { const keyAccidental = _smo_data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.getAccidentalForKeySignature(pitch, smoMeasure.keySignature); const accidentals = tmObj.accidentalArray.filter((ar) => ar.duration < duration && ar.pitches[pitch.letter]); @@ -6601,7 +6619,7 @@ class SuiLayoutFormatter { const declared = acLen > 0 ? accidentals[acLen - 1].pitches[pitch.letter].pitch.accidental : keyAccidental; if (declared !== pitch.accidental || pitch.cautionary) { - noteWidth += _vex_glyphDimensions__WEBPACK_IMPORTED_MODULE_2__.vexGlyph.accidentalWidth(pitch.accidental); + noteWidth += _vex_glyphDimensions__WEBPACK_IMPORTED_MODULE_2__.vexGlyph.accidentalWidth(pitch.accidental) * 2; } }); let verse = 0; @@ -7237,7 +7255,7 @@ __webpack_require__.r(__webpack_exports__); * @category SuiRender */ class SuiMapper { - constructor(renderer, scroller, pasteBuffer) { + constructor(renderer, scroller) { // measure to selector map this.measureNoteMap = {}; // notes currently selected. Something is always selected @@ -7264,7 +7282,6 @@ class SuiMapper { // index if a single pitch of a chord is selected this.pitchIndex = -1; // the current selection, which is also the copy/paste destination - this.pasteBuffer = pasteBuffer; this.highlightQueue = { selectionCount: 0, deferred: false }; } updateHighlight() { @@ -7893,7 +7910,7 @@ class SuiPiano { } static createAndDisplay() { // Called by ribbon button. - $('body').trigger('show-piano-event'); + // $('body').trigger('show-piano-event'); $('body').trigger('forceScrollEvent'); } _mapKeys() { @@ -8097,7 +8114,6 @@ class SuiPiano { playNote() { } render() { - $('body').addClass('show-piano'); var b = _svgHelpers__WEBPACK_IMPORTED_MODULE_0__.SvgBuilder.b; var d = SuiPiano.dimensions; // https://www.mathpages.com/home/kmath043.htm @@ -8200,12 +8216,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ SuiRenderState: () => (/* binding */ SuiRenderState), /* harmony export */ scoreChangeEvent: () => (/* binding */ scoreChangeEvent) /* harmony export */ }); -/* harmony import */ var _smo_xform_undo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../smo/xform/undo */ "./src/smo/xform/undo.ts"); -/* harmony import */ var _common_promiseHelpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../common/promiseHelpers */ "./src/common/promiseHelpers.ts"); -/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../smo/xform/selections */ "./src/smo/xform/selections.ts"); -/* harmony import */ var _scoreRender__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./scoreRender */ "./src/render/sui/scoreRender.ts"); -/* harmony import */ var _ui_exceptions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../ui/exceptions */ "./src/ui/exceptions.ts"); -/* harmony import */ var _common_vex__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../common/vex */ "./src/common/vex.ts"); +/* harmony import */ var _common_promiseHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common/promiseHelpers */ "./src/common/promiseHelpers.ts"); +/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../smo/xform/selections */ "./src/smo/xform/selections.ts"); +/* harmony import */ var _scoreRender__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./scoreRender */ "./src/render/sui/scoreRender.ts"); +/* harmony import */ var _ui_exceptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../ui/exceptions */ "./src/ui/exceptions.ts"); +/* harmony import */ var _common_vex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../common/vex */ "./src/common/vex.ts"); var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -8220,7 +8235,6 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume - var scoreChangeEvent = 'smoScoreChangeEvent'; /** * Manage the state of the score rendering. The score can be rendered either completely, @@ -8247,7 +8261,7 @@ class SuiRenderState { this.viewportChanged = false; this._resetViewport = false; this.measureMapper = null; - this.renderer = new _scoreRender__WEBPACK_IMPORTED_MODULE_3__.SuiScoreRender(config); + this.renderer = new _scoreRender__WEBPACK_IMPORTED_MODULE_2__.SuiScoreRender(config); this.idleRedrawTime = config.config.idleRedrawTime; this.demonPollTime = config.config.demonPollTime; this.undoBuffer = config.undoBuffer; @@ -8293,20 +8307,41 @@ class SuiRenderState { return this.elementId; } notifyFontChange() { - (0,_common_vex__WEBPACK_IMPORTED_MODULE_5__.setFontStack)(this.score.engravingFont); + (0,_common_vex__WEBPACK_IMPORTED_MODULE_4__.setFontStack)(this.score.engravingFont); } addToReplaceQueue(selection) { + let selections = []; + if (!Array.isArray(selection)) { + selections = [selection]; + } + else { + selections = selection; + } if (this.passState === SuiRenderState.passStates.clean || this.passState === SuiRenderState.passStates.replace) { - if (Array.isArray(selection)) { - this.replaceQ = this.replaceQ.concat(selection); - } - else { - this.replaceQ.push(selection); - } + selections.forEach((selection) => { + const existing = this.replaceQ.find((sel) => sel.selector.staff === selection.selector.staff && sel.selector.measure === selection.selector.measure); + if (existing) { + existing._measure = selection._measure; + } + else { + this.replaceQ.push(selection); + } + }); this.setDirty(); } } + addColumnToReplaceQueue(mm) { + if (!this.score) { + return; + } + for (let i = 0; i < this.score.staves.length; ++i) { + const selection = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelection.measureSelection(this.score, i, mm); + if (selection) { + this.addToReplaceQueue(selection); + } + } + } setDirty() { if (!this.dirty) { this.dirty = true; @@ -8341,7 +8376,7 @@ class SuiRenderState { */ replaceMeasures() { const staffMap = {}; - if (this.score === null || this.measureMapper === null) { + if (this.score === null || this.measureMapper === null || this.replaceQ.length === 0) { return; } this.replaceQ.forEach((change) => { @@ -8369,7 +8404,7 @@ class SuiRenderState { const endAction = () => { self.suspendRendering = oldSuspend; }; - return _common_promiseHelpers__WEBPACK_IMPORTED_MODULE_1__.PromiseHelpers.makePromise(condition, endAction, null, this.demonPollTime); + return _common_promiseHelpers__WEBPACK_IMPORTED_MODULE_0__.PromiseHelpers.makePromise(condition, endAction, null, this.demonPollTime); } // ### renderPromise // return a promise that resolves when the score is in a fully rendered state. @@ -8409,7 +8444,7 @@ class SuiRenderState { } catch (ex) { console.error(ex); - _ui_exceptions__WEBPACK_IMPORTED_MODULE_4__.SuiExceptionHandler.instance.exceptionHandler(ex); + _ui_exceptions__WEBPACK_IMPORTED_MODULE_3__.SuiExceptionHandler.instance.exceptionHandler(ex); this.handlingRedraw = false; } } @@ -8470,7 +8505,7 @@ class SuiRenderState { $('body').addClass('print-render'); const self = this; if (!this.score) { - return _common_promiseHelpers__WEBPACK_IMPORTED_MODULE_1__.PromiseHelpers.emptyPromise(); + return _common_promiseHelpers__WEBPACK_IMPORTED_MODULE_0__.PromiseHelpers.emptyPromise(); } const layoutMgr = this.score.layoutManager; const layout = layoutMgr.getGlobalLayout(); @@ -8556,50 +8591,6 @@ class SuiRenderState { this.measureMapper.loadScore(); } } - // ### undo - // Undo is handled by the render state machine, because the layout has to first - // delete areas of the viewport that may have changed, - // then create the modified score, then render the 'new' score. - undo(undoBuffer, staffMap) { - let op = 'setDirty'; - const buffer = undoBuffer.peek(); - // Unrender the modified music because the IDs may change and normal unrender won't work - if (buffer) { - const sel = buffer.selector; - if (buffer.type === _smo_xform_undo__WEBPACK_IMPORTED_MODULE_0__.UndoBuffer.bufferTypes.MEASURE) { - if (typeof (staffMap[sel.staff]) === 'number') { - const mSelection = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_2__.SmoSelection.measureSelection(this.score, staffMap[sel.staff], sel.measure); - if (mSelection !== null) { - this.renderer.unrenderMeasure(mSelection.measure); - } - } - } - else if (buffer.type === _smo_xform_undo__WEBPACK_IMPORTED_MODULE_0__.UndoBuffer.bufferTypes.STAFF) { - if (typeof (staffMap[sel.staff]) === 'number') { - const sSelection = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_2__.SmoSelection.measureSelection(this.score, staffMap[sel.staff], 0); - if (sSelection !== null) { - this.renderer.unrenderStaff(sSelection.staff); - } - } - op = 'setRefresh'; - } - else { - this.renderer.unrenderAll(); - op = 'setRefresh'; - } - this._score = undoBuffer.undo(this._score, staffMap, false); - // Broken encapsulation - we need to know if we are 'undoing' an entire score - // so we can change the score pointed to by the renderer. - if (buffer.type === _smo_xform_undo__WEBPACK_IMPORTED_MODULE_0__.UndoBuffer.bufferTypes.SCORE) { - this.renderer.score = this._score; - } - this[op](); - } - if (!this._score) { - throw ('no score when undo'); - } - return this._score; - } unrenderColumn(measure) { this.score.staves.forEach((staff) => { this.renderer.unrenderMeasure(staff.measures[measure.measureNumber.measureIndex]); @@ -8614,9 +8605,14 @@ class SuiRenderState { unrenderMeasure(measure) { this.renderer.unrenderMeasure(measure); } - renderScoreModifiers() { + rerenderTextGroups() { return __awaiter(this, void 0, void 0, function* () { - yield this.renderer.renderScoreModifiers(); + yield this.renderer.rerenderTextGroups(); + }); + } + unrenderTextGroups() { + return __awaiter(this, void 0, void 0, function* () { + this.renderer.unrenderTextGroups(); }); } render() { @@ -8848,7 +8844,7 @@ class SuiScoreRender { console.log('layout setViewport: pstate initial'); } } - renderScoreModifiers() { + unrenderTextGroups() { return __awaiter(this, void 0, void 0, function* () { return new Promise((resolve) => { // remove existing modifiers, and also remove parent group for 'extra' @@ -8860,15 +8856,33 @@ class SuiScoreRender { }); tg.elements = []; } + resolve(); + }); + }); + } + renderTextGroups() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve) => { + var _a; + let tgs = this.score.textGroups; + if (((_a = this.score) === null || _a === void 0 ? void 0 : _a.isPartExposed()) && this.score.staves[0].partInfo.preserveTextGroups) { + tgs = this.score.staves[0].partInfo.textGroups; + } // group.classList.add('all-score-text'); - for (var i = 0; i < this.score.textGroups.length; ++i) { - const tg = this.score.textGroups[i]; + for (var i = 0; i < tgs.length; ++i) { + const tg = tgs[i]; this.renderTextGroup(tg); } resolve(); }); }); } + rerenderTextGroups() { + return __awaiter(this, void 0, void 0, function* () { + yield this.unrenderTextGroups(); + yield this.renderTextGroups(); + }); + } /** * for music we've just rendered, get the bounding boxes. We defer this step so we don't force * a reflow, which can slow rendering. @@ -8994,7 +9008,7 @@ class SuiScoreRender { yield this._renderNextSystem(lineIx, keys, printing); } else { - yield this.renderScoreModifiers(); + yield this.rerenderTextGroups(); this.numberMeasures(); this.measuresToMap.forEach((mm) => { this.measureRenderedElements(mm.vxSystem, mm.measuresToBox, mm.modifiersToBox, mm.printing); @@ -9082,8 +9096,8 @@ class SuiScoreRender { } const renderedId = {}; staff.renderableModifiers.forEach((modifier) => { - const startNote = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelection.noteSelection(this.score, modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick); - const endNote = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelection.noteSelection(this.score, modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick); + let startNote = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelection.noteSelection(this.score, modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick); + let endNote = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelection.noteSelection(this.score, modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick); if (!startNote || !endNote) { // If the modifier doesn't have score endpoints, delete it from the score removedModifiers.push(modifier); @@ -9107,6 +9121,7 @@ class SuiScoreRender { } while (testNote) { vxEnd = testNote; + endNote = nextNote; nextNote = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelection.nextNoteSelection(this.score, nextNote.selector.staff, nextNote.selector.measure, nextNote.selector.voice, nextNote.selector.tick); if (!nextNote) { break; @@ -9126,6 +9141,7 @@ class SuiScoreRender { testNote = system.getVxNote(lastNote.note); while (testNote !== null) { vxStart = testNote; + startNote = lastNote; lastNote = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelection.lastNoteSelection(this.score, lastNote.selector.staff, lastNote.selector.measure, lastNote.selector.voice, lastNote.selector.tick); if (!lastNote) { break; @@ -9175,16 +9191,17 @@ class SuiScoreRender { this.renderedPages[change.measure.svg.pageIndex] = null; } _smo_xform_beamers__WEBPACK_IMPORTED_MODULE_6__.SmoBeamer.applyBeams(change.measure); + const lineIndex = change.measure.svg.lineIndex; // Defer modifier update until all selected measures are drawn. - if (!staffMap[change.staff.staffId]) { + if (!staffMap[lineIndex]) { const context = this.vexContainers.getRenderer(change.measure.svg.logicalBox); if (context) { - system = new _vex_vxSystem__WEBPACK_IMPORTED_MODULE_2__.VxSystem(context, change.measure.staffY, change.measure.svg.lineIndex, this.score); - staffMap[change.staff.staffId] = { system, staff: change.staff }; + system = new _vex_vxSystem__WEBPACK_IMPORTED_MODULE_2__.VxSystem(context, change.measure.staffY, lineIndex, this.score); + staffMap[lineIndex] = { system, staff: change.staff }; } } else { - system = staffMap[change.staff.staffId].system; + system = staffMap[lineIndex].system; } const selections = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelection.measuresInColumn(this.score, change.measure.measureNumber.measureIndex); const measuresToMeasure = []; @@ -9298,19 +9315,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ SuiScoreView: () => (/* binding */ SuiScoreView) /* harmony export */ }); /* harmony import */ var _smo_data_score__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../smo/data/score */ "./src/smo/data/score.ts"); -/* harmony import */ var _smo_data_systemStaff__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../smo/data/systemStaff */ "./src/smo/data/systemStaff.ts"); -/* harmony import */ var _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../smo/data/staffModifiers */ "./src/smo/data/staffModifiers.ts"); -/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../smo/xform/selections */ "./src/smo/xform/selections.ts"); -/* harmony import */ var _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../smo/xform/undo */ "./src/smo/xform/undo.ts"); -/* harmony import */ var _smo_xform_copypaste__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../smo/xform/copypaste */ "./src/smo/xform/copypaste.ts"); -/* harmony import */ var _scroller__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./scroller */ "./src/render/sui/scroller.ts"); -/* harmony import */ var _svgHelpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./svgHelpers */ "./src/render/sui/svgHelpers.ts"); -/* harmony import */ var _tracker__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tracker */ "./src/render/sui/tracker.ts"); -/* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); -/* harmony import */ var _renderState__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./renderState */ "./src/render/sui/renderState.ts"); -/* harmony import */ var _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../smo/xform/operations */ "./src/smo/xform/operations.ts"); -/* harmony import */ var _audio_player__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../audio/player */ "./src/render/audio/player.ts"); -/* harmony import */ var _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../smo/data/measureModifiers */ "./src/smo/data/measureModifiers.ts"); +/* harmony import */ var _smo_data_measure__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../smo/data/measure */ "./src/smo/data/measure.ts"); +/* harmony import */ var _smo_data_music__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../smo/data/music */ "./src/smo/data/music.ts"); +/* harmony import */ var _smo_data_systemStaff__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../smo/data/systemStaff */ "./src/smo/data/systemStaff.ts"); +/* harmony import */ var _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../smo/data/staffModifiers */ "./src/smo/data/staffModifiers.ts"); +/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../smo/xform/selections */ "./src/smo/xform/selections.ts"); +/* harmony import */ var _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../smo/xform/undo */ "./src/smo/xform/undo.ts"); +/* harmony import */ var _smo_xform_copypaste__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../smo/xform/copypaste */ "./src/smo/xform/copypaste.ts"); +/* harmony import */ var _scroller__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./scroller */ "./src/render/sui/scroller.ts"); +/* harmony import */ var _svgHelpers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./svgHelpers */ "./src/render/sui/svgHelpers.ts"); +/* harmony import */ var _tracker__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./tracker */ "./src/render/sui/tracker.ts"); +/* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); +/* harmony import */ var _renderState__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./renderState */ "./src/render/sui/renderState.ts"); +/* harmony import */ var _smo_xform_operations__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../smo/xform/operations */ "./src/smo/xform/operations.ts"); +/* harmony import */ var _audio_player__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../audio/player */ "./src/render/audio/player.ts"); +/* harmony import */ var _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../smo/data/measureModifiers */ "./src/smo/data/measureModifiers.ts"); var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -9337,6 +9356,8 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume + + /** * Base class for all operations on the rendered score. The base class handles the following: * 1. Undo and recording actions for the operation @@ -9354,43 +9375,38 @@ class SuiScoreView { undoBuffer }; this.audioAnimation = config.audioAnimation; - this.renderer = new _renderState__WEBPACK_IMPORTED_MODULE_10__.SuiRenderState(renderParams); + this.renderer = new _renderState__WEBPACK_IMPORTED_MODULE_12__.SuiRenderState(renderParams); this.config = config; - const scoreJson = score.serialize({ skipStaves: false, useDictionary: false }); - this.scroller = new _scroller__WEBPACK_IMPORTED_MODULE_6__.SuiScroller(scrollSelector, this.renderer.renderer.vexContainers); - this.pasteBuffer = new _smo_xform_copypaste__WEBPACK_IMPORTED_MODULE_5__.PasteBuffer(); - this.storePaste = new _smo_xform_copypaste__WEBPACK_IMPORTED_MODULE_5__.PasteBuffer(); - this.tracker = new _tracker__WEBPACK_IMPORTED_MODULE_8__.SuiTracker(this.renderer, this.scroller, this.pasteBuffer); + const scoreJson = score.serialize({ skipStaves: false, useDictionary: false, preserveStaffIds: true }); + this.scroller = new _scroller__WEBPACK_IMPORTED_MODULE_8__.SuiScroller(scrollSelector, this.renderer.renderer.vexContainers); + this.storePaste = new _smo_xform_copypaste__WEBPACK_IMPORTED_MODULE_7__.PasteBuffer(); + this.tracker = new _tracker__WEBPACK_IMPORTED_MODULE_10__.SuiTracker(this.renderer, this.scroller); this.renderer.setMeasureMapper(this.tracker); this.storeScore = _smo_data_score__WEBPACK_IMPORTED_MODULE_0__.SmoScore.deserialize(JSON.stringify(scoreJson)); - this.synchronizeTextGroups(); - this.storeUndo = new _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer(); + this.score.synchronizeTextGroups(this.storeScore.textGroups); + this.storeUndo = new _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer(); this.staffMap = this.defaultStaffMap; SuiScoreView.Instance = this; // for debugging this.setMappedStaffIds(); - (0,_common_htmlHelpers__WEBPACK_IMPORTED_MODULE_9__.createTopDomContainer)('.saveLink'); // for file upload - } - synchronizeTextGroups() { - // Synchronize the score text IDs so cut/paste/undo works transparently - this.score.textGroups.forEach((tg, ix) => { - if (this.storeScore.textGroups.length > ix) { - this.storeScore.textGroups[ix].attrs.id = tg.attrs.id; - } - }); + (0,_common_htmlHelpers__WEBPACK_IMPORTED_MODULE_11__.createTopDomContainer)('.saveLink'); // for file upload } /** * Await on the full update of the score * @returns */ renderPromise() { - return this.renderer.renderPromise(); + return __awaiter(this, void 0, void 0, function* () { + return this.renderer.renderPromise(); + }); } /** * Await on the partial update of the score in the view * @returns */ updatePromise() { - return this.renderer.updatePromise(); + return __awaiter(this, void 0, void 0, function* () { + return this.renderer.updatePromise(); + }); } awaitRender() { return __awaiter(this, void 0, void 0, function* () { @@ -9403,10 +9419,12 @@ class SuiScoreView { * @returns */ refreshViewport() { - this.renderer.preserveScroll(); - this.renderer.setViewport(); - this.renderer.setRefresh(); - return this.renderer.renderPromise(); + return __awaiter(this, void 0, void 0, function* () { + this.renderer.preserveScroll(); + this.renderer.setViewport(); + this.renderer.setRefresh(); + yield this.renderer.renderPromise(); + }); } handleScrollEvent(scrollLeft, scrollTop) { this.tracker.scroller.handleScroll(scrollLeft, scrollTop); @@ -9433,6 +9451,75 @@ class SuiScoreView { }); return { keys, partMap }; } + /** + * Any method that modifies a set of selections can call this to update + * the score view and the backing score. + * @param actor + * @param selections + */ + modifyCurrentSelections(label, actor) { + return __awaiter(this, void 0, void 0, function* () { + const altSelections = this._getEquivalentSelections(this.tracker.selections); + this.undoTrackerMeasureSelections(label); + actor(this.score, this.tracker.selections); + actor(this.storeScore, altSelections); + this._renderChangedMeasures(_smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelection.getMeasureList(this.tracker.selections)); + yield this.updatePromise(); + }); + } + /** + * Any method that modifies a set of selections can call this to update + * the score view and the backing score. + * @param actor + * @param selections + */ + modifySelection(label, selection, actor) { + return __awaiter(this, void 0, void 0, function* () { + const altSelection = this._getEquivalentSelection(selection); + this.undoTrackerMeasureSelections(label); + actor(this.score, [selection]); + if (altSelection) { + actor(this.storeScore, [altSelection]); + } + this._renderChangedMeasures(_smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelection.getMeasureList([selection])); + yield this.updatePromise(); + }); + } + /** + * Any method that modifies a set of selections can call this to update + * the score view and the backing score. + * @param actor + * @param selections + */ + modifySelectionNoWait(label, selection, actor) { + return __awaiter(this, void 0, void 0, function* () { + const altSelection = this._getEquivalentSelection(selection); + this.undoTrackerMeasureSelections(label); + actor(this.score, selection); + if (altSelection) { + actor(this.storeScore, altSelection); + } + this._renderChangedMeasures(_smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelection.getMeasureList([selection])); + }); + } + /** + * Modifiy a set of columns, e.g. tempo, time, key. This has different undo behavior, don't + * pend on the result because there may be a combination of operations. + * @param label + * @param selections + * @param actor + */ + modifyColumnsSelectionsNoWait(label, selections, actor) { + this.undoColumnRange(label, selections); + selections.forEach((selection) => { + const altSelection = this._getEquivalentSelection(selection); + actor(this.score, selection); + if (altSelection) { + actor(this.storeScore, altSelection); + } + }); + this._renderChangedMeasures(selections); + } /** * This is used in some Smoosic demos and pens. * @param action any action, but most usefully a SuiScoreView method @@ -9441,22 +9528,24 @@ class SuiScoreView { * @returns promise, resolved action has been completed and score is updated. */ waitableAction(action, repetition) { - const rep = repetition !== null && repetition !== void 0 ? repetition : 1; - const self = this; - const promise = new Promise((resolve) => { - const fc = (count) => __awaiter(this, void 0, void 0, function* () { - if (count > 0) { - action(); - yield self.renderer.updatePromise(); - fc(count - 1); - } - else { - resolve(); - } + return __awaiter(this, void 0, void 0, function* () { + const rep = repetition !== null && repetition !== void 0 ? repetition : 1; + const self = this; + const promise = new Promise((resolve) => { + const fc = (count) => __awaiter(this, void 0, void 0, function* () { + if (count > 0) { + action(); + yield self.renderer.updatePromise(); + fc(count - 1); + } + else { + resolve(); + } + }); + fc(rep); }); - fc(rep); + return promise; }); - return promise; } /** * The plural form of _getEquivalentSelection @@ -9473,17 +9562,46 @@ class SuiScoreView { }); return rv; } + // Get a long enough list of measures to paste into + getPasteMeasureList() { + // The length of the paste buffer, in ticks + const ticksToPaste = this.storePaste.getCopyBufferTickCount(); + const selections = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelection.getMeasureList(this.tracker.selections); + const tm = selections[0].measure.tickmapForVoice(selections[0].selector.voice); + // The last measure selected + const lastSelection = this.tracker.selections[this.tracker.selections.length - 1]; + // length of first selected measure, in ticks + const measureTicks = this.tracker.selections[0].measure.getTicksFromVoice(this.tracker.selections[0].selector.voice); + // remaining ticks after first selection. This is our starting point. + let startTick = measureTicks - tm.durationMap[this.tracker.selections[0].selector.tick]; + // Add ticks for all remaining measures + for (let i = 1; i < selections.length; ++i) { + const sel = selections[i]; + startTick += sel.measure.getTicksFromVoice(0); + } + // if we are short, and there are measures left, add them to the selection list + if (startTick < ticksToPaste && lastSelection.selector.measure < (this.score.staves[0].measures.length + 1)) { + const newSel = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelection.measureSelection(this.score, selections[0].selector.staff, lastSelection.selector.measure + 1); + if (newSel) { + selections.push(newSel); + } + } + return selections; + } /** * A staff modifier has changed, create undo operations for the measures affected * @param label * @param staffModifier * @param subtype */ - _undoStaffModifier(label, staffModifier, subtype) { - const copy = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_2__.StaffModifierBase.deserialize(staffModifier.serialize()); + undoStaffModifier(label, staffModifier, subtype) { + const copy = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.StaffModifierBase.deserialize(staffModifier.serialize()); copy.startSelector = this._getEquivalentSelector(copy.startSelector); copy.endSelector = this._getEquivalentSelector(copy.endSelector); - this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferTypes.STAFF_MODIFIER, _smo_xform_selections__WEBPACK_IMPORTED_MODULE_3__.SmoSelector.default, copy.serialize(), subtype); + const copySer = copy.serialize(); + // Copy ID so we can undo properly + copySer.attrs = JSON.parse(JSON.stringify(staffModifier.attrs)); + this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferTypes.STAFF_MODIFIER, _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelector.default, copySer, subtype); } /** * Return the index of the page that is in the center of the client screen. @@ -9497,7 +9615,7 @@ class SuiScoreView { const layoutManager = this.score.layoutManager.getGlobalLayout(); const lh = layoutManager.pageHeight / layoutManager.svgScale; const lw = layoutManager.pageWidth / layoutManager.svgScale; - const pt = this.renderer.pageMap.svgToClient(_svgHelpers__WEBPACK_IMPORTED_MODULE_7__.SvgHelpers.smoBox({ x: lw, y: lh })); + const pt = this.renderer.pageMap.svgToClient(_svgHelpers__WEBPACK_IMPORTED_MODULE_9__.SvgHelpers.smoBox({ x: lw, y: lh })); return Math.round(midY / pt.y); } /** @@ -9505,30 +9623,42 @@ class SuiScoreView { * score. */ _undoColumn(label, measureIndex) { - this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferTypes.COLUMN, _smo_xform_selections__WEBPACK_IMPORTED_MODULE_3__.SmoSelector.default, { score: this.storeScore, measureIndex }, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferSubtypes.NONE); + this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferTypes.COLUMN, _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelector.default, { score: this.storeScore, measureIndex }, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferSubtypes.NONE); } /** * Score preferences don't affect the display, but they do have an undo * @param label */ _undoScorePreferences(label) { - this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferTypes.SCORE_ATTRIBUTES, _smo_xform_selections__WEBPACK_IMPORTED_MODULE_3__.SmoSelector.default, this.storeScore, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferSubtypes.NONE); + this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferTypes.SCORE_ATTRIBUTES, _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelector.default, this.storeScore, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferSubtypes.NONE); } - /** - * Add to the undo buffer the current set of measures selected. - * @param label - * @returns - */ - _undoTrackerMeasureSelections(label) { - const measureSelections = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_3__.SmoSelection.getMeasureList(this.tracker.selections); + undoColumnRange(label, measureSelections) { + const checked = {}; + measureSelections.forEach((measureSelection) => { + if (!checked[measureSelection.selector.measure]) { + checked[measureSelection.selector.measure] = true; + this._undoColumn(label, measureSelection.selector.measure); + } + }); + } + undoMeasureRange(label, measureSelections) { measureSelections.forEach((measureSelection) => { const equiv = this._getEquivalentSelection(measureSelection); if (equiv !== null) { - this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferSubtypes.NONE); + this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferSubtypes.NONE); } }); return measureSelections; } + /** + * Add to the undo buffer the current set of measures selected. + * @param label + * @returns + */ + undoTrackerMeasureSelections(label) { + const measureSelections = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelection.getMeasureList(this.tracker.selections); + return this.undoMeasureRange(label, measureSelections); + } /** * operation that only affects the first selection. Setup undo for the measure */ @@ -9536,7 +9666,7 @@ class SuiScoreView { const sel = this.tracker.selections[0]; const equiv = this._getEquivalentSelection(sel); if (equiv !== null) { - this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferSubtypes.NONE); + this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferSubtypes.NONE); } return sel; } @@ -9548,7 +9678,7 @@ class SuiScoreView { _undoSelection(label, selection) { const equiv = this._getEquivalentSelection(selection); if (equiv !== null) { - this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferSubtypes.NONE); + this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferSubtypes.NONE); } } /** @@ -9589,7 +9719,7 @@ class SuiScoreView { * @param label */ _undoScore(label) { - this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferTypes.SCORE, _smo_xform_selections__WEBPACK_IMPORTED_MODULE_3__.SmoSelector.default, this.storeScore, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_4__.UndoBuffer.bufferSubtypes.NONE); + this.storeUndo.addBuffer(label, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferTypes.SCORE, _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelector.default, this.storeScore, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.bufferSubtypes.NONE); } /** * Get the selector from this.storeScore that maps to the displayed selector from this.score @@ -9617,12 +9747,12 @@ class SuiScoreView { _getEquivalentSelection(selection) { try { if (typeof (selection.selector.tick) === 'undefined') { - return _smo_xform_selections__WEBPACK_IMPORTED_MODULE_3__.SmoSelection.measureSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure); + return _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelection.measureSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure); } if (typeof (selection.selector.pitches) === 'undefined') { - return _smo_xform_selections__WEBPACK_IMPORTED_MODULE_3__.SmoSelection.noteSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice, selection.selector.tick); + return _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelection.noteSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice, selection.selector.tick); } - return _smo_xform_selections__WEBPACK_IMPORTED_MODULE_3__.SmoSelection.pitchSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice, selection.selector.tick, selection.selector.pitches); + return _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelection.pitchSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice, selection.selector.tick, selection.selector.pitches); } catch (ex) { console.warn(ex); @@ -9656,7 +9786,7 @@ class SuiScoreView { let j = 0; for (i = startSelector.staff; i <= endSelector.staff; i++) { for (j = startSelector.measure; j <= endSelector.measure; j++) { - const target = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_3__.SmoSelection.measureSelection(this.score, i, j); + const target = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_5__.SmoSelection.measureSelection(this.score, i, j); if (target !== null) { rv.push(target); } @@ -9792,15 +9922,15 @@ class SuiScoreView { if (!any) { return; } - const nscore = _smo_data_score__WEBPACK_IMPORTED_MODULE_0__.SmoScore.deserialize(JSON.stringify(this.storeScore.serialize({ skipStaves: true, useDictionary: false }))); + const nscore = _smo_data_score__WEBPACK_IMPORTED_MODULE_0__.SmoScore.deserialize(JSON.stringify(this.storeScore.serialize({ skipStaves: true, useDictionary: false, preserveStaffIds: false }))); const staffMap = []; for (i = 0; i < rows.length; ++i) { const row = rows[i]; if (row.show) { const srcStave = this.storeScore.staves[i]; - const jsonObj = srcStave.serialize({ skipMaps: false }); + const jsonObj = srcStave.serialize({ skipMaps: false, preserveIds: true }); jsonObj.staffId = staffMap.length; - const nStave = _smo_data_systemStaff__WEBPACK_IMPORTED_MODULE_1__.SmoSystemStaff.deserialize(jsonObj); + const nStave = _smo_data_systemStaff__WEBPACK_IMPORTED_MODULE_3__.SmoSystemStaff.deserialize(jsonObj); nStave.mapStaffFromTo(i, nscore.staves.length); nscore.staves.push(nStave); if (srcStave.keySignatureMap) { @@ -9808,8 +9938,8 @@ class SuiScoreView { } nStave.measures.forEach((measure, ix) => { const srcMeasure = srcStave.measures[ix]; - measure.tempo = new _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_13__.SmoTempoText(srcMeasure.tempo.serialize()); - measure.timeSignature = new _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_13__.TimeSignature(srcMeasure.timeSignature); + measure.tempo = new _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_15__.SmoTempoText(srcMeasure.tempo.serialize()); + measure.timeSignature = new _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_15__.TimeSignature(srcMeasure.timeSignature); measure.keySignature = srcMeasure.keySignature; }); staffMap.push(i); @@ -9830,28 +9960,27 @@ class SuiScoreView { this.score.staves.forEach((staff) => { staff.partInfo.displayCues = false; }); - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.computeMultipartRest(nscore); + _smo_xform_operations__WEBPACK_IMPORTED_MODULE_13__.SmoOperation.computeMultipartRest(nscore); } else { this.score.staves.forEach((staff) => { staff.partInfo.displayCues = staff.partInfo.cueInScore; }); } - window.dispatchEvent(new CustomEvent(_renderState__WEBPACK_IMPORTED_MODULE_10__.scoreChangeEvent, { detail: { view: this } })); + window.dispatchEvent(new CustomEvent(_renderState__WEBPACK_IMPORTED_MODULE_12__.scoreChangeEvent, { detail: { view: this } })); this.renderer.setViewport(); } /** * view all the staffs in score mode. */ viewAll() { - this.score = _smo_data_score__WEBPACK_IMPORTED_MODULE_0__.SmoScore.deserialize(JSON.stringify(this.storeScore.serialize({ skipStaves: false, useDictionary: false }))); + this.score = _smo_data_score__WEBPACK_IMPORTED_MODULE_0__.SmoScore.deserialize(JSON.stringify(this.storeScore.serialize({ skipStaves: false, useDictionary: false, preserveStaffIds: true }))); this.staffMap = this.defaultStaffMap; this.setMappedStaffIds(); this._setTransposing(); - this.synchronizeTextGroups(); + this.score.synchronizeTextGroups(this.storeScore.textGroups); this.renderer.score = this.score; - this.pasteBuffer.setScore(this.score); - window.dispatchEvent(new CustomEvent(_renderState__WEBPACK_IMPORTED_MODULE_10__.scoreChangeEvent, { detail: { view: this } })); + window.dispatchEvent(new CustomEvent(_renderState__WEBPACK_IMPORTED_MODULE_12__.scoreChangeEvent, { detail: { view: this } })); this.renderer.setViewport(); } /** @@ -9874,43 +10003,98 @@ class SuiScoreView { changeScore(score) { return __awaiter(this, void 0, void 0, function* () { this.storeUndo.reset(); - _audio_player__WEBPACK_IMPORTED_MODULE_12__.SuiAudioPlayer.stopPlayer(); + _audio_player__WEBPACK_IMPORTED_MODULE_14__.SuiAudioPlayer.stopPlayer(); this.renderer.score = score; this.renderer.setViewport(); - this.storeScore = _smo_data_score__WEBPACK_IMPORTED_MODULE_0__.SmoScore.deserialize(JSON.stringify(score.serialize({ skipStaves: false, useDictionary: false }))); + this.storeScore = _smo_data_score__WEBPACK_IMPORTED_MODULE_0__.SmoScore.deserialize(JSON.stringify(score.serialize({ skipStaves: false, useDictionary: false, preserveStaffIds: true }))); this.score = score; // If the score is non-transposing, hide the instrument xpose settings this._setTransposing(); this.staffMap = this.defaultStaffMap; this.setMappedStaffIds(); - this.synchronizeTextGroups(); + this.score.synchronizeTextGroups(this.storeScore.textGroups); if (this.storeScore.isPartExposed()) { this.exposePart(this.score.staves[0]); } const rv = yield this.awaitRender(); - window.dispatchEvent(new CustomEvent(_renderState__WEBPACK_IMPORTED_MODULE_10__.scoreChangeEvent, { detail: { view: this } })); + window.dispatchEvent(new CustomEvent(_renderState__WEBPACK_IMPORTED_MODULE_12__.scoreChangeEvent, { detail: { view: this } })); return rv; }); } + replaceMeasureView(measureRange) { + for (let i = measureRange[0]; i <= measureRange[1]; ++i) { + this.score.staves.forEach((staff) => { + var _a, _b; + const staffId = staff.staffId; + const altStaff = this.storeScore.staves[this._getEquivalentStaff(staffId)]; + if (altStaff) { + staff.syncStaffModifiers(i, altStaff); + } + // Get a copy of the backing score, and map it to the score stave. this.score may have fewer staves + // than this.storeScore + const svg = JSON.parse(JSON.stringify(staff.measures[i].svg)); + const serialized = _smo_xform_undo__WEBPACK_IMPORTED_MODULE_6__.UndoBuffer.serializeMeasure(this.storeScore.staves[this.staffMap[staffId]].measures[i]); + serialized.measureNumber.staffId = staffId; + const xpose = (_a = serialized.transposeIndex) !== null && _a !== void 0 ? _a : 0; + const concertKey = _smo_data_music__WEBPACK_IMPORTED_MODULE_2__.SmoMusic.vexKeySigWithOffset((_b = serialized.keySignature) !== null && _b !== void 0 ? _b : 'c', -1 * xpose); + serialized.keySignature = concertKey; + const rmeasure = _smo_data_measure__WEBPACK_IMPORTED_MODULE_1__.SmoMeasure.deserialize(serialized); + rmeasure.svg = svg; + const selector = { staff: staffId, measure: i, voice: 0, tick: 0, pitches: [] }; + this.score.replaceMeasure(selector, rmeasure); + }); + this.renderer.addColumnToReplaceQueue(i); + } + } /** * for the view score, the renderer decides what to render * depending on what is undone. * @returns */ undo() { - if (!this.renderer.score) { - return; - } - // A score-level undo might have changed the score. - if (this.storeUndo.buffer.length < 1) { - return; - } - const staffMap = {}; - const identityMap = {}; - this.defaultStaffMap.forEach((nn) => identityMap[nn] = nn); - this.staffMap.forEach((mm, ix) => staffMap[mm] = ix); - this.score = this.renderer.undo(this.storeUndo, staffMap); - this.storeScore = this.storeUndo.undo(this.storeScore, identityMap, true); + return __awaiter(this, void 0, void 0, function* () { + if (!this.renderer.score) { + return; + } + if (!this.storeUndo.buffersAvailable()) { + return; + } + const staffMap = {}; + const identityMap = {}; + this.defaultStaffMap.forEach((nn) => identityMap[nn] = nn); + this.staffMap.forEach((mm, ix) => staffMap[mm] = ix); + // A score-level undo might have changed the score. + const fullScore = this.storeUndo.undoScorePeek(); + // text undo is handled differently since there is usually not + // an associated measure. + const scoreText = this.storeUndo.undoScoreTextGroupPeek(); + const partText = this.storeUndo.undoPartTextGroupPeek(); + if (scoreText || partText) { + yield this.renderer.unrenderTextGroups(); + } + const measureRange = this.storeUndo.getMeasureRange(); + if (!(fullScore || scoreText || partText)) { + for (let i = measureRange[0]; i <= measureRange[1]; ++i) { + this.renderer.unrenderColumn(this.score.staves[0].measures[i]); + } + } + this.storeScore = this.storeUndo.undo(this.storeScore, identityMap, true); + if (fullScore) { + this.viewAll(); + this.renderer.setRefresh(); + } + else if (partText) { + this.setView(this.getView()); + } + else if (scoreText) { + this.score.synchronizeTextGroups(this.storeScore.textGroups); + this.renderer.rerenderTextGroups(); + } + else { + this.replaceMeasureView(measureRange); + } + yield this.renderer.updatePromise(); + }); } } SuiScoreView.Instance = null; @@ -10006,19 +10190,27 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ addTextGroup(textGroup) { return __awaiter(this, void 0, void 0, function* () { + var _a; const altNew = _smo_data_scoreText__WEBPACK_IMPORTED_MODULE_7__.SmoTextGroup.deserializePreserveId(textGroup.serialize()); - _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altNew, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.ADD); - if (this.isPartExposed()) { - this.score.updateTextGroup(textGroup, true); + const isPartExposed = this.isPartExposed(); + let selector = (_a = textGroup.selector) !== null && _a !== void 0 ? _a : _smo_xform_selections__WEBPACK_IMPORTED_MODULE_18__.SmoSelector.default; + const partInfo = this.score.staves[0].partInfo; + const bufType = isPartExposed && partInfo.preserveTextGroups + ? _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferTypes.PART_MODIFIER : _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferTypes.SCORE_MODIFIER; + if (bufType === _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferTypes.PART_MODIFIER) { + selector.staff = this.staffMap[0]; + } + this.storeUndo.addBuffer('remove text group', bufType, selector, textGroup, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.ADD); + if (isPartExposed && partInfo.preserveTextGroups) { + this.score.staves[0].partInfo.updateTextGroup(textGroup, true); const partInfo = this.storeScore.staves[this._getEquivalentStaff(0)].partInfo; partInfo.updateTextGroup(altNew, true); } else { - this.score.addTextGroup(textGroup); - this.storeScore.addTextGroup(altNew); + this.score.updateTextGroup(textGroup, true); + this.storeScore.updateTextGroup(altNew, true); } - yield this.renderer.renderScoreModifiers(); - return this.renderer.updatePromise(); + yield this.renderer.rerenderTextGroups(); }); } /** @@ -10028,22 +10220,38 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ removeTextGroup(textGroup) { return __awaiter(this, void 0, void 0, function* () { - this.score.updateTextGroup(textGroup, false); + var _a; + let selector = (_a = textGroup.selector) !== null && _a !== void 0 ? _a : _smo_xform_selections__WEBPACK_IMPORTED_MODULE_18__.SmoSelector.default; + const partInfo = this.score.staves[0].partInfo; + const isPartExposed = this.isPartExposed(); + const bufType = isPartExposed && partInfo.preserveTextGroups + ? _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferTypes.PART_MODIFIER : _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferTypes.SCORE_MODIFIER; + let ogText = this.storeScore.textGroups.find((tg) => tg.attrs.id === textGroup.attrs.id); + if (isPartExposed && partInfo.preserveTextGroups) { + ogText = partInfo.textGroups.find((tg) => tg.attrs.id === textGroup.attrs.id); + } + if (bufType === _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferTypes.PART_MODIFIER) { + selector.staff = this.staffMap[0]; + } + else { + selector.staff = this.staffMap[selector.staff]; + } + if (!ogText) { + return; + } + this.storeUndo.addBuffer('remove text group', bufType, selector, ogText, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.REMOVE); const altGroup = _smo_data_scoreText__WEBPACK_IMPORTED_MODULE_7__.SmoTextGroup.deserializePreserveId(textGroup.serialize()); textGroup.elements.forEach((el) => el.remove()); textGroup.elements = []; - const isPartExposed = this.isPartExposed(); - if (!isPartExposed) { - _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altGroup, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.REMOVE); - this.storeScore.updateTextGroup(altGroup, false); + if (isPartExposed && partInfo.preserveTextGroups) { + partInfo.updateTextGroup(textGroup, false); + this.storeScore.staves[this._getEquivalentStaff(0)].partInfo.updateTextGroup(altGroup, false); } else { - const stave = this.storeScore.staves[this._getEquivalentStaff(0)]; - stave.partInfo.textGroups = this.score.textGroups; - _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altGroup, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.REMOVE); + this.score.updateTextGroup(textGroup, false); + this.storeScore.updateTextGroup(altGroup, false); } - yield this.renderer.renderScoreModifiers(); - return this.renderer.updatePromise(); + yield this.renderer.rerenderTextGroups(); }); } /** @@ -10055,19 +10263,43 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ updateTextGroup(newVersion) { return __awaiter(this, void 0, void 0, function* () { + var _a; + const selector = (_a = newVersion.selector) !== null && _a !== void 0 ? _a : _smo_xform_selections__WEBPACK_IMPORTED_MODULE_18__.SmoSelector.default; const isPartExposed = this.isPartExposed(); + const partInfo = this.score.staves[0].partInfo; + // Back up the original score text + let ogtg = this.storeScore.textGroups.find((tg) => tg.attrs.id === newVersion.attrs.id); + if (isPartExposed && partInfo.preserveTextGroups) { + ogtg = partInfo.textGroups.find((tg) => tg.attrs.id === newVersion.attrs.id); + } + if (!ogtg) { + // there is nothing to update, return. + return; + } + if (ogtg) { + const bufType = isPartExposed && partInfo.preserveTextGroups + ? _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferTypes.PART_MODIFIER : _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferTypes.SCORE_MODIFIER; + // if this is part text, make sure the undo buffer is associated with the part stave + // in the full score, so undo works properly + if (bufType === _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferTypes.PART_MODIFIER) { + selector.staff = this.staffMap[0]; + } + else { + selector.staff = this.staffMap[selector.staff]; + } + this.storeUndo.addBuffer('modify text', bufType, selector, ogtg, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.UPDATE); + } const altNew = _smo_data_scoreText__WEBPACK_IMPORTED_MODULE_7__.SmoTextGroup.deserializePreserveId(newVersion.serialize()); this.score.updateTextGroup(newVersion, true); // If this is part text, don't store it in the score text, except for the displayed score if (!isPartExposed) { - _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altNew, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.UPDATE); this.storeScore.updateTextGroup(altNew, true); } else { this.storeScore.staves[this._getEquivalentStaff(0)].partInfo.updateTextGroup(altNew, true); } // TODO: only render the one TG. - yield this.renderer.renderScoreModifiers(); + yield this.renderer.rerenderTextGroups(); // return this.renderer.updatePromise(); }); } @@ -10163,29 +10395,10 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui return this.renderer.updatePromise(); }); } - /** - * Add a specific microtone modifier to the selected notes - * @param tone - * @returns - */ - addRemoveMicrotone(tone) { - return __awaiter(this, void 0, void 0, function* () { - const selections = this.tracker.selections; - const altSelections = this._getEquivalentSelections(selections); - const measureSelections = this._undoTrackerMeasureSelections('add/remove microtone'); - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.addRemoveMicrotone(null, selections, tone); - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.addRemoveMicrotone(null, altSelections, tone); - this._renderChangedMeasures(measureSelections); - return this.renderer.updatePromise(); - }); - } addRemoveArpeggio(code) { return __awaiter(this, void 0, void 0, function* () { - const selections = this.tracker.selections; - const altSelections = this._getEquivalentSelections(selections); - const measureSelections = this._undoTrackerMeasureSelections('add/remove arpeggio'); - [selections, altSelections].forEach((selType) => { - selType.forEach((sel) => { + yield this.modifyCurrentSelections('add/remove addRemoveArpeggio', (score, selections) => { + selections.forEach((sel) => { if (sel.note) { if (code === 'none') { sel.note.arpeggio = undefined; @@ -10196,8 +10409,6 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui } }); }); - this._renderChangedMeasures(measureSelections); - yield this.renderer.updatePromise(); }); } /** @@ -10206,26 +10417,19 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ addRemoveClefChange(clef) { return __awaiter(this, void 0, void 0, function* () { - const selections = [this.tracker.selections[0]]; - const altSelections = this._getEquivalentSelections(selections); - const measureSelections = this._undoTrackerMeasureSelections('add/remove clef change'); - [selections, altSelections].forEach((selType) => { - selType.forEach((sel) => { + yield this.modifyCurrentSelections('add/remove addRemoveClefChange', (score, selections) => { + selections.forEach((sel) => { + const measureClef = sel.measure.clef; if (sel.note) { - const measureClef = sel.measure.clef; - // If the clef is the same as measure clef, remove any clef change from Note if (measureClef === clef.clef) { sel.note.clefNote = null; } else { sel.note.clefNote = clef; } - sel.measure.updateClefChangeNotes(); } }); }); - this._renderChangedMeasures(measureSelections); - yield this.renderer.updatePromise(); }); } /** @@ -10236,13 +10440,9 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ addDynamic(selection, dynamic) { return __awaiter(this, void 0, void 0, function* () { - this._undoFirstMeasureSelection('add dynamic'); - this._removeDynamic(selection, dynamic); - const equiv = this._getEquivalentSelection(selection); - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.addDynamic(selection, dynamic); - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.addDynamic(equiv, _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_8__.SmoNoteModifierBase.deserialize(dynamic.serialize())); - this.renderer.addToReplaceQueue(selection); - yield this.renderer.updatePromise(); + yield this.modifySelection('add dynamic', selection, (score, selections) => { + _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.addDynamic(selections[0], dynamic); + }); }); } /** @@ -10289,7 +10489,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui * */ deleteNote() { return __awaiter(this, void 0, void 0, function* () { - const measureSelections = this._undoTrackerMeasureSelections('delete note'); + const measureSelections = this.undoTrackerMeasureSelections('delete note'); this.tracker.selections.forEach((sel) => { if (sel.note) { const altSel = this._getEquivalentSelection(sel); @@ -10368,7 +10568,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ depopulateVoice() { return __awaiter(this, void 0, void 0, function* () { - const measureSelections = this._undoTrackerMeasureSelections('depopulate voice'); + const measureSelections = this.undoTrackerMeasureSelections('depopulate voice'); measureSelections.forEach((selection) => { const ix = selection.measure.getActiveVoice(); if (ix !== 0) { @@ -10650,7 +10850,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui addGraceNote() { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('add grace note'); + const measureSelections = this.undoTrackerMeasureSelections('add grace note'); selections.forEach((selection) => { const index = selection.note.getGraceNotes().length; const pitches = JSON.parse(JSON.stringify(selection.note.pitches)); @@ -10677,7 +10877,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui removeGraceNote() { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('remove grace note'); + const measureSelections = this.undoTrackerMeasureSelections('remove grace note'); selections.forEach((selection) => { // TODO: get the correct offset _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.removeGraceNote(selection, 0); @@ -10694,7 +10894,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui slashGraceNotes() { return __awaiter(this, void 0, void 0, function* () { const grace = this.tracker.getSelectedGraceNotes(); - const measureSelections = this._undoTrackerMeasureSelections('slash grace note toggle'); + const measureSelections = this.undoTrackerMeasureSelections('slash grace note toggle'); grace.forEach((gn) => { _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.slashGraceNotes(gn); if (gn.selection !== null) { @@ -10727,7 +10927,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui transposeSelections(offset) { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('transpose'); + const measureSelections = this.undoTrackerMeasureSelections('transpose'); const grace = this.tracker.getSelectedGraceNotes(); if (grace.length) { grace.forEach((artifact) => { @@ -10764,7 +10964,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui toggleEnharmonic() { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('toggle enharmonic'); + const measureSelections = this.undoTrackerMeasureSelections('toggle enharmonic'); const grace = this.tracker.getSelectedGraceNotes(); if (grace.length) { grace.forEach((artifact) => { @@ -10794,7 +10994,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui toggleCourtesyAccidentals() { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('toggle courtesy accidental'); + const measureSelections = this.undoTrackerMeasureSelections('toggle courtesy accidental'); const grace = this.tracker.getSelectedGraceNotes(); if (grace.length) { grace.forEach((artifact) => { @@ -10827,7 +11027,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui batchDurationOperation(operation) { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('change duration'); + const measureSelections = this.undoTrackerMeasureSelections('change duration'); const grace = this.tracker.getSelectedGraceNotes(); const graceMap = { doubleDuration: 'doubleGraceNoteDuration', @@ -10859,23 +11059,65 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ toggleArticulation(modifier, ctor) { return __awaiter(this, void 0, void 0, function* () { - const measureSelections = this._undoTrackerMeasureSelections('toggle articulation'); + const measureSelections = this.undoTrackerMeasureSelections('toggle articulation'); this.tracker.selections.forEach((sel) => { if (ctor === 'SmoArticulation') { const aa = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_8__.SmoArticulation({ articulation: modifier }); const altAa = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_8__.SmoArticulation({ articulation: modifier }); altAa.attrs.id = aa.attrs.id; - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.toggleArticulation(sel, aa); + if (sel.note) { + sel.note.toggleArticulation(aa); + } const altSelection = this._getEquivalentSelection(sel); - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.toggleArticulation(altSelection, altAa); + if (altSelection && altSelection.note) { + altSelection.note.toggleArticulation(altAa); + } } else { const aa = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_8__.SmoOrnament({ ornament: modifier }); const altAa = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_8__.SmoOrnament({ ornament: modifier }); altAa.attrs.id = aa.attrs.id; const altSelection = this._getEquivalentSelection(sel); - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.toggleOrnament(sel, aa); - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.toggleOrnament(altSelection, altAa); + if (sel.note) { + sel.note.toggleOrnament(aa); + } + if (altSelection && altSelection.note) { + altSelection.note.toggleOrnament(altAa); + } + } + }); + this._renderChangedMeasures(measureSelections); + yield this.renderer.updatePromise(); + }); + } + setArticulation(modifier, set) { + return __awaiter(this, void 0, void 0, function* () { + const measureSelections = this.undoTrackerMeasureSelections('set articulation'); + this.tracker.selections.forEach((sel) => { + const altAa = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_8__.SmoArticulation(modifier); + if (sel.note) { + sel.note.setArticulation(modifier, set); + } + const altSelection = this._getEquivalentSelection(sel); + if (altSelection && altSelection.note) { + altSelection.note.toggleArticulation(altAa); + } + }); + this._renderChangedMeasures(measureSelections); + yield this.renderer.updatePromise(); + }); + } + setOrnament(modifier, set) { + return __awaiter(this, void 0, void 0, function* () { + const measureSelections = this.undoTrackerMeasureSelections('set articulation'); + this.tracker.selections.forEach((sel) => { + const altAa = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_8__.SmoOrnament(modifier); + if (sel.note) { + sel.note.setOrnament(modifier, set); + } + const altSelection = this._getEquivalentSelection(sel); + if (altSelection && altSelection.note) { + altSelection.note.setOrnament(altAa, set); } }); this._renderChangedMeasures(measureSelections); @@ -10889,7 +11131,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui makeTuplet(numNotes) { return __awaiter(this, void 0, void 0, function* () { const selection = this.tracker.selections[0]; - const measureSelections = this._undoTrackerMeasureSelections('make tuplet'); + const measureSelections = this.undoTrackerMeasureSelections('make tuplet'); _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.makeTuplet(selection, numNotes); const altSelection = this._getEquivalentSelection(selection); _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.makeTuplet(altSelection, numNotes); @@ -10903,7 +11145,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui unmakeTuplet() { return __awaiter(this, void 0, void 0, function* () { const selection = this.tracker.selections[0]; - const measureSelections = this._undoTrackerMeasureSelections('unmake tuplet'); + const measureSelections = this.undoTrackerMeasureSelections('unmake tuplet'); _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.unmakeTuplet(selection); const altSelection = this._getEquivalentSelection(selection); _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.unmakeTuplet(altSelection); @@ -10919,7 +11161,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui setInterval(interval) { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('set interval'); + const measureSelections = this.undoTrackerMeasureSelections('set interval'); selections.forEach((selected) => { _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.interval(selected, interval); const altSelection = this._getEquivalentSelection(selected); @@ -10936,7 +11178,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui collapseChord() { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('collapse chord'); + const measureSelections = this.undoTrackerMeasureSelections('collapse chord'); selections.forEach((selected) => { const note = selected.note; if (note) { @@ -10958,7 +11200,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui toggleSlash() { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('make slash'); + const measureSelections = this.undoTrackerMeasureSelections('make slash'); selections.forEach((selection) => { _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.toggleSlash(selection); const altSel = this._getEquivalentSelection(selection); @@ -10975,7 +11217,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui makeRest() { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('make rest'); + const measureSelections = this.undoTrackerMeasureSelections('make rest'); selections.forEach((selection) => { _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.toggleRest(selection); const altSel = this._getEquivalentSelection(selection); @@ -10985,6 +11227,25 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui yield this.renderer.updatePromise(); }); } + clearAllBeams() { + return __awaiter(this, void 0, void 0, function* () { + this._undoScore('clearAllBeams'); + _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.clearAllBeamGroups(this.score); + _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.clearAllBeamGroups(this.storeScore); + yield this.awaitRender(); + }); + } + clearSelectedBeams() { + return __awaiter(this, void 0, void 0, function* () { + const selections = this.tracker.selections; + const measures = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_18__.SmoSelection.getMeasureList(selections); + const altSelections = this._getEquivalentSelections(selections); + _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.clearBeamGroups(this.score, selections); + _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.clearBeamGroups(this.storeScore, altSelections); + this._renderChangedMeasures(measures); + yield this.renderer.updatePromise(); + }); + } /** * toggle the 'end beam' flag for selected notes * @returns @@ -10992,7 +11253,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui toggleBeamGroup() { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('toggle beam group'); + const measureSelections = this.undoTrackerMeasureSelections('toggle beam group'); selections.forEach((selection) => { _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.toggleBeamGroup(selection); const altSel = this._getEquivalentSelection(selection); @@ -11004,7 +11265,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui } toggleCue() { return __awaiter(this, void 0, void 0, function* () { - const measureSelections = this._undoTrackerMeasureSelections('toggle note cue'); + const measureSelections = this.undoTrackerMeasureSelections('toggle note cue'); this.tracker.selections.forEach((selection) => { const altSelection = this._getEquivalentSelection(selection); if (selection.note && selection.note.isRest() === false) { @@ -11028,7 +11289,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui if (selections.length < 1) { return _common_promiseHelpers__WEBPACK_IMPORTED_MODULE_22__.PromiseHelpers.emptyPromise(); } - const measureSelections = this._undoTrackerMeasureSelections('toggle beam direction'); + const measureSelections = this.undoTrackerMeasureSelections('toggle beam direction'); _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.toggleBeamDirection(selections); _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.toggleBeamDirection(this._getEquivalentSelections(selections)); this._renderChangedMeasures(measureSelections); @@ -11041,7 +11302,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui beamSelections() { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('beam selections'); + const measureSelections = this.undoTrackerMeasureSelections('beam selections'); _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.beamSelections(this.score, selections); _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.beamSelections(this.storeScore, this._getEquivalentSelections(selections)); this._renderChangedMeasures(measureSelections); @@ -11054,7 +11315,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ addKeySignature(keySignature) { return __awaiter(this, void 0, void 0, function* () { - const measureSelections = this._undoTrackerMeasureSelections('set key signature ' + keySignature); + const measureSelections = this.undoTrackerMeasureSelections('set key signature ' + keySignature); measureSelections.forEach((sel) => { _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.addKeySignature(this.score, sel, keySignature); const altSel = this._getEquivalentSelection(sel); @@ -11071,7 +11332,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ setPitchPiano(pitch, chordPedal) { return __awaiter(this, void 0, void 0, function* () { - const measureSelections = this._undoTrackerMeasureSelections('setAbsolutePitch ' + pitch.letter + '/' + pitch.accidental); + const measureSelections = this.undoTrackerMeasureSelections('setAbsolutePitch ' + pitch.letter + '/' + pitch.accidental); this.tracker.selections.forEach((selected) => { const npitch = { letter: pitch.letter, @@ -11142,7 +11403,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui setPitch(letter) { return __awaiter(this, void 0, void 0, function* () { const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('set pitch ' + letter); + const measureSelections = this.undoTrackerMeasureSelections('set pitch ' + letter); selections.forEach((selected) => { const selector = selected.selector; let hintSel = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_18__.SmoSelection.lastNoteSelectionNonRest(this.score, selector.staff, selector.measure, selector.voice, selector.tick); @@ -11173,7 +11434,6 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ copy() { return __awaiter(this, void 0, void 0, function* () { - this.pasteBuffer.setSelections(this.score, this.tracker.selections); const altAr = []; this.tracker.selections.forEach((sel) => { const noteSelection = this._getEquivalentSelection(sel); @@ -11193,15 +11453,25 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui return __awaiter(this, void 0, void 0, function* () { // We undo the whole score on a paste, since we don't yet know the // extent of the overlap - this._undoScore('paste'); this.renderer.preserveScroll(); - const firstSelection = this.tracker.selections[0]; - const pasteTarget = firstSelection.selector; + const selections = this.getPasteMeasureList(); + const firstSelection = selections[0]; + const measureEnd = selections[selections.length - 1].selector.measure; + const measureRange = [firstSelection.selector.measure, measureEnd]; + this.storeUndo.grouping = true; + // Undo the paste by selecting all the affected measures + for (let i = measureRange[0]; i <= measureRange[1]; ++i) { + this._undoColumn('paste', i); + this.renderer.unrenderColumn(this.score.staves[0].measures[i]); + } + this.storeUndo.grouping = false; const altSelection = this._getEquivalentSelection(firstSelection); const altTarget = altSelection.selector; - this.pasteBuffer.pasteSelections(pasteTarget); + altTarget.tick = this.tracker.selections[0].selector.tick; + // paste the clipboard into the destination this.storePaste.pasteSelections(altTarget); - this._renderChangedMeasures(this.pasteBuffer.replacementMeasures); + // Refresh those measures. + this.replaceMeasureView(measureRange); yield this.renderer.updatePromise(); }); } @@ -11211,12 +11481,9 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ setNoteHead(head) { return __awaiter(this, void 0, void 0, function* () { - const selections = this.tracker.selections; - const measureSelections = this._undoTrackerMeasureSelections('set note head'); - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.setNoteHead(selections, head); - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.setNoteHead(this._getEquivalentSelections(selections), head); - this._renderChangedMeasures(measureSelections); - return this.renderer.updatePromise(); + yield this.modifyCurrentSelections('set note head', (score, selections) => { + _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.setNoteHead(selections, head); + }); }); } /** @@ -11337,6 +11604,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui _removeStaffModifier(modifier) { this.score.staves[modifier.associatedStaff].removeStaffModifier(modifier); const altModifier = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_19__.StaffModifierBase.deserialize(modifier.serialize()); + altModifier.attrs.id = modifier.attrs.id; altModifier.startSelector = this._getEquivalentSelector(altModifier.startSelector); altModifier.endSelector = this._getEquivalentSelector(altModifier.endSelector); this.storeScore.staves[this._getEquivalentStaff(modifier.associatedStaff)].removeStaffModifier(altModifier); @@ -11348,7 +11616,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ removeStaffModifier(modifier) { return __awaiter(this, void 0, void 0, function* () { - this._undoStaffModifier('Set measure proportion', modifier, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.REMOVE); + this.undoStaffModifier('Set measure proportion', modifier, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.REMOVE); this._removeStaffModifier(modifier); this._renderRectangle(modifier.startSelector, modifier.endSelector); return this.renderer.updatePromise(); @@ -11376,7 +11644,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui .getModifier(modifier); const subtype = existing === null ? _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.ADD : _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.UPDATE; - this._undoStaffModifier('Set measure proportion', original, subtype); + this.undoStaffModifier('Set measure proportion', original, subtype); this._removeStaffModifier(modifier); const copy = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_19__.StaffModifierBase.deserialize(modifier.serialize()); copy.startSelector = this._getEquivalentSelector(copy.startSelector); @@ -11396,18 +11664,21 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui return this.renderer.updatePromise(); }); } - _lineOperation(op) { + lineOperation(op) { // if (this.tracker.selections.length < 2) { // return; // } - const measureSelections = this._undoTrackerMeasureSelections(op); + const measureSelections = this.undoTrackerMeasureSelections('create staff modifier'); const ft = this.tracker.getExtremeSelection(-1); const tt = this.tracker.getExtremeSelection(1); const ftAlt = this._getEquivalentSelection(ft); const ttAlt = this._getEquivalentSelection(tt); - const modifier = _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation[op](ft, tt); - _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation[op](ftAlt, ttAlt); - this._undoStaffModifier('add ' + op, modifier, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.ADD); + const modifier = op(ft, tt); + const altModifier = op(ftAlt, ttAlt); + altModifier.attrs.id = modifier.attrs.id; + ft.staff.addStaffModifier(modifier); + ftAlt === null || ftAlt === void 0 ? void 0 : ftAlt.staff.addStaffModifier(altModifier); + this.undoStaffModifier('add ' + op, modifier, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.ADD); this._renderChangedMeasures(measureSelections); } /** @@ -11415,7 +11686,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ crescendo() { return __awaiter(this, void 0, void 0, function* () { - this._lineOperation('crescendo'); + this.lineOperation(_smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.createCrescendo); return this.renderer.updatePromise(); }); } @@ -11424,7 +11695,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ crescendoBracket() { return __awaiter(this, void 0, void 0, function* () { - this._lineOperation('crescendoBracket'); + this.lineOperation(_smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.createCrescendoBracket); return this.renderer.updatePromise(); }); } @@ -11433,7 +11704,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ dimenuendo() { return __awaiter(this, void 0, void 0, function* () { - this._lineOperation('dimenuendo'); + this.lineOperation(_smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.createDimenuendoBracket); return this.renderer.updatePromise(); }); } @@ -11442,7 +11713,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ accelerando() { return __awaiter(this, void 0, void 0, function* () { - this._lineOperation('accelerando'); + this.lineOperation(_smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.createAccelerandoBracket); return this.renderer.updatePromise(); }); } @@ -11451,17 +11722,17 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ ritard() { return __awaiter(this, void 0, void 0, function* () { - this._lineOperation('ritard'); + this.lineOperation(_smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.createRitardBracket); return this.renderer.updatePromise(); }); } /** - * diminuendo selections + * diminuendo hairpin * @returns */ decrescendo() { return __awaiter(this, void 0, void 0, function* () { - this._lineOperation('decrescendo'); + this.lineOperation(_smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.createDecrescendo); return this.renderer.updatePromise(); }); } @@ -11470,6 +11741,26 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui return this.removeStaffModifier(bracket); }); } + addOrReplaceStaffModifier(callback, modifier) { + return __awaiter(this, void 0, void 0, function* () { + const from1 = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_18__.SmoSelection.noteFromSelector(this.score, modifier.startSelector); + const to1 = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_18__.SmoSelection.noteFromSelector(this.score, modifier.endSelector); + if (from1 === null || to1 === null) { + return; + } + const altFrom = this._getEquivalentSelection(from1); + const altTo = this._getEquivalentSelection(to1); + if (altFrom === null || altTo === null) { + return; + } + callback(this.score, from1, to1); + callback(this.storeScore, altFrom, altTo); + const redraw = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_18__.SmoSelection.getMeasuresBetween(this.score, from1.selector, to1.selector); + this.undoStaffModifier('add repl text bracket', modifier, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.ADD); + this._renderChangedMeasures(redraw); + return this.renderer.updatePromise(); + }); + } addOrReplaceTextBracket(modifier) { return __awaiter(this, void 0, void 0, function* () { const from1 = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_18__.SmoSelection.noteFromSelector(this.score, modifier.startSelector); @@ -11485,7 +11776,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.addOrReplaceBracket(modifier, from1, to1); _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.addOrReplaceBracket(modifier, altFrom, altTo); const redraw = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_18__.SmoSelection.getMeasuresBetween(this.score, from1.selector, to1.selector); - this._undoStaffModifier('add repl text bracket', modifier, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.ADD); + this.undoStaffModifier('add repl text bracket', modifier, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.ADD); this._renderChangedMeasures(redraw); return this.renderer.updatePromise(); }); @@ -11494,16 +11785,20 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui * Slur selected notes * @returns */ - slur() { + addSlur() { return __awaiter(this, void 0, void 0, function* () { - const measureSelections = this._undoTrackerMeasureSelections('slur'); + const measureSelections = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_18__.SmoSelection.getMeasureList(this.tracker.selections); const ft = this.tracker.getExtremeSelection(-1); const tt = this.tracker.getExtremeSelection(1); const ftAlt = this._getEquivalentSelection(ft); const ttAlt = this._getEquivalentSelection(tt); - const modifier = _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.slur(this.score, ft, tt); - const altModifier = _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.slur(this.storeScore, ftAlt, ttAlt); - this._undoStaffModifier('add ' + 'op', new _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_19__.SmoSlur(modifier), _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.ADD); + const modifier = _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.createSlur(this.score, ft, tt); + ft.staff.addStaffModifier(modifier); + // make sure score and backup have same ID for undo. + const altModifier = _smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.createSlur(this.storeScore, ftAlt, ttAlt); + altModifier.attrs.id = modifier.attrs.id; + ftAlt === null || ftAlt === void 0 ? void 0 : ftAlt.staff.addStaffModifier(altModifier); + this.undoStaffModifier('add slur', modifier, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_10__.UndoBuffer.bufferSubtypes.ADD); this._renderChangedMeasures(measureSelections); return this.renderer.updatePromise(); }); @@ -11514,7 +11809,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui */ tie() { return __awaiter(this, void 0, void 0, function* () { - this._lineOperation('tie'); + this.lineOperation(_smo_xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.createTie); return this.renderer.updatePromise(); }); } @@ -11846,7 +12141,7 @@ class SuiScoreViewOperations extends _scoreView__WEBPACK_IMPORTED_MODULE_0__.Sui localStorage.setItem(_common_serializationHelpers__WEBPACK_IMPORTED_MODULE_12__.smoSerialize.localScore, scoreStr); } updateRepeatCount(count) { - const measureSelections = this._undoTrackerMeasureSelections('repeat bar'); + const measureSelections = this.undoTrackerMeasureSelections('repeat bar'); const symbol = count > 0 ? true : false; measureSelections.forEach((ms) => { const store = this._getEquivalentSelection(ms); @@ -15562,8 +15857,8 @@ class SuiTracker extends _mapper__WEBPACK_IMPORTED_MODULE_0__.SuiMapper { } }; } - constructor(renderer, scroller, pasteBuffer) { - super(renderer, scroller, pasteBuffer); + constructor(renderer, scroller) { + super(renderer, scroller); this.idleTimer = Date.now(); this.musicCursorGlyph = null; } @@ -15607,6 +15902,7 @@ class SuiTracker extends _mapper__WEBPACK_IMPORTED_MODULE_0__.SuiMapper { if (this.modifierIndex >= this.localModifiers.length || this.modifierIndex < 0) { this.modifierIndex = -1; this.modifierSelections = []; + $('.vf-staffModifier').remove(); return; } const local = this.localModifiers[this.modifierIndex]; @@ -16359,6 +16655,9 @@ class vexGlyph { static barWidth(b) { const str = _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlineString(b); const cc = vexGlyph.dimensions[str]; + if (typeof (cc) === 'undefined') { + return 0; + } return cc.width + cc.spacingRight; } static accidentalWidth(accidental) { @@ -16886,9 +17185,7 @@ function smoNoteToGraceNotes(smoNote, strs) { } } function smoNoteToStaveNote(smoNote) { - const duration = smoNote.isTuplet ? - _smo_data_music__WEBPACK_IMPORTED_MODULE_0__.SmoMusic.closestVexDuration(smoNote.tickCount) : - _smo_data_music__WEBPACK_IMPORTED_MODULE_0__.SmoMusic.ticksToDuration[smoNote.tickCount]; + const duration = _smo_data_music__WEBPACK_IMPORTED_MODULE_0__.SmoMusic.ticksToDuration[smoNote.stemTicks]; const sn = { clef: smoNote.clef, duration, @@ -17004,7 +17301,7 @@ function renderModifier(modifier, startNote, endNote, strs) { xShift: slurX, yShift: slur.yOffset, cps: svgPoint, - invert: slur.invert, + orientation: slur.orientation, position: slur.position, positionEnd: slur.position_end }; @@ -17104,7 +17401,11 @@ function createStaveNote(renderInfo, key, row, strs) { } } smoNote.articulations.forEach((aa) => { - const position = _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoArticulation.positionToVex[aa.position]; + let smoPosition = aa.position; + if (smoPosition === 'auto') { + smoPosition = _smo_data_music__WEBPACK_IMPORTED_MODULE_0__.SmoMusic.positionFromStaffLine(smoNote); + } + const position = _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoArticulation.positionToVex[smoPosition]; const vexArt = _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoArticulation.articulationToVex[aa.articulation]; const sn = (0,_smo_data_common__WEBPACK_IMPORTED_MODULE_7__.getId)(); strs.push(`const ${sn} = new VF.Articulation('${vexArt}').setPosition(${position});`); @@ -17241,27 +17542,35 @@ function createBeamGroups(smoMeasure, strs) { } function createTuplets(smoMeasure, strs) { smoMeasure.voices.forEach((voice, voiceIx) => { - const tps = smoMeasure.tuplets.filter((tp) => tp.voice === voiceIx); - for (var i = 0; i < tps.length; ++i) { - const tp = tps[i]; - const nar = []; - for (var j = 0; j < tp.notes.length; ++j) { - const note = tp.notes[j]; - const vexNote = `${note.attrs.id}`; - nar.push(vexNote); - } - const direction = tp.getStemDirection(smoMeasure.clef) === _smo_data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.flagStates.up ? - VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM; - const tpParams = { - num_notes: tp.num_notes, - notes_occupied: tp.notes_occupied, - ratioed: false, - bracketed: true, - location: direction + for (let i = 0; i < smoMeasure.tupletTrees.length; ++i) { + const tupletTree = smoMeasure.tupletTrees[i]; + if (tupletTree.voice !== voiceIx) { + continue; + } + const traverseTupletTree = (parentTuplet) => { + const vexNotes = []; + for (let smoNote of smoMeasure.tupletNotes(parentTuplet)) { + const vexNote = `${smoNote.attrs.id}`; + vexNotes.push(vexNote); + } + const direction = smoMeasure.getStemDirectionForTuplet(parentTuplet) === _smo_data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.flagStates.up ? + VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM; + const tpParams = { + num_notes: parentTuplet.numNotes, + notes_occupied: parentTuplet.notesOccupied, + ratioed: false, + bracketed: true, + location: direction + }; + const tpParamString = JSON.stringify(tpParams); + const vexNotesString = '[' + vexNotes.join(',') + ']'; + strs.push(`const ${parentTuplet.attrs.id} = new VF.Tuplet(${vexNotesString}, JSON.parse('${tpParamString}'));`); + for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) { + const tuplet = parentTuplet.childrenTuplets[i]; + traverseTupletTree(tuplet); + } }; - const tpParamString = JSON.stringify(tpParams); - const narString = '[' + nar.join(',') + ']'; - strs.push(`const ${tp.id} = new VF.Tuplet(${narString}, JSON.parse('${tpParamString}'));`); + traverseTupletTree(tupletTree.tuplet); } }); } @@ -17309,8 +17618,15 @@ function createMeasure(smoMeasure, heightOffset, strs) { strs.push(`${bg.attrs.id}.setContext(context);`); strs.push(`${bg.attrs.id}.draw();`); }); - smoMeasure.tuplets.forEach((tp) => { - strs.push(`${tp.id}.setContext(context).draw();`); + smoMeasure.tupletTrees.forEach((tp) => { + const traverseTupletTree = (parentTuplet) => { + strs.push(`${parentTuplet.attrs.id}.setContext(context).draw();`); + for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) { + const tuplet = parentTuplet.childrenTuplets[i]; + traverseTupletTree(tuplet); + } + }; + traverseTupletTree(tp.tuplet); }); } // ## SmoToVex @@ -17559,10 +17875,13 @@ class VxMeasure { static get fillStyle() { return '#000'; } + // Treat a rest like a whole rest if there is only a single rest in the measure + // and the measure length is not a pickup isWholeRest() { return (this.smoMeasure.voices.length === 1 && this.smoMeasure.voices[0].notes.length === 1 && - this.smoMeasure.voices[0].notes[0].isRest()); + this.smoMeasure.voices[0].notes[0].isRest() && + this.smoMeasure.getMaxTicksVoice() > 4096); } createCollisionTickmap() { let i = 0; @@ -17620,15 +17939,16 @@ class VxMeasure { let vexNote = null; let smoTabNote = null; let timestamp = new Date().valueOf(); + const stemTicks = _smo_data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.ticksToDuration[smoNote.stemTicks]; let tabNote = null; - const closestTicks = _smo_data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.closestVexDuration(smoNote.tickCount); - const exactTicks = _smo_data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.ticksToDuration[smoNote.tickCount]; const noteHead = smoNote.isRest() ? 'r' : smoNote.noteHead; const keys = _smo_data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.smoPitchesToVexKeys(smoNote.pitches, 0, noteHead); const smoNoteParams = { - isTuplet: smoNote.isTuplet, measureIndex: this.smoMeasure.measureNumber.measureIndex, + isTuplet: smoNote.isTuplet, + measureIndex: this.smoMeasure.measureNumber.measureIndex, clef: smoNote.clef, - closestTicks, exactTicks, keys, + stemTicks, + keys, noteType: smoNote.noteType }; const { noteParams, duration } = (0,_common_vex__WEBPACK_IMPORTED_MODULE_9__.getVexNoteParameters)(smoNoteParams); @@ -17824,37 +18144,36 @@ class VxMeasure { this.vexBeamGroups.push(vexBeam); } } - /** - * Create the VF tuplet objects based on the smo tuplet objects - * @param vix - */ - // createVexTuplets(vix) { - var j = 0; - var i = 0; this.vexTuplets = []; this.tupletToVexMap = {}; - for (i = 0; i < this.smoMeasure.tuplets.length; ++i) { - const tp = this.smoMeasure.tuplets[i]; - if (tp.voice !== vix) { + for (let i = 0; i < this.smoMeasure.tupletTrees.length; ++i) { + const tupletTree = this.smoMeasure.tupletTrees[i]; + if (tupletTree.voice !== vix) { continue; } - const vexNotes = []; - for (j = 0; j < tp.notes.length; ++j) { - const smoNote = tp.notes[j]; - vexNotes.push(this.noteToVexMap[smoNote.attrs.id]); - } - const location = tp.getStemDirection(this.smoMeasure.clef) === _smo_data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.flagStates.up ? - VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM; - const smoTupletParams = { - vexNotes, - numNotes: tp.numNotes, - notesOccupied: tp.note_ticks_occupied, - location + const traverseTupletTree = (parentTuplet) => { + const vexNotes = []; + for (let smoNote of this.smoMeasure.tupletNotes(parentTuplet)) { + vexNotes.push(this.noteToVexMap[smoNote.attrs.id]); + } + const location = this.smoMeasure.getStemDirectionForTuplet(parentTuplet) === _smo_data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.flagStates.up ? + VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM; + const smoTupletParams = { + vexNotes, + numNotes: parentTuplet.numNotes, + notesOccupied: parentTuplet.notesOccupied, + location + }; + const vexTuplet = (0,_common_vex__WEBPACK_IMPORTED_MODULE_9__.getVexTuplets)(smoTupletParams); + this.tupletToVexMap[parentTuplet.attrs.id] = vexTuplet; + this.vexTuplets.push(vexTuplet); + for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) { + const tuplet = parentTuplet.childrenTuplets[i]; + traverseTupletTree(tuplet); + } }; - const vexTuplet = (0,_common_vex__WEBPACK_IMPORTED_MODULE_9__.getVexTuplets)(smoTupletParams); - this.tupletToVexMap[tp.id] = vexTuplet; - this.vexTuplets.push(vexTuplet); + traverseTupletTree(tupletTree.tuplet); } } /** @@ -18327,7 +18646,11 @@ class VxNote { smoNote.articulations.forEach((art) => { if (smoNote.noteType === 'n') { const vx = this.noteData.staveNote; - const position = _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoArticulation.positionToVex[art.position]; + let smoPosition = art.position; + if (art.position === _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoArticulation.positions.auto) { + smoPosition = _smo_data_music__WEBPACK_IMPORTED_MODULE_0__.SmoMusic.positionFromStaffLine(smoNote); + } + const position = _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoArticulation.positionToVex[smoPosition]; const vexArt = _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoArticulation.articulationToVex[art.articulation]; const vxArt = new VF.Articulation(vexArt).setPosition(position); vx.addModifier(vxArt, this.noteData.voiceIndex); @@ -18611,7 +18934,6 @@ class VxSystem { // ### renderModifier // render a line-type modifier that is associated with a staff (e.g. slur) renderModifier(scroller, modifier, vxStart, vxEnd, smoStart, smoEnd) { - let xoffset = 0; const setSameIfNull = (a, b) => { if (typeof (a) === 'undefined' || a === null) { return b; @@ -18624,6 +18946,10 @@ class VxSystem { if (smoEnd && smoEnd.note && smoEnd.note.noteType === '/') { return; } + // if (modifier.ctor === 'SmoPedalMarking' && (vxStart === null || vxEnd === null)) { + // return; + // } + let slurOffset = 0; // if it is split between lines, render one artifact for each line, with a common class for // both if it is removed. if (vxStart) { @@ -18661,33 +18987,157 @@ class VxSystem { else if (modifier.ctor === 'SmoSlur') { const startNote = smoStart.note; const slur = modifier; + let startPosition = slur.position; + let endPosition = slur.position_end; + let openingDirection = 'up'; + let yOffset = slur.yOffset; let slurX = slur.xOffset; const svgPoint = JSON.parse(JSON.stringify(slur.controlPoints)); const lyric = startNote.longestLyric(); + // Find direction for slur based on beam/stem direction + // Note: vex slur orientation follows beam direction, not slur direction. Smo + // orientation follows slur direction. + if (vxStart !== null && vxEnd !== null) { + if (slur.position === _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.positions.AUTO + || slur.position_end === _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.positions.AUTO + || slur.orientation === _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.orientations.AUTO) { + startPosition = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.positions.HEAD; + endPosition = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.positions.HEAD; + if (vxStart.hasStem()) { + if (vxStart.getStemDirection() === VF.Stem.UP) { + openingDirection = 'up'; + } + else { + openingDirection = 'down'; + } + if (vxEnd.hasStem() && vxEnd.getStemDirection() !== vxStart.getStemDirection()) { + endPosition = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.positions.TOP; + } + } + else { + openingDirection = slur.orientation === _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.orientations.UP ? 'down' : 'up'; + startPosition = slur.position; + endPosition = slur.position_end; + } + } + else { + openingDirection = slur.orientation === _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.orientations.UP ? 'down' : 'up'; + startPosition = slur.position; + endPosition = slur.position_end; + } + } + else if (vxStart !== null && vxEnd === null) { + slurX = 10; + slurOffset = -5; + if (slur.orientation === _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.orientations.AUTO && vxStart.hasStem()) { + openingDirection = vxStart.getStemDirection() === VF.Stem.UP ? 'up' : 'down'; + } + else { + openingDirection = slur.orientation === _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.orientations.UP ? 'down' : 'up'; + } + startPosition = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.positions.HEAD; + endPosition = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.positions.HEAD; + } + else if (vxEnd !== null && vxStart === null) { + slurX = 10; + slurOffset = 5; + if (slur.orientation === _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.orientations.AUTO && vxEnd.hasStem()) { + openingDirection = vxEnd.getStemDirection() === VF.Stem.UP ? 'up' : 'down'; + } + else { + openingDirection = slur.orientation === _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.orientations.UP ? 'down' : 'up'; + } + startPosition = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.positions.HEAD; + endPosition = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.positions.HEAD; + } + // yoffset is always in the direction of the curve, not SVG. Make sure the curve clears the yoffset + // TODO: I think we should adjust this line vs. space + if (openingDirection === 'up') { + yOffset += 15; + } + else { + yOffset += 10; + } if (lyric && lyric.getText()) { // If there is a lyric, the bounding box of the start note is stretched to the right. // slide the slur left, and also make it a bit wider. const xtranslate = (-1 * lyric.getText().length * 6); - xoffset += (xtranslate / 2) - _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.defaults.xOffset; + slurX += (xtranslate / 2) - _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoSlur.defaults.xOffset; } - if (vxStart === null || vxEnd === null) { - slurX = -5; - svgPoint[0].y = 10; - svgPoint[1].y = 10; + if (_smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.lt(smoEnd.selector, slur.endSelector)) { + slurX += 15; } const smoVexSlurParams = { vxStart, vxEnd, thickness: slur.thickness, - xShift: slur.xOffset, - yShift: slur.yOffset, + xShift: slurX, + yShift: yOffset, + openingDirection, cps: svgPoint, - invert: slur.invert, - position: slur.position, - positionEnd: slur.position_end + position: startPosition, + positionEnd: endPosition }; const curve = (0,_common_vex__WEBPACK_IMPORTED_MODULE_9__.createSlur)(smoVexSlurParams); curve.setContext(this.context.getContext()).draw(); } + else if (modifier.ctor === 'SmoPedalMarking') { + const pedalMarking = modifier; + const pedalAr = []; + if (vxStart !== null) { + pedalAr.push(vxStart); + } + if (_smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.gt(smoEnd.selector, smoStart.selector) && vxEnd !== null) { + // Add releases for the pedal marking + pedalMarking.releases.forEach((selector) => { + if (_smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.gt(selector, smoStart.selector) && _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.lt(selector, smoEnd.selector) + && vxStart !== null) { + const note = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelection.noteSelection(this.score, selector.staff, selector.measure, selector.voice, selector.tick); + if (note !== null && note.note !== null) { + const vexNote = this.getVxNote(note.note); + if (vexNote) { + // incidate release and depress + pedalAr.push(vexNote); + pedalAr.push(vexNote); + } + } + } + }); + pedalAr.push(vxEnd); + if (vxStart === null) { + pedalAr.push(vxEnd); + } + } + const vexPedal = new VF.PedalMarking(pedalAr); + if (pedalMarking.releaseText.length > 0 || pedalMarking.depressText.length > 0) { + vexPedal.setCustomText(pedalMarking.depressText, pedalMarking.releaseText); + } + if (!pedalMarking.startMark && pedalMarking.depressText.length < 1) { + vexPedal.setCustomText(' ', pedalMarking.releaseText); + } + if (pedalMarking.bracket) { + if (pedalMarking.startMark || pedalMarking.releaseMark) { + vexPedal.setType(VF.PedalMarking.type.MIXED); + } + else { + vexPedal.setType(VF.PedalMarking.type.BRACKET); + } + } + else { + vexPedal.setType(VF.PedalMarking.type.TEXT); + } + if (_smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.gt(smoStart.selector, modifier.startSelector) && (pedalMarking.startMark)) { + // If this is the completion of a pedal marking from a previous staff, don't print the depress + // pedal again + vexPedal.setType(VF.PedalMarking.type.MIXED); + vexPedal.setCustomText(' ', pedalMarking.depressText); + } + if (_smo_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.lt(smoEnd.selector, modifier.endSelector) && pedalMarking.releaseMark) { + vexPedal.setType(VF.PedalMarking.type.MIXED); + vexPedal.setCustomText(pedalMarking.depressText, ' '); + } + vexPedal.setContext(this.context.getContext()); + vexPedal.draw(); + } else if (modifier.ctor === 'SmoTie') { const ctie = modifier; const startNote = smoStart.note; @@ -18723,10 +19173,10 @@ class VxSystem { } } this.context.getContext().closeGroup(); - if (xoffset) { + if (slurOffset) { const slurBox = this.context.svg.getElementById('vf-' + artifactId); if (slurBox) { - _sui_svgHelpers__WEBPACK_IMPORTED_MODULE_2__.SvgHelpers.translateElement(slurBox, xoffset, 0); + _sui_svgHelpers__WEBPACK_IMPORTED_MODULE_2__.SvgHelpers.translateElement(slurBox, slurOffset, 0); } } modifier.element = group; @@ -18980,7 +19430,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ SvgPoint: () => (/* binding */ SvgPoint), /* harmony export */ createXmlAttribute: () => (/* binding */ createXmlAttribute), /* harmony export */ createXmlAttributes: () => (/* binding */ createXmlAttributes), +/* harmony export */ defaultKeyEvent: () => (/* binding */ defaultKeyEvent), /* harmony export */ getId: () => (/* binding */ getId), +/* harmony export */ keyEventMatch: () => (/* binding */ keyEventMatch), +/* harmony export */ reverseStaticMap: () => (/* binding */ reverseStaticMap), +/* harmony export */ reverseStaticMaps: () => (/* binding */ reverseStaticMaps), /* harmony export */ serializeXmlModifierArray: () => (/* binding */ serializeXmlModifierArray), /* harmony export */ smoXmlNs: () => (/* binding */ smoXmlNs) /* harmony export */ }); @@ -19050,6 +19504,31 @@ var Clefs = ['treble', 'bass', 'tenor', 'alto', 'soprano', 'percussion', function IsClef(clef) { return Clefs.findIndex((x) => clef === x) >= 0; } +function defaultKeyEvent() { + const rv = { + type: 'keydown', shiftKey: false, ctrlKey: false, altKey: false, key: '', + keyCode: '', code: '', event: null + }; + return JSON.parse(JSON.stringify(rv)); +} +function keyEventMatch(ev1, ev2) { + return ev1.event === ev2.event && ev1.key === ev2.key && + ev1.ctrlKey === ev2.ctrlKey && + ev1.altKey === ev2.altKey && ev1.shiftKey === ev2.shiftKey; +} +const reverseStaticMaps = {}; +function reverseStaticMap(name, o) { + if (!reverseStaticMaps[name]) { + const rmap = {}; + const keys = Object.keys(o); + keys.forEach((key) => { + const val = o[key]; + rmap[val] = key; + }); + reverseStaticMaps[name] = rmap; + } + return reverseStaticMaps[name]; +} /***/ }), @@ -19110,7 +19589,7 @@ const SmoMeasureStringParams = ['keySignature']; function isSmoMeasureParamsSer(params) { var _a; if (!Array.isArray(params.voices) || - !Array.isArray(params.tuplets) || !Array.isArray(params.modifiers) || + !Array.isArray(params.tupletTrees) || !Array.isArray(params.modifiers) || typeof ((_a = params === null || params === void 0 ? void 0 : params.measureNumber) === null || _a === void 0 ? void 0 : _a.measureIndex) !== 'number') { return false; } @@ -19166,7 +19645,7 @@ class SmoMeasure { */ this.keySignature = ''; this.canceledKeySignature = ''; - this.tuplets = []; + this.tupletTrees = []; this.repeatSymbol = false; this.repeatCount = 0; this.ctor = 'SmoMeasure'; @@ -19245,7 +19724,7 @@ class SmoMeasure { } } this.voices = params.voices ? params.voices : []; - this.tuplets = params.tuplets ? params.tuplets : []; + this.tupletTrees = params.tupletTrees ? params.tupletTrees : []; this.modifiers = params.modifiers ? params.modifiers : defaults.modifiers; this.setDefaultBarlines(); this.keySignature = _music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.vexKeySigWithOffset(this.keySignature, this.transposeIndex); @@ -19379,11 +19858,11 @@ class SmoMeasure { const fmt = this.format.serialize(); // measure number can't be defaulted b/c tempos etc. can map to default measure params.measureNumber = JSON.parse(JSON.stringify(this.measureNumber)); - params.tuplets = []; + params.tupletTrees = []; params.voices = []; params.modifiers = []; - this.tuplets.forEach((tuplet) => { - params.tuplets.push(tuplet.serialize()); + this.tupletTrees.forEach((tupletTree) => { + params.tupletTrees.push(tupletTree.serialize()); }); this.voices.forEach((voice) => { const obj = { @@ -19435,7 +19914,6 @@ class SmoMeasure { let j = 0; let i = 0; const voices = []; - const noteSum = []; for (j = 0; j < jsonObj.voices.length; ++j) { const voice = jsonObj.voices[j]; const notes = []; @@ -19446,25 +19924,6 @@ class SmoMeasure { const noteParams = voice.notes[i]; const smoNote = _note__WEBPACK_IMPORTED_MODULE_3__.SmoNote.deserialize(noteParams); notes.push(smoNote); - noteSum.push(smoNote); - } - } - const tuplets = []; - for (j = 0; j < jsonObj.tuplets.length; ++j) { - const tupJson = jsonObj.tuplets[j]; - const tupParams = _tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTuplet.defaults; - // Legacy schema had attrs.id, now it is just id - if (tupJson.attrs && tupJson.attrs.id) { - tupParams.id = tupJson.attrs.id; - } - _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMerge(_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTuplet.parameterArray, jsonObj.tuplets[j], tupParams); - const noteAr = noteSum.filter((nn) => nn.isTuplet && nn.tupletId === tupParams.id); - // Bug fix: A tuplet with no notes may be been overwritten - // in a copy/paste operation - if (noteAr.length > 0) { - tupParams.notes = noteAr; - const tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTuplet(tupParams); - tuplets.push(tuplet); } } const modifiers = []; @@ -19502,19 +19961,66 @@ class SmoMeasure { } params.keySignature = (_a = jsonObj.keySignature) !== null && _a !== void 0 ? _a : 'C'; params.voices = voices; - params.tuplets = tuplets; + if (jsonObj.tupletTrees !== undefined) { + for (j = 0; j < jsonObj.tupletTrees.length; ++j) { + const tupletTreeJson = jsonObj.tupletTrees[j]; + const tupletTree = _tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.deserialize(tupletTreeJson); + params.tupletTrees.push(tupletTree); + } + } + //deserialization of a legacy tuplets + //legacy schema had measure.tuplets, it is measure.tupletTrees now + if (jsonObj.tuplets !== undefined) { + for (j = 0; j < jsonObj.tuplets.length; ++j) { + const tupJson = jsonObj.tuplets[j]; + // Legacy schema had attrs.id, now it is just id + if (tupJson.attrs && tupJson.attrs.id) { + tupJson.id = tupJson.attrs.id; + } + const tupletNotes = []; + let startIndex = null; + params.voices.forEach((voice) => { + voice.notes.forEach((note, index) => { + if (note.isTuplet && note.tupletId === tupJson.attrs.id) { + tupletNotes.push(note); + //we cannot trust startIndex coming from legacy json + //we need to count index of the first note in the tuplet + if (startIndex === null) { + startIndex = index; + } + } + }); + }); + // Bug fix: A tuplet with no notes may be been overwritten + // in a copy/paste operation + if (tupletNotes.length > 0) { + tupJson.notes = tupletNotes; + tupJson.startIndex = startIndex; + tupJson.endIndex = tupJson.startIndex + tupletNotes.length - 1; + } + const tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTuplet.deserialize(tupJson); + const tupletTree = new _tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree({ tuplet: tuplet }); + params.tupletTrees.push(tupletTree); + } + } + if (params.tupletTrees.length) { + _tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.syncTupletIds(params.tupletTrees, voices); + } params.modifiers = modifiers; - const rv = new SmoMeasure(params); + const measure = new SmoMeasure(params); // Handle migration for measure-mapped parameters - rv.modifiers.forEach((mod) => { + measure.modifiers.forEach((mod) => { if (mod.ctor === 'SmoTempoText') { - rv.tempo = mod; + measure.tempo = mod; } }); - if (!rv.tempo) { - rv.tempo = new _measureModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoTempoText(_measureModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoTempoText.defaults); + if (!measure.tempo) { + measure.tempo = new _measureModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoTempoText(_measureModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoTempoText.defaults); } - return rv; + return measure; + } + static clone(measure) { + return SmoMeasure.deserialize(measure.serialize()); } /** * When creating a new measure, the 'default' settings can vary depending on @@ -19598,6 +20104,7 @@ class SmoMeasure { nextNote.noteType = 'r'; nextNote.clef = clef; nextNote.ticks.numerator = noteTick; + nextNote.stemTicks = noteTick; pnotes.push(new _note__WEBPACK_IMPORTED_MODULE_3__.SmoNote(nextNote)); ticks += noteTick; } @@ -19751,6 +20258,7 @@ class SmoMeasure { const duration = _music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.closestDurationTickLtEq(target); if (duration > 128) { fitNote.ticks = { numerator: duration, denominator: 1, remainder: 0 }; + fitNote.stemTicks = duration; fitNote.pitches = note.pitches; fitNote.noteType = note.noteType; fitNote.clef = note.clef; @@ -19767,23 +20275,25 @@ class SmoMeasure { const note = voice.notes[j]; // if a tuplet, make sure the whole tuplet fits. if (note.isTuplet) { - const tuplet = this.getTupletForNote(note); - if (tuplet) { + const tupletTree = _tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.getTupletTreeForNoteIndex(this.tupletTrees, i, j); + if (tupletTree) { // remaining notes of an approved tuplet, just add them - if (tuplet.startIndex !== j) { + if (tupletTree.startIndex !== j) { newNotes.push(note); continue; } - else if (tuplet.tickCount + voiceTicks <= tsTicks) { + else if (tupletTree.totalTicks + voiceTicks <= tsTicks) { // first note of the tuplet, it fits, add it - voiceTicks += tuplet.tickCount; + voiceTicks += tupletTree.totalTicks; newNotes.push(note); - tuplets.push(tuplet); } else { - // tuplet will not fit. Make a note as close to remainder as possible and add it + // tuplet will not fit. Replace tuplet with a note as close to remainder as possible and add it + // remove tuplet + note.tupletId = null; replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note); voiceTicks = tsTicks; + _tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.removeTupletForNoteIndex(this, i, j); break; } } @@ -19814,7 +20324,6 @@ class SmoMeasure { voices.push({ notes: newNotes }); } this.voices = voices; - this.tuplets = tuplets; } get measureNumberDbg() { return `${this.measureNumber.measureIndex}/${this.measureNumber.systemIndex}/${this.measureNumber.staffId}`; @@ -19870,11 +20379,13 @@ class SmoMeasure { */ transposeToOffset(offset, targetKey, newClef) { const diff = offset - this.transposeIndex; + newClef = newClef !== null && newClef !== void 0 ? newClef : this.clef; this.voices.forEach((voice) => { voice.notes.forEach((note) => { const pitches = [...Array(note.pitches.length).keys()]; // when the note is a rest, preserve the rest but match the new clef. - if (newClef && note.noteType === 'r') { + if (newClef !== this.clef && note.noteType === 'r') { + // @ts-ignore const defp = JSON.parse(JSON.stringify(SmoMeasure.defaultPitchForClef[newClef])); note.pitches = [defp]; } @@ -20024,17 +20535,43 @@ class SmoMeasure { }); return ticks; } - getClosestTickCountIndex(voiceIndex, tickCount) { + /** + * Count all the ticks up to the provided tickIndex + * @param voiceIndex + * @param tickIndex + */ + getNotePositionInTicks(voiceIndex, tickIndex) { + let rv = 0; + for (let i = 0; i < tickIndex; i++) { + const note = this.voices[voiceIndex].notes[i]; + rv += note.tickCount; + } + return rv; + } + /** + * Count all the ticks up to the provided tickIndex + * @param voiceIndex + * @param tickIndex + */ + getTickCountForNote(voiceIndex, note) { + let rv = 0; + for (let i = 0; i < this.voices[voiceIndex].notes.length; i++) { + const currentNote = this.voices[voiceIndex].notes[i]; + rv += note.tickCount; + } + return rv; + } + getClosestIndexFromTickCount(voiceIndex, tickCount) { let i = 0; let rv = 0; for (i = 0; i < this.voices[voiceIndex].notes.length; ++i) { const note = this.voices[voiceIndex].notes[i]; - if (note.tickCount + rv > tickCount) { - return rv; + if (note.tickCount + rv >= tickCount) { + return i; } rv += note.tickCount; } - return rv; + return i; } isPickup() { const ticks = this.getTicksFromVoice(0); @@ -20076,57 +20613,30 @@ class SmoMeasure { }); }); } - // ### tuplet methods. - // - // #### tupletNotes - tupletNotes(tuplet) { - let j = 0; - let i = 0; - const tnotes = []; - for (j = 0; j < this.voices.length; ++j) { - const vnotes = this.voices[j].notes; - for (i = 0; i < vnotes.length; ++i) { - const note = vnotes[i]; - if (note.tupletId && note.tupletId === tuplet.id) { - tnotes.push(vnotes[i]); - } - } + tupletNotes(smoTuplet) { + let tupletNotes = []; + for (let i = smoTuplet.startIndex; i <= smoTuplet.endIndex; i++) { + const note = this.voices[smoTuplet.voice].notes[i]; + tupletNotes.push(note); } - return tnotes; + return tupletNotes; } - // #### tupletIndex - // return the index of the given tuplet - tupletIndex(tuplet) { - let j = 0; - let i = 0; - for (j = 0; j < this.voices.length; ++j) { - const notes = this.voices[j].notes; - for (i = 0; i < notes.length; ++i) { - const note = notes[i]; - if (note.tupletId && note.tupletId === tuplet.id) { - return i; - } + getStemDirectionForTuplet(smoTuplet) { + let note = null; + for (let currentNote of this.tupletNotes(smoTuplet)) { + if (currentNote.noteType === 'n') { + note = currentNote; + break; } } - return -1; - } - // #### getTupletForNote - // Finds the tuplet for a given note, or null if there isn't one. - getTupletForNote(note) { - let i = 0; if (!note) { - return null; - } - if (!note.isTuplet) { - return null; + return _note__WEBPACK_IMPORTED_MODULE_3__.SmoNote.flagStates.down; } - for (i = 0; i < this.tuplets.length; ++i) { - const tuplet = this.tuplets[i]; - if (typeof (note.tupletId) === 'string' && note.tupletId === tuplet.id) { - return tuplet; - } + if (note.flagState !== _note__WEBPACK_IMPORTED_MODULE_3__.SmoNote.flagStates.auto) { + return note.flagState; } - return null; + return _music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.pitchToLedgerLine(this.clef, note.pitches[0]) + >= 2 ? _note__WEBPACK_IMPORTED_MODULE_3__.SmoNote.flagStates.up : _note__WEBPACK_IMPORTED_MODULE_3__.SmoNote.flagStates.down; } getNoteById(id) { for (var i = 0; i < this.voices.length; ++i) { @@ -20140,17 +20650,6 @@ class SmoMeasure { } return null; } - removeTupletForNote(note) { - let i = 0; - const tuplets = []; - for (i = 0; i < this.tuplets.length; ++i) { - const tuplet = this.tuplets[i]; - if (typeof (note.tupletId) === 'string' && note.tupletId !== tuplet.id) { - tuplets.push(tuplet); - } - } - this.tuplets = tuplets; - } setClef(clef) { const oldClef = this.clef; this.clef = clef; @@ -20387,7 +20886,7 @@ SmoMeasure.defaultTripleDuration = 2048 * 3; SmoMeasure._defaults = { timeSignature: SmoMeasure.timeSignatureDefault, keySignature: 'C', - tuplets: [], + tupletTrees: [], transposeIndex: 0, modifiers: [], // bars: [1, 1], // follows enumeration in VF.Barline @@ -20627,6 +21126,9 @@ function isSmoRepeatSymbolParamsSer(params) { * @category SmoModifier */ class SmoRepeatSymbol extends SmoMeasureModifierBase { + static repeatSymbolString(symbol) { + return SmoRepeatSymbol._repeatSymbolStrings[symbol.symbol]; + } static get defaults() { return JSON.parse(JSON.stringify({ symbol: SmoRepeatSymbol.symbols.Coda, @@ -20666,7 +21168,7 @@ SmoRepeatSymbol.symbols = { Coda: 1, Segno: 2, Dc: 3, - ToCoda: 1, + ToCoda: 10, DcAlCoda: 4, DcAlFine: 5, Ds: 6, @@ -20674,6 +21176,9 @@ SmoRepeatSymbol.symbols = { DsAlFine: 8, Fine: 9 }; +SmoRepeatSymbol._repeatSymbolStrings = ['None', 'Coda', 'Segno', 'Dc', 'ToCoda', 'DcAlCode', 'DcAlFine', + 'Ds', 'DsAlCoda', 'DsAlFine', 'Fine' +]; SmoRepeatSymbol.defaultXOffset = [0, 0, 0, -20, -60, -60, -50, -60, -50, -40]; SmoRepeatSymbol.positions = { start: 0, @@ -21301,6 +21806,20 @@ class SmoMusic { line += SmoMusic.clefLedgerShift[clef]; return line; } + /** + * return above if the first pitch is above line 3, else below + * @param note + * @returns + */ + static positionFromStaffLine(note) { + const line = SmoMusic.pitchToLedgerLine(note.clef, note.pitches[0]); + if (line >= 3) { + return 'above'; + } + else { + return 'below'; + } + } /** * gives the index into circle-of-fifths array for a pitch, considering enharmonics. * */ @@ -21495,7 +22014,7 @@ class SmoMusic { { letter: 'b', accidental: 'b', role: '6' }, { letter: 'b', accidental: 'n', role: '7/7' }, { letter: 'c', accidental: 'b', role: 'b7' }, - { letter: 'b', accidental: '#', role: '7' } + { letter: 'c', accidental: 'n', role: '7' } ], 'd': [ { letter: 'd', accidental: 'n', role: 'tonic' }, { letter: 'd', accidental: '#', role: '7/2' }, @@ -22440,7 +22959,7 @@ class SmoMusic { let i = 0; const durations = ['1/2', '1', '2', '4', '8', '16', '32', '64', '128', '256']; const _ticksToDurationsF = () => { - for (i = 0; i < SmoMusic.durationsDescending.length - 1; ++i) { + for (i = 0; i <= SmoMusic.durationsDescending.length - 1; ++i) { let j = 0; let dots = ''; let ticks = 0; @@ -22579,6 +23098,20 @@ class SmoMusic { stemTicks = stemTicks * 2; return SmoMusic.ticksToDuration[stemTicks]; } + // ## closestBeamDuration + // ## Description: + // return the closest smo duration >= to the actual number of ticks. Used in beaming + // triplets which have fewer ticks then their stem would normally indicate. + static closestBeamDuration(ticks) { + let stemTicks = SmoMusic.highestDuration; + // The stem value is the type on the non-tuplet note, e.g. 1/8 note + // for a triplet. + while (ticks <= stemTicks) { + stemTicks = stemTicks / 2; + } + stemTicks = stemTicks * 2; + return SmoMusic.validDurations[stemTicks]; + } // ### closestDurationTickLtEq // Price is right style, closest tick value without going over. Used to pad // rests when reading musicXML. @@ -22619,7 +23152,10 @@ class SmoMusic { static getNextDottedLevel(ticks) { const ticksOrNull = SmoMusic.closestSmoDurationFromTicks(ticks); if (ticksOrNull && ticksOrNull.index > 0) { - return SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index - 1]].ticks; + const newDuration = SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index - 1]]; + if (newDuration.baseTicks === ticksOrNull.baseTicks) { + return newDuration.ticks; + } } return ticks; } @@ -22629,7 +23165,10 @@ class SmoMusic { static getPreviousDottedLevel(ticks) { const ticksOrNull = SmoMusic.closestSmoDurationFromTicks(ticks); if (ticksOrNull && ticksOrNull.index < SmoMusic._validDurationKeys.length + 1) { - return SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index + 1]].ticks; + const newDuration = SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index + 1]]; + if (newDuration.baseTicks === ticksOrNull.baseTicks) { + return newDuration.ticks; + } } return ticks; } @@ -22721,7 +23260,8 @@ SmoMusic.durationsDescending = [ SmoMusic.highestDuration / 16, // 8th SmoMusic.highestDuration / 32, // 16th SmoMusic.highestDuration / 64, // 32nd - SmoMusic.highestDuration / 128 // 64th + SmoMusic.highestDuration / 128, // 64th + SmoMusic.highestDuration / 256 // 128th ]; SmoMusic.durationsAscending = [ SmoMusic.highestDuration / 256, // 128th @@ -22753,7 +23293,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ NoteBooleanParams: () => (/* binding */ NoteBooleanParams), /* harmony export */ NoteNumberParams: () => (/* binding */ NoteNumberParams), /* harmony export */ NoteStringParams: () => (/* binding */ NoteStringParams), -/* harmony export */ SmoNote: () => (/* binding */ SmoNote) +/* harmony export */ SmoNote: () => (/* binding */ SmoNote), +/* harmony export */ isSmoNote: () => (/* binding */ isSmoNote) /* harmony export */ }); /* harmony import */ var _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common/serializationHelpers */ "./src/common/serializationHelpers.js"); /* harmony import */ var _noteModifiers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./noteModifiers */ "./src/smo/data/noteModifiers.ts"); @@ -22784,6 +23325,12 @@ function isSmoNoteParamsSer(params) { } return false; } +function isSmoNote(transposable) { + if (Array.isArray(transposable.graceNotes)) { + return true; + } + return false; +} /** * SmoNote contains the pitch and duration of a note or chord. * It can also contain arrays of modifiers like lyrics, articulations etc. @@ -22808,12 +23355,14 @@ class SmoNote { this.tones = []; this.endBeam = false; this.ticks = { numerator: 4096, denominator: 1, remainder: 0 }; + this.stemTicks = 4096; this.beamBeats = 4096; this.beam_group = null; this.renderId = null; this.keySignature = 'c'; this.logicalBox = null; this.isCue = false; + this.hasTabNote = true; this.accidentalsRendered = []; // set by renderer if accidental is to display const defs = SmoNote.defaults; NoteStringParams.forEach((param) => { @@ -22833,9 +23382,10 @@ class SmoNote { if (params.tabNote) { this.tabNote = new _noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoTabNote(params.tabNote); } - const ticks = params.ticks ? params.ticks : defs.ticks; const pitches = params.pitches ? params.pitches : defs.pitches; + const ticks = params.ticks ? params.ticks : defs.ticks; this.ticks = JSON.parse(JSON.stringify(ticks)); + this.stemTicks = params.stemTicks ? params.stemTicks : defs.stemTicks; this.pitches = JSON.parse(JSON.stringify(pitches)); this.clef = params.clef ? params.clef : defs.clef; this.fillStyle = params.fillStyle ? params.fillStyle : ''; @@ -22856,7 +23406,7 @@ class SmoNote { * @internal */ static get parameterArray() { - return ['ticks', 'pitches', 'noteType', 'tuplet', 'clef', 'isCue', + return ['ticks', 'pitches', 'noteType', 'tuplet', 'clef', 'isCue', 'stemTicks', 'endBeam', 'beamBeats', 'flagState', 'noteHead', 'fillStyle', 'hidden', 'arpeggio', 'clefNote', 'tupletId']; } @@ -22884,6 +23434,7 @@ class SmoNote { denominator: 1, remainder: 0 }, + stemTicks: 4096, pitches: [{ letter: 'b', octave: 4, @@ -22897,11 +23448,9 @@ class SmoNote { toggleFlagState() { this.flagState = (this.flagState + 1) % 3; } + //todo: double check this get dots() { - if (this.isTuplet) { - return 0; - } - const vexDuration = _music__WEBPACK_IMPORTED_MODULE_2__.SmoMusic.closestSmoDurationFromTicks(this.tickCount); + const vexDuration = _music__WEBPACK_IMPORTED_MODULE_2__.SmoMusic.closestSmoDurationFromTicks(this.stemTicks); if (!vexDuration) { return 0; } @@ -22919,18 +23468,27 @@ class SmoNote { } this.textModifiers = tms; } - _addArticulation(articulation, toAdd) { + setArticulation(articulation, set) { var tms = []; this.articulations.forEach((tm) => { if (tm.articulation !== articulation.articulation) { tms.push(tm); } }); - if (toAdd) { + if (set) { tms.push(articulation); } this.articulations = tms; } + getArticulations() { + return this.articulations; + } + getArticulation(stringCode) { + return this.articulations.find((aa) => aa.articulation === stringCode); + } + getOrnament(stringCode) { + return this.ornaments.find((aa) => aa.ornament === stringCode); + } /** * Add a new dynamic to thisnote * @param dynamic @@ -23062,6 +23620,13 @@ class SmoNote { this.ornaments = []; } } + setOrnament(ornament, set) { + const aix = this.ornaments.filter((a) => a.ornament !== ornament.ornament); + this.ornaments = aix; + if (set) { + this.ornaments.push(ornament); + } + } setTabNote(params) { this.tabNote = new _noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoTabNote(params); this.tabNote.isAssigned = true; @@ -23082,11 +23647,11 @@ class SmoNote { return; } else { - this._addArticulation(articulation, false); + this.setArticulation(articulation, false); return; } } - this._addArticulation(articulation, true); + this.setArticulation(articulation, true); } /** * Sort pitches in pitch order, Vex likes to receive pitches in order @@ -23195,16 +23760,17 @@ class SmoNote { get isTuplet() { return typeof (this.tupletId) !== 'undefined' && this.tupletId !== null && this.tupletId.length > 0; } + /** + * we only support a single microtone, not sure if vex supports multiple + * @param tone + */ addMicrotone(tone) { const ar = this.tones.filter((tn) => tn.pitchIndex !== tone.pitchIndex); ar.push(tone); this.tones = ar; } - removeMicrotone(tone) { - const ar = this.tones.filter((tn) => tn.pitchIndex !== tone.pitchIndex - && tn.pitchIndex <= this.pitches.length // also remove tones for removed pitches - && tone.tone !== tn.tone); - this.tones = ar; + removeMicrotone() { + this.tones = []; } getMicrotone(toneIndex) { return this.tones.find((tn) => tn.pitchIndex === toneIndex); @@ -23291,6 +23857,25 @@ class SmoNote { note.pitches[index] = pitch; } } + // If the fret position can be adjusted on the current string, keep the tab note. Else + // delete the tab note, and auto-generate it to display default + if (isSmoNote(note)) { + const sn = note; + if (sn.tabNote && sn.tabNote.positions.length > 0) { + const frets = []; + sn.tabNote.positions.forEach((pos) => { + if (pos.fret + offset > 0) { + frets.push({ string: pos.string, fret: pos.fret + offset }); + } + }); + if (frets.length) { + sn.tabNote.positions = frets; + } + else { + sn.tabNote = undefined; + } + } + } SmoNote.sortPitches(note); return note; } @@ -23316,12 +23901,18 @@ class SmoNote { * @param ticks * @returns A note identical to `note` but with different duration */ - static cloneWithDuration(note, ticks) { + static cloneWithDuration(note, ticks, stemTicks = null) { if (typeof (ticks) === 'number') { ticks = { numerator: ticks, denominator: 1, remainder: 0 }; } const rv = SmoNote.clone(note); rv.ticks = ticks; + if (stemTicks === null) { + rv.stemTicks = ticks.numerator + ticks.remainder; + } + else { + rv.stemTicks = stemTicks; + } return rv; } static serializeModifier(modifiers) { @@ -23356,9 +23947,6 @@ class SmoNote { if (params.ticks) { params.ticks = JSON.parse(JSON.stringify(params.ticks)); } - if (this.tupletId) { - params.tupletId = this.tupletId; - } this._serializeModifiers(params); if (!isSmoNoteParamsSer(params)) { throw 'bad note ' + JSON.stringify(params); @@ -23371,6 +23959,15 @@ class SmoNote { * @returns */ static deserialize(jsonObj) { + //legacy note + if (jsonObj.ticks && jsonObj.stemTicks === undefined) { + if (jsonObj.tupletId || jsonObj.tuplet) { + jsonObj['stemTicks'] = _music__WEBPACK_IMPORTED_MODULE_2__.SmoMusic.closestBeamDuration(jsonObj.ticks.numerator / jsonObj.ticks.denominator + jsonObj.ticks.remainder).ticks; + } + else { + jsonObj['stemTicks'] = _music__WEBPACK_IMPORTED_MODULE_2__.SmoMusic.closestSmoDurationFromTicks(jsonObj.ticks.numerator / jsonObj.ticks.denominator + jsonObj.ticks.remainder).ticks; + } + } var note = new SmoNote(jsonObj); if (jsonObj.textModifiers) { jsonObj.textModifiers.forEach((mod) => { @@ -23594,6 +24191,7 @@ class SmoGraceNote extends SmoNoteModifierBase { this.clef = 'treble'; this.noteType = 'n'; this.renderId = null; + this.hasTabNote = false; _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_1__.smoSerialize.serializedMerge(SmoGraceNote.parameterArray, SmoGraceNote.defaults, this); _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_1__.smoSerialize.serializedMerge(SmoGraceNote.parameterArray, parameters, this); } @@ -23729,10 +24327,20 @@ function isSmoOrnamentParamsSer(params) { */ class SmoOrnament extends SmoNoteModifierBase { static get jazzOrnaments() { - return ['SCOOP', 'FALL_SHORT', 'FALL_LONG', 'DOIT', 'LIFT', 'FLIP', 'SMEAR']; + return ['scoop', 'fallLong', 'doit', 'doitLong', 'flip', 'smear', 'scoop', 'plungerOpen', 'plungerClosed', 'bend']; + } + static get legacyJazz() { + return { 'SCOOP': SmoOrnament.ornaments.scoop, + 'FALL_SHORT': SmoOrnament.ornaments.fall, + 'FALL_LONG': SmoOrnament.ornaments.fallLong, + 'DOIT': SmoOrnament.ornaments.doit, + 'LIFT': SmoOrnament.ornaments.lift, + 'FLIP': SmoOrnament.ornaments.flip, + 'SMEAR': SmoOrnament.ornaments.smear + }; } toVex() { - return SmoOrnament.ornaments[this.ornament.toLowerCase()]; + return SmoOrnament.ornaments[this.ornament]; } isJazz() { return SmoOrnament.jazzOrnaments.indexOf(this.ornament) >= 0; @@ -23748,7 +24356,8 @@ class SmoOrnament extends SmoNoteModifierBase { static get positions() { return { above: 'above', - below: 'below' + below: 'below', + auto: 'auto' }; } static get offsets() { @@ -23761,7 +24370,7 @@ class SmoOrnament extends SmoNoteModifierBase { return JSON.parse(JSON.stringify({ ctor: 'SmoOrnament', ornament: SmoOrnament.ornaments.mordent, - position: SmoOrnament.positions.above, + position: SmoOrnament.positions.auto, offset: SmoOrnament.offsets.on })); } @@ -23780,29 +24389,37 @@ class SmoOrnament extends SmoNoteModifierBase { this.ornament = SmoOrnament.ornaments.mordent; _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_1__.smoSerialize.serializedMerge(SmoOrnament.parameterArray, SmoOrnament.defaults, this); _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_1__.smoSerialize.serializedMerge(SmoOrnament.parameterArray, parameters, this); - // this.selector = parameters.selector; + // handle some legacy changes + if (typeof (SmoOrnament.legacyJazz[this.ornament]) === 'string') { + this.ornament = SmoOrnament.legacyJazz[this.ornament]; + } } } SmoOrnament.ornaments = { mordent: 'mordent', - mordentInverted: 'mordent_inverted', + mordent_inverted: 'mordent_inverted', turn: 'turn', - turnInverted: 'turn_inverted', + turn_inverted: 'turn_inverted', trill: 'tr', upprall: 'upprall', prallup: 'prallup', pralldown: 'pralldown', upmordent: 'upmordent', downmordent: 'downmordent', + caesura: 'caesura', lineprall: 'lineprall', prallprall: 'prallprall', scoop: 'scoop', - fall_short: 'fall', - dropLong: 'fallLong', + fall: 'fall', + fallLong: 'fallLong', + breath: 'breath', doit: 'doit', doitLong: 'doitLong', flip: 'flip', - smear: 'smear' + smear: 'smear', + bend: 'bend', + plungerClosed: 'plungerClosed', + plungerOpen: 'plungerOpen' }; SmoOrnament.xmlOrnaments = { mordent: 'mordent', @@ -23818,9 +24435,7 @@ SmoOrnament.xmlOrnaments = { }; SmoOrnament.textNoteOrnaments = { breath: 'breath', - caesura: 'caesura_straight', - pedalOpen: 'pedal_open', - pedalClosed: 'pedal_close' + caesura: 'caesura_straight' }; // jazz ornaments in vex are articulations in music xml SmoOrnament.xmlJazz = { @@ -23849,13 +24464,16 @@ class SmoArticulation extends SmoNoteModifierBase { upStroke: 'upStroke', downStroke: 'downStroke', pizzicato: 'pizzicato', + bowUp: 'bowUp', + bowDown: 'bowDown', fermata: 'fermata' }; } static get positions() { return { above: 'above', - below: 'below' + below: 'below', + auto: 'auto' }; } static get articulationToVex() { @@ -24332,7 +24950,7 @@ class SmoPartInfo extends _staffModifiers__WEBPACK_IMPORTED_MODULE_4__.StaffModi const params = SmoPartInfo.defaults; _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMerge(SmoPartAttributesBasic, jsonObj, params); jsonObj.textGroups.forEach((tg) => { - params.textGroups.push(_scoreText__WEBPACK_IMPORTED_MODULE_3__.SmoTextGroup.deserialize(tg)); + params.textGroups.push(_scoreText__WEBPACK_IMPORTED_MODULE_3__.SmoTextGroup.deserializePreserveId(tg)); }); params.midiInstrument = jsonObj.midiInstrument; params.midiDevice = jsonObj.midiDevice; @@ -24393,6 +25011,12 @@ class SmoPartInfo extends _staffModifiers__WEBPACK_IMPORTED_MODULE_4__.StaffModi this.textGroups.push(textGroup); } } + removeTextGroup(textGroup) { + this.updateTextGroup(textGroup, false); + } + addTextGroup(textGroup) { + this.updateTextGroup(textGroup, true); + } } @@ -24537,11 +25161,15 @@ class SmoScore { if (!this.formattingManager) { this.formattingManager = new _scoreModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoFormattingManager(_scoreModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoFormattingManager.defaults); } + // Set beaming rules based on preferences. + const pref = this.preferences; + _measure__WEBPACK_IMPORTED_MODULE_1__.SmoMeasure.defaultDupleDuration = pref.defaultDupleDuration; + _measure__WEBPACK_IMPORTED_MODULE_1__.SmoMeasure.defaultTripleDuration = pref.defaultTripleDuration; if (this.staves.length) { this.numberStaves(); } if (typeof (this.preferences.showPiano) === 'undefined') { - this.preferences.showPiano = true; + this.preferences.showPiano = false; } this.audioSettings = new _scoreModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoAudioPlayerSettings(params.audioSettings); this.updateMeasureFormats(); @@ -24712,9 +25340,10 @@ class SmoScore { * @returns JSON object */ serialize(options) { - var _a, _b, _c, _d; + var _a, _b, _c, _d, _e; const skipStaves = (_a = options === null || options === void 0 ? void 0 : options.skipStaves) !== null && _a !== void 0 ? _a : false; const useDictionary = (_b = options === null || options === void 0 ? void 0 : options.skipStaves) !== null && _b !== void 0 ? _b : true; + const preserveIds = (_c = options === null || options === void 0 ? void 0 : options.preserveStaffIds) !== null && _c !== void 0 ? _c : false; let obj = { layoutManager: Object.assign({ ctor: 'SmoLayoutManager' }, _scoreModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoLayoutManager.defaults), audioSettings: {}, @@ -24731,7 +25360,7 @@ class SmoScore { obj.metadata.renumberingMap = JSON.parse(JSON.stringify(this.renumberingMap)); obj.metadata.preferences = this.preferences.serialize(); obj.metadata.scoreInfo = JSON.parse(JSON.stringify(this.scoreInfo)); - if (typeof ((_d = (_c = obj === null || obj === void 0 ? void 0 : obj.metadata) === null || _c === void 0 ? void 0 : _c.scoreInfo) === null || _d === void 0 ? void 0 : _d.version) !== 'number') { + if (typeof ((_e = (_d = obj === null || obj === void 0 ? void 0 : obj.metadata) === null || _d === void 0 ? void 0 : _d.scoreInfo) === null || _e === void 0 ? void 0 : _e.version) !== 'number') { obj.metadata.scoreInfo.version = 0; } if (this.formattingManager) { @@ -24740,7 +25369,7 @@ class SmoScore { obj.audioSettings = this.audioSettings.serialize(); if (!skipStaves) { this.staves.forEach((staff) => { - obj.staves.push(staff.serialize({ skipMaps: true })); + obj.staves.push(staff.serialize({ skipMaps: true, preserveIds: preserveIds })); }); } else { @@ -25174,6 +25803,17 @@ class SmoScore { }); this.updateRenumberForAddDelete(measureIndex, false); } + /** + * coordinate the ids of the display score with the stored score + * @param other + */ + synchronizeTextGroups(other) { + this.textGroups = []; + other.forEach((tg) => { + const ntg = _scoreText__WEBPACK_IMPORTED_MODULE_4__.SmoTextGroup.deserializePreserveId(tg); + this.textGroups.push(ntg); + }); + } /** * get a measure 'compatible' with the measure at the given index, in terms * of key, time signature etc. @@ -25581,7 +26221,7 @@ class SmoScorePreferences { autoAdvance: true, defaultDupleDuration: 4096, defaultTripleDuration: 6144, - showPiano: true, + showPiano: false, hideEmptyLines: false, transposingScore: false }; @@ -25591,7 +26231,7 @@ class SmoScorePreferences { this.autoAdvance = true; this.defaultDupleDuration = 4096; this.defaultTripleDuration = 6144; - this.showPiano = true; + this.showPiano = false; this.hideEmptyLines = false; this.transposingScore = false; if (params) { @@ -26567,6 +27207,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ SmoInstrumentNumParams: () => (/* binding */ SmoInstrumentNumParams), /* harmony export */ SmoInstrumentStringParams: () => (/* binding */ SmoInstrumentStringParams), /* harmony export */ SmoOscillatorInfoAllTypes: () => (/* binding */ SmoOscillatorInfoAllTypes), +/* harmony export */ SmoPedalMarking: () => (/* binding */ SmoPedalMarking), /* harmony export */ SmoSlur: () => (/* binding */ SmoSlur), /* harmony export */ SmoStaffHairpin: () => (/* binding */ SmoStaffHairpin), /* harmony export */ SmoStaffTextBracket: () => (/* binding */ SmoStaffTextBracket), @@ -26575,7 +27216,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ SmoTextBracketNumberTypes: () => (/* binding */ SmoTextBracketNumberTypes), /* harmony export */ SmoTextBracketStringTypes: () => (/* binding */ SmoTextBracketStringTypes), /* harmony export */ SmoTie: () => (/* binding */ SmoTie), -/* harmony export */ StaffModifierBase: () => (/* binding */ StaffModifierBase) +/* harmony export */ StaffModifierBase: () => (/* binding */ StaffModifierBase), +/* harmony export */ isSmoPedalMarkingParamsSer: () => (/* binding */ isSmoPedalMarkingParamsSer) /* harmony export */ }); /* harmony import */ var _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common/serializationHelpers */ "./src/common/serializationHelpers.js"); /* harmony import */ var _xform_selections__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../xform/selections */ "./src/smo/xform/selections.ts"); @@ -26626,6 +27268,11 @@ class StaffModifierBase { const rv = new ctor(params); return rv; } + serializeWithId() { + const ser = this.serialize(); + ser.attrs = JSON.parse(JSON.stringify(this.attrs)); + return ser; + } } const SmoOscillatorInfoAllTypes = ['minDuration', 'maxDuration', 'dynamic', 'nativeFrequency', 'realOvertones', 'imaginaryOvertones', 'sample', 'family', 'waveform', 'sustain', 'options', 'instrument']; @@ -26848,6 +27495,11 @@ class SmoStaffTextBracket extends StaffModifierBase { } return params; } + serializeWithId() { + const ser = this.serialize(); + ser.attrs = JSON.parse(JSON.stringify(this.attrs)); + return ser; + } constructor(params) { super('SmoStaffTextBracket'); this.position = SmoStaffTextBracket.positions.BOTTOM; @@ -26895,10 +27547,9 @@ class SmoSlur extends StaffModifierBase { thickness: 2, xOffset: 5, yOffset: 0, - position: SmoSlur.positions.TOP, - position_end: SmoSlur.positions.TOP, + position: SmoSlur.positions.AUTO, + position_end: SmoSlur.positions.AUTO, orientation: SmoSlur.orientations.AUTO, - invert: false, cp1x: 0, cp1y: 15, cp2x: 0, @@ -26956,7 +27607,6 @@ class SmoSlur extends StaffModifierBase { this.position = SmoSlur.positions.TOP; this.position_end = SmoSlur.positions.TOP; this.orientation = SmoSlur.orientations.AUTO; - this.invert = false; this.cp1x = 0; this.cp1y = 15; this.cp2x = 0; @@ -27086,11 +27736,16 @@ class SmoTabStave extends StaffModifierBase { * @param stringPitches * @returns */ - static getDefaultPositionForStaff(pitch, stringPitches, transposeIndex) { + static getDefaultPositionForStaff(pitch, stringPitches, transposeIndex, stringIndex) { const pitchAr = stringPitches.map((pp) => _music__WEBPACK_IMPORTED_MODULE_4__.SmoMusic.smoPitchToInt(pp)); const pitchInt = _music__WEBPACK_IMPORTED_MODULE_4__.SmoMusic.smoPitchToInt(pitch) + (-1 * transposeIndex); + stringIndex = stringIndex !== null && stringIndex !== void 0 ? stringIndex : -1; // if the note is higher than the highest string, count the frets. const lastIndex = pitchAr.length - 1; + // If the user wants to preserve a certain string, find the fret for that if we can. + if (stringIndex > 0 && stringIndex < pitchAr.length && pitchAr[stringIndex] <= pitchInt) { + return { string: stringIndex + 1, fret: pitchInt - pitchAr[stringIndex] }; + } // If the note is between this and the next string, count the frets for (var i = 0; i < lastIndex; i++) { if (pitchInt >= pitchAr[i]) { @@ -27142,13 +27797,7 @@ class SmoTabStave extends StaffModifierBase { return true; } static overlaps(st1, st2) { - if (_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.contains(st1.startSelector, st2.startSelector, st2.endSelector)) { - return true; - } - if (_xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.contains(st1.endSelector, st2.startSelector, st2.endSelector)) { - return true; - } - return false; + return _xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.overlaps(st1.startSelector, st1.endSelector, st2.startSelector, st2.endSelector); } getTabNoteFromNote(note, transposeIndex) { if (note.tabNote) { @@ -27215,12 +27864,58 @@ class SmoTabTie extends StaffModifierBase { this.slideType = SmoTabTie.slideType.None; this.isTap = false; this.text = ''; - _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMerge(SmoTabTie.parameterArray, SmoTabStave.defaults, this); + _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMerge(SmoTabTie.parameterArray, SmoTabTie.defaults, this); _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMerge(SmoTabTie.parameterArray, params, this); } serialize() { const params = { ctor: 'SmoTabTie' }; - _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMergeNonDefault(SmoTabStave.defaults, SmoTabTie.parameterArray, this, params); + _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMergeNonDefault(SmoTabTie.defaults, SmoTabTie.parameterArray, this, params); + return params; + } +} +function isSmoPedalMarkingParamsSer(params) { + if (params.ctor !== 'SmoPedalMarking') { + return false; + } + return true; +} +class SmoPedalMarking extends StaffModifierBase { + static get defaults() { + const rv = { + startSelector: _xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.default, + endSelector: _xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.default, + startMark: true, + releaseMark: true, + bracket: true, + depressText: '', + releaseText: '', + releases: [] + }; + return JSON.parse(JSON.stringify(rv)); + } + static get parameterArray() { + return ['startSelector', 'endSelector', 'startMark', 'endMark', 'bracket', 'depressText', 'releaseText', 'releases']; + } + ; + constructor(params) { + super('SmoPedalMarking'); + this.startSelector = _xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.default; + this.endSelector = _xform_selections__WEBPACK_IMPORTED_MODULE_1__.SmoSelector.default; + this.startMark = true; + this.releaseMark = true; + this.bracket = true; + this.depressText = ''; + this.releaseText = ''; + this.releases = []; + _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMerge(SmoPedalMarking.parameterArray, SmoPedalMarking.defaults, this); + _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMerge(SmoPedalMarking.parameterArray, params, this); + } + serialize() { + const params = { ctor: 'SmoPedalMarking' }; + _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMergeNonDefault(SmoPedalMarking.defaults, SmoPedalMarking.parameterArray, this, params); + if (!isSmoPedalMarkingParamsSer(params)) { + throw ('bad serialization for SmoPedalMarking'); + } return params; } } @@ -27425,10 +28120,12 @@ class SmoSystemStaff { }); params.modifiers = []; this.modifiers.forEach((modifier) => { - params.modifiers.push(modifier.serialize()); + const ser = options.preserveIds ? modifier.serializeWithId() : modifier.serialize(); + params.modifiers.push(ser); }); this.textBrackets.forEach((bracket) => { - params.modifiers.push(bracket.serialize()); + const ser = options.preserveIds ? bracket.serializeWithId() : bracket.serialize(); + params.modifiers.push(ser); }); params.partInfo = this.partInfo.serialize(); if (!isSmoSystemStaffParamsSer(params)) { @@ -27518,7 +28215,11 @@ class SmoSystemStaff { }); if (jsonObj.modifiers) { jsonObj.modifiers.forEach((modParams) => { + var _a; const mod = _staffModifiers__WEBPACK_IMPORTED_MODULE_4__.StaffModifierBase.deserialize(modParams); + if ((_a = modParams.attrs) === null || _a === void 0 ? void 0 : _a.id) { + mod.attrs.id = modParams.attrs.id; + } mod.associatedStaff = jsonObj.staffId; if (mod.ctor === 'SmoStaffTextBracket') { params.textBrackets.push(mod); @@ -27583,6 +28284,7 @@ class SmoSystemStaff { const measure = this.measures[i]; const concertKey = _music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.vexKeySigWithOffset(measure.keySignature, -1 * measure.transposeIndex); const targetKey = _music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.vexKeySigWithOffset(concertKey, entry.instrument.keyOffset); + const tabStave = this.getTabStaveForMeasure(_xform_selections__WEBPACK_IMPORTED_MODULE_7__.SmoSelector.fromMeasure(measure)); measure.transposeToOffset(entry.instrument.keyOffset, targetKey, entry.instrument.clef); measure.transposeIndex = entry.instrument.keyOffset; measure.keySignature = targetKey; @@ -27616,6 +28318,11 @@ class SmoSystemStaff { isRehearsal(index) { return !(typeof (this.measures[index].getRehearsalMark()) === 'undefined'); } + findSimlarOverlap(modifier) { + const overlap = this.modifiers.filter((ff) => _xform_selections__WEBPACK_IMPORTED_MODULE_7__.SmoSelector.overlaps(ff.startSelector, ff.endSelector, modifier.startSelector, modifier.endSelector) && + ff.ctor === modifier.ctor); + return overlap; + } removeTabStaves(delList) { if (delList.length < 1) { return; @@ -27763,6 +28470,7 @@ class SmoSystemStaff { const brackets = this.textBrackets.filter((tb) => _xform_selections__WEBPACK_IMPORTED_MODULE_7__.SmoSelector.lteq(tb.startSelector, nb.startSelector) || _xform_selections__WEBPACK_IMPORTED_MODULE_7__.SmoSelector.gteq(tb.endSelector, nb.startSelector) || tb.position !== nb.position); brackets.push(new _staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoStaffTextBracket(bracketParams)); + this.textBrackets = brackets; } removeTextBracket(bracketParams) { const nb = new _staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoStaffTextBracket(bracketParams); @@ -27782,7 +28490,7 @@ class SmoSystemStaff { // ### getSlursEndingAt // like it says. getSlursEndingAt(selector) { - return this.modifiers.filter((mod) => _xform_selections__WEBPACK_IMPORTED_MODULE_7__.SmoSelector.sameNote(mod.endSelector, selector)); + return this.modifiers.filter((mod) => _xform_selections__WEBPACK_IMPORTED_MODULE_7__.SmoSelector.sameNote(mod.endSelector, selector) && mod.attrs.type === 'SmoSlur'); } getTiesStartingAt(selector) { return this.modifiers.filter((mod) => _xform_selections__WEBPACK_IMPORTED_MODULE_7__.SmoSelector.sameNote(mod.startSelector, selector) && mod.attrs.type === 'SmoTie'); @@ -27790,6 +28498,9 @@ class SmoSystemStaff { getTiesEndingAt(selector) { return this.modifiers.filter((mod) => _xform_selections__WEBPACK_IMPORTED_MODULE_7__.SmoSelector.sameNote(mod.endSelector, selector) && mod.attrs.type === 'SmoTie'); } + getPedalMarkingsContaining(selector) { + return this.modifiers.filter((mod) => mod.ctor === 'SmoPedalMarking' && _xform_selections__WEBPACK_IMPORTED_MODULE_7__.SmoSelector.contains(selector, mod.startSelector, mod.endSelector)); + } // ### accesor getModifiers getModifiers() { return this.modifiers; @@ -27868,6 +28579,27 @@ class SmoSystemStaff { ix += 1; }); } + /** + * Sync the staff modifier indices between the full score and the score view, which may + * have fewer staves + * @param measureIndex + * @param ostaff + */ + syncStaffModifiers(measureIndex, ostaff) { + const mods = []; + this.modifiers.forEach((modifier) => { + if (modifier.startSelector.measure !== measureIndex) { + mods.push(modifier); + } + else { + const omod = ostaff.modifiers.find((mm) => mm.attrs.id === modifier.attrs.id); + if (omod) { + mods.push(modifier); + } + } + }); + this.modifiers = mods; + } // ### deleteMeasure // delete the measure, and any staff modifiers that start/end there. deleteMeasure(index) { @@ -28007,13 +28739,11 @@ SmoSystemStaff.recordElements = ['renumberingMap', 'keySignatureMap', 'measureIn "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ SmoTuplet: () => (/* binding */ SmoTuplet) +/* harmony export */ SmoTuplet: () => (/* binding */ SmoTuplet), +/* harmony export */ SmoTupletTree: () => (/* binding */ SmoTupletTree) /* harmony export */ }); /* harmony import */ var _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common/serializationHelpers */ "./src/common/serializationHelpers.js"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/smo/data/note.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./music */ "./src/smo/data/music.ts"); -/* harmony import */ var _noteModifiers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./noteModifiers */ "./src/smo/data/noteModifiers.ts"); -/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./common */ "./src/smo/data/common.ts"); +/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common */ "./src/smo/data/common.ts"); // [Smoosic](https://github.com/AaronDavidNewman/Smoosic) // Copyright (c) Aaron David Newman 2021. /** @@ -28022,9 +28752,124 @@ __webpack_require__.r(__webpack_exports__); */ - - - +class SmoTupletTree { + constructor(params) { + this.tuplet = params.tuplet; + } + static syncTupletIds(tupletTrees, voices) { + const traverseTupletTree = (parentTuplet) => { + const notes = voices[parentTuplet.voice].notes; + for (let i = parentTuplet.startIndex; i <= parentTuplet.endIndex; i++) { + const note = notes[i]; + note.tupletId = parentTuplet.attrs.id; + } + for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) { + const tuplet = parentTuplet.childrenTuplets[i]; + traverseTupletTree(tuplet); + } + }; + //traverse tuplet tree + for (let i = 0; i < tupletTrees.length; i++) { + const tupletTree = tupletTrees[i]; + traverseTupletTree(tupletTree.tuplet); + } + } + static adjustTupletIndexes(tupletTrees, voice, startTick, diff) { + const traverseTupletTree = (parentTuplet) => { + if (parentTuplet.endIndex >= startTick) { + parentTuplet.endIndex += diff; + if (parentTuplet.startIndex > startTick) { + parentTuplet.startIndex += diff; + } + } + for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) { + const tuplet = parentTuplet.childrenTuplets[i]; + traverseTupletTree(tuplet); + } + }; + //traverse tuplet tree + for (let i = 0; i < tupletTrees.length; i++) { + const tupletTree = tupletTrees[i]; + if (tupletTree.endIndex >= startTick && tupletTree.voice == voice) { + traverseTupletTree(tupletTree.tuplet); + } + } + } + static getTupletForNoteIndex(tupletTrees, voiceIx, noteIx) { + const tuplets = SmoTupletTree.getTupletHierarchyForNoteIndex(tupletTrees, voiceIx, noteIx); + if (tuplets.length) { + return tuplets[tuplets.length - 1]; + } + return null; + } + static getTupletTreeForNoteIndex(tupletTrees, voiceIx, noteIx) { + for (let i = 0; i < tupletTrees.length; i++) { + const tupletTree = tupletTrees[i]; + if (tupletTree.startIndex <= noteIx && tupletTree.endIndex >= noteIx && tupletTree.voice == voiceIx) { + return tupletTree; + } + } + return null; + } + // Finds the tuplet hierarchy for a given note index. + static getTupletHierarchyForNoteIndex(tupletTrees, voiceIx, noteIx) { + let tupletHierarchy = []; + const traverseTupletTree = (parentTuplet) => { + tupletHierarchy.push(parentTuplet); + for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) { + const tuplet = parentTuplet.childrenTuplets[i]; + if (tuplet.startIndex <= noteIx && tuplet.endIndex >= noteIx) { + traverseTupletTree(tuplet); + break; + } + } + }; + //find tuplet tree + for (let i = 0; i < tupletTrees.length; i++) { + const tupletTree = tupletTrees[i]; + if (tupletTree.startIndex <= noteIx && tupletTree.endIndex >= noteIx && tupletTree.voice == voiceIx) { + traverseTupletTree(tupletTree.tuplet); + break; + } + } + return tupletHierarchy; + } + static removeTupletForNoteIndex(measure, voiceIx, noteIx) { + for (let i = 0; i < measure.tupletTrees.length; i++) { + const tupletTree = measure.tupletTrees[i]; + if (tupletTree.startIndex <= noteIx && tupletTree.endIndex >= noteIx && tupletTree.voice == voiceIx) { + measure.tupletTrees.splice(i, 1); + break; + } + } + } + serialize() { + const params = { + ctor: 'SmoTupletTree', + tuplet: this.tuplet.serialize() + }; + return params; + } + static deserialize(jsonObj) { + const tuplet = SmoTuplet.deserialize(jsonObj.tuplet); + return new SmoTupletTree({ tuplet: tuplet }); + } + static clone(tupletTree) { + return SmoTupletTree.deserialize(tupletTree.serialize()); + } + get startIndex() { + return this.tuplet.startIndex; + } + get endIndex() { + return this.tuplet.endIndex; + } + get voice() { + return this.tuplet.voice; + } + get totalTicks() { + return this.tuplet.totalTicks; + } +} /** * tuplets must be serialized with their id attribute, enforce this * @param params a possible-valid SmoTupletParamsSer @@ -28034,7 +28879,7 @@ function isSmoTupletParamsSer(params) { if (!params.ctor || !(params.ctor === 'SmoTuplet')) { return false; } - if (!params.id || !(typeof (params.id) === 'string')) { + if (!params.attrs || !(typeof (params.attrs.id) === 'string')) { return false; } return true; @@ -28046,46 +28891,58 @@ function isSmoTupletParamsSer(params) { class SmoTuplet { static get defaults() { return JSON.parse(JSON.stringify({ - notes: [], numNotes: 3, + notesOccupied: 2, stemTicks: 2048, + startIndex: 0, + endIndex: 0, totalTicks: 4096, // how many ticks this tuple takes up - durationMap: [1.0, 1.0, 1.0], bracketed: true, voice: 0, - ratioed: false, - startIndex: 0 + ratioed: false })); } get clonedParams() { - const paramAr = ['stemTicks', 'ticks', 'totalTicks', 'durationMap', 'numNotes']; + const paramAr = ['stemTicks', 'ticks', 'totalTicks', 'numNotes']; const rv = {}; _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMerge(paramAr, this, rv); return rv; } static get parameterArray() { - return ['stemTicks', 'ticks', 'totalTicks', - 'durationMap', 'id', 'ratioed', 'bracketed', 'voice', 'startIndex', 'numNotes']; + return ['stemTicks', 'totalTicks', 'startIndex', 'endIndex', + 'attrs', 'ratioed', 'bracketed', 'voice', 'numNotes']; } serialize() { - const params = { - notes: [] - }; - this.notes.forEach((nn) => { - if (!nn.tupletId) { - throw 'bad tuplet when serializing'; - } - params.notes.push({ - noteId: nn.attrs.id, tupletId: nn.tupletId, ticks: nn.ticks - }); - }); + const params = {}; params.ctor = 'SmoTuplet'; + params.childrenTuplets = []; _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMergeNonDefault(SmoTuplet.defaults, SmoTuplet.parameterArray, this, params); + this.childrenTuplets.forEach((tuplet) => { + params.childrenTuplets.push(tuplet.serialize()); + }); if (!isSmoTupletParamsSer(params)) { throw 'bad tuplet ' + JSON.stringify(params); } return params; } + static deserialize(jsonObj) { + const tupJson = SmoTuplet.defaults; + _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMerge(SmoTuplet.parameterArray, jsonObj, tupJson); + // Legacy schema did not have notesOccupied, we need to calculate it. + if (jsonObj.notes !== undefined) { + //todo: notesOccupied can probably be removed + tupJson.notesOccupied = tupJson.totalTicks / tupJson.stemTicks; + } + const tuplet = new SmoTuplet(tupJson); + tuplet.parentTuplet = jsonObj.parentTuplet ? jsonObj.parentTuplet : null; + if (jsonObj.childrenTuplets !== undefined) { + for (let i = 0; i < jsonObj.childrenTuplets.length; i++) { + const childTuplet = SmoTuplet.deserialize(jsonObj.childrenTuplets[i]); + tuplet.childrenTuplets.push(childTuplet); + } + } + return tuplet; + } static calculateStemTicks(totalTicks, numNotes) { const stemValue = totalTicks / numNotes; let stemTicks = SmoTuplet.longestTuplet; @@ -28098,201 +28955,43 @@ class SmoTuplet { } constructor(params) { this.numNotes = 3; + this.notesOccupied = 2; this.stemTicks = 2048; this.totalTicks = 4096; - this.durationMap = [1.0, 1.0, 1.0]; this.bracketed = true; this.voice = 0; this.ratioed = false; + this.parentTuplet = null; + this.childrenTuplets = []; this.startIndex = 0; - _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.vexMerge(this, SmoTuplet.defaults); - _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_0__.smoSerialize.serializedMerge(SmoTuplet.parameterArray, params, this); - this.notes = params.notes; - this.id = (0,_common__WEBPACK_IMPORTED_MODULE_4__.getId)().toString(); - this._adjustTicks(); + this.endIndex = 0; + const defs = SmoTuplet.defaults; + this.numNotes = params.numNotes ? params.numNotes : defs.numNotes; + this.notesOccupied = params.notesOccupied ? params.notesOccupied : defs.notesOccupied; + this.stemTicks = params.stemTicks ? params.stemTicks : defs.stemTicks; + this.totalTicks = params.totalTicks ? params.totalTicks : defs.totalTicks; + this.bracketed = params.bracketed ? params.bracketed : defs.bracketed; + this.voice = params.voice ? params.voice : defs.voice; + this.ratioed = params.ratioed ? params.ratioed : defs.ratioed; + this.startIndex = params.startIndex ? params.startIndex : defs.startIndex; + this.endIndex = params.endIndex ? params.endIndex : defs.endIndex; + this.attrs = { + id: (0,_common__WEBPACK_IMPORTED_MODULE_1__.getId)().toString(), + type: 'SmoTuplet' + }; } static get longestTuplet() { return 8192; } - static cloneTuplet(tuplet, tupletNotes) { - let i = 0; - const noteAr = tupletNotes; - const dupNotes = []; - const durationMap = JSON.parse(JSON.stringify(tuplet.durationMap)); // deep copy array - // Add any remainders for oddlets - const totalTicks = noteAr.map((nn) => nn.ticks.numerator + nn.ticks.remainder) - .reduce((acc, nn) => acc + nn); - const numNotes = tuplet.numNotes; - const stemTicks = SmoTuplet.calculateStemTicks(totalTicks, numNotes); - noteAr.forEach((note) => { - const textModifiers = note.textModifiers; - // Note preserver remainder - note = _note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.cloneWithDuration(note, { - numerator: stemTicks * tuplet.durationMap[i], - denominator: 1, - remainder: note.ticks.remainder - }); - // Don't clone modifiers, except for first one. - if (i === 0) { - const ntmAr = []; - textModifiers.forEach((tm) => { - const ntm = _noteModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoNoteModifierBase.deserialize(tm); - ntmAr.push(ntm); - }); - note.textModifiers = ntmAr; - } - i += 1; - dupNotes.push(note); - }); - const rv = new SmoTuplet({ - numNotes: tuplet.numNotes, - voice: tuplet.voice, - notes: dupNotes, - stemTicks, - totalTicks, - ratioed: false, - bracketed: true, - startIndex: tuplet.startIndex, - durationMap - }); - return rv; - } - _adjustTicks() { - let i = 0; - const sum = this.durationSum; - for (i = 0; i < this.notes.length; ++i) { - const note = this.notes[i]; - // TODO: notes_occupied needs to consider vex duration - note.ticks.denominator = 1; - note.ticks.numerator = Math.floor((this.totalTicks * this.durationMap[i]) / sum); - note.tupletId = this.id; - } - // put all the remainder in the first note of the tuplet - const noteTicks = this.notes.map((nn) => nn.tickCount) - .reduce((acc, dd) => acc + dd); - // bug fix: if this is a clones tuplet, remainder is already set - this.notes[0].ticks.remainder = - this.notes[0].ticks.remainder + this.totalTicks - noteTicks; - } - getIndexOfNote(note) { - let rv = -1; - let i = 0; - if (!note) { - return -1; - } - for (i = 0; i < this.notes.length; ++i) { - const tn = this.notes[i]; - if (note.attrs.id === tn.attrs.id) { - rv = i; - } - } - return rv; - } - split(combineIndex) { - let i = 0; - const multiplier = 0.5; - const nnotes = []; - const nmap = []; - for (i = 0; i < this.notes.length; ++i) { - const note = this.notes[i]; - if (i === combineIndex) { - nmap.push(this.durationMap[i] * multiplier); - nmap.push(this.durationMap[i] * multiplier); - note.ticks.numerator *= multiplier; - const onote = _note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.clone(note); - // remainder is for the whole tuplet, so don't duplicate that. - onote.ticks.remainder = 0; - nnotes.push(note); - nnotes.push(onote); - } - else { - nmap.push(this.durationMap[i]); - nnotes.push(note); - } - } - this.notes = nnotes; - this.durationMap = nmap; - } - combine(startIndex, endIndex) { - let i = 0; - let base = 0.0; - let acc = 0.0; - // can't combine in this way, too many notes - if (this.notes.length <= endIndex || startIndex >= endIndex) { - return this; - } - for (i = startIndex; i <= endIndex; ++i) { - acc += this.durationMap[i]; - if (i === startIndex) { - base = this.durationMap[i]; - } - else if (this.durationMap[i] !== base) { - // Can't combine non-equal tuplet notes - return this; - } - } - // how much each combined value will be multiplied by - const multiplier = acc / base; - const nmap = []; - const nnotes = []; - // adjust the duration map - for (i = 0; i < this.notes.length; ++i) { - const note = this.notes[i]; - // notes that don't change are unchanged - if (i < startIndex || i > endIndex) { - nmap.push(this.durationMap[i]); - nnotes.push(note); - } - // changed note with combined duration - if (i === startIndex) { - note.ticks.numerator = note.ticks.numerator * multiplier; - nmap.push(acc); - nnotes.push(note); - } - // other notes after startIndex are removed from the map. - } - this.notes = nnotes; - this.durationMap = nmap; - return this; - } - // ### getStemDirection - // Return the stem direction, so we can bracket the correct place - getStemDirection(clef) { - const note = this.notes.find((nn) => nn.noteType === 'n'); - if (!note) { - return _note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.flagStates.down; - } - if (note.flagState !== _note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.flagStates.auto) { - return note.flagState; - } - return _music__WEBPACK_IMPORTED_MODULE_2__.SmoMusic.pitchToStaffLine(clef, note.pitches[0]) - >= 3 ? _note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.flagStates.down : _note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.flagStates.up; - } - get durationSum() { - let acc = 0; - let i = 0; - for (i = 0; i < this.durationMap.length; ++i) { - acc += this.durationMap[i]; - } - return Math.round(acc); - } + //todo: adjust naming get num_notes() { - return this.durationSum; + return this.numNotes; } get notes_occupied() { return Math.floor(this.totalTicks / this.stemTicks); } - get note_ticks_occupied() { - return this.totalTicks / this.stemTicks; - } get tickCount() { - let rv = 0; - let i = 0; - for (i = 0; i < this.notes.length; ++i) { - const note = this.notes[i]; - rv += (note.ticks.numerator / note.ticks.denominator) + note.ticks.remainder; - } - return rv; + return this.totalTicks; } } @@ -28319,6 +29018,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _data_staffModifiers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/staffModifiers */ "./src/smo/data/staffModifiers.ts"); /* harmony import */ var _data_systemStaff__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/systemStaff */ "./src/smo/data/systemStaff.ts"); /* harmony import */ var _data_tuplet__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/tuplet */ "./src/smo/data/tuplet.ts"); +/* harmony import */ var _xform_operations__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../xform/operations */ "./src/smo/xform/operations.ts"); + @@ -28569,12 +29270,15 @@ class MidiToSmo { const voiceLen = measure.voices[0].notes.length; const tupletNotes = [note, measure.voices[0].notes[voiceLen - 2], measure.voices[0].notes[voiceLen - 3]]; const defs = _data_tuplet__WEBPACK_IMPORTED_MODULE_7__.SmoTuplet.defaults; - defs.notes = tupletNotes; defs.stemTicks = ev.tupletInfo.stemTicks; defs.numNotes = ev.tupletInfo.numNotes; defs.totalTicks = ev.tupletInfo.totalTicks; defs.startIndex = voiceLen - 3; - measure.tuplets.push(new _data_tuplet__WEBPACK_IMPORTED_MODULE_7__.SmoTuplet(defs)); + defs.endIndex = voiceLen - 1; + const tuplet = new _data_tuplet__WEBPACK_IMPORTED_MODULE_7__.SmoTuplet(defs); + this.adjustTupletNotes(tupletNotes, tuplet); + const tupletTree = new _data_tuplet__WEBPACK_IMPORTED_MODULE_7__.SmoTupletTree({ tuplet: tuplet }); + measure.tupletTrees.push(tupletTree); } if (ev.isTied) { this.addToTieMap(measureIndex); @@ -28586,6 +29290,18 @@ class MidiToSmo { }); return measures; } + adjustTupletNotes(notes, tuplet) { + const numerator = tuplet.totalTicks / tuplet.numNotes; + for (let i = 0; i < notes.length; ++i) { + const note = notes[i]; + note.ticks = { numerator: Math.floor(numerator), denominator: 1, remainder: 0 }; + note.stemTicks = tuplet.stemTicks; + note.tupletId = tuplet.attrs.id; + } + if (numerator % 1) { + notes[0].ticks.numerator += 1; + } + } /** * @param ticks * @returns the length in ticks of a triplet, if this looks like a triplet. Otherwise 0 @@ -28920,6 +29636,7 @@ class MidiToSmo { // if no scale given in score, default to something small. layoutDefaults.globalLayout.svgScale = 0.65; layoutDefaults.globalLayout.zoomScale = 1.5; + _xform_operations__WEBPACK_IMPORTED_MODULE_8__.SmoOperation.clearAllBeamGroups(rv); return rv; } } @@ -29046,11 +29763,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data/staffModifiers */ "./src/smo/data/staffModifiers.ts"); /* harmony import */ var _data_noteModifiers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/noteModifiers */ "./src/smo/data/noteModifiers.ts"); /* harmony import */ var _xform_selections__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../xform/selections */ "./src/smo/xform/selections.ts"); -/* harmony import */ var _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./xmlHelpers */ "./src/smo/mxml/xmlHelpers.ts"); -/* harmony import */ var _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../common/serializationHelpers */ "./src/common/serializationHelpers.js"); -/* harmony import */ var _xmlToSmo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./xmlToSmo */ "./src/smo/mxml/xmlToSmo.ts"); -/* harmony import */ var _data_scoreModifiers__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../data/scoreModifiers */ "./src/smo/data/scoreModifiers.ts"); -/* harmony import */ var _render_audio_samples__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../render/audio/samples */ "./src/render/audio/samples.ts"); +/* harmony import */ var _data_tuplet__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/tuplet */ "./src/smo/data/tuplet.ts"); +/* harmony import */ var _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./xmlHelpers */ "./src/smo/mxml/xmlHelpers.ts"); +/* harmony import */ var _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../common/serializationHelpers */ "./src/common/serializationHelpers.js"); +/* harmony import */ var _xmlToSmo__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./xmlToSmo */ "./src/smo/mxml/xmlToSmo.ts"); +/* harmony import */ var _data_scoreModifiers__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../data/scoreModifiers */ "./src/smo/data/scoreModifiers.ts"); +/* harmony import */ var _render_audio_samples__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../render/audio/samples */ "./src/render/audio/samples.ts"); + @@ -29092,7 +29811,8 @@ class SmoToXml { lyricState: {}, measureTicks: 0, beamState: 0, - beamTicks: 4096 + beamTicks: 4096, + currentTupletLevel: 0, })); } /** @@ -29103,14 +29823,14 @@ class SmoToXml { static convert(score) { let staffGroupIx = 0; let staffIx = 0; - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; - const dom = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createRootElement(); + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; + const dom = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createRootElement(); const root = dom.children[0]; const work = nn(root, 'work', null, ''); nn(work, 'work-title', score.scoreInfo, 'title'); const identification = nn(root, 'identification', null, ''); const creator = nn(identification, 'creator', score.scoreInfo, 'composer'); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(creator, { type: 'composer' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(creator, { type: 'composer' }); const encoding = nn(identification, 'encoding', null, ''); nn(encoding, 'software', { software: 'Some pre-release version of Smoosic' }, 'software'); const today = new Date(); @@ -29121,15 +29841,15 @@ class SmoToXml { const scaling = nn(defaults, 'scaling', null, ''); const svgScale = score.layoutManager.getGlobalLayout().svgScale; // music in vexflow is rendered at a font size of 38 - const mm = _xmlToSmo__WEBPACK_IMPORTED_MODULE_9__.XmlToSmo.mmPerPixel * 42 * svgScale; + const mm = _xmlToSmo__WEBPACK_IMPORTED_MODULE_10__.XmlToSmo.mmPerPixel * 42 * svgScale; nn(scaling, 'millimeters', { mm }, 'mm'); nn(scaling, 'tenths', { tenths: 40 }, 'tenths'); const pageLayout = nn(defaults, 'page-layout', null, ''); const musicFont = nn(defaults, 'music-font', null, ''); const engrave = score.fonts.find((fn) => fn.purpose === _data_score__WEBPACK_IMPORTED_MODULE_2__.SmoScore.fontPurposes.ENGRAVING); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttribute(musicFont, 'font-size', 38 * svgScale); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttribute(musicFont, 'font-size', 38 * svgScale); if (engrave) { - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttribute(musicFont, 'font-family', engrave.family); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttribute(musicFont, 'font-family', engrave.family); } const tenthConversion = (25.2 / 96) * (40 / mm); const pageDims = { @@ -29152,40 +29872,40 @@ class SmoToXml { score.systemGroups.forEach((sg) => { if (sg.startSelector.staff === staff.staffId && sg.startSelector.staff < sg.endSelector.staff) { const partGroup = nn(partList, 'part-group', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'start' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'start' }); const groupSymbol = nn(partGroup, 'group-symbol', null, ''); let symbolText = 'line'; - if (sg.leftConnector === _data_scoreModifiers__WEBPACK_IMPORTED_MODULE_10__.SmoSystemGroup.connectorTypes['brace']) { + if (sg.leftConnector === _data_scoreModifiers__WEBPACK_IMPORTED_MODULE_11__.SmoSystemGroup.connectorTypes['brace']) { symbolText = 'brace'; } - else if (sg.leftConnector === _data_scoreModifiers__WEBPACK_IMPORTED_MODULE_10__.SmoSystemGroup.connectorTypes['bracket']) { + else if (sg.leftConnector === _data_scoreModifiers__WEBPACK_IMPORTED_MODULE_11__.SmoSystemGroup.connectorTypes['bracket']) { symbolText = 'bracket'; } - else if (sg.leftConnector === _data_scoreModifiers__WEBPACK_IMPORTED_MODULE_10__.SmoSystemGroup.connectorTypes['double']) { + else if (sg.leftConnector === _data_scoreModifiers__WEBPACK_IMPORTED_MODULE_11__.SmoSystemGroup.connectorTypes['double']) { symbolText = 'square'; } groupSymbol.textContent = symbolText; } else if (sg.endSelector.staff === staff.staffId && sg.startSelector.staff < sg.endSelector.staff) { const partGroup = nn(partList, 'part-group', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'stop' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'stop' }); } }); if (!staff.partInfo.stavesBefore) { const id = 'P' + staff.staffId; const scorePart = nn(partList, 'score-part', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(scorePart, { id }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(scorePart, { id }); nn(scorePart, 'part-name', { name: staff.measureInstrumentMap[0].instrumentName }, 'name'); nn(scorePart, 'part-abbreviation', { name: staff.measureInstrumentMap[0].abbreviation }, 'name'); const staffInsts = staff.getInstrumentList(); staffInsts.forEach((inst, ix) => { const scoreInstrument = nn(scorePart, 'score-instrument', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(scoreInstrument, { id: `${id}-${ix}` }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(scoreInstrument, { id: `${id}-${ix}` }); const iname = nn(scoreInstrument, 'instrument-name', null, ''); iname.textContent = inst.instrumentName; const iinst = nn(scoreInstrument, 'instrument-sound', null, ''); // Hack: family is in the sample library, breaks dependency direction - const family = _render_audio_samples__WEBPACK_IMPORTED_MODULE_11__.SuiSampleMedia.getFamilyForInstrument(inst.instrument); + const family = _render_audio_samples__WEBPACK_IMPORTED_MODULE_12__.SuiSampleMedia.getFamilyForInstrument(inst.instrument); iinst.textContent = `${family}.${inst.instrument}`; }); } @@ -29204,7 +29924,7 @@ class SmoToXml { } const part = nn(root, 'part', null, ''); const id = 'P' + smoState.partStaves[0].staffId; - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(part, { id }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(part, { id }); smoState.measureNumber = 1; smoState.tickCount = 0; smoState.transposeOffset = 0; @@ -29222,7 +29942,7 @@ class SmoToXml { smoState.measureNumber += 1; } } - return _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_8__.smoSerialize.prettifyXml(dom); + return _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_9__.smoSerialize.prettifyXml(dom); } /** * /score-partwise/part/measure @@ -29231,16 +29951,16 @@ class SmoToXml { * @returns */ static measure(measureElement, smoState) { - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const measure = smoState.partStaves[smoState.staffPartIx].measures[smoState.measureIndex]; if (smoState.measureNumber === 1 && measure.isPickup()) { smoState.measureNumber = 0; } if (measure.getForceSystemBreak()) { const printElement = nn(measureElement, 'print', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(printElement, { 'new-system': 'yes' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(printElement, { 'new-system': 'yes' }); } - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(measureElement, { number: smoState.measureNumber }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(measureElement, { number: smoState.measureNumber }); SmoToXml.attributes(measureElement, measure, smoState); smoState.voiceIndex = 1; smoState.beamState = SmoToXml.beamStates.none; @@ -29285,7 +30005,7 @@ class SmoToXml { * @param start */ static barline(measureElement, smoState, start) { - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; let barlineElement = null; const staff = smoState.partStaves[smoState.staffPartIx]; const measure = staff.measures[smoState.measureIndex]; @@ -29293,7 +30013,7 @@ class SmoToXml { if (measure.getStartBarline().barline === _data_measureModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoBarline.barlines.startRepeat) { barlineElement = nn(measureElement, 'barline', null, ''); const repeatElement = nn(barlineElement, 'repeat', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(repeatElement, { direction: 'forward' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(repeatElement, { direction: 'forward' }); } } const voltas = staff.getVoltasForMeasure(measure.measureNumber.measureIndex); @@ -29318,12 +30038,12 @@ class SmoToXml { const numstr = numArray.join(','); const endElement = nn(barlineElement, 'ending', null, ''); const endString = start ? 'start' : 'stop'; - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(endElement, { type: endString, number: numstr }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(endElement, { type: endString, number: numstr }); } if (!start && measure.getEndBarline().barline === _data_measureModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoBarline.barlines.endRepeat) { barlineElement = barlineElement !== null && barlineElement !== void 0 ? barlineElement : nn(measureElement, 'barline', null, ''); const repeatElement = nn(barlineElement, 'repeat', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(repeatElement, { direction: 'backward' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(repeatElement, { direction: 'backward' }); } } /** @@ -29332,7 +30052,7 @@ class SmoToXml { * @param smoState */ static tied(notationsElement, smoState) { - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const staff = smoState.partStaves[smoState.staffPartIx]; const measure = staff.measures[smoState.measureIndex]; const getNumberForTie = ((ties) => { @@ -29366,7 +30086,7 @@ class SmoToXml { if (match) { remove.push(match); const tieElement = nn(notationsElement, 'tied', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(tieElement, { type: 'stop' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(tieElement, { type: 'stop' }); } }); smoState.tieds.forEach((tie) => { @@ -29383,7 +30103,7 @@ class SmoToXml { number }); const tieElement = nn(notationsElement, 'tied', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(tieElement, { type: 'start' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(tieElement, { type: 'start' }); }); } /** @@ -29392,7 +30112,7 @@ class SmoToXml { * @param smoState */ static tie(noteElement, smoState) { - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const staff = smoState.partStaves[smoState.staffPartIx]; const measure = staff.measures[smoState.measureIndex]; const getNumberForTie = ((ties) => { @@ -29426,7 +30146,7 @@ class SmoToXml { if (match) { remove.push(match); const tieElement = nn(noteElement, 'tie', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(tieElement, { type: 'stop' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(tieElement, { type: 'stop' }); } }); smoState.ties.forEach((tie) => { @@ -29443,7 +30163,7 @@ class SmoToXml { number }); const tieElement = nn(noteElement, 'tie', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(tieElement, { type: 'start' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(tieElement, { type: 'start' }); }); } /** @@ -29452,7 +30172,7 @@ class SmoToXml { * @param smoState */ static slur(notationsElement, smoState) { - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const staff = smoState.partStaves[smoState.staffPartIx]; const measure = staff.measures[smoState.measureIndex]; const getNumberForSlur = ((slurs) => { @@ -29486,7 +30206,7 @@ class SmoToXml { if (match) { remove.push(match); const slurElement = nn(notationsElement, 'slur', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(slurElement, { number: match.number, type: 'stop' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(slurElement, { number: match.number, type: 'stop' }); } }); smoState.slurs.forEach((slur) => { @@ -29503,39 +30223,56 @@ class SmoToXml { number }); const slurElement = nn(notationsElement, 'slur', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(slurElement, { number: number, type: 'start' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(slurElement, { number: number, type: 'start' }); }); } /** * /score-partwise/measure/note/time-modification * /score-partwise/measure/note/tuplet - * @param noteElement - * @param notationsElement - * @param smoState - * @returns */ - static tupletTime(noteElement, tuplet, smoState) { - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + static tupletTime(noteElement, note, measure, smoState) { + const tuplets = _data_tuplet__WEBPACK_IMPORTED_MODULE_7__.SmoTupletTree.getTupletHierarchyForNoteIndex(measure.tupletTrees, smoState.voiceIndex - 1, smoState.voiceTickIndex); + let actualNotes = 1; + let normalNotes = 1; + for (let i = 0; i < tuplets.length; i++) { + const tuplet = tuplets[i]; + actualNotes *= tuplet.numNotes; + normalNotes *= tuplet.notesOccupied; + } + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const obj = { - actualNotes: tuplet.numNotes, normalNotes: tuplet.notes_occupied + actualNotes: actualNotes, normalNotes: normalNotes }; const timeModification = nn(noteElement, 'time-modification', null, ''); nn(timeModification, 'actual-notes', obj, 'actualNotes'); nn(timeModification, 'normal-notes', obj, 'normalNotes'); } - static tupletNotation(notationsElement, tuplet, note) { - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; - if (tuplet.getIndexOfNote(note) === 0) { - const tupletElement = nn(notationsElement, 'tuplet', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(tupletElement, { - number: 1, type: 'start' - }); - } - else if (tuplet.getIndexOfNote(note) === tuplet.notes.length - 1) { - const tupletElement = nn(notationsElement, 'tuplet', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(tupletElement, { - number: 1, type: 'stop' - }); + static tupletNotation(notationsElement, note, measure, smoState) { + const tuplets = _data_tuplet__WEBPACK_IMPORTED_MODULE_7__.SmoTupletTree.getTupletHierarchyForNoteIndex(measure.tupletTrees, smoState.voiceIndex - 1, smoState.voiceTickIndex); + for (let i = 0; i < tuplets.length; i++) { + const tuplet = tuplets[i]; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; + if (tuplet.startIndex === smoState.voiceTickIndex) { //START + const tupletElement = nn(notationsElement, 'tuplet', null, ''); + smoState.currentTupletLevel++; + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(tupletElement, { + number: smoState.currentTupletLevel, type: 'start' + }); + const tupletType = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.ticksToNoteTypeMap[tuplet.stemTicks]; + const tupletActual = nn(tupletElement, 'tuplet-actual', null, ''); + nn(tupletActual, 'tuplet-number', tuplet, 'numNotes'); + nn(tupletActual, 'tuplet-type', tupletType, ''); + const tupletNormal = nn(tupletElement, 'tuplet-normal', null, ''); + nn(tupletNormal, 'tuplet-number', tuplet, 'notesOccupied'); + nn(tupletNormal, 'tuplet-type', tupletType, ''); + } + else if (tuplet.endIndex === smoState.voiceTickIndex) { //STOP + const tupletElement = nn(notationsElement, 'tuplet', null, ''); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(tupletElement, { + number: smoState.currentTupletLevel, type: 'stop' + }); + smoState.currentTupletLevel--; + } } } /** @@ -29544,7 +30281,7 @@ class SmoToXml { * @param noteElement */ static pitch(pitch, noteElement) { - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const accidentalOffset = ['bb', 'b', 'n', '#', '##']; const alter = accidentalOffset.indexOf(pitch.accidental) - 2; const pitchElement = nn(noteElement, 'pitch', null, ''); @@ -29565,7 +30302,7 @@ class SmoToXml { if (!smoState.voice) { return; } - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const note = smoState.note; const nextNote = (smoState.voiceTickIndex + 1) >= smoState.voice.notes.length ? null : smoState.voice.notes[smoState.voiceTickIndex + 1]; @@ -29599,17 +30336,17 @@ class SmoToXml { // slur is start/stop, beam is begin, end, gf if (toBeam === SmoToXml.beamStates.start) { const beamElement = nn(noteElement, 'beam', { type: 'begin' }, 'type'); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(beamElement, { number: 1 }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(beamElement, { number: 1 }); smoState.beamState = SmoToXml.beamStates.continue; } else if (toBeam === SmoToXml.beamStates.continue) { const beamElement = nn(noteElement, 'beam', { type: 'continue' }, 'type'); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(beamElement, { number: 1 }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(beamElement, { number: 1 }); } else if ((toBeam === SmoToXml.beamStates.stop) || (toBeam === SmoToXml.beamStates.none && smoState.beamState !== SmoToXml.beamStates.none)) { const beamElement = nn(noteElement, 'beam', { type: 'end' }, 'type'); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(beamElement, { number: 1 }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(beamElement, { number: 1 }); smoState.beamState = SmoToXml.beamStates.none; } } @@ -29621,7 +30358,7 @@ class SmoToXml { */ static direction(measureElement, smoState, beforeNote) { let addDirection = false; - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const directionElement = measureElement.ownerDocument.createElement('direction'); const staff = smoState.partStaves[smoState.staffPartIx]; const measure = staff.measures[smoState.measureIndex]; @@ -29646,8 +30383,8 @@ class SmoToXml { const rmtype = nn(directionElement, 'direction-type', null, ''); const xmark = mark; const rElement = nn(rmtype, 'rehearsal', { mark: xmark.symbol }, 'mark'); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttribute(rElement, 'enclosure', 'square'); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttribute(directionElement, 'placement', 'above'); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttribute(rElement, 'enclosure', 'square'); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttribute(directionElement, 'placement', 'above'); addDirection = true; } } @@ -29655,7 +30392,7 @@ class SmoToXml { addDirection = true; const tempoBpm = Math.round(tempo.bpm * tempo.beatDuration / 4096); const tempoElement = nn(directionElement, 'direction-type', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttribute(directionElement, 'placement', 'above'); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttribute(directionElement, 'placement', 'above'); let tempoText = tempo.tempoText; if (tempo.tempoMode === _data_measureModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoTempoText.tempoModes.customMode) { tempoText = tempo.customText; @@ -29705,7 +30442,7 @@ class SmoToXml { const wedgeDirection = nn(measureElement, 'direction', null, ''); const dtype = nn(wedgeDirection, 'direction-type', null, ''); const wedgeElement = nn(dtype, 'wedge', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(wedgeElement, { type: 'stop', spread: '20' }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(wedgeElement, { type: 'stop', spread: '20' }); } if (startWedge && beforeNote) { const wedgeDirection = nn(measureElement, 'direction', null, ''); @@ -29713,7 +30450,7 @@ class SmoToXml { const wedgeElement = nn(dtype, 'wedge', null, ''); const wedgeType = startWedge.hairpinType === _data_staffModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoStaffHairpin.types.CRESCENDO ? 'crescendo' : 'diminuendo'; - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttributes(wedgeElement, { type: wedgeType }); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttributes(wedgeElement, { type: wedgeType }); } if (addDirection) { measureElement.appendChild(directionElement); @@ -29729,7 +30466,7 @@ class SmoToXml { */ static lyric(noteElement, smoState) { const smoNote = smoState.note; - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const lyrics = smoNote.getTrueLyrics(); lyrics.forEach((lyric) => { let syllabic = 'single'; @@ -29749,9 +30486,9 @@ class SmoToXml { } smoState.lyricState[lyric.verse] = syllabic; const lyricElement = nn(noteElement, 'lyric', null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttribute(lyricElement, 'number', lyric.verse + 1); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttribute(lyricElement, 'placement', 'below'); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttribute(lyricElement, 'default-y', -80 - 10 * lyric.verse); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttribute(lyricElement, 'number', lyric.verse + 1); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttribute(lyricElement, 'placement', 'below'); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttribute(lyricElement, 'default-y', -80 - 10 * lyric.verse); nn(lyricElement, 'syllabic', syllabic, ''); nn(lyricElement, 'text', lyric.getText(), ''); }); @@ -29762,7 +30499,7 @@ class SmoToXml { * @param smoState */ static note(measureElement, measure, note, smoState) { - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; let i = 0; for (i = 0; i < note.pitches.length; ++i) { let j = 0; @@ -29784,15 +30521,15 @@ class SmoToXml { } const duration = note.tickCount; smoState.measureTicks += duration; - const tuplet = measure.getTupletForNote(note); + const tuplet = _data_tuplet__WEBPACK_IMPORTED_MODULE_7__.SmoTupletTree.getTupletForNoteIndex(measure.tupletTrees, smoState.voiceIndex - 1, smoState.voiceTickIndex); nn(noteElement, 'duration', { duration }, 'duration'); SmoToXml.tie(noteElement, smoState); nn(noteElement, 'voice', { voice: smoState.voiceIndex }, 'voice'); - let typeTickCount = note.tickCount; - if (tuplet) { - typeTickCount = tuplet.stemTicks; - } - nn(noteElement, 'type', { type: _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.closestStemType(typeTickCount) }, 'type'); + let typeTickCount = note.stemTicks; + // if (tuplet) { + // typeTickCount = tuplet.stemTicks; + // } + nn(noteElement, 'type', { type: _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.closestStemType(typeTickCount) }, 'type'); const dots = _data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.smoTicksToVexDots(note.tickCount); for (j = 0; j < dots; ++j) { nn(noteElement, 'dot', null, ''); @@ -29800,7 +30537,7 @@ class SmoToXml { // time modification (tuplet) comes before notations which have tuplet beaming rules // also before stem if (tuplet) { - SmoToXml.tupletTime(noteElement, tuplet, smoState); + SmoToXml.tupletTime(noteElement, note, measure, smoState); } if (note.flagState === _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.flagStates.up) { nn(noteElement, 'stem', { direction: 'up' }, 'direction'); @@ -29822,7 +30559,7 @@ class SmoToXml { } SmoToXml.tied(notationsElement, smoState); if (tuplet) { - SmoToXml.tupletNotation(notationsElement, tuplet, note); + SmoToXml.tupletNotation(notationsElement, note, measure, smoState); } const ornaments = note.getOrnaments(); if (ornaments.length) { @@ -29831,7 +30568,7 @@ class SmoToXml { ornaments.forEach((ornament) => { if (_data_noteModifiers__WEBPACK_IMPORTED_MODULE_5__.SmoOrnament.xmlOrnaments[ornament.ornament]) { const sub = nn(ornamentsElement, _data_noteModifiers__WEBPACK_IMPORTED_MODULE_5__.SmoOrnament.xmlOrnaments[ornament.ornament], null, ''); - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttribute(sub, 'placement', 'above'); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttribute(sub, 'placement', 'above'); } }); if (ornamentsElement.children.length) { @@ -29878,7 +30615,7 @@ class SmoToXml { return; // no key change } const flats = _data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.getFlatsInKeySignature(measure.keySignature); - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; if (flats > 0) { fifths = -1 * flats; } @@ -29898,7 +30635,7 @@ class SmoToXml { */ static time(attributesElement, smoState) { var _a; - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const staff = smoState.partStaves[smoState.staffPartIx]; const measure = staff.measures[smoState.measureIndex]; const currentTs = (_a = smoState.timeSignature) !== null && _a !== void 0 ? _a : null; @@ -29934,7 +30671,7 @@ class SmoToXml { clefChange = measure.clef; } if (clefChange) { - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const xmlClef = _data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.clefSigns[clefChange]; const clefElement = nn(attributesElement, 'clef', null, ''); nn(clefElement, 'sign', xmlClef.sign, 'sign'); @@ -29944,7 +30681,7 @@ class SmoToXml { if (typeof (xmlClef.octave) !== 'undefined') { nn(clefElement, 'clef-octave-change', xmlClef, 'octave'); } - _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createAttribute(clefElement, 'number', (staffIx + 1).toString()); + _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createAttribute(clefElement, 'number', (staffIx + 1).toString()); } }); } @@ -29954,7 +30691,7 @@ class SmoToXml { * @param smoState */ static attributes(measureElement, measure, smoState) { - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const attributesElement = measureElement.ownerDocument.createElement('attributes'); if (smoState.divisions < 1) { nn(attributesElement, 'divisions', { divisions: 4096 }, 'divisions'); @@ -29976,7 +30713,7 @@ class SmoToXml { static staves(attributesElement, smoState) { const staff = smoState.partStaves[smoState.staffPartIx]; const staffCount = staff.partInfo.stavesAfter > 0 ? 2 : 1; - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; nn(attributesElement, 'staves', { staffCount: staffCount.toString() }, 'staffCount'); } /** @@ -29990,7 +30727,7 @@ class SmoToXml { const measure = staff.measures[smoState.measureIndex]; if (measure.transposeIndex !== smoState.transposeOffset) { smoState.transposeOffset = measure.transposeIndex; - const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_7__.XmlHelpers.createTextElementChild; + const nn = _xmlHelpers__WEBPACK_IMPORTED_MODULE_8__.XmlHelpers.createTextElementChild; const xposeElement = nn(attributesElement, 'transpose', null, ''); const offset = (measure.transposeIndex * -1).toString(); ; @@ -30321,12 +31058,13 @@ class XmlHelpers { rv.tickCount = XmlHelpers.durationFromType(noteNode, def); rv.duration = (divisions / 4096) * rv.tickCount; } + //todo nenad: seems like this is not needed since we keep stemTicks directly on the note object now // If this is a tuplet, we adjust the note duration back to the graphical type // and SMO will create the tuplet after. We keep track of tuplet data though for beaming - if (timeAlteration) { - rv.tickCount = (rv.tickCount * timeAlteration.noteCount) / timeAlteration.noteDuration; - rv.alteration = timeAlteration; - } + // if (timeAlteration) { + // rv.tickCount = (rv.tickCount * timeAlteration.noteCount) / timeAlteration.noteDuration; + // rv.alteration = timeAlteration; + // } return rv; } static getTieData(noteNode, selector, pitchIndex) { @@ -30371,17 +31109,94 @@ class XmlHelpers { }); return rv; } + static getTimeModificationType(noteNode) { + var _a, _b; + const timeModificationNode = noteNode.querySelector('time-modification'); + let xmlTimeModification = null; + if (timeModificationNode) { + const actualNotesNode = timeModificationNode.querySelector('actual-notes'); + const normalNotesNode = timeModificationNode.querySelector('normal-notes'); + const normalTypeNode = timeModificationNode.querySelector('normal-type'); + const noteTypeNode = noteNode.querySelector('type'); + let normalType = null; + if (normalTypeNode) { + normalType = normalTypeNode.textContent ? (_a = XmlHelpers.noteTypesToSmoMap[normalTypeNode.textContent]) !== null && _a !== void 0 ? _a : null : null; + } + else if (noteTypeNode) { + normalType = noteTypeNode.textContent ? (_b = XmlHelpers.noteTypesToSmoMap[noteTypeNode.textContent]) !== null && _b !== void 0 ? _b : null : null; + } + if ((actualNotesNode === null || actualNotesNode === void 0 ? void 0 : actualNotesNode.textContent) && (normalNotesNode === null || normalNotesNode === void 0 ? void 0 : normalNotesNode.textContent) && normalType) { + const actualNotes = parseInt(actualNotesNode.textContent, 10); + const normalNotes = parseInt(normalNotesNode.textContent, 10); + xmlTimeModification = { + actualNotes: actualNotes, + normalNotes: normalNotes, + normalType: normalType + }; + } + } + return xmlTimeModification; + } static getTupletData(noteNode) { const rv = []; - const nNodes = [...noteNode.getElementsByTagName('notations')]; - nNodes.forEach((nNode) => { - const slurNodes = [...nNode.getElementsByTagName('tuplet')]; - slurNodes.forEach((slurNode) => { - const number = parseInt(slurNode.getAttribute('number'), 10); - const type = slurNode.getAttribute('type'); - rv.push({ number, type }); + const timeModification = XmlHelpers.getTimeModificationType(noteNode); + const notationNode = noteNode.querySelector('notations'); + if (notationNode) { + const tupletNodes = [...notationNode.getElementsByTagName('tuplet')]; + tupletNodes.forEach((tupletNode) => { + var _a, _b; + const number = parseInt(tupletNode.getAttribute('number'), 10); + const type = tupletNode.getAttribute('type'); + const xmlTupletType = { + number: number, + type: type, + data: null + }; + if (type === 'start') { + let tupletActual = null; + let tupletNormal = null; + const tupletActualNode = tupletNode.querySelector('tuplet-actual'); + if (tupletActualNode) { + const tupletNumberNode = tupletActualNode.querySelector('tuplet-number'); + const tupletTypeNode = tupletActualNode.querySelector('tuplet-type'); + const tupletTypeContent = tupletTypeNode === null || tupletTypeNode === void 0 ? void 0 : tupletTypeNode.textContent; + const tupletType = tupletTypeContent ? (_a = XmlHelpers.noteTypesToSmoMap[tupletTypeContent]) !== null && _a !== void 0 ? _a : null : null; + if ((tupletNumberNode === null || tupletNumberNode === void 0 ? void 0 : tupletNumberNode.textContent) && tupletType) { + const tupletNumber = parseInt(tupletNumberNode.textContent, 10); + tupletActual = { tupletNumber: tupletNumber, tupletType: tupletType }; + } + } + const tupletNormalNode = tupletNode.querySelector('tuplet-normal'); + if (tupletNormalNode) { + const tupletNumberNode = tupletNormalNode.querySelector('tuplet-number'); + const tupletTypeNode = tupletNormalNode.querySelector('tuplet-type'); + const tupletTypeContent = tupletTypeNode === null || tupletTypeNode === void 0 ? void 0 : tupletTypeNode.textContent; + const tupletType = tupletTypeContent ? (_b = XmlHelpers.noteTypesToSmoMap[tupletTypeContent]) !== null && _b !== void 0 ? _b : null : null; + if ((tupletNumberNode === null || tupletNumberNode === void 0 ? void 0 : tupletNumberNode.textContent) && tupletType) { + const tupletNumber = parseInt(tupletNumberNode.textContent, 10); + tupletNormal = { tupletNumber: tupletNumber, tupletType: tupletType }; + } + } + if (tupletActual && tupletNormal) { + const xmlTupletData = { + stemTicks: tupletActual.tupletType, + numNotes: tupletActual.tupletNumber, + notesOccupied: (tupletActual.tupletType / tupletNormal.tupletType) * tupletNormal.tupletNumber + }; + xmlTupletType.data = xmlTupletData; + } + else if (timeModification) { + const xmlTupletData = { + stemTicks: timeModification.normalType, + numNotes: timeModification.actualNotes, + notesOccupied: timeModification.normalNotes + }; + xmlTupletType.data = xmlTupletData; + } + } + rv.push(xmlTupletType); }); - }); + } return rv; } static articulationsAndOrnaments(noteNode) { @@ -30468,7 +31283,8 @@ XmlHelpers._ticksToNoteTypeMap = _common_serializationHelpers__WEBPACK_IMPORTED_ "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ XmlState: () => (/* binding */ XmlState) +/* harmony export */ XmlState: () => (/* binding */ XmlState), +/* harmony export */ XmlTupletStateTreeNode: () => (/* binding */ XmlTupletStateTreeNode) /* harmony export */ }); /* harmony import */ var _xmlHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./xmlHelpers */ "./src/smo/mxml/xmlHelpers.ts"); /* harmony import */ var _data_scoreModifiers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../data/scoreModifiers */ "./src/smo/data/scoreModifiers.ts"); @@ -30490,6 +31306,12 @@ __webpack_require__.r(__webpack_exports__); +class XmlTupletStateTreeNode { + constructor(tupletState) { + this.tupletState = tupletState; + this.children = []; + } +} /** * Keep state of musical objects while parsing music xml * @category SmoToXml @@ -30518,7 +31340,8 @@ class XmlState { this.verseMap = {}; this.measureNumber = 0; this.formattingManager = new _data_scoreModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoFormattingManager(_data_scoreModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoFormattingManager.defaults); - this.tuplets = {}; + this.completedTupletStates = []; + this.tupletStatesInProgress = {}; this.tickCursor = 0; this.tempo = new _data_measureModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoTempoText(_data_measureModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoTempoText.defaults); this.staffArray = []; @@ -30575,7 +31398,7 @@ class XmlState { if (isNaN(this.measureNumber)) { this.measureNumber = oldMeasure + 1; } - this.tuplets = {}; + this.tupletStatesInProgress = {}; this.tickCursor = 0; this.tempo = _data_measureModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoMeasureModifierBase.deserialize(this.tempo.serialize()); this.tempo.display = false; @@ -30962,65 +31785,129 @@ class XmlState { } }); } - // ### backtrackTuplets - // If we received a tuplet end, go back through the voice - // and construct the SmoTuplet. - backtrackTuplets(voice, tupletNumber, staffId, voiceId) { - const tupletState = this.tuplets[tupletNumber]; - let i = tupletState.start.tick; - const notes = []; - const durationMap = []; - while (i < voice.notes.length) { - const note = voice.notes[i]; - notes.push(note); - if (i === tupletState.start.tick) { - durationMap.push(1.0); - } - else { - const prev = voice.notes[i - 1]; - durationMap.push(note.ticks.numerator / prev.ticks.numerator); - } - i += 1; - } - const tp = _data_tuplet__WEBPACK_IMPORTED_MODULE_6__.SmoTuplet.defaults; - tp.notes = notes; - tp.durationMap = durationMap; - tp.voice = voiceId; - const tuplet = new _data_tuplet__WEBPACK_IMPORTED_MODULE_6__.SmoTuplet(tp); - // Store the tuplet with the staff ID and voice so we - // can add it to the right measure when it's created. - this.completedTuplets.push({ tuplet, staffId, voiceId }); - } // ### updateTupletStates // react to a tuplet start or stop directive + // we need to handle start and stop directives that appear out of order updateTupletStates(tupletInfos, voice, staffIndex, voiceIndex) { + // this.tickCursor; const tick = voice.notes.length - 1; tupletInfos.forEach((tupletInfo) => { + let tupletState = this.tupletStatesInProgress[tupletInfo.number]; + if (tupletState == undefined) { + tupletState = { + start: null, + end: null, + data: null, + }; + this.tupletStatesInProgress[tupletInfo.number] = tupletState; + } if (tupletInfo.type === 'start') { - this.tuplets[tupletInfo.number] = { - start: { staff: staffIndex, measure: this.measureNumber, voice: voiceIndex, tick, pitches: [] }, - end: _xform_selections__WEBPACK_IMPORTED_MODULE_8__.SmoSelector.default + tupletState.start = { + staff: staffIndex, measure: this.measureNumber, voice: voiceIndex, tick, pitches: [] }; + tupletState.data = tupletInfo.data; } else if (tupletInfo.type === 'stop') { - this.tuplets[tupletInfo.number].end = { + tupletState.end = { staff: staffIndex, measure: this.measureNumber, voice: voiceIndex, tick, pitches: [] }; - this.backtrackTuplets(voice, tupletInfo.number, staffIndex, voiceIndex); + } + if (tupletState.start != null && tupletState.end != null) { + this.completedTupletStates.push({ + tupletState: tupletState, + staffId: staffIndex, + voiceId: voiceIndex + }); + delete this.tupletStatesInProgress[tupletInfo.number]; } }); } addTupletsToMeasure(smoMeasure, staffId, voiceId) { - const completed = []; - this.completedTuplets.forEach((tuplet) => { - if (tuplet.voiceId === voiceId && tuplet.staffId === staffId) { - smoMeasure.tuplets.push(tuplet.tuplet); + const tupletStates = this.findAndRemoveCompletedTupletStatesByStaffAndVoice(staffId, voiceId); + const xmlTupletStateTrees = this.buildXmlTupletStateTrees(tupletStates); + const notes = smoMeasure.voices[voiceId].notes; + smoMeasure.tupletTrees = this.buildSmoTupletTreesFromXmlTupletStateTrees(xmlTupletStateTrees, notes); + } + findAndRemoveCompletedTupletStatesByStaffAndVoice(staffId, voiceId) { + const remainingXmlTupletStates = []; + const tupletStatesForReturn = []; + this.completedTupletStates.forEach((completedTupletState) => { + if (completedTupletState.staffId === staffId && completedTupletState.voiceId === voiceId) { + tupletStatesForReturn.push(completedTupletState.tupletState); } else { - completed.push(tuplet); + remainingXmlTupletStates.push(completedTupletState); + } + }); + this.completedTupletStates = remainingXmlTupletStates; + return tupletStatesForReturn; + } + buildXmlTupletStateTrees(tupletStates) { + let sortedTupletStates = this.sortTupletStates(tupletStates); + let roots = []; + let activeNodes = []; + for (let tupletState of sortedTupletStates) { + let node = new XmlTupletStateTreeNode(tupletState); + let placed = false; + while (activeNodes.length > 0) { + let lastNode = activeNodes[activeNodes.length - 1]; + if (tupletState.start.tick <= lastNode.tupletState.end.tick) { + lastNode.children.push(node); + placed = true; + break; + } + else { + activeNodes.pop(); + } } + if (!placed) { + roots.push(node); + } + activeNodes.push(node); + } + return roots; + } + sortTupletStates(tupletStates) { + return tupletStates.sort((a, b) => { + if (a.start === b.start) { + return a.end.tick - b.end.tick; + } + return a.start.tick - b.start.tick; }); - this.completedTuplets = completed; + } + /** + * Create SmoTuplets out of completedTupletStates + */ + buildSmoTupletTreesFromXmlTupletStateTrees(xmlTupletStateTrees, notes) { + const smoTupletTrees = []; + const traverseXmlTupletStateTree = (xmlTupletStateTreeNode) => { + const smoTupletParams = _data_tuplet__WEBPACK_IMPORTED_MODULE_6__.SmoTuplet.defaults; + const xmlTupletState = xmlTupletStateTreeNode.tupletState; + if (xmlTupletState.data) { + smoTupletParams.numNotes = xmlTupletState.data.numNotes; + smoTupletParams.notesOccupied = xmlTupletState.data.notesOccupied; + smoTupletParams.stemTicks = xmlTupletState.data.stemTicks; + } + smoTupletParams.startIndex = xmlTupletState.start.tick; + smoTupletParams.endIndex = xmlTupletState.end.tick; + for (let i = smoTupletParams.startIndex; i <= smoTupletParams.endIndex; i++) { + smoTupletParams.totalTicks += notes[i].tickCount; + } + smoTupletParams.voice = xmlTupletState.start.voice; + const smoTuplet = new _data_tuplet__WEBPACK_IMPORTED_MODULE_6__.SmoTuplet(smoTupletParams); + for (let i = 0; i < xmlTupletStateTreeNode.children.length; i++) { + const childSmoTuplet = traverseXmlTupletStateTree(xmlTupletStateTreeNode.children[i]); + childSmoTuplet.parentTuplet = { id: smoTuplet.attrs.id }; + smoTuplet.childrenTuplets.push(childSmoTuplet); + } + return smoTuplet; + }; + for (let i = 0; i < xmlTupletStateTrees.length; i++) { + const xmlTupletStateTreeNode = xmlTupletStateTrees[i]; + const tuplet = traverseXmlTupletStateTree(xmlTupletStateTreeNode); + smoTupletTrees.push(new _data_tuplet__WEBPACK_IMPORTED_MODULE_6__.SmoTupletTree({ tuplet: tuplet })); + } + return smoTupletTrees; } getSystems() { const rv = []; @@ -31063,6 +31950,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _xform_operations__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../xform/operations */ "./src/smo/xform/operations.ts"); /* harmony import */ var _data_staffModifiers__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../data/staffModifiers */ "./src/smo/data/staffModifiers.ts"); /* harmony import */ var _data_partInfo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../data/partInfo */ "./src/smo/data/partInfo.ts"); +/* harmony import */ var _data_tuplet__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../data/tuplet */ "./src/smo/data/tuplet.ts"); // [Smoosic](https://github.com/AaronDavidNewman/Smoosic) // Copyright (c) Aaron David Newman 2021. /** @@ -31083,6 +31971,7 @@ __webpack_require__.r(__webpack_exports__); + /** * A class that takes a music XML file and outputs a {@link SmoScore} * @category SmoToXml @@ -31235,10 +32124,10 @@ class XmlToSmo { if (slur.position === slur.position_end) { slurPosition = slur.position; } - const slurParams = _xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.getDefaultSlurDirection(score, ss.startSelector, ss.endSelector, slurPosition, slur.orientation); - slur.position = slurParams.position; - slur.position_end = slurParams.position_end; - slur.invert = slurParams.invert; + const slurParams = _xform_operations__WEBPACK_IMPORTED_MODULE_11__.SmoOperation.getDefaultSlurDirection(score, ss.startSelector, ss.endSelector); + slur.position = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_12__.SmoSlur.positions.AUTO; + slur.position_end = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_12__.SmoSlur.positions.AUTO; + slur.orientation = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_12__.SmoSlur.orientations.AUTO; slur.yOffset = slurParams.yOffset; slur.cp1y = slurParams.cp1y; slur.cp2y = slurParams.cp2y; @@ -31678,6 +32567,8 @@ class XmlToSmo { const noteType = restNode.length ? 'r' : 'n'; const durationData = _xmlHelpers__WEBPACK_IMPORTED_MODULE_0__.XmlHelpers.ticksFromDuration(noteElement, divisions, 4096); const tickCount = durationData.tickCount; + //todo nenad: we probably need to handle dotted durations + const stemTicks = _xmlHelpers__WEBPACK_IMPORTED_MODULE_0__.XmlHelpers.durationFromType(noteElement, 4096); if (chordNode.length === 0) { xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed += tickCount; } @@ -31705,6 +32596,7 @@ class XmlToSmo { // If this is a non-grace note, add any grace notes to the note since SMO // treats them as note modifiers noteData.ticks = { numerator: tickCount, denominator: 1, remainder: 0 }; + noteData.stemTicks = stemTicks; noteData.flagState = flagState; noteData.clef = clefString; xmlState.previousNote = new _data_note__WEBPACK_IMPORTED_MODULE_10__.SmoNote(noteData); @@ -31714,7 +32606,7 @@ class XmlToSmo { xmlState.updateDynamics(); ornaments.forEach((ornament) => { if (ornament.ctor === 'SmoOrnament') { - xmlState.previousNote.toggleOrnament(ornament); + xmlState.previousNote.setOrnament(ornament, true); } else if (ornament.ctor === 'SmoArticulation') { xmlState.previousNote.toggleArticulation(ornament); @@ -31753,6 +32645,7 @@ class XmlToSmo { xmlState.updateSlurStates(slurInfos); xmlState.updateTieStates(tieInfos); voice.notes.push(xmlState.previousNote); + //todo nenad: check if we need to change something with 'alteration' xmlState.updateBeamState(beamState, durationData.alteration, voice, voiceIndex); xmlState.updateTupletStates(tupletInfos, voice, staffIndex, voiceIndex); } @@ -31852,14 +32745,16 @@ class XmlToSmo { // voices not in array, put them in an array Object.keys(staffData.voices).forEach((voiceKey) => { const voice = staffData.voices[voiceKey]; - xmlState.addTupletsToMeasure(smoMeasure, staffData.clefInfo.staffId, parseInt(voiceKey, 10)); voice.notes.forEach((note) => { if (!note.clef) { note.clef = smoMeasure.clef; } }); smoMeasure.voices.push(voice); + const voiceId = smoMeasure.voices.length - 1; + xmlState.addTupletsToMeasure(smoMeasure, staffData.clefInfo.staffId, voiceId); }); + _data_tuplet__WEBPACK_IMPORTED_MODULE_14__.SmoTupletTree.syncTupletIds(smoMeasure.tupletTrees, smoMeasure.voices); if (smoMeasure.voices.length === 0) { smoMeasure.voices.push({ notes: _data_measure__WEBPACK_IMPORTED_MODULE_6__.SmoMeasure.getDefaultNotes(smoMeasure) }); } @@ -31904,6 +32799,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _data_staffModifiers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../data/staffModifiers */ "./src/smo/data/staffModifiers.ts"); /* harmony import */ var _data_music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../data/music */ "./src/smo/data/music.ts"); /* harmony import */ var _data_measureModifiers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data/measureModifiers */ "./src/smo/data/measureModifiers.ts"); +/* harmony import */ var _data_tuplet__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/tuplet */ "./src/smo/data/tuplet.ts"); // [Smoosic](https://github.com/AaronDavidNewman/Smoosic) // Copyright (c) Aaron David Newman 2021. @@ -31912,6 +32808,7 @@ __webpack_require__.r(__webpack_exports__); + /** * Convert a score into a JSON structure that can be rendered to audio. * the return value looks like this: @@ -32359,14 +33256,14 @@ class SmoAudioScore { // update staff features of slur/tie/cresc. this.getSlurInfo(track, selection); this.getHairpinInfo(track, selection); - const tuplet = measure.getTupletForNote(note); - if (tuplet && tuplet.getIndexOfNote(note) === 0) { + const tuplet = _data_tuplet__WEBPACK_IMPORTED_MODULE_5__.SmoTupletTree.getTupletForNoteIndex(measure.tupletTrees, voiceIx, noteIx); + if (tuplet && tuplet.startIndex === noteIx) { tupletTicks = tuplet.tickCount / this.timeDiv; } if (tupletTicks) { // tuplet likely won't fit evenly in ticks, so // use remainder in last tuplet note. - if (tuplet && tuplet.getIndexOfNote(note) === tuplet.notes.length - 1) { + if (tuplet && tuplet.endIndex === noteIx) { duration = tupletTicks; tupletTicks = 0; } @@ -32424,12 +33321,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ SmoBeamGroup: () => (/* binding */ SmoBeamGroup), /* harmony export */ SmoBeamer: () => (/* binding */ SmoBeamer) /* harmony export */ }); -/* harmony import */ var _data_music__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../data/music */ "./src/smo/data/music.ts"); -/* harmony import */ var _data_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../data/common */ "./src/smo/data/common.ts"); -/* harmony import */ var _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../common/serializationHelpers */ "./src/common/serializationHelpers.js"); -// [Smoosic](https://github.com/AaronDavidNewman/Smoosic) -// Copyright (c) Aaron David Newman 2021. - +/* harmony import */ var _data_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../data/common */ "./src/smo/data/common.ts"); +/* harmony import */ var _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../common/serializationHelpers */ "./src/common/serializationHelpers.js"); /** @@ -32442,9 +33335,9 @@ class SmoBeamGroup { let i = 0; this.voice = params.voice; this.notes = params.notes; - _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_2__.smoSerialize.vexMerge(this, params); + _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_1__.smoSerialize.vexMerge(this, params); this.attrs = { - id: (0,_data_common__WEBPACK_IMPORTED_MODULE_1__.getId)().toString(), + id: (0,_data_common__WEBPACK_IMPORTED_MODULE_0__.getId)().toString(), type: 'SmoBeamGroup' }; for (i = 0; i < this.notes.length; ++i) { @@ -32475,6 +33368,7 @@ class SmoBeamer { this.measure = measure; this._removeVoiceBeam(measure, voice); this.duration = 0; + this.measureDuration = 0; this.meterNumbers = [measure.timeSignature.actualBeats, measure.timeSignature.beatDuration]; // beam on 1/4 notes in most meter, triple time dotted quarter this.beamBeats = 2 * 2048; @@ -32531,51 +33425,88 @@ class SmoBeamer { } return false; } + allEighth() { + for (var i = 0; i < this.currentGroup.length; ++i) { + const cg = this.currentGroup[i]; + if (cg.tickCount !== 2048) { + return false; + } + } + return true; + } beamNote(tickmap, index, note) { this.beamBeats = note.beamBeats; this.duration += tickmap.deltaMap[index]; + this.measureDuration += tickmap.deltaMap[index]; if (note.noteType === '/') { this._completeGroup(tickmap.voice); this._advanceGroup(); return; } // beam tuplets - if (note.isTuplet) { - const tuplet = this.measure.getTupletForNote(note); - // The underlying notes must have been deleted. - if (!tuplet) { - return; - } - const tupletIndex = tuplet.getIndexOfNote(note); - const ult = tuplet.notes[tuplet.notes.length - 1]; - const first = tuplet.notes[0]; - if (first.endBeam) { - this._advanceGroup(); - return; - } - // is this beamable length-wise - const stemTicks = _data_music__WEBPACK_IMPORTED_MODULE_0__.SmoMusic.closestDurationTickLtEq(note.tickCount) * tuplet.durationMap[tupletIndex]; - if (note.noteType === 'n' && stemTicks < 4096) { - this.currentGroup.push(note); - } - // Ultimate note in tuplet - if (ult.attrs.id === note.attrs.id && !this._isRemainingTicksBeamable(tickmap, index)) { - this._completeGroup(tickmap.voice); - this._advanceGroup(); - } - return; - } + // if (note.isTuplet) { + // const tuplet = this.measure.getTupletForNote(note); + // // The underlying notes must have been deleted. + // if (!tuplet) { + // return; + // } + // const first = tuplet.getFirstNote(); + // if (!first) { + // return; + // } + // const ult = tuplet.getLastNote(); + // if (!ult) { + // return; + // } + // if (first.endBeam) { + // this._advanceGroup(); + // return; + // } + // // is this beamable length-wise + // if (note.noteType === 'n' && note.stemTicks < 4096) { + // this.currentGroup.push(note); + // } + // // Ultimate note in tuplet + // if (ult.attrs.id === note.attrs.id && !this._isRemainingTicksBeamable(tickmap, index)) { + // this._completeGroup(tickmap.voice); + // this._advanceGroup(); + // } + // return; + // } // don't beam > 1/4 note in 4/4 time. Don't beam rests. - if (tickmap.deltaMap[index] >= 4096 || (note.isRest() && this.currentGroup.length === 0)) { + if (note.stemTicks >= 4096 || (note.isRest() && this.currentGroup.length === 0)) { this._completeGroup(tickmap.voice); this._advanceGroup(); return; } + //if areTupletElementsDifferent(noteOne, noteTwo) + //this._completeGroup(tickmap.voice); + //this._advanceGroup(); + if (index > 0 && !SmoBeamer.areTupletElementsTheSame(tickmap.notes[index - 1], tickmap.notes[index])) { + this._completeGroup(tickmap.voice); + this._advanceGroup(); + } this.currentGroup.push(note); if (note.endBeam) { this._completeGroup(tickmap.voice); this._advanceGroup(); } + if (this.measure.timeSignature.actualBeats % 4 === 0) { + if (this.duration < 8192 && this.allEighth()) { + return; + } + else if (this.duration === 8192) { + this._completeGroup(tickmap.voice); + this._advanceGroup(); + } + } + // If we are aligned to a beat on the measure, and we are in common time + if (this.currentGroup.length > 1 && this.measure.timeSignature.beatDuration === 4 && + this.measureDuration % 4096 === 0) { + this._completeGroup(tickmap.voice); + this._advanceGroup(); + return; + } if (this.duration === this.beamBeats) { this._completeGroup(tickmap.voice); this._advanceGroup(); @@ -32586,6 +33517,18 @@ class SmoBeamer { this._advanceGroup(); } } + static areTupletElementsTheSame(noteOne, noteTwo) { + if (typeof (noteOne.tupletId) === 'undefined' && typeof (noteTwo.tupletId) === 'undefined') { + return true; + } + if (noteOne.tupletId === null && noteTwo.tupletId === null) { + return true; + } + if (noteOne.isTuplet && noteTwo.isTuplet && noteOne.tupletId == noteTwo.tupletId) { + return true; + } + return false; + } } @@ -32610,6 +33553,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _data_music__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/music */ "./src/smo/data/music.ts"); /* harmony import */ var _render_sui_svgHelpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../render/sui/svgHelpers */ "./src/render/sui/svgHelpers.ts"); /* harmony import */ var _data_common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/common */ "./src/smo/data/common.ts"); +/* harmony import */ var _tickDuration__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tickDuration */ "./src/smo/xform/tickDuration.ts"); // [Smoosic](https://github.com/AaronDavidNewman/Smoosic) // Copyright (c) Aaron David Newman 2021. @@ -32620,6 +33564,7 @@ __webpack_require__.r(__webpack_exports__); + /** * PasteBuffer holds copied music, and handles the action of pasting the music to * a different point in the score. It does this by serializing the measure(s) from the source @@ -32629,12 +33574,12 @@ __webpack_require__.r(__webpack_exports__); class PasteBuffer { constructor() { this.score = null; - this.tupletNoteMap = {}; this.modifiers = []; this.modifiersToPlace = []; this.destination = _selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.default; this.staffSelectors = []; this.notes = []; + this.totalDuration = 0; this.noteIndex = 0; this.measures = []; this.measureIndex = -1; @@ -32644,6 +33589,13 @@ class PasteBuffer { setScore(score) { this.score = score; } + getCopyBufferTickCount() { + let rv = 0; + this.notes.forEach((note) => { + rv += note.note.tickCount; + }); + return rv; + } setSelections(score, selections) { this.notes = []; this.noteIndex = 0; @@ -32651,22 +33603,22 @@ class PasteBuffer { if (selections.length < 1) { return; } - this.tupletNoteMap = {}; + // this.tupletNoteMap = []; const first = selections[0]; const last = selections[selections.length - 1]; if (!first.note || !last.note) { return; } - const startTuplet = first.measure.getTupletForNote(first.note); - if (startTuplet) { - if (startTuplet.getIndexOfNote(first.note) !== 0) { - return; // can't paste from the middle of a tuplet + const startTupletTree = _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.getTupletTreeForNoteIndex(first.measure.tupletTrees, first.selector.voice, first.selector.tick); + if (startTupletTree) { + if (startTupletTree.startIndex !== first.selector.tick) { + return; // can't copy from the middle of a tuplet } } - const endTuplet = last.measure.getTupletForNote(last.note); - if (endTuplet) { - if (endTuplet.getIndexOfNote(last.note) !== endTuplet.notes.length - 1) { - return; // can't paste part of a tuplet. + const endTupletTree = _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.getTupletTreeForNoteIndex(last.measure.tupletTrees, last.selector.voice, last.selector.tick); + if (endTupletTree) { + if (endTupletTree.endIndex !== last.selector.tick) { + return; // can't copy part of a tuplet. } } this._populateSelectArray(selections); @@ -32677,7 +33629,6 @@ class PasteBuffer { let selector = _selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.default; this.modifiers = []; selections.forEach((selection) => { - var _a, _b; selector = JSON.parse(JSON.stringify(selection.selector)); const mod = selection.staff.getModifiersAt(selector); if (mod.length) { @@ -32687,30 +33638,28 @@ class PasteBuffer { this.modifiers.push(cp); }); } - const isTuplet = (_b = (_a = selection === null || selection === void 0 ? void 0 : selection.note) === null || _a === void 0 ? void 0 : _a.isTuplet) !== null && _b !== void 0 ? _b : false; - // We store copy in concert pitch. The originalKey is the original key of the copy. - // the destKey is the originalKey in concert pitch. - const originalKey = selection.measure.keySignature; - const keyOffset = -1 * selection.measure.transposeIndex; - const destKey = _data_music__WEBPACK_IMPORTED_MODULE_5__.SmoMusic.vexKeySignatureTranspose(originalKey, keyOffset).toLocaleLowerCase(); - if (isTuplet) { - const tuplet = selection.measure.getTupletForNote(selection.note); - const index = tuplet.getIndexOfNote(selection.note); - if (index === 0) { - const tupletNotes = tuplet.notes; - const ntuplet = _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTuplet.cloneTuplet(tuplet, tupletNotes); - this.tupletNoteMap[ntuplet.id] = ntuplet; - ntuplet.notes.forEach((nnote) => { - const xposeNote = _data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.transpose(_data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.clone(nnote), [], -1 * selection.measure.transposeIndex, selection.measure.keySignature, destKey); - this.notes.push({ selector, note: xposeNote, originalKey: destKey }); - selector = JSON.parse(JSON.stringify(selector)); - selector.tick += 1; - }); - } - } - else if (selection.note) { + if (selection.note) { + // We store copy in concert pitch. The originalKey is the original key of the copy. + // the destKey is the originalKey in concert pitch. + const originalKey = selection.measure.keySignature; + const keyOffset = -1 * selection.measure.transposeIndex; + const destKey = _data_music__WEBPACK_IMPORTED_MODULE_5__.SmoMusic.vexKeySignatureTranspose(originalKey, keyOffset).toLocaleLowerCase(); const note = _data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.transpose(_data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.clone(selection.note), [], keyOffset, selection.measure.keySignature, destKey); - this.notes.push({ selector, note, originalKey: destKey }); + const pasteNote = { + selector, + note, + originalKey: destKey, + tupletStart: null + }; + if (selection.note.isTuplet) { + const tupletTree = _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.getTupletTreeForNoteIndex(selection.measure.tupletTrees, selection.selector.voice, selection.selector.tick); + //const index = tuplet.getIndexOfNote(selection.note); + if (tupletTree && tupletTree.startIndex === selection.selector.tick) { + pasteNote.tupletStart = _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.clone(tupletTree); + } + } + this.notes.push(pasteNote); + this.totalDuration += note.tickCount; } }); this.notes.sort((a, b) => _selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.gt(a.selector, b.selector) ? 1 : -1); @@ -32726,42 +33675,81 @@ class PasteBuffer { const rv = this.modifiers.filter((mod) => _selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.eq(selector, mod.endSelector)); return (typeof (rv) !== 'undefined' && rv.length) ? rv[0] : null; } - // ### _populateMeasureArray + _alignVoices(measure, voiceIndex) { + while (measure.voices.length <= voiceIndex) { + measure.populateVoice(measure.voices.length); + } + } // Before pasting, populate an array of existing measures from the paste destination // so we know how to place the notes. - _populateMeasureArray() { - if (!this.score || !this.destination) { - return; - } - let measureSelection = _selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelection.measureSelection(this.score, this.destination.staff, this.destination.measure); + _populateMeasureArray(selector) { + let measureSelection = _selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelection.measureSelection(this.score, selector.staff, selector.measure); if (!measureSelection) { return; } const measure = measureSelection.measure; - while (measure.voices.length <= this.destination.voice) { - measure.populateVoice(measure.voices.length); - } - const tickmap = measure.tickmapForVoice(this.destination.voice); - let currentDuration = tickmap.durationMap[this.destination.tick]; + this._alignVoices(measure, selector.voice); this.measures = []; this.staffSelectors = []; - this.measures.push(measure); - this.notes.forEach((selection) => { - if (currentDuration + selection.note.tickCount > tickmap.totalDuration && measureSelection !== null) { + const clonedMeasure = _data_measure__WEBPACK_IMPORTED_MODULE_2__.SmoMeasure.clone(measureSelection.measure); + clonedMeasure.svg = measureSelection.measure.svg; + this.measures.push(clonedMeasure); + const firstMeasure = this.measures[0]; + const tickmapForFirstMeasure = firstMeasure.tickmapForVoice(selector.voice); + let currentDuration = tickmapForFirstMeasure.durationMap[selector.tick]; + const measureTotalDuration = tickmapForFirstMeasure.totalDuration; + for (let i = 0; i < this.notes.length; i++) { + const selection = this.notes[i]; + if (selection.tupletStart) { + // const tupletTree: SmoTupletTree | null = SmoTupletTree.getTupletTreeForNoteIndex(this.tupletNoteMap, selection.selector.voice, selection.selector.tick); + if (currentDuration + selection.tupletStart.totalTicks > measureTotalDuration && measureSelection !== null) { + //if tuplet does not fit in a measure as a whole we cannot paste it, it is ether the whole thing or nothing + //reset everything that has been changed so far and return + this.measures = []; + this.staffSelectors = []; + return; + } + } + if (currentDuration + selection.note.tickCount > measureTotalDuration && measureSelection !== null) { // If this note will overlap the measure boundary, the note will be split in 2 with the // remainder going to the next measure. If they line up exactly, the remainder is 0. - const remainder = (currentDuration + selection.note.tickCount) - tickmap.totalDuration; + const remainder = (currentDuration + selection.note.tickCount) - measureTotalDuration; currentDuration = remainder; measureSelection = _selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelection.measureSelection(this.score, measureSelection.selector.staff, measureSelection.selector.measure + 1); // If the paste buffer overlaps the end of the score, we can't paste (TODO: add a measure in this case) if (measureSelection != null) { - this.measures.push(measureSelection.measure); + const clonedMeasure = _data_measure__WEBPACK_IMPORTED_MODULE_2__.SmoMeasure.clone(measureSelection.measure); + clonedMeasure.svg = measureSelection.measure.svg; + this.measures.push(clonedMeasure); + // firstMeasureTickmap = measureSelection.measure.tickmapForVoice(selector.voice); } } else if (measureSelection != null) { currentDuration += selection.note.tickCount; } - }); + } + const lastMeasure = this.measures[this.measures.length - 1]; + //adjust the beginning of the paste + //adjust this.destination if beginning of the paste is in the middle of a tuplet + //set destination to have a tick index of the first note in the tuplet + this.destination = selector; + const firstTupletTree = _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.getTupletForNoteIndex(firstMeasure.tupletTrees, selector.voice, selector.tick); + if (firstTupletTree) { + this.destination.tick = firstTupletTree.startIndex; //use this as a new selector.tick + } + if (this.measures.length > 1) { + this._removeOverlappingTuplets(firstMeasure, selector.tick, firstMeasure.voices[selector.voice].notes.length - 1, selector.voice); + this._removeOverlappingTuplets(lastMeasure, 0, lastMeasure.getClosestIndexFromTickCount(selector.voice, currentDuration), selector.voice); + } + else { + this._removeOverlappingTuplets(firstMeasure, selector.tick, lastMeasure.getClosestIndexFromTickCount(selector.voice, currentDuration), selector.voice); + } + //if there are more than 2 measures remove tuplets from all but first and last measure. + if (this.measures.length > 2) { + for (let i = 1; i < this.measures.length - 2; i++) { + this.measures[i].tupletTrees = []; + } + } } // ### _populatePre // When we paste, we replace entire measures. Populate the first measure up until the start of pasting. @@ -32769,56 +33757,25 @@ class PasteBuffer { const voice = { notes: [] }; - let i = 0; - let j = 0; - let ticksToFill = tickmap.durationMap[startTick]; - // TODO: bug here, need to handle tuplets in pre-part, create new tuplet - for (i = 0; i < measure.voices[voiceIndex].notes.length; ++i) { + for (let i = 0; i < startTick; i++) { const note = measure.voices[voiceIndex].notes[i]; - // If this is a tuplet, clone all the notes at once. - if (note.isTuplet && ticksToFill >= note.tickCount) { - const tuplet = measure.getTupletForNote(note); - if (!tuplet) { - continue; // we remove the tuplet after first iteration - } - const ntuplet = _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTuplet.cloneTuplet(tuplet, tuplet.notes); - voice.notes = voice.notes.concat(ntuplet.notes); - measure.removeTupletForNote(note); - measure.tuplets.push(ntuplet); - ticksToFill -= tuplet.tickCount; - } - else if (ticksToFill >= note.tickCount) { - ticksToFill -= note.tickCount; - voice.notes.push(_data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.clone(note)); - } - else { - const duration = note.tickCount - ticksToFill; - const durMap = _data_music__WEBPACK_IMPORTED_MODULE_5__.SmoMusic.gcdMap(duration); - for (j = 0; j < durMap.length; ++j) { - const dd = durMap[j]; - _data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.cloneWithDuration(note, { - numerator: dd, - denominator: 1, - remainder: 0 - }); - } - ticksToFill = 0; - } - if (ticksToFill < 1) { - break; - } + voice.notes.push(_data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.clone(note)); } return voice; } + /** + * + * @param voiceIndex + */ // ### _populateVoice // ### Description: // Create a new voice for a new measure in the paste destination - _populateVoice(voiceIndex) { - this._populateMeasureArray(); + _populateVoice() { + // this._populateMeasureArray(); const measures = this.measures; let measure = measures[0]; let tickmap = measure.tickmapForVoice(this.destination.voice); - let voice = this._populatePre(voiceIndex, measure, this.destination.tick, tickmap); + let voice = this._populatePre(this.destination.voice, measure, this.destination.tick, tickmap); let startSelector = JSON.parse(JSON.stringify(this.destination)); this.measureIndex = 0; const measureVoices = []; @@ -32839,7 +33796,7 @@ class PasteBuffer { startSelector = { staff: startSelector.staff, measure: startSelector.measure, - voice: voiceIndex, + voice: this.destination.voice, tick: 0 }; this.measureIndex += 1; @@ -32849,7 +33806,7 @@ class PasteBuffer { break; } } - this._populatePost(voice, voiceIndex, measure, tickmap); + this._populatePost(voice, this.destination.voice, measure, tickmap); return measureVoices; } static _countTicks(voice) { @@ -32884,20 +33841,36 @@ class PasteBuffer { } } /** - * Figure out if the tuplet overlaps an existing tuplet in the target measure - * @param t1 + * * @param measure - * @returns - */ - static tupletOverlapIndex(t1, measure) { - for (var i = 0; i < measure.tuplets.length; ++i) { - const tt = measure.tuplets[i]; - // TODO: what about other kinds of overlap? - if (tt.startIndex === t1.startIndex) { - return i; + * @param startIndex + * @param endIndex + * @param voiceIndex + * @private + */ + _removeOverlappingTuplets(measure, startIndex, endIndex, voiceIndex) { + const tupletsToDelete = []; + for (let i = 0; i < measure.tupletTrees.length; ++i) { + const tupletTree = measure.tupletTrees[i]; + if (startIndex >= tupletTree.startIndex && startIndex <= tupletTree.endIndex) { + tupletsToDelete.push(tupletTree); + break; + } + if (endIndex >= tupletTree.startIndex && endIndex <= tupletTree.endIndex) { + tupletsToDelete.push(tupletTree); + break; } } - return -1; + //todo: check if we need to remove tuplets in descending order + for (let i = 0; i < tupletsToDelete.length; i++) { + const tupletTree = tupletsToDelete[i]; + _tickDuration__WEBPACK_IMPORTED_MODULE_8__.SmoUnmakeTupletActor.apply({ + startIndex: tupletTree.startIndex, + endIndex: tupletTree.endIndex, + measure: measure, + voice: voiceIndex + }); + } } /** * Start copying the paste buffer into the destination by copying the notes and working out @@ -32928,29 +33901,17 @@ class PasteBuffer { _data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.transpose(note, pitchAr, measure.transposeIndex, selection.originalKey, measure.keySignature); } this._populateModifier(selection.selector, startSelector, this.score.staves[selection.selector.staff]); - if (note.isTuplet && note.tupletId) { - const tuplet = this.tupletNoteMap[note.tupletId]; - const ntuplet = _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTuplet.cloneTuplet(tuplet, tuplet.notes); - ntuplet.startIndex = voice.notes.length; - this.noteIndex += ntuplet.notes.length; - startSelector.tick += ntuplet.notes.length; - currentDuration += tuplet.tickCount; - for (i = 0; i < ntuplet.notes.length; ++i) { - const tn = ntuplet.notes[i]; - tn.clef = measure.clef; - voice.notes.push(tn); - } - const tix = PasteBuffer.tupletOverlapIndex(ntuplet, measure); - // If this is overlapping an existing tuplet in the target measure, replace it - if (tix >= 0) { - measure.tuplets[tix] = ntuplet; - } - else { - measure.tuplets.push(ntuplet); - } - } - else if (currentDuration + note.tickCount <= totalDuration && this.remainder === 0) { + if (currentDuration + note.tickCount <= totalDuration && this.remainder === 0) { // The whole note fits in the measure, paste it. + //If this note is a tuplet, and specifically if it is the beginning of a tuplet, we need to handle it + //NOTE: tuplets never cross measure boundary, we made sure this is handled here: @see this._populateMeasureArray() + if (selection.tupletStart) { + const tupletTree = _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.clone(selection.tupletStart); + const startIndex = voice.notes.length; + const diff = startIndex - tupletTree.startIndex; + _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.adjustTupletIndexes([tupletTree], selection.selector.voice, -1, diff); + measure.tupletTrees.push(tupletTree); + } const nnote = _data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.clone(note); nnote.clef = measure.clef; voice.notes.push(nnote); @@ -32995,47 +33956,36 @@ class PasteBuffer { // When we paste, we replace entire measures. Populate the last measure from the end of paste to the // end of the measure with notes in the existing measure. _populatePost(voice, voiceIndex, measure, tickmap) { - let startTicks = PasteBuffer._countTicks(voice); - let existingIndex = 0; - const totalDuration = tickmap.totalDuration; - while (startTicks < totalDuration) { - // Find the point in the music where the paste area runs out, or as close as we can get. - existingIndex = tickmap.durationMap.indexOf(startTicks); - existingIndex = (existingIndex < 0) ? measure.voices[voiceIndex].notes.length - 1 : existingIndex; + let endOfPasteDuration = PasteBuffer._countTicks(voice); + let existingIndex = measure.getClosestIndexFromTickCount(voiceIndex, endOfPasteDuration); + if (existingIndex > tickmap.durationMap.length - 1) { + return; + } + let existingDuration = tickmap.durationMap[existingIndex]; + let endOfExistingDuration = existingDuration + tickmap.deltaMap[existingIndex]; + let startIndexToAdjustRemainingTuplets = voice.notes.length; + let diffToAdjustRemainingTuplets = startIndexToAdjustRemainingTuplets - existingIndex - 1; + if (Math.round(endOfPasteDuration) < Math.round(endOfExistingDuration)) { + //pasted notes ended somewhere in the middle of an existing note + //we need to remove the existing note and fill in the difference between the end of our pasted note and beginning of the next one const note = measure.voices[voiceIndex].notes[existingIndex]; - if (note.isTuplet) { - const tuplet = measure.getTupletForNote(note); - if (!tuplet) { - throw 'bad tuplet in copy paste'; - } - const ntuplet = _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTuplet.cloneTuplet(tuplet, tuplet.notes); - startTicks += tuplet.tickCount; - voice.notes = voice.notes.concat(ntuplet.notes); - measure.tuplets.push(ntuplet); - measure.removeTupletForNote(note); - } - else { - const ticksLeft = totalDuration - startTicks; - if (ticksLeft >= note.tickCount) { - startTicks += note.tickCount; - voice.notes.push(_data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.clone(note)); - } - else { - const remainder = totalDuration - startTicks; - voice.notes.push(_data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.cloneWithDuration(note, { - numerator: remainder, - denominator: 1, - remainder: 0 - })); - startTicks = totalDuration; - } - } + const lmap = _data_music__WEBPACK_IMPORTED_MODULE_5__.SmoMusic.gcdMap(endOfExistingDuration - endOfPasteDuration); + lmap.forEach((stemTick) => { + const nnote = _data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.cloneWithDuration(note, stemTick); + voice.notes.push(nnote); + }); + diffToAdjustRemainingTuplets += lmap.length; + existingIndex++; + } + _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.adjustTupletIndexes(measure.tupletTrees, voiceIndex, startIndexToAdjustRemainingTuplets, diffToAdjustRemainingTuplets); + for (let i = existingIndex; i < measure.voices[voiceIndex].notes.length - 1; i++) { + voice.notes.push(_data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.clone(measure.voices[voiceIndex].notes[i])); } } - _pasteVoiceSer(ser, vobj, voiceIx) { + _pasteVoiceSer(serializedMeasure, vobj, voiceIx) { const voices = []; let ix = 0; - ser.voices.forEach((vc) => { + serializedMeasure.voices.forEach((vc) => { if (ix !== voiceIx) { voices.push(vc); } @@ -33045,39 +33995,43 @@ class PasteBuffer { ix += 1; }); // If we are pasting into a measure that doesn't contain this voice, add the voice - if (ser.voices.length <= voiceIx) { + if (serializedMeasure.voices.length <= voiceIx) { voices.push(vobj); } - ser.voices = voices; + serializedMeasure.voices = voices; } pasteSelections(selector) { let i = 0; if (this.notes.length < 1) { return; } + if (!this.score) { + return; + } const maxCutVoice = this.notes.map((n) => n.selector.voice).reduce((a, b) => a > b ? a : b); const minCutVoice = this.notes.map((n) => n.selector.voice).reduce((a, b) => a > b ? a : b); const backupNotes = []; this.notes.forEach((bb) => { const note = (_data_note__WEBPACK_IMPORTED_MODULE_1__.SmoNote.deserialize(bb.note.serialize())); const selector = JSON.parse(JSON.stringify(bb.selector)); - backupNotes.push({ note, selector, originalKey: bb.originalKey }); + let tupletStart = bb.tupletStart; + if (tupletStart) { + tupletStart = _data_tuplet__WEBPACK_IMPORTED_MODULE_4__.SmoTupletTree.deserialize(bb.tupletStart.serialize()); + } + backupNotes.push({ note, selector, originalKey: bb.originalKey, tupletStart }); }); - this.destination = selector; - if (minCutVoice === maxCutVoice && minCutVoice > this.destination.voice) { - this.destination.voice = minCutVoice; + if (minCutVoice === maxCutVoice && minCutVoice > selector.voice) { + selector.voice = minCutVoice; } this.modifiersToPlace = []; - if (this.notes.length < 1) { - return; - } - if (!this.score) { - return; - } this.noteIndex = 0; this.measureIndex = -1; this.remainder = 0; - const voices = this._populateVoice(this.destination.voice); + this._populateMeasureArray(selector); + if (this.measures.length === 0) { + return; + } + const voices = this._populateVoice(); const measureSel = JSON.parse(JSON.stringify(this.destination)); const selectors = []; for (i = 0; i < this.measures.length && i < voices.length; ++i) { @@ -33168,6 +34122,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _selections__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./selections */ "./src/smo/xform/selections.ts"); /* harmony import */ var _tickDuration__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./tickDuration */ "./src/smo/xform/tickDuration.ts"); /* harmony import */ var _beamers__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./beamers */ "./src/smo/xform/beamers.ts"); +/* harmony import */ var _data_tuplet__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../data/tuplet */ "./src/smo/data/tuplet.ts"); // [Smoosic](https://github.com/AaronDavidNewman/Smoosic) // Copyright (c) Aaron David Newman 2021. @@ -33181,6 +34136,7 @@ __webpack_require__.r(__webpack_exports__); + /** * SmoOperation is a collection of static methods that operate on/change/transform the music. Most methods * take the score, a selection or selection array, and the parameters of the operation. @@ -33232,20 +34188,6 @@ class SmoOperation { }); }); } - static addRemoveMicrotone(ignore, selections, tone) { - selections.forEach((sel) => { - const note = sel.note; - if (note) { - const oldTone = note.getMicrotone(tone.pitchIndex); - if (oldTone) { - note.removeMicrotone(oldTone); - } - else { - note.addMicrotone(tone); - } - } - }); - } static moveStaffUpDown(score, selection, index) { const index1 = selection.selector.staff; const index2 = selection.selector.staff + index; @@ -33322,14 +34264,13 @@ class SmoOperation { // note, if possible. Works on tuplets also. static doubleDuration(selection) { const note = selection.note; - const measure = selection.measure; - const tuplet = measure.getTupletForNote(note); - if (!tuplet) { - _tickDuration__WEBPACK_IMPORTED_MODULE_9__.SmoDuration.doubleDurationNonTuplet(selection); - } - else { - _tickDuration__WEBPACK_IMPORTED_MODULE_9__.SmoDuration.doubleDurationTuplet(selection); - } + const newStemTicks = note.stemTicks * 2; + _tickDuration__WEBPACK_IMPORTED_MODULE_9__.SmoStretchNoteActor.apply({ + startIndex: selection.selector.tick, + measure: selection.measure, + voice: selection.selector.voice, + newStemTicks: newStemTicks + }); return true; } // ## halveDuration @@ -33340,49 +34281,25 @@ class SmoOperation { const note = selection.note; let divisor = 2; const measure = selection.measure; - const tuplet = measure.getTupletForNote(note); - if (measure.timeSignature.actualBeats % 3 === 0 && note.tickCount === 6144) { - // special behavior, if this is dotted 1/4 in 6/8, split to 3 - divisor = 3; - } - if (!tuplet) { - const nticks = note.tickCount / divisor; - if (!_data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.validDurations[nticks]) { - return; - } - _tickDuration__WEBPACK_IMPORTED_MODULE_9__.SmoContractNoteActor.apply({ - startIndex: selection.selector.tick, - measure: selection.measure, - voice: selection.selector.voice, - newTicks: nticks - }); - _beamers__WEBPACK_IMPORTED_MODULE_10__.SmoBeamer.applyBeams(measure); - } - else { - const startIndex = measure.tupletIndex(tuplet) + tuplet.getIndexOfNote(note); - _tickDuration__WEBPACK_IMPORTED_MODULE_9__.SmoContractTupletActor.apply({ - changeIndex: startIndex, - measure, - voice: selection.selector.voice - }); - } + const newStemTicks = note.stemTicks / divisor; + _tickDuration__WEBPACK_IMPORTED_MODULE_9__.SmoContractNoteActor.apply({ + startIndex: selection.selector.tick, + measure: measure, + voice: selection.selector.voice, + newStemTicks: newStemTicks + }); + _beamers__WEBPACK_IMPORTED_MODULE_10__.SmoBeamer.applyBeams(measure); + return true; } // ## makeTuplet // ## Description // Makes a non-tuplet into a tuplet of equal value. static makeTuplet(selection, numNotes) { - const note = selection.note; - const measure = selection.measure; - if (measure.getTupletForNote(note)) { - return; - } - const nticks = note.tickCount; _tickDuration__WEBPACK_IMPORTED_MODULE_9__.SmoMakeTupletActor.apply({ - index: selection.selector.tick, - totalTicks: nticks, - numNotes, measure: selection.measure, - voice: selection.selector.voice + numNotes: numNotes, + voice: selection.selector.voice, + index: selection.selector.tick }); } static addStaffModifier(selection, modifier) { @@ -33486,22 +34403,18 @@ class SmoOperation { // ## Description // Makes a tuplet into a single with the duration of the whole tuplet static unmakeTuplet(selection) { - const note = selection.note; + const selector = selection.selector; const measure = selection.measure; - if (!measure.getTupletForNote(note)) { - return; - } - const tuplet = measure.getTupletForNote(note); - if (tuplet === null) { + const tuplets = _data_tuplet__WEBPACK_IMPORTED_MODULE_11__.SmoTupletTree.getTupletHierarchyForNoteIndex(measure.tupletTrees, selector.voice, selector.tick); + if (!tuplets.length) { return; } - const startIndex = measure.tupletIndex(tuplet); - const endIndex = tuplet.notes.length + startIndex - 1; + const tuplet = tuplets[0]; _tickDuration__WEBPACK_IMPORTED_MODULE_9__.SmoUnmakeTupletActor.apply({ - startIndex, - endIndex, - measure, - voice: selection.selector.voice + startIndex: tuplet.startIndex, + endIndex: tuplet.endIndex, + measure: measure, + voice: selector.voice }); } // ## dotDuration @@ -33511,14 +34424,14 @@ class SmoOperation { static dotDuration(selection) { const note = selection.note; const measure = selection.measure; - const nticks = _data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.getNextDottedLevel(note.tickCount); - if (nticks === note.tickCount) { + const newStemTicks = _data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.getNextDottedLevel(note.stemTicks); + if (newStemTicks === note.stemTicks) { return; } // Don't dot if the thing on the right of the . is too small - const dotCount = _data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.smoTicksToVexDots(nticks); + const dotCount = _data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.smoTicksToVexDots(newStemTicks); const multiplier = Math.pow(2, dotCount); - const baseDot = _data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.closestDurationTickLtEq(nticks) / (multiplier * 2); + const baseDot = _data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.closestDurationTickLtEq(newStemTicks) / (multiplier * 2); if (baseDot <= 128) { return; } @@ -33526,19 +34439,19 @@ class SmoOperation { if (selection.selector.tick + 1 === selection.measure.voices[selection.selector.voice].notes.length) { return; } - if (selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].tickCount > note.tickCount) { + if (selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].stemTicks > note.stemTicks) { console.log('too long'); return; } // is dot too short? - if (!_data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.validDurations[selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].tickCount / 2]) { + if (!_data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.validDurations[selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].stemTicks / 2]) { return; } _tickDuration__WEBPACK_IMPORTED_MODULE_9__.SmoStretchNoteActor.apply({ startIndex: selection.selector.tick, - measure, + measure: measure, voice: selection.selector.voice, - newTicks: nticks + newStemTicks: newStemTicks }); } // ## undotDuration @@ -33548,15 +34461,15 @@ class SmoOperation { static undotDuration(selection) { const note = selection.note; const measure = selection.measure; - const nticks = _data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.getPreviousDottedLevel(note.tickCount); - if (nticks === note.tickCount) { + const newStemTicks = _data_music__WEBPACK_IMPORTED_MODULE_1__.SmoMusic.getPreviousDottedLevel(note.stemTicks); + if (newStemTicks === note.stemTicks) { return; } _tickDuration__WEBPACK_IMPORTED_MODULE_9__.SmoContractNoteActor.apply({ startIndex: selection.selector.tick, - measure, + measure: measure, voice: selection.selector.voice, - newTicks: nticks + newStemTicks: newStemTicks }); } static transposeScore(score, offset) { @@ -33771,6 +34684,29 @@ class SmoOperation { } } } + static clearAllBeamGroups(score) { + score.staves.forEach((ss) => { + ss.measures.forEach((mm) => { + mm.voices.forEach((vv) => { + const triple = mm.timeSignature.actualBeats % 3 === 0; + vv.notes.forEach((note) => { + note.beamBeats = triple ? score.preferences.defaultTripleDuration : score.preferences.defaultDupleDuration; + note.endBeam = false; + }); + }); + }); + }); + } + static clearBeamGroups(score, selections) { + selections.forEach((ss) => { + if (ss.note) { + const triple = ss.measure.timeSignature.actualBeats % 3 === 0; + const note = ss.note; + note.beamBeats = triple ? score.preferences.defaultTripleDuration : score.preferences.defaultDupleDuration; + note.endBeam = false; + } + }); + } static toggleBeamDirection(selections) { const note0 = selections[0].note; note0.toggleFlagState(); @@ -33779,12 +34715,6 @@ class SmoOperation { note.flagState = note0.flagState; }); } - static toggleOrnament(selection, ornament) { - selection.note.toggleOrnament(ornament); - } - static toggleArticulation(selection, articulation) { - selection.note.toggleArticulation(articulation); - } static addEnding(score, parameters) { let m = 0; let s = 0; @@ -33896,61 +34826,55 @@ class SmoOperation { static addOrReplaceBracket(modifier, fromSelection, toSelection) { fromSelection.staff.addTextBracket(modifier); } - static ritard(fromSelection, toSelection) { + static createRitardBracket(fromSelection, toSelection) { const params = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket.defaults; params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector)); params.endSelector = JSON.parse(JSON.stringify(toSelection.selector)); params.text = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket.RITARD; const modifier = new _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket(params); - fromSelection.staff.addTextBracket(modifier); return modifier; } - static accelerando(fromSelection, toSelection) { + static createAccelerandoBracket(fromSelection, toSelection) { const params = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket.defaults; params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector)); params.endSelector = JSON.parse(JSON.stringify(toSelection.selector)); params.text = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket.ACCEL; const modifier = new _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket(params); - fromSelection.staff.addTextBracket(modifier); return modifier; } - static crescendoBracket(fromSelection, toSelection) { + static createCrescendoBracket(fromSelection, toSelection) { const params = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket.defaults; params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector)); params.endSelector = JSON.parse(JSON.stringify(toSelection.selector)); params.text = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket.CRESCENDO; const modifier = new _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket(params); - fromSelection.staff.addTextBracket(modifier); return modifier; } - static dimenuendo(fromSelection, toSelection) { + static createDimenuendoBracket(fromSelection, toSelection) { const params = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket.defaults; params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector)); params.endSelector = JSON.parse(JSON.stringify(toSelection.selector)); params.text = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket.CRESCENDO; const modifier = new _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffTextBracket(params); - fromSelection.staff.addTextBracket(modifier); return modifier; } - static crescendo(fromSelection, toSelection) { + static createCrescendo(fromSelection, toSelection) { const params = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffHairpin.defaults; params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector)); params.endSelector = JSON.parse(JSON.stringify(toSelection.selector)); params.hairpinType = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffHairpin.types.CRESCENDO; const modifier = new _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffHairpin(params); - fromSelection.staff.addStaffModifier(modifier); return modifier; } - static decrescendo(fromSelection, toSelection) { + static createDecrescendo(fromSelection, toSelection) { const params = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffHairpin.defaults; params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector)); params.endSelector = JSON.parse(JSON.stringify(toSelection.selector)); params.hairpinType = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffHairpin.types.DECRESCENDO; const modifier = new _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoStaffHairpin(params); - fromSelection.staff.addStaffModifier(modifier); return modifier; } - static tie(fromSelection, toSelection) { + static createTie(fromSelection, toSelection) { // By default, just tie all the pitches to all the other pitches in order const lines = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoTie.createLines(fromSelection.note, toSelection.note); const params = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoTie.defaults; @@ -33958,7 +34882,6 @@ class SmoOperation { params.endSelector = toSelection.selector; params.lines = lines; const modifier = new _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoTie(params); - fromSelection.staff.addStaffModifier(modifier); return modifier; } static getSlurDefaultParameters(selections) { @@ -33989,7 +34912,7 @@ class SmoOperation { * @param toSelection * @returns */ - static getDefaultSlurDirection(score, fromSelector, toSelector, forcePosition, forceOrientation) { + static getDefaultSlurDirection(score, fromSelector, toSelector) { const params = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.defaults; const sels = _selections__WEBPACK_IMPORTED_MODULE_8__.SmoSelector.order(fromSelector, toSelector); params.startSelector = JSON.parse(JSON.stringify(sels[0])); @@ -34041,56 +34964,32 @@ class SmoOperation { endDir = fstate; } }); - params.invert = false; + params.orientation = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.orientations.AUTO; + params.position = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.AUTO; + params.position_end = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.AUTO; mixed = Object.keys(dirs).length > 1; // If the notes are beamed together, we assume the beams point in the same direction - if (Object.keys(beamGroups).length < 2) { - mixed = false; - } - if (forcePosition === _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.ABOVE) { - params.position = startDir === _data_note__WEBPACK_IMPORTED_MODULE_2__.SmoNote.flagStates.up ? _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.TOP : _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.HEAD; - params.position_end = endDir === _data_note__WEBPACK_IMPORTED_MODULE_2__.SmoNote.flagStates.up ? _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.TOP : _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.HEAD; - if (startDir === _data_note__WEBPACK_IMPORTED_MODULE_2__.SmoNote.flagStates.up && forceOrientation !== _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.orientations.DOWN) { - params.invert = true; + if (mixed) { + // special case: slur 2 notes, note heads close, connect the note heads + // to keep a flat arc + if (selections.length === 2 && firstGap < 3) { + params.xOffset = 5; } - } - else if (forcePosition === _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.BELOW) { - params.position = startDir === _data_note__WEBPACK_IMPORTED_MODULE_2__.SmoNote.flagStates.up ? _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.HEAD : _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.TOP; - params.position_end = endDir === _data_note__WEBPACK_IMPORTED_MODULE_2__.SmoNote.flagStates.up ? _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.HEAD : _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.TOP; - if (startDir === _data_note__WEBPACK_IMPORTED_MODULE_2__.SmoNote.flagStates.down && forceOrientation !== _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.orientations.UP) { - params.invert = true; + else { + if (firstGap >= 3 || lastGap >= 3) { + params.cp1y = 45; + params.cp2y = 45; + } } } else { - if (mixed) { - // special case: slur 2 notes, note heads close, connect the note heads - // to keep a flat arc - if (selections.length === 2 && firstGap < 3) { - params.position = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.HEAD; - params.position_end = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.HEAD; - params.xOffset = 5; - } - else { - params.position = startDir === _data_note__WEBPACK_IMPORTED_MODULE_2__.SmoNote.flagStates.up ? _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.TOP : _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.HEAD; - params.position_end = endDir === _data_note__WEBPACK_IMPORTED_MODULE_2__.SmoNote.flagStates.up ? _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.TOP : _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.HEAD; - if (firstGap >= 3 || lastGap >= 3) { - params.cp1y = 45; - params.cp2y = 45; - } - } - params.invert = endDir === _data_note__WEBPACK_IMPORTED_MODULE_2__.SmoNote.flagStates.up; + if (firstGap >= 2 || lastGap >= 2) { + params.cp1y = 45; + params.cp2y = 45; + params.yOffset += 10; } - if (!mixed) { - params.position = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.HEAD; - params.position_end = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.HEAD; - if (firstGap >= 2 || lastGap >= 2) { - params.cp1y = 45; - params.cp2y = 45; - params.yOffset += 10; - } - else { - params.yOffset += 10; - } + else { + params.yOffset += 10; } } if (selections.length === 2) { @@ -34098,10 +34997,9 @@ class SmoOperation { } return params; } - static slur(score, fromSelection, toSelection) { - const params = SmoOperation.getDefaultSlurDirection(score, fromSelection.selector, toSelection.selector, _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.positions.AUTO, _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur.orientations.AUTO); + static createSlur(score, fromSelection, toSelection) { + const params = SmoOperation.getDefaultSlurDirection(score, fromSelection.selector, toSelection.selector); const modifier = new _data_staffModifiers__WEBPACK_IMPORTED_MODULE_6__.SmoSlur(params); - fromSelection.staff.addStaffModifier(modifier); return modifier; } static addStaff(score, parameters) { @@ -34277,6 +35175,9 @@ class SmoSelector { static measureSelector(staff, measure) { return { staff, measure, voice: 0, tick: 0, pitches: [] }; } + static fromMeasure(measure) { + return SmoSelector.measureSelector(measure.measureNumber.staffId, measure.measureNumber.localIndex); + } // TODO: tick in selector s/b tickIndex static sameNote(sel1, sel2) { return (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice === sel2.voice @@ -34344,6 +35245,21 @@ class SmoSelector { (selEnd.measure === testSel.measure && testSel.tick <= selEnd.tick); return geStart && leEnd; } + static overlaps(start1, end1, start2, end2) { + if (SmoSelector.contains(start1, start2, end2)) { + return true; + } + if (SmoSelector.contains(end1, start2, end2)) { + return true; + } + if (SmoSelector.contains(start2, start1, end1)) { + return true; + } + if (SmoSelector.contains(end2, start1, end1)) { + return true; + } + return false; + } // create a hashmap key for a single note, used to organize modifiers static selectorNoteKey(selector) { return 'staff-' + selector.staff + '-measure-' + selector.measure + '-voice-' + selector.voice + '-tick-' + selector.tick; @@ -34783,8 +35699,6 @@ class SmoSelection { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ SmoContractNoteActor: () => (/* binding */ SmoContractNoteActor), -/* harmony export */ SmoContractTupletActor: () => (/* binding */ SmoContractTupletActor), -/* harmony export */ SmoDuration: () => (/* binding */ SmoDuration), /* harmony export */ SmoMakeTupletActor: () => (/* binding */ SmoMakeTupletActor), /* harmony export */ SmoStretchNoteActor: () => (/* binding */ SmoStretchNoteActor), /* harmony export */ SmoTickIterator: () => (/* binding */ SmoTickIterator), @@ -34812,108 +35726,6 @@ class TickIteratorBase { return null; } } -/** - * SmoDuration: change the duration of a note, maybe at the expense of some - * other note. - * @category SmoTransform - */ -class SmoDuration { - /** - * doubleDurationNonTuplet - * double the duration of the selection, consuming the next note or - * possibly split it in half and consume that. Simple operation so - * do it inline - * @param selection - * @returns - */ - static doubleDurationNonTuplet(selection) { - const note = selection === null || selection === void 0 ? void 0 : selection.note; - const measure = selection.measure; - if (note === null) { - return; - } - const selector = selection.selector; - const voices = measure === null || measure === void 0 ? void 0 : measure.voices; - const voice = voices[selector.voice]; - const notes = voice === null || voice === void 0 ? void 0 : voice.notes; - let i = 0; - const nticks = { numerator: note.tickCount * 2, denominator: 1, remainder: 0 }; - const replNote = _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.cloneWithDuration(note, nticks); - let ticksUsed = note.tickCount; - const newNotes = []; - for (i = 0; i < selector.tick; ++i) { - newNotes.push(notes[i]); - } - for (i = selector.tick + 1; i < notes.length; ++i) { - const nnote = notes[i]; - ticksUsed += nnote.tickCount; - if (ticksUsed >= nticks.numerator) { - break; - } - } - const remainder = ticksUsed - nticks.numerator; - if (remainder < 0) { - return; - } - newNotes.push(replNote); - if (remainder > 0) { - const lmap = _data_music__WEBPACK_IMPORTED_MODULE_2__.SmoMusic.gcdMap(remainder); - lmap.forEach((duration) => { - newNotes.push(_data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.cloneWithDuration(note, duration)); - }); - } - for (i = i + 1; i < notes.length; ++i) { - newNotes.push(notes[i]); - } - // If any tuplets got removed while extending the notes, - voice.notes = newNotes; - const measureTuplets = []; - const allTuplets = measure === null || measure === void 0 ? void 0 : measure.tuplets; - allTuplets === null || allTuplets === void 0 ? void 0 : allTuplets.forEach((tuplet) => { - const testNotes = measure === null || measure === void 0 ? void 0 : measure.tupletNotes(tuplet); - if ((testNotes === null || testNotes === void 0 ? void 0 : testNotes.length) === tuplet.notes.length) { - measureTuplets.push(tuplet); - } - }); - measure.tuplets = measureTuplets; - } - /** - * double duration, tuplet form. Increase the first selection and consume the - * following note. Also a simple operation - * @param selection - * @returns - */ - static doubleDurationTuplet(selection) { - let i = 0; - const measure = selection.measure; - const note = selection === null || selection === void 0 ? void 0 : selection.note; - if (note === null) { - return; - } - const notes = measure.voices[selection.selector.voice].notes; - const tuplet = measure.getTupletForNote(note); - if (tuplet === null) { - return; - } - const startIndex = selection.selector.tick - tuplet.startIndex; - const startLength = tuplet.notes.length; - tuplet.combine(startIndex, startIndex + 1); - if (tuplet.notes.length >= startLength) { - return; - } - const newNotes = []; - for (i = 0; i < tuplet.startIndex; ++i) { - newNotes.push(notes[i]); - } - tuplet.notes.forEach((note) => { - newNotes.push(note); - }); - for (i = i + tuplet.notes.length + 1; i < notes.length; ++i) { - newNotes.push(notes[i]); - } - measure.voices[selection.selector.voice].notes = newNotes; - } -} /** * SmoTickIterator * this is a local helper class that follows a pattern of iterating of the notes. Most of the @@ -35004,101 +35816,196 @@ class SmoContractNoteActor extends TickIteratorBase { this.startIndex = params.startIndex; this.measure = params.measure; this.voice = params.voice; - this.tickmap = this.measure.tickmapForVoice(this.voice); - this.newTicks = params.newTicks; + this.newStemTicks = params.newStemTicks; } static apply(params) { const actor = new SmoContractNoteActor(params); SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice); } iterateOverTick(note, tickmap, index) { - let i = 0; if (index === this.startIndex) { + let newTicks = { numerator: this.newStemTicks, denominator: 1, remainder: 0 }; + const multiplier = note.tickCount / note.stemTicks; + if (note.isTuplet) { + const numerator = this.newStemTicks * multiplier; + newTicks = { numerator: Math.floor(numerator), denominator: 1, remainder: numerator % 1 }; + } + const replacingNote = _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.cloneWithDuration(note, newTicks, this.newStemTicks); + const oldStemTicks = note.stemTicks; const notes = []; - const noteCount = Math.floor(note.ticks.numerator / this.newTicks); - let remainder = note.ticks.numerator; - /** - * Replace 1 note with noteCOunt notes of newTIcks duration - * old map: - * d . d . . - * new map: - * d d d . . - */ - for (i = 0; i < noteCount; ++i) { - // first note, retain modifiers so clone. Otherwise just - // retain pitches - if (i === 0) { - const nn = _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.clone(note); - nn.ticks = { numerator: this.newTicks, denominator: 1, remainder: 0 }; - notes.push(nn); + const remainderStemTicks = oldStemTicks - this.newStemTicks; + notes.push(replacingNote); + if (remainderStemTicks > 0) { + if (remainderStemTicks < 128) { + return null; } - else { - const nnote = new _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote(_data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.defaults); - nnote.clef = note.clef; - nnote.pitches = JSON.parse(JSON.stringify(note.pitches)); - nnote.ticks = { numerator: this.newTicks, denominator: 1, remainder: 0 }; - nnote.beamBeats = note.beamBeats; + const lmap = _data_music__WEBPACK_IMPORTED_MODULE_2__.SmoMusic.gcdMap(remainderStemTicks); + lmap.forEach((stemTick) => { + const numerator = stemTick * multiplier; + const nnote = _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.cloneWithDuration(note, { numerator: Math.floor(numerator), denominator: 1, remainder: numerator % 1 }, stemTick); notes.push(nnote); - } - remainder = remainder - this.newTicks; + }); } - // make sure remnainder is not too short - if (remainder > 0) { - if (remainder < 128) { - return null; + //accumulate all remainders in the first note + let remainder = 0; + notes.forEach((note) => { + if (note.ticks.remainder > 0) { + remainder += note.ticks.remainder; + note.ticks.remainder = 0; } - const nnote = new _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote(_data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.defaults); - nnote.clef = note.clef; - nnote.pitches = JSON.parse(JSON.stringify(note.pitches)); - nnote.ticks = { numerator: remainder, denominator: 1, remainder: 0 }; - nnote.beamBeats = note.beamBeats; - notes.push(nnote); - } + }); + notes[0].ticks.numerator += Math.round(remainder); + _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTupletTree.adjustTupletIndexes(this.measure.tupletTrees, this.voice, index, notes.length - 1); return notes; } return null; } } /** - * Shrink the duration of a note in a tuplet by creating additional notes + * increase the length of a note, removing future notes in the measure as required * @category SmoTransform */ -class SmoContractTupletActor extends TickIteratorBase { +class SmoStretchNoteActor extends TickIteratorBase { constructor(params) { super(); - this.oldLength = 0; - this.tupletIndex = 0; - this.splitIndex = 0; - this.changeIndex = params.changeIndex; + this.notesToInsert = []; + this.numberOfNotesToDelete = 0; + this.startIndex = params.startIndex; this.measure = params.measure; this.voice = params.voice; - this.tuplet = this.measure.getTupletForNote(this.measure.voices[this.voice].notes[this.changeIndex]); - if (this.tuplet === null) { - return; + this.newStemTicks = params.newStemTicks; + this.notes = this.measure.voices[this.voice].notes; + const originalNote = this.notes[this.startIndex]; + let newTicks = { numerator: this.newStemTicks, denominator: 1, remainder: 0 }; + const multiplier = originalNote.tickCount / originalNote.stemTicks; + if (originalNote.isTuplet) { + const numerator = this.newStemTicks * multiplier; + newTicks = { numerator: Math.floor(numerator), denominator: 1, remainder: numerator % 1 }; + } + const replacingNote = _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.cloneWithDuration(originalNote, newTicks, this.newStemTicks); + let stemTicksUsed = originalNote.stemTicks; + for (let i = this.startIndex + 1; i < this.notes.length; ++i) { + const nnote = this.notes[i]; + //in case notes are part of the tuplet they need to belong to the same tuplet + //this check is only temporarely here, it should never come to this + if (nnote.isTuplet && !this.areNotesInSameTuplet(originalNote, nnote)) { + break; + } + stemTicksUsed += nnote.stemTicks; + ++this.numberOfNotesToDelete; + if (stemTicksUsed >= this.newStemTicks) { + break; + } + } + const remainingAmount = stemTicksUsed - this.newStemTicks; + if (remainingAmount >= 0) { + this.notesToInsert.push(replacingNote); + const lmap = _data_music__WEBPACK_IMPORTED_MODULE_2__.SmoMusic.gcdMap(remainingAmount); + lmap.forEach((stemTick) => { + const numerator = stemTick * multiplier; + const nnote = _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.cloneWithDuration(originalNote, { numerator: Math.floor(numerator), denominator: 1, remainder: numerator % 1 }, stemTick); + this.notesToInsert.push(nnote); + }); + const noteCountDiff = (this.notesToInsert.length - this.numberOfNotesToDelete) - 1; + _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTupletTree.adjustTupletIndexes(this.measure.tupletTrees, this.voice, this.startIndex, noteCountDiff); + //accumulate all remainders in the first note + let remainder = 0; + this.notesToInsert.forEach((note) => { + if (note.ticks.remainder > 0) { + remainder += note.ticks.remainder; + note.ticks.remainder = 0; + } + }); + this.notesToInsert[0].ticks.numerator += Math.round(remainder); + } + } + static apply(params) { + const actor = new SmoStretchNoteActor(params); + SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice); + } + iterateOverTick(note, tickmap, index) { + if (this.startIndex === index && this.notesToInsert.length) { + return this.notesToInsert; + } + else if (index > this.startIndex && this.numberOfNotesToDelete > 0) { + --this.numberOfNotesToDelete; + return []; + } + return null; + } + areNotesInSameTuplet(noteOne, noteTwo) { + if (noteOne.isTuplet && noteTwo.isTuplet && noteOne.tupletId == noteTwo.tupletId) { + return true; } - this.oldLength = this.tuplet.notes.length; - this.tupletIndex = this.measure.tupletIndex(this.tuplet); - this.splitIndex = this.changeIndex - this.tupletIndex; - this.tuplet.split(this.splitIndex); + return false; + } +} +/** + * Turn a tuplet into a non-tuplet of the same length + * @category SmoTransform + * + * */ +class SmoMakeTupletActor extends TickIteratorBase { + constructor(params) { + super(); + this.measure = params.measure; + this.index = params.index; + this.voice = params.voice; + this.numNotes = params.numNotes; } static apply(params) { - const actor = new SmoContractTupletActor(params); + const actor = new SmoMakeTupletActor(params); SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice); } iterateOverTick(note, tickmap, index) { - if (this.tuplet === null) { + if (this.measure === null) { + return []; + } + if (index !== this.index) { return null; } - if (index < this.tupletIndex) { - return note; + this.measure.clearBeamGroups(); + const stemTicks = _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTuplet.calculateStemTicks(note.stemTicks, this.numNotes); + const notesOccupied = note.stemTicks / stemTicks; + const tuplet = new _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTuplet({ + numNotes: this.numNotes, + notesOccupied: notesOccupied, + stemTicks: stemTicks, + totalTicks: note.tickCount, + ratioed: false, + bracketed: true, + voice: this.voice, + startIndex: this.index, + endIndex: this.index, + }); + const tupletNotes = this._generateNotesForTuplet(tuplet, note, stemTicks); + tuplet.endIndex += tupletNotes.length - 1; + _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTupletTree.adjustTupletIndexes(this.measure.tupletTrees, this.voice, index, tupletNotes.length - 1); + const parentTuplet = _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTupletTree.getTupletForNoteIndex(this.measure.tupletTrees, this.voice, this.index); + if (parentTuplet === null) { + const tupletTree = new _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTupletTree({ tuplet: tuplet }); + this.measure.tupletTrees.push(tupletTree); } - if (index >= this.tupletIndex + this.oldLength) { - return note; + else { + parentTuplet.childrenTuplets.push(tuplet); } - if (index === this.changeIndex) { - return this.tuplet.notes; + return tupletNotes; + } + _generateNotesForTuplet(tuplet, originalNote, stemTicks) { + const totalTicks = originalNote.tickCount; + const tupletNotes = []; + const numerator = totalTicks / this.numNotes; + for (let i = 0; i < this.numNotes; ++i) { + const note = _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.cloneWithDuration(originalNote, { numerator: Math.floor(numerator), denominator: 1, remainder: 0 }, stemTicks); + // Don't clone modifiers, except for first one. + note.textModifiers = i === 0 ? note.textModifiers : []; + note.tupletId = tuplet.attrs.id; + tupletNotes.push(note); } - return []; + if (numerator % 1) { + tupletNotes[0].ticks.numerator += 1; + } + return tupletNotes; } } /** @@ -35124,177 +36031,20 @@ class SmoUnmakeTupletActor extends TickIteratorBase { return null; } if (index === this.startIndex) { - const tuplet = this.measure.getTupletForNote(note); + const tuplet = _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTupletTree.getTupletForNoteIndex(this.measure.tupletTrees, this.voice, index); if (tuplet === null) { return []; } const ticks = tuplet.totalTicks; const nn = _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.cloneWithDuration(note, { numerator: ticks, denominator: 1, remainder: 0 }); nn.tupletId = null; - this.measure.removeTupletForNote(note); + _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTupletTree.removeTupletForNoteIndex(this.measure, this.voice, index); + _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTupletTree.adjustTupletIndexes(this.measure.tupletTrees, this.voice, this.startIndex, this.startIndex - this.endIndex); return [nn]; } return []; } } -/** - * Turn a tuplet into a non-tuplet of the same length - * @category SmoTransform - * - * */ -class SmoMakeTupletActor extends TickIteratorBase { - constructor(params) { - let i = 0; - super(); - this.measure = params.measure; - this.numNotes = params.numNotes; - this.durationMap = []; - this.totalTicks = params.totalTicks; - this.voice = params.voice; - this.index = params.index; - for (i = 0; i < this.numNotes; ++i) { - this.durationMap.push(1.0); - } - this.stemTicks = _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTuplet.calculateStemTicks(this.totalTicks, this.numNotes); - this.rangeToSkip = this._rangeToSkip(); - this.tuplet = []; - } - static apply(params) { - const actor = new SmoMakeTupletActor(params); - SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice); - } - _rangeToSkip() { - let i = 0; - if (this.measure === null) { - return []; - } - const ticks = this.measure.tickmapForVoice(this.voice); - let accum = 0; - const rv = []; - rv.push(this.index); - for (i = 0; i < ticks.deltaMap.length; ++i) { - if (i >= this.index) { - accum += ticks.deltaMap[i]; - } - if (accum >= this.totalTicks) { - rv.push(i); - break; - } - } - return rv; - } - iterateOverTick(note, tickmap, index) { - let i = 0; - // if our tuplet replaces this note, make sure we make it go away. - if (index > this.index && index <= this.rangeToSkip[1]) { - return []; - } - if (this.measure === null) { - return []; - } - if (index !== this.index) { - return null; - } - for (i = 0; i < this.numNotes; ++i) { - note = _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.cloneWithDuration(note, { numerator: this.stemTicks, denominator: 1, remainder: 0 }); - // Don't clone modifiers, except for first one. - note.textModifiers = i === 0 ? note.textModifiers : []; - this.tuplet.push(note); - } - const tuplet = new _data_tuplet__WEBPACK_IMPORTED_MODULE_1__.SmoTuplet({ - notes: this.tuplet, - stemTicks: this.stemTicks, - totalTicks: this.totalTicks, - ratioed: false, - bracketed: true, - startIndex: index, - durationMap: this.durationMap, - voice: tickmap.voice, - numNotes: this.numNotes - }); - this.measure.tuplets.push(tuplet); - return this.tuplet; - } -} -/** - * increase the length of a note, removing future notes in the measure as required - * @category SmoTransform - */ -class SmoStretchNoteActor extends TickIteratorBase { - constructor(params) { - let mapIx = 0; - let i = 0; - super(); - this.startIndex = params.startIndex; - this.measure = params.measure; - this.voice = params.voice; - this.tickmap = this.measure.tickmapForVoice(this.voice); - this.newTicks = params.newTicks; - this.startTick = this.tickmap.durationMap[this.startIndex]; - const currentTicks = this.tickmap.deltaMap[this.startIndex]; - const endTick = this.tickmap.durationMap[this.startIndex] + this.newTicks; - this.divisor = -1; - this.durationMap = []; - this.skipFromStart = this.startIndex + 1; - this.skipFromEnd = this.startIndex + 1; - this.durationMap.push(this.newTicks); - mapIx = this.tickmap.durationMap.indexOf(endTick); - const remaining = this.tickmap.deltaMap.slice(this.startIndex, this.tickmap.durationMap.length).reduce((accum, x) => x + accum); - if (remaining === this.newTicks) { - mapIx = this.tickmap.deltaMap.length; - } - // If there is no tickable at the end point, try to split the next note - /** - * old map: - * d . d . - * split map: - * d . d d - * new map: - * d . . d - */ - if (mapIx < 0) { - const ndelta = this.tickmap.deltaMap[this.startIndex + 1]; - const needed = this.newTicks - currentTicks; - const exp = ndelta / needed; - // Next tick does not divide evenly into this, or next tick is shorter than this - if (Math.round(ndelta / exp) - ndelta / exp !== 0 || ndelta < 256) { - this.durationMap = []; - } - else if (ndelta / exp + this.startTick + this.newTicks <= this.tickmap.totalDuration) { - this.durationMap.push(ndelta - (ndelta / exp)); - } - else { - // there is no way to do this... - this.durationMap = []; - } - } - else { - // If this note now takes up the space of other notes, remove those notes - for (i = this.startIndex + 1; i < mapIx; ++i) { - this.durationMap.push(0); - } - } - } - static apply(params) { - const actor = new SmoStretchNoteActor(params); - SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice); - } - iterateOverTick(note, tickmap, index) { - if (this.durationMap.length === 0) { - return null; - } - if (index >= this.startIndex && index < this.startIndex + this.durationMap.length) { - const mapIndex = index - this.startIndex; - const ticks = this.durationMap[mapIndex]; - if (ticks === 0) { - return []; - } - note = _data_note__WEBPACK_IMPORTED_MODULE_0__.SmoNote.cloneWithDuration(note, { numerator: ticks, denominator: 1, remainder: 0 }); - return [note]; - } - return null; - } -} /***/ }), @@ -35473,19 +36223,18 @@ class TickMap { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ SmoUndoable: () => (/* binding */ SmoUndoable), /* harmony export */ UndoBuffer: () => (/* binding */ UndoBuffer), +/* harmony export */ UndoSet: () => (/* binding */ UndoSet), /* harmony export */ copyUndo: () => (/* binding */ copyUndo) /* harmony export */ }); /* harmony import */ var _data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../data/staffModifiers */ "./src/smo/data/staffModifiers.ts"); /* harmony import */ var _data_systemStaff__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../data/systemStaff */ "./src/smo/data/systemStaff.ts"); /* harmony import */ var _data_music__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../data/music */ "./src/smo/data/music.ts"); -/* harmony import */ var _operations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./operations */ "./src/smo/xform/operations.ts"); -/* harmony import */ var _data_score__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data/score */ "./src/smo/data/score.ts"); -/* harmony import */ var _data_measure__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/measure */ "./src/smo/data/measure.ts"); -/* harmony import */ var _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../common/serializationHelpers */ "./src/common/serializationHelpers.js"); -/* harmony import */ var _data_scoreText__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/scoreText */ "./src/smo/data/scoreText.ts"); -/* harmony import */ var _selections__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./selections */ "./src/smo/xform/selections.ts"); +/* harmony import */ var _data_score__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../data/score */ "./src/smo/data/score.ts"); +/* harmony import */ var _data_measure__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../data/measure */ "./src/smo/data/measure.ts"); +/* harmony import */ var _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../common/serializationHelpers */ "./src/common/serializationHelpers.js"); +/* harmony import */ var _data_scoreText__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../data/scoreText */ "./src/smo/data/scoreText.ts"); +/* harmony import */ var _selections__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./selections */ "./src/smo/xform/selections.ts"); // [Smoosic](https://github.com/AaronDavidNewman/Smoosic) // Copyright (c) Aaron David Newman 2021. @@ -35496,7 +36245,6 @@ __webpack_require__.r(__webpack_exports__); - function copyUndo(entry) { const obj = { title: entry.title, @@ -35504,7 +36252,6 @@ function copyUndo(entry) { selector: entry.selector, subtype: entry.subtype, grouped: entry.grouped, - firstInGroup: entry.firstInGroup, json: undefined }; if (entry.json) { @@ -35512,12 +36259,33 @@ function copyUndo(entry) { } return obj; } +class UndoSet { + constructor() { + this.buffers = []; + } + get isEmpty() { + return this.buffers.length === 0; + } + push(entry) { + this.buffers.push(entry); + } + pop() { + return this.buffers.pop(); + } + get length() { + return this.buffers.length; + } +} +; /** * manage a set of undo or redo operations on a score. The objects passed into - * undo must implement serialize()/deserialize() - * - * ## Buffer format: - * A buffer is one of 7 things: + * undo must implement serialize()/deserialize(). + * Only one undo buffer is kept for the score. Undo is always done on the stored + * score and translated to the display score. + * UndoBuffer contains an undoEntry array. An undoEntry might contain several + * undo operations, if the were done together as a block. This happens often when + * several changes are made while a dialog box is open. + * an undoEntry is one of 7 things: * * A single measure, * * A single staff * * the whole score @@ -35535,7 +36303,7 @@ class UndoBuffer { return { FIRST: 1, MEASURE: 1, STAFF: 2, SCORE: 3, SCORE_MODIFIER: 4, COLUMN: 5, RECTANGLE: 6, - SCORE_ATTRIBUTES: 7, STAFF_MODIFIER: 8, LAST: 8 + SCORE_ATTRIBUTES: 7, STAFF_MODIFIER: 8, PART_MODIFIER: 9, LAST: 9 }; } static get bufferSubtypes() { @@ -35560,7 +36328,7 @@ class UndoBuffer { constructor() { this.buffer = []; this.reconcile = -1; - this.buffer = []; + this.buffer.push(new UndoSet()); this.opCount = 0; this._grouping = false; } @@ -35570,26 +36338,44 @@ class UndoBuffer { // Allows a set of operations to be bunched into a single group set grouping(val) { if (this._grouping === true && val === false) { - const buf = this.peek(); - // If we have been grouping, indicate that the last buffer is the - // fist part of a group - if (buf) { - buf.firstInGroup = true; - } + const nbuf = new UndoSet(); + this.buffer.push(nbuf); } this._grouping = val; } reset() { this.buffer = []; } - // ### addBuffer - // Description: - // Add the current state of the score required to undo the next operation we - // are about to perform. For instance, if we are adding a crescendo, we back up the - // staff the crescendo will go on. + /** + * return true if any of the last 2 buffers have undo operations. + * @returns + */ + buffersAvailable() { + if (this.buffer.length < 1) { + return false; + } + const lastIx = this.buffer.length - 1; + const penIx = this.buffer.length - 2; + if (lastIx >= 0 && this.buffer[lastIx].length > 0) { + return true; + } + if (penIx >= 0 && this.buffer[penIx].length > 0) { + return true; + } + return false; + } + /** + * Add the current state of the score required to undo the next operation we + * are about to perform. For instance, if we are adding a crescendo, we back up the + * staff the crescendo will go on. + * @param title + * @param type + * @param selector + * @param obj + * @param subtype + */ addBuffer(title, type, selector, obj, subtype) { - let i = 0; - let j = 0; + this.checkNull(); if (typeof (type) !== 'number' || type < UndoBuffer.bufferTypes.FIRST || type > UndoBuffer.bufferTypes.LAST) { throw 'Undo failure: illegal buffer type ' + type; } @@ -35598,15 +36384,14 @@ class UndoBuffer { type, selector, subtype, - grouped: this._grouping, - firstInGroup: false + grouped: this._grouping }; if (type === UndoBuffer.bufferTypes.RECTANGLE) { // RECTANGLE obj is {score, topLeft, bottomRight} // where the last 2 are selectors const measures = []; - for (i = obj.topLeft.staff; i <= obj.bottomRight.staff; ++i) { - for (j = obj.topLeft.measure; j <= obj.bottomRight.measure; ++j) { + for (let i = obj.topLeft.staff; i <= obj.bottomRight.staff; ++i) { + for (let j = obj.topLeft.measure; j <= obj.bottomRight.measure; ++j) { measures.push(UndoBuffer.serializeMeasure(obj.score.staves[i].measures[j])); } } @@ -35616,7 +36401,7 @@ class UndoBuffer { } else if (type === UndoBuffer.bufferTypes.SCORE_ATTRIBUTES) { undoObj.json = {}; - _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_6__.smoSerialize.serializedMerge(_data_score__WEBPACK_IMPORTED_MODULE_4__.SmoScore.preferences, obj, undoObj.json); + _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_5__.smoSerialize.serializedMerge(_data_score__WEBPACK_IMPORTED_MODULE_3__.SmoScore.preferences, obj, undoObj.json); } else if (type === UndoBuffer.bufferTypes.COLUMN) { // COLUMN obj is { score, measureIndex } @@ -35644,67 +36429,164 @@ class UndoBuffer { this.buffer.splice(0, 1); } this.opCount += 1; - this.buffer.push(undoObj); + const buff = this.buffer[this.buffer.length - 1]; + buff.push(undoObj); + if (!this._grouping) { + this.buffer.push(new UndoSet()); + } } - // ### _pop - // ### Description: - // Internal method to pop the top buffer off the stack. - _pop() { - if (this.buffer.length < 1) { - return null; + /** + * Make sure we always have a buffer to record undoable operations + */ + checkNull() { + if (this.buffer.length === 0) { + this.buffer.push(new UndoSet()); } - const buf = this.buffer.pop(); - return buf; } - // ## Before undoing, peek at the top action in the q - // so it can be re-rendered - peek() { - if (this.buffer.length < 1) { - return null; + /** + * Internal method to pop the top buffer off the stack. + * @returns + */ + popUndoSet() { + var _a, _b; + this.checkNull(); + const lastBufIx = this.buffer.length - 1; + if (!this.buffer[lastBufIx].isEmpty) { + return (_a = this.buffer.pop()) !== null && _a !== void 0 ? _a : null; + } + else if (lastBufIx >= 1) { + const buf = this.buffer.splice(lastBufIx - 1, 1); + return (_b = buf[0]) !== null && _b !== void 0 ? _b : null; } - return this.buffer[this.buffer.length - 1]; + return null; } - peekIndex(index) { - if (this.buffer.length - index < 1) { - return null; + /** + * non-destructively get the top undo buffer. + * @returns + */ + peekUndoSet() { + this.checkNull(); + const lastBufIx = this.buffer.length - 1; + if (!this.buffer[lastBufIx].isEmpty) { + return this.buffer[lastBufIx]; } - return this.buffer[this.buffer.length - (1 + index)]; + if (lastBufIx >= 1) { + return this.buffer[lastBufIx - 1]; + } + return null; } - // ## undo - // ## Description: - // Undo the operation at the top of the undo stack. This is done by replacing - // the music as it existed before the change was made. - undo(score, staffMap, pop) { - var _a; - let i = 0; - let j = 0; - let mix = 0; - let buf = null; - let peekIndex = 0; - if (pop) { - buf = this._pop(); + /** + * return the type of the undo operation, so the view can know which + * parts of the score are affected. + * @param func + * @returns + */ + undoTypePeek(func) { + const undoSet = this.peekUndoSet(); + if (!undoSet || undoSet.length === 0) { + return false; } - else { - buf = this.peekIndex(peekIndex); - if (buf) { - buf = copyUndo(buf); + for (let i = 0; i < undoSet.buffers.length; ++i) { + const buf = undoSet.buffers[i]; + if (func(buf)) { + return true; } } - if (!buf) { + return false; + } + undoScorePeek() { + return this.undoTypePeek((buf) => buf.type === UndoBuffer.bufferTypes.SCORE); + } + undoScoreTextGroupPeek() { + return this.undoTypePeek((buf) => buf.type === UndoBuffer.bufferTypes.SCORE_MODIFIER && + buf.json && buf.json.ctor === 'SmoTextGroup'); + } + undoPartTextGroupPeek() { + return this.undoTypePeek((buf) => buf.type === UndoBuffer.bufferTypes.PART_MODIFIER && + buf.json && buf.json.ctor === 'SmoTextGroup'); + } + /** + * Get the range of measures affected by the next undo operation. Only + * makes sense to call this if the undo type is MEASURE or COLUMN + * @returns + */ + getMeasureRange() { + let min = -1; + let max = 0; + const undoSet = this.peekUndoSet(); + if (undoSet) { + for (let i = 0; i < undoSet.buffers.length; ++i) { + const buf = undoSet.buffers[i]; + if (buf.type === UndoBuffer.bufferTypes.STAFF_MODIFIER) { + return [buf.json.startSelector.measure, buf.json.endSelector.measure]; + } + if (buf.type === UndoBuffer.bufferTypes.COLUMN) { + if (min < 0) { + min = buf.json.measureIndex; + } + else { + min = Math.min(min, buf.json.measureIndex); + } + buf.json.measures.forEach((mmjson) => { + max = Math.max(max, mmjson.measureNumber.measureIndex); + }); + } + else { + if (min < 0) { + min = buf.selector.measure; + } + max = Math.max(max, buf.selector.measure); + min = Math.min(min, buf.selector.measure); + } + } + } + return [Math.max(0, min), max]; + } + /** + * Undo for text is different since text is not associated with a specific part of the + * score (usually) + * @param score + * @param staffMap + * @param buf + */ + undoTextGroup(score, staffMap, buf) { + const obj = _data_scoreText__WEBPACK_IMPORTED_MODULE_6__.SmoTextGroup.deserializePreserveId(buf.json); + obj.attrs.id = buf.json.attrs.id; + // undo of add is remove, undo of remove is add. Undo of update is remove and add older version + if (buf.subtype === UndoBuffer.bufferSubtypes.ADD) { + score.removeTextGroup(obj); + } + if (buf.subtype === UndoBuffer.bufferSubtypes.UPDATE || buf.subtype === UndoBuffer.bufferSubtypes.REMOVE) { + score.addTextGroup(obj); + } + } + /** + * Undo the operation at the top of the undo stack. This is done by replacing + * the music as it existed before the change was made. + * @param score + * @param staffMap + * @param pop + * @returns + */ + undo(score, staffMap, pop) { + var _a; + let mix = 0; + let bufset = this.popUndoSet(); + if (!bufset) { return score; } - const grouping = buf.firstInGroup; - while (buf) { + for (let i = 0; i < bufset.buffers.length; ++i) { + const buf = bufset.buffers[bufset.buffers.length - (i + 1)]; if (buf.type === UndoBuffer.bufferTypes.RECTANGLE) { - for (i = buf.json.topLeft.staff; i <= buf.json.bottomRight.staff; ++i) { - for (j = buf.json.topLeft.measure; j <= buf.json.bottomRight.measure; ++j) { - const measure = _data_measure__WEBPACK_IMPORTED_MODULE_5__.SmoMeasure.deserialize(buf.json.measures[mix]); + for (let j = buf.json.topLeft.staff; j <= buf.json.bottomRight.staff; ++j) { + for (let k = buf.json.topLeft.measure; k <= buf.json.bottomRight.measure; ++k) { + const measure = _data_measure__WEBPACK_IMPORTED_MODULE_4__.SmoMeasure.deserialize(buf.json.measures[mix]); mix += 1; - const selector = _selections__WEBPACK_IMPORTED_MODULE_8__.SmoSelector.default; - if (typeof (staffMap[i]) === 'number') { - selector.staff = staffMap[i]; - measure.measureNumber.staffId = staffMap[i]; - selector.measure = j; + const selector = _selections__WEBPACK_IMPORTED_MODULE_7__.SmoSelector.default; + if (typeof (staffMap[j]) === 'number') { + selector.staff = staffMap[j]; + measure.measureNumber.staffId = staffMap[j]; + selector.measure = k; score.replaceMeasure(selector, measure); } } @@ -35712,6 +36594,7 @@ class UndoBuffer { } else if (buf.type === UndoBuffer.bufferTypes.STAFF_MODIFIER) { const modifier = _data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.StaffModifierBase.deserialize(buf.json); + modifier.attrs.id = buf.json.attrs.id; if (typeof (staffMap[modifier.startSelector.staff]) === 'number') { const staff = score.staves[staffMap[modifier.startSelector.staff]]; const existing = staff.getModifier(modifier); @@ -35730,15 +36613,15 @@ class UndoBuffer { } } else if (buf.type === UndoBuffer.bufferTypes.SCORE_ATTRIBUTES) { - _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_6__.smoSerialize.serializedMerge(_data_score__WEBPACK_IMPORTED_MODULE_4__.SmoScore.preferences, buf.json, score); + _common_serializationHelpers__WEBPACK_IMPORTED_MODULE_5__.smoSerialize.serializedMerge(_data_score__WEBPACK_IMPORTED_MODULE_3__.SmoScore.preferences, buf.json, score); } else if (buf.type === UndoBuffer.bufferTypes.COLUMN) { - for (i = 0; i < score.staves.length; ++i) { - const measure = _data_measure__WEBPACK_IMPORTED_MODULE_5__.SmoMeasure.deserialize(buf.json.measures[i]); - const selector = _selections__WEBPACK_IMPORTED_MODULE_8__.SmoSelector.default; - if (typeof (staffMap[i]) === 'number') { - selector.staff = staffMap[i]; - measure.measureNumber.staffId = staffMap[i]; + for (let j = 0; j < score.staves.length; ++j) { + const measure = _data_measure__WEBPACK_IMPORTED_MODULE_4__.SmoMeasure.deserialize(buf.json.measures[j]); + const selector = _selections__WEBPACK_IMPORTED_MODULE_7__.SmoSelector.default; + if (typeof (staffMap[j]) === 'number') { + selector.staff = staffMap[j]; + measure.measureNumber.staffId = staffMap[j]; selector.measure = buf.json.measureIndex; score.replaceMeasure(selector, measure); } @@ -35751,27 +36634,25 @@ class UndoBuffer { const xpose = (_a = buf.json.transposeIndex) !== null && _a !== void 0 ? _a : 0; const concertKey = _data_music__WEBPACK_IMPORTED_MODULE_2__.SmoMusic.vexKeySigWithOffset(buf.json.keySignature, -1 * xpose); buf.json.keySignature = concertKey; - const measure = _data_measure__WEBPACK_IMPORTED_MODULE_5__.SmoMeasure.deserialize(buf.json); + const measure = _data_measure__WEBPACK_IMPORTED_MODULE_4__.SmoMeasure.deserialize(buf.json); measure.measureNumber.staffId = buf.selector.staff; score.replaceMeasure(buf.selector, measure); } } else if (buf.type === UndoBuffer.bufferTypes.SCORE) { // Score expects string, as deserialized score is how saving is done. - score = _data_score__WEBPACK_IMPORTED_MODULE_4__.SmoScore.deserialize(JSON.stringify(buf.json)); + score = _data_score__WEBPACK_IMPORTED_MODULE_3__.SmoScore.deserialize(JSON.stringify(buf.json)); } else if (buf.type === UndoBuffer.bufferTypes.SCORE_MODIFIER) { // Currently only one type like this: SmoTextGroup if (buf.json && buf.json.ctor === 'SmoTextGroup') { - const obj = _data_scoreText__WEBPACK_IMPORTED_MODULE_7__.SmoTextGroup.deserializePreserveId(buf.json); - obj.attrs.id = buf.json.attrs.id; - // undo of add is remove, undo of remove is add. Undo of update is remove and add older version - if (buf.subtype === UndoBuffer.bufferSubtypes.UPDATE || buf.subtype === UndoBuffer.bufferSubtypes.ADD) { - score.removeTextGroup(obj); - } - if (buf.subtype === UndoBuffer.bufferSubtypes.UPDATE || buf.subtype === UndoBuffer.bufferSubtypes.REMOVE) { - score.addTextGroup(obj); - } + this.undoTextGroup(score, staffMap, buf); + } + } + else if (buf.type === UndoBuffer.bufferTypes.PART_MODIFIER) { + if (buf.json && buf.json.ctor === 'SmoTextGroup') { + const part = score.staves[buf.selector.staff].partInfo; + this.undoTextGroup(part, staffMap, buf); } } else { @@ -35781,49 +36662,11 @@ class UndoBuffer { score.replaceStaff(buf.selector.staff, staff); } } - const peekBuf = this.peekIndex(peekIndex + 1); - // If buf is grouped and not the first in the group, also undo the next buffer - if (grouping && peekBuf !== null && peekBuf.grouped && buf.firstInGroup === false) { - // For the backup/full score, we actually pop the buffer. For the visible score, we - // just use copies of the buffer. - if (pop) { - buf = this._pop(); - } - else { - peekIndex += 1; - buf = this.peekIndex(peekIndex); - if (buf) { - buf = copyUndo(buf); - } - } - } - else { - buf = null; - } } return score; } } UndoBuffer.groupCount = 0; -// ## SmoUndoable -// Convenience functions to save the score state before operations so we can undo the operation. -// Each undo-able knows which set of parameters the undo operation requires (measure, staff, score). -class SmoUndoable { - // ### undoScoreObject - // Called when a score object is being modified. There is no need to update the score as it contains a - // reference to the object - static changeTextGroup(score, undoBuffer, object, subtype) { - undoBuffer.addBuffer('modify text', UndoBuffer.bufferTypes.SCORE_MODIFIER, _selections__WEBPACK_IMPORTED_MODULE_8__.SmoSelector.default, object, subtype); - if (subtype === UndoBuffer.bufferSubtypes.REMOVE) { - _operations__WEBPACK_IMPORTED_MODULE_3__.SmoOperation.removeTextGroup(score, object); - } - else if (subtype === UndoBuffer.bufferSubtypes.ADD) { - _operations__WEBPACK_IMPORTED_MODULE_3__.SmoOperation.addTextGroup(score, object); - } - // Update operation, there is nothing to do since the text is already - // part of the score - } -} /***/ }), @@ -42053,19 +42896,24 @@ class ArticulationButtons extends _button__WEBPACK_IMPORTED_MODULE_0__.SuiButton pizzicatoButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoArticulation.articulations.pizzicato, fermataButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoArticulation.articulations.fermata, mordentButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.mordent, - mordentInvertedButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.mordentInverted, + mordentInvertedButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.mordent_inverted, trillButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.trill, + turnButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.turn, + turnInvertedButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.turn_inverted, breathButton: 'breath', caesuraButton: 'caesura', pedalOpenButton: 'pedalOpen', pedalClosedButton: 'pedalClosed', scoopButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.scoop, - dropButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.fall_short, - dropLongButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.dropLong, + dropButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.fall, + dropLongButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.fallLong, doitButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.doit, doitLongButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.doitLong, flipButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.flip, - smearButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.smear + smearButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.smear, + muteOpen: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.plungerOpen, + muteClosed: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.plungerClosed, + bend: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoOrnament.ornaments.bend }; } static get constructors() { @@ -42090,6 +42938,9 @@ class ArticulationButtons extends _button__WEBPACK_IMPORTED_MODULE_0__.SuiButton doitLongButton: 'SmoOrnament', flipButton: 'SmoOrnament', smearButton: 'SmoOrnament', + muteOpen: 'SmoOrnament', + muteClosed: 'SmoOrnament', + bend: 'SmoOrnament' }; } constructor(parameters) { @@ -42324,6 +43175,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ DisplaySettings: () => (/* binding */ DisplaySettings) /* harmony export */ }); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./button */ "./src/ui/buttons/button.ts"); +/* harmony import */ var _dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); +/* harmony import */ var _dialogs_keySignature__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dialogs/keySignature */ "./src/ui/dialogs/keySignature.ts"); +/* harmony import */ var _dialogs_timeSignature__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dialogs/timeSignature */ "./src/ui/dialogs/timeSignature.ts"); +/* harmony import */ var _dialogs_tempo__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dialogs/tempo */ "./src/ui/dialogs/tempo.ts"); var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -42334,6 +43189,10 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume }); }; + + + + /** * These are the quick-buttons that show up on the left of the button ribbon. * @category SuiButton @@ -42341,10 +43200,19 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume class DisplaySettings extends _button__WEBPACK_IMPORTED_MODULE_0__.SuiButton { constructor(parameters) { super(parameters); + this.hotKey = parameters.buttonData.hotKey; if (this.buttonData.id === 'selectPart') { this.eventSource.bindScoreChangeHandler(this, 'handleScoreChange'); this.enablePartSelection(); } + if (this.hotKey) { + this.eventSource.bindKeydownHandler(this, 'handleKeyDown'); + } + } + handleKeyDown(ev) { + if (ev.altKey && this.buttonData.hotKey && this.buttonData.hotKey === ev.key) { + $('#' + this.buttonData.id).trigger('click'); + } } enablePartSelection() { const partMap = this.view.getPartMap(); @@ -42380,14 +43248,59 @@ class DisplaySettings extends _button__WEBPACK_IMPORTED_MODULE_0__.SuiButton { stopButton2() { this.view.stopPlayer(); } + keySignature() { + if (!this.completeNotifier) { + return; + } + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_keySignature__WEBPACK_IMPORTED_MODULE_2__.SuiKeySignatureDialog, { + view: this.view, + completeNotifier: this.completeNotifier, + startPromise: null, + eventSource: this.eventSource, + tracker: this.view.tracker, + ctor: 'SuiKeySignatureDialog', + id: 'key-signature-dialog', + modifier: null + }); + } + ribbonTime() { + if (!this.completeNotifier) { + return; + } + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_timeSignature__WEBPACK_IMPORTED_MODULE_3__.SuiTimeSignatureDialog, { + completeNotifier: this.completeNotifier, + view: this.view, + eventSource: this.eventSource, + id: 'staffGroups', + ctor: 'SuiStaffGroupDialog', + tracker: this.view.tracker, + modifier: null, + startPromise: null + }); + } + ribbonTempo() { + if (!this.completeNotifier) { + return; + } + const tempo = this.view.tracker.selections[0].measure.getTempo(); + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_tempo__WEBPACK_IMPORTED_MODULE_4__.SuiTempoDialog, { + id: 'tempoDialog', + ctor: 'SuiTempoDialog', + completeNotifier: this.completeNotifier, + view: this.view, + eventSource: this.eventSource, + tracker: this.view.tracker, + startPromise: null, + modifier: tempo + }); + } selectPart() { return __awaiter(this, void 0, void 0, function* () { if (!this.completeNotifier) { return; } yield this.view.renderPromise(); - this.menus.slashMenuMode(this.completeNotifier); - this.menus.createMenu('SuiPartSelectionMenu'); + this.menus.createMenu('SuiPartSelectionMenu', this.completeNotifier); }); } bind() { @@ -42525,44 +43438,6 @@ class MeasureButtons extends _button__WEBPACK_IMPORTED_MODULE_0__.SuiButton { } -/***/ }), - -/***/ "./src/ui/buttons/microtone.ts": -/*!*************************************!*\ - !*** ./src/ui/buttons/microtone.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ MicrotoneButtons: () => (/* binding */ MicrotoneButtons) -/* harmony export */ }); -/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./button */ "./src/ui/buttons/button.ts"); -/* harmony import */ var _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../smo/data/noteModifiers */ "./src/smo/data/noteModifiers.ts"); -/* harmony import */ var _render_audio_oscillator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../render/audio/oscillator */ "./src/render/audio/oscillator.ts"); - - - -class MicrotoneButtons extends _button__WEBPACK_IMPORTED_MODULE_0__.SuiButton { - constructor(parameters) { - super(parameters); - } - applyButton(el) { - const defs = _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoMicrotone.defaults; - defs.tone = el.id; - const tn = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoMicrotone(defs); - this.view.addRemoveMicrotone(tn); - _render_audio_oscillator__WEBPACK_IMPORTED_MODULE_2__.SuiOscillator.playSelectionNow(this.view.tracker.selections[0], this.view.score, 1); - } - bind() { - $(this.buttonElement).off('click').on('click', () => { - this.applyButton(this.buttonData); - }); - } -} - - /***/ }), /***/ "./src/ui/buttons/navigation.ts": @@ -42736,10 +43611,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); /* harmony import */ var _dialogs_library__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dialogs/library */ "./src/ui/dialogs/library.ts"); /* harmony import */ var _dialogs_tempo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dialogs/tempo */ "./src/ui/dialogs/tempo.ts"); -/* harmony import */ var _dialogs_instrument__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dialogs/instrument */ "./src/ui/dialogs/instrument.ts"); -/* harmony import */ var _collapsable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./collapsable */ "./src/ui/buttons/collapsable.ts"); -/* harmony import */ var _dialogs_dialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); -/* harmony import */ var _help__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../help */ "./src/ui/help.ts"); +/* harmony import */ var _collapsable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./collapsable */ "./src/ui/buttons/collapsable.ts"); +/* harmony import */ var _dialogs_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); +/* harmony import */ var _help__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../help */ "./src/ui/help.ts"); var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -42757,8 +43631,7 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume - -var SuiModalButtonStrings = ['SuiLibraryDialog', 'SuiTempoDialog', 'SuiInstrumentDialog']; +var SuiModalButtonStrings = ['SuiLibraryDialog', 'SuiTempoDialog']; function isModalButtonType(but) { return SuiModalButtonStrings.indexOf(but) >= 0; } @@ -42776,6 +43649,12 @@ class RibbonButtons { const r = b('div').classes(containerClass).append(b('button').attr('id', buttonId).classes(buttonClass).append(b('span').classes('left-text').append(b('span').classes('text-span').text(buttonText)).append(b('span').classes('ribbon-button-text icon ' + buttonIcon))).append(b('span').classes('ribbon-button-hotkey').text(buttonKey))); return r.dom(); } + static _buttonSidebarHtml(buttonId, buttonClass, buttonText, buttonIcon, buttonKey) { + const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; + const r = b('li').classes('nav-item') + .append(b('button').classes(buttonClass).attr('id', buttonId).classes('nav-link').append(b('span').classes('left-text').append(b('span').classes('text-span').text(buttonText))).append(b('span').classes('ribbon-button-text icon ' + buttonIcon)).append(b('span').classes('ribbon-button-hotkey').text(buttonKey))); + return r.dom(); + } constructor(params) { this.collapsables = []; this.collapseChildren = []; @@ -42801,24 +43680,20 @@ class RibbonButtons { startPromise: null, tracker: this.view.tracker }; - if (buttonData.ctor === 'SuiInstrumentDialog') { - (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_5__.createAndDisplayDialog)(_dialogs_instrument__WEBPACK_IMPORTED_MODULE_3__.SuiInstrumentDialog, params); - } - else if (buttonData.ctor === 'SuiLibraryDialog') { + if (buttonData.ctor === 'SuiLibraryDialog') { yield _dialogs_library__WEBPACK_IMPORTED_MODULE_1__.SuiLibraryDialog.createAndDisplay(params, this.config); } else { - (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_5__.createAndDisplayDialog)(_dialogs_tempo__WEBPACK_IMPORTED_MODULE_2__.SuiTempoDialog, params); + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_4__.createAndDisplayDialog)(_dialogs_tempo__WEBPACK_IMPORTED_MODULE_2__.SuiTempoDialog, params); } } else if (buttonData.ctor === 'helpModal') { - _help__WEBPACK_IMPORTED_MODULE_6__.SuiHelp.displayHelp(); + _help__WEBPACK_IMPORTED_MODULE_5__.SuiHelp.displayHelp(); } }); } _executeButtonMenu(buttonElement, buttonData) { - this.menus.slashMenuMode(this.controller); - this.menus.createMenu(buttonData.ctor); + this.menus.createMenu(buttonData.ctor, this.controller); } _executeButton(buttonElement, buttonData) { return __awaiter(this, void 0, void 0, function* () { @@ -42862,6 +43737,34 @@ class RibbonButtons { cb.bind(); }); } + _createSidebarButtonGroups(selector) { + let containerClass = ''; + // Now all the button elements have been bound. Join child and parent buttons + // For all the children of a button group, add it to the parent group + this.collapseChildren.forEach((b) => { + containerClass = 'ribbonButtonContainer'; + if (b.action === 'collapseGrandchild') { + containerClass = 'ribbonButtonContainerMore'; + } + const buttonHtml = RibbonButtons._buttonHtml(containerClass, b.id, b.classes, b.leftText, b.icon, b.rightText); + if (b.dataElements) { + const bkeys = Object.keys(b.dataElements); + bkeys.forEach((bkey) => { + var de = b.dataElements[bkey]; + $(buttonHtml).find('button').attr('data-' + bkey, de); + }); + } + // Bind the child button actions + const parent = $(selector).find('.collapseContainer[data-group="' + b.group + '"]'); + $(parent).append(buttonHtml); + const el = $(selector).find('#' + b.id); + this._bindButton(el, b); + }); + this.collapsables.forEach((cb) => { + // Bind the events of the parent button + cb.bind(); + }); + } static isCollapsible(action) { return ['collapseChild', 'collapseChildMenu', 'collapseGrandchild', 'collapseMore'].indexOf(action) >= 0; } @@ -42895,7 +43798,7 @@ class RibbonButtons { if (buttonData.action === 'collapseParent') { $(buttonHtml).addClass('collapseContainer'); // collapseParent - this.collapsables.push(new _collapsable__WEBPACK_IMPORTED_MODULE_4__.CollapseRibbonControl({ + this.collapsables.push(new _collapsable__WEBPACK_IMPORTED_MODULE_3__.CollapseRibbonControl({ ctor: buttonData.ctor, buttons: this.ribbonButtons, view: this.view, @@ -42914,21 +43817,79 @@ class RibbonButtons { } }); } - addButton(button, parentElement) { - this.ribbonButtons.push(button); - this.createRibbon([button.id], parentElement); + // ### _createButtonHtml + // For each button, create the html and bind the events based on + // the button's configured action. + _createSidebarHtml(buttonAr, selector) { + let buttonClass = ''; + buttonAr.forEach((buttonId) => { + const buttonData = this.ribbonButtons.find((e) => e.id === buttonId); + if (buttonData) { + if (buttonData.leftText) { + RibbonButtons.translateButtons.push({ buttonId: buttonData.id, buttonText: buttonData.leftText }); + } + // collapse child is hidden until the parent button is selected, exposing the button group + if (RibbonButtons.isCollapsible(buttonData.action)) { + this.collapseChildren.push(buttonData); + } + if (buttonData.action !== 'collapseChild') { + // else the button has a specific action, such as a menu or dialog, or a parent button + // for translation, add the menu name to the button class + buttonClass = buttonData.classes; + if (buttonData.action === 'menu' || buttonData.action === 'modal') { + buttonClass += ' ' + buttonData.ctor; + } + const buttonHtml = RibbonButtons._buttonSidebarHtml(buttonData.id, buttonClass, buttonData.leftText, buttonData.icon, buttonData.rightText); + $(buttonHtml).attr('data-group', buttonData.group); + $(selector).append(buttonHtml); + const buttonElement = $('#' + buttonData.id); + // If this is a collabsable button, create it, otherwise bind its execute function. + if (buttonData.action === 'collapseParent') { + $(buttonHtml).addClass('collapseContainer'); + // collapseParent + this.collapsables.push(new _collapsable__WEBPACK_IMPORTED_MODULE_3__.CollapseRibbonControl({ + ctor: buttonData.ctor, + buttons: this.ribbonButtons, + view: this.view, + menus: this.menus, + eventSource: this.eventSource, + completeNotifier: this.controller, + buttonId: buttonData.id, + buttonElement, + buttonData + })); + } + else { + this.eventSource.domClick(buttonElement, this, '_executeButton', buttonData); + } + } + } + }); } createRibbon(buttonDataArray, parentElement) { this._createRibbonHtml(buttonDataArray, parentElement); this._createCollapsibleButtonGroups(parentElement); } + createSidebarRibbon(buttonDataArray, parentElement, containerClasses) { + this._createSidebarHtml(buttonDataArray, parentElement); + this._createCollapsibleButtonGroups(parentElement); + } + handleKeyDown(ev) { + if (ev.altKey) { + const keyButton = this.ribbonButtons.find((bb) => bb.hotKey && bb.hotKey === ev.key); + if (keyButton) { + const element = '#' + keyButton.id; + this._executeButton(element, keyButton); + } + } + } display() { if (this.config.leftControls) { const leftControl = (0,_common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.getDomContainer)(this.config.leftControls); if (leftControl) { $(leftControl).html(''); const lbuttons = this.ribbons.left; - this.createRibbon(lbuttons, leftControl); + this.createSidebarRibbon(lbuttons, leftControl, 'nav-item'); } } if (this.config.topControls) { @@ -42938,6 +43899,7 @@ class RibbonButtons { this.createRibbon(tbuttons, topControl); } } + this.eventSource.bindKeydownHandler(this, 'handleKeyDown'); } } RibbonButtons.translateButtons = []; @@ -43080,8 +44042,7 @@ class TextButtons extends _button__WEBPACK_IMPORTED_MODULE_0__.SuiButton { if (!this.completeNotifier) { return; } - this.menus.slashMenuMode(this.completeNotifier); - this.menus.createMenu(cmd); + this.menus.createMenu(cmd, this.completeNotifier); } addTextMenu() { (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_4__.createAndDisplayDialog)(_dialogs_textBlock__WEBPACK_IMPORTED_MODULE_1__.SuiTextBlockDialog, { @@ -43216,8 +44177,10 @@ class SuiDialogAdapterBase extends _dialog__WEBPACK_IMPORTED_MODULE_0__.SuiDialo bindComponents() { this.components.forEach((component) => { // do some runtime validation of the adapter - if (typeof (this.adapter[component.smoName]) === 'undefined') { - throw ('Dialog ' + this.label + ' has component ' + component.smoName + ' but no setter in the adapter '); + if (!component.noProperty) { + if (typeof (this.adapter[component.smoName]) === 'undefined') { + throw ('Dialog ' + this.label + ' has component ' + component.smoName + ' but no setter in the adapter '); + } } component.bind(); }); @@ -43239,10 +44202,13 @@ class SuiDialogAdapterBase extends _dialog__WEBPACK_IMPORTED_MODULE_0__.SuiDialo * show or hide another component) */ changed() { - this.components.forEach((comp) => { - if (comp.changeFlag) { - this.adapter[comp.smoName] = comp.getValue(); - } + return __awaiter(this, void 0, void 0, function* () { + this.components.forEach((comp) => { + if (comp.changeFlag) { + this.adapter[comp.smoName] = comp.getValue(); + } + }); + yield this.view.updatePromise(); }); } /** @@ -43490,6 +44456,295 @@ SuiArpeggioDialog.dialogElements = { }; +/***/ }), + +/***/ "./src/ui/dialogs/articulation.ts": +/*!****************************************!*\ + !*** ./src/ui/dialogs/articulation.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiArticulationAdapter: () => (/* binding */ SuiArticulationAdapter), +/* harmony export */ SuiArticulationButtonComponent: () => (/* binding */ SuiArticulationButtonComponent), +/* harmony export */ SuiArticulationDialog: () => (/* binding */ SuiArticulationDialog) +/* harmony export */ }); +/* harmony import */ var _adapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapter */ "./src/ui/dialogs/adapter.ts"); +/* harmony import */ var _components_buttonArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/buttonArray */ "./src/ui/dialogs/components/buttonArray.ts"); +/* harmony import */ var _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../smo/data/noteModifiers */ "./src/smo/data/noteModifiers.ts"); +/* harmony import */ var _smo_data_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../smo/data/common */ "./src/smo/data/common.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + + +const articulationButtonFactory = () => { + const params = { + label: 'Articulations', + rows: [{ + label: 'Articulations', + classes: 'pad-span', + buttons: [ + { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-fermataBelow', + id: 'fermataBelowButton', + label: 'Fermata', + smoName: 'fermataButton' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-articAccentBelow', + id: 'accentButton', + label: 'Accent', + smoName: 'accentButton' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-articTenutoBelow', + id: 'tenutoButton', + label: 'Tenuto', + smoName: 'tenutoButton' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-articStaccatoBelow', + id: 'staccatoButton', + label: 'Staccato', + smoName: 'staccatoButton' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-articMarcatoBelow', + id: 'marcatoButton', + label: 'Marcato', + smoName: 'marcatoButton' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-top icon-pluckedSnapPizzicatoBelow', + id: 'pizzicatoButton', + label: 'Pizzicato', + smoName: 'pizzicatoButton' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-top icon-stringsDownBow', + id: 'downBowButton', + label: 'Down Bow', + smoName: 'downBowButton' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-top icon-stringsUpBow', + id: 'upBowButton', + label: 'Up Bow', + smoName: 'upBowButton' + } + ] + } + ] + }; + return params; +}; +class SuiArticulationButtonComponent extends _components_buttonArray__WEBPACK_IMPORTED_MODULE_1__.SuiButtonArrayMSComponent { + constructor(dialog, parameter) { + super(dialog, parameter, articulationButtonFactory); + } +} +class SuiArticulationAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_0__.SuiComponentAdapter { + static get articulationIdMap() { + return { + accentButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation.articulations.accent, + tenutoButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation.articulations.tenuto, + staccatoButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation.articulations.staccato, + marcatoButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation.articulations.marcato, + pizzicatoButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation.articulations.pizzicato, + fermataButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation.articulations.fermata, + downBowButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation.articulations.downStroke, + upBowButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation.articulations.upStroke + }; + } + static get articulationIdMapRvs() { + return (0,_smo_data_common__WEBPACK_IMPORTED_MODULE_3__.reverseStaticMap)('SuiArticulationAdapter.articulationIdMap', SuiArticulationAdapter.articulationIdMap); + } + constructor(view) { + super(view); + this.codes = []; + this.positionCode = 'auto'; + this.setValues = {}; + const selections = this.view.tracker.selections.filter((ss) => ss.note); + this.view.groupUndo(true); + const setForAll = {}; + const positionForAll = {}; + let notesCount = 0; + selections.forEach((sel) => { + const articulations = sel.note.getArticulations(); + notesCount += 1; + articulations.forEach((art) => { + if (!setForAll[art.articulation]) { + setForAll[art.articulation] = 0; + } + if (!positionForAll[art.position]) { + positionForAll[art.position] = 0; + } + positionForAll[art.position] += 1; + setForAll[art.articulation] = setForAll[art.articulation] + 1; + }); + }); + const keys = Object.keys(setForAll); + keys.forEach((key) => { + if (setForAll[key] === notesCount) { + const btnId = SuiArticulationAdapter.articulationIdMapRvs[key]; + if (btnId) { + this.setValues[btnId] = true; + this.codes.push(btnId); + } + } + }); + if (typeof (positionForAll['above']) === 'number') { + this.position = 'above;'; + } + if (typeof (positionForAll['below']) === 'number') { + this.position = 'below;'; + } + } + get position() { + return this.positionCode; + } + set position(value) { + this.positionCode = value; + const selections = this.view.tracker.selections.filter((ss) => ss.note); + selections.forEach((selection) => { + const articulations = selection.note.getArticulations(); + articulations.forEach((art) => { + this.view.modifySelectionNoWait('articulation pos', selection, (score, sel) => { + const nart = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation({ articulation: art.articulation, position: this.positionCode }); + sel.note.setArticulation(art, false); + sel.note.setArticulation(nart, true); + }); + }); + }); + } + get articulations() { + return this.codes; + } + set articulations(value) { + this.codes = value; + const selections = this.view.tracker.selections.filter((ss) => ss.note); + const oldCodes = Object.keys(this.setValues); + // for each selection + selections.forEach((selection) => { + const note = selection.note; + // make sure any existing codes are set + this.codes.forEach((code) => { + const smoCode = SuiArticulationAdapter.articulationIdMap[code]; + this.setValues[code] = true; + this.view.modifySelectionNoWait('articulation dialog', selection, (score, sel) => { + sel.note.setArticulation(new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation({ articulation: smoCode }), true); + }); + // only turn off the code if this value was set initially for all selections + }); + oldCodes.forEach((oldCode) => { + if (this.setValues[oldCode] && this.codes.indexOf(oldCode) < 0) { + const smoCode = SuiArticulationAdapter.articulationIdMap[oldCode]; + const articulation = note.getArticulation(smoCode); + if (articulation) { + this.view.modifySelectionNoWait('articulation dialog', selection, (score, sel) => { + sel.note.setArticulation(articulation, false); + }); + this.setValues[oldCode] = false; + } + } + }); + }); + } + get textMessage() { + return ''; + } + set textMessage(value) { + // ignore + } + commit() { + return __awaiter(this, void 0, void 0, function* () { + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.view.undo(); + }); + } + remove() { + return __awaiter(this, void 0, void 0, function* () { + }); + } +} +class SuiArticulationDialog extends _adapter__WEBPACK_IMPORTED_MODULE_0__.SuiDialogAdapterBase { + static get applyTo() { + return { + score: 0, selected: 1, remaining: 3 + }; + } + constructor(parameters) { + const adapter = new SuiArticulationAdapter(parameters.view); + super(SuiArticulationDialog.dialogElements, Object.assign({ adapter }, parameters)); + this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE']; + } + changed() { + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + this.view.undoTrackerMeasureSelections('articulation dialog'); + yield _super.changed.call(this); + }); + } +} +// export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion' +//| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french'; +SuiArticulationDialog.dialogElements = { + label: 'Articulations', + elements: [{ + smoName: 'articulations', + control: 'SuiArticulationButtonComponent', + label: 'Articulations' + }, { + smoName: 'position', + control: 'SuiDropdownComponent', + label: 'Position', + options: [ + { + value: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation.positions.above, + label: 'Above' + }, { + value: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation.positions.below, + label: 'Below' + }, { + value: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoArticulation.positions.auto, + label: 'Auto' + } + ] + }, { + smoName: 'textMessage', + control: 'SuiTextInputComponent', + label: 'Use keys h,i,j,k,l to toggle common articulations.', + classes: 'hide-input' + }], + staticText: [] +}; + + /***/ }), /***/ "./src/ui/dialogs/audioSettings.ts": @@ -43706,7 +44961,7 @@ class SuiChordChangeDialog extends _dialog__WEBPACK_IMPORTED_MODULE_0__.SuiDialo key: val, code: val, event: null, - keyCode: '0' + keyCode: 0 }); // Move focus outside the element so it doesn't intercept keys this.chordSymbolCtrl.unselect(); @@ -44030,6 +45285,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ SuiComponentBase: () => (/* binding */ SuiComponentBase), /* harmony export */ SuiComponentParent: () => (/* binding */ SuiComponentParent), +/* harmony export */ SuiCompositeBase: () => (/* binding */ SuiCompositeBase), /* harmony export */ SuiDialogNotifier: () => (/* binding */ SuiDialogNotifier) /* harmony export */ }); /** @@ -44047,6 +45303,7 @@ class SuiDialogNotifier { */ class SuiComponentBase { constructor(dialog, parameters) { + var _a; this.changeFlag = false; this.changeFlag = false; this.css = parameters.classes; @@ -44055,6 +45312,7 @@ class SuiComponentBase { this.label = parameters.label; this.control = parameters.control; this.smoName = parameters.smoName; + this.noProperty = (_a = parameters.noProperty) !== null && _a !== void 0 ? _a : false; } /** * Called by the derived class when the value changes. The change flag is set to true, so the dialog will @@ -44094,6 +45352,15 @@ class SuiComponentBase { */ class SuiComponentParent extends SuiComponentBase { } +class SuiCompositeBase extends SuiComponentBase { + constructor(dialog, params) { + super(dialog, params); + if (!params.parentComponent) { + throw ('invalid parent component'); + } + this.parentControl = params.parentComponent; + } +} /***/ }), @@ -44121,15 +45388,24 @@ class SuiButtonComponent extends _baseComponent__WEBPACK_IMPORTED_MODULE_1__.Sui super(dialog, parameter); this.dialog = dialog; this.icon = parameter.icon; + this.text = parameter.text; } get html() { const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; const id = this.parameterId; this.icon = typeof (this.icon) === 'undefined' ? '' : this.icon; - const r = b('div').classes(this.makeClasses('buttonControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName) - .append(b('button').attr('type', 'button').classes(this.icon) - .attr('id', id + '-input')).append(b('label').attr('for', id + '-input').text(this.label)); - return r; + if (!this.text) { + const r = b('div').classes(this.makeClasses('buttonControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName) + .append(b('button').attr('type', 'button').classes(this.icon) + .attr('id', id + '-input')).append(b('label').attr('for', id + '-input').attr('aria-label', this.label).text(this.label)); + return r; + } + else { + const r = b('div').classes(this.makeClasses('buttonControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName) + .append(b('button').attr('type', 'button').classes(this.icon) + .attr('id', id + '-input').append(b('span').classes('button-text').text(this.text))).append(b('label').attr('for', id + '-input').attr('aria-label', this.label).text(this.label)); + return r; + } } _getInputElement() { var pid = this.parameterId; @@ -44162,6 +45438,271 @@ class SuiButtonComposite extends SuiButtonComponent { } +/***/ }), + +/***/ "./src/ui/dialogs/components/buttonArray.ts": +/*!**************************************************!*\ + !*** ./src/ui/dialogs/components/buttonArray.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiButtonArrayBase: () => (/* binding */ SuiButtonArrayBase), +/* harmony export */ SuiButtonArrayButton: () => (/* binding */ SuiButtonArrayButton), +/* harmony export */ SuiButtonArrayComponent: () => (/* binding */ SuiButtonArrayComponent), +/* harmony export */ SuiButtonArrayMSComponent: () => (/* binding */ SuiButtonArrayMSComponent) +/* harmony export */ }); +/* harmony import */ var _components_baseComponent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/baseComponent */ "./src/ui/dialogs/components/baseComponent.ts"); +/* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); +// [Smoosic](https://github.com/AaronDavidNewman/Smoosic) +// Copyright (c) Aaron David Newman 2021. + + +class SuiButtonArrayButton extends _components_baseComponent__WEBPACK_IMPORTED_MODULE_0__.SuiComponentBase { + constructor(dialog, parameters) { + super(dialog, parameters); + this.iButtonState = SuiButtonArrayButton.buttonState.initial; + this.id = `${dialog.getId()}-${parameters.id}`; + this.dialog = dialog; + this.text = parameters.text; + this.icon = parameters.icon; + this.classes = parameters.classes; + this.parentControl = parameters.parentControl; + } + get buttonStateString() { + return SuiButtonArrayButton.buttonStateString[this.buttonState]; + } + get buttonState() { + return this.iButtonState; + } + set buttonState(value) { + this.iButtonState = value; + this.clearState(); + $(`#${this.id}`).addClass(this.buttonStateString); + } + clearState() { + SuiButtonArrayButton.buttonStateString.forEach((ss) => $(`#${this.id}`).removeClass(ss)); + } + get iconHtml() { + const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_1__.buildDom; + const state = SuiButtonArrayButton.buttonStateString[this.iButtonState]; + const classes = `${this.classes} ${state}`; + const q = b('button').attr('id', this.id).classes(classes).append(b('span').classes(this.icon).attr('aria-label', this.label)); + return q; + } + get textHtml() { + var _a; + const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_1__.buildDom; + const state = SuiButtonArrayButton.buttonStateString[this.iButtonState]; + const text = (_a = this.text) !== null && _a !== void 0 ? _a : ''; + const classes = `${this.classes} ${state}`; + const q = b('button').attr('id', this.id).classes(classes).append(b('span').classes(this.icon).attr('aria-label', this.label)).append(b('span').classes('button-text').text(text)); + return q; + } + get html() { + var _a; + const q = ((_a = this.text) === null || _a === void 0 ? void 0 : _a.length) ? this.textHtml : this.iconHtml; + return q; + } + updateControls() { + const updateEl = $('#' + this.parameterId); + $(updateEl).html(''); + $(updateEl).append(this.html.dom()); + this.bind(); + } + bind() { + $(`#${this.id}`).off('click').on('click', (ev) => { + this.changeFlag = true; + this.parentControl.changed(); + this.changeFlag = false; + }); + } +} +SuiButtonArrayButton.buttonStateString = ['initial', 'pushed', 'disabled']; +SuiButtonArrayButton.buttonState = { + 'initial': 0, 'pushed': 1, 'disabled': 2 +}; +class SuiButtonArrayBase extends _components_baseComponent__WEBPACK_IMPORTED_MODULE_0__.SuiComponentParent { + constructor(dialog, parameter, buttonFactory) { + super(dialog, parameter); + this.buttonRows = []; + this.pressed = ''; + this.shellCreated = false; + this.dialog = dialog; + const rowParams = buttonFactory(); + rowParams.rows.forEach((bparams) => { + const row = { + label: bparams.label, + classes: bparams.classes, + buttons: [] + }; + this.buttonRows.push(row); + bparams.buttons.forEach((bp) => { + const param = Object.assign({ parentControl: this }, bp); + row.buttons.push(new SuiButtonArrayButton(dialog, param)); + }); + }); + this.view = this.dialog.getView(); + } + updateControls() { + const updateEl = $('#' + this.parameterId); + $(updateEl).html(''); + $(updateEl).append(this.html.dom()); + this.bind(); + } + get html() { + const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_1__.buildDom; + if (!this.shellCreated) { + const q = b('div').classes(this.makeClasses('multiControl smoControl buttonArray')) + .attr('id', this.parameterId); + this.shellCreated = true; + return q; + } + const q = b('div').classes('button-row-container'); + for (let i = 0; i < this.buttonRows.length; ++i) { + const buttonRow = this.buttonRows[i]; + const r = b('div').classes(`button-array-row`); + const s = b('div').classes('button-array-label') + .append(b('span').classes(`${buttonRow.classes}`).text(buttonRow.label)); + const t = b('div').classes('button-array-buttons'); + buttonRow.buttons.forEach((bb) => { + t.append(bb.html); + }); + r.append(s); + r.append(t); + q.append(r); + } + return q; + } +} +class SuiButtonArrayComponent extends SuiButtonArrayBase { + constructor(dialog, parameter, buttonFactory) { + super(dialog, parameter, buttonFactory); + this.pressed = ''; + this.shellCreated = false; + this.initialValue = true; + } + getValue() { + return this.pressed; + } + updateValues() { + const rowKeys = Object.keys(this.buttonRows); + for (let i = 0; i < rowKeys.length; ++i) { + const buttonRow = this.buttonRows[i]; + buttonRow.buttons.forEach((bb) => { + // If the button is being pressed by the user + if (bb.changeFlag) { + // toggle button state. + if (bb.buttonState === SuiButtonArrayButton.buttonState.pushed) { + bb.buttonState = SuiButtonArrayButton.buttonState.initial; + this.pressed = ''; + } + else { + this.pressed = bb.smoName; + bb.buttonState = SuiButtonArrayButton.buttonState.pushed; + } + } + else if (this.initialValue) { + // if the condition was met when the dialog was created + if (this.pressed === bb.smoName) { + bb.buttonState = SuiButtonArrayButton.buttonState.pushed; + } + } + else { + bb.buttonState = SuiButtonArrayButton.buttonState.initial; + } + }); + } + } + setValue(val) { + this.pressed = val; + this.updateValues(); + this.updateControls(); + this.initialValue = false; + } + changed() { + this.changeFlag = true; + this.updateValues(); + this.updateControls(); + this.handleChanged(); + this.changeFlag = false; + } + bind() { + const rowKeys = Object.keys(this.buttonRows); + for (let i = 0; i < rowKeys.length; ++i) { + const buttonRow = this.buttonRows[i]; + buttonRow.buttons.forEach((bb) => { + bb.bind(); + }); + } + } +} +class SuiButtonArrayMSComponent extends SuiButtonArrayBase { + constructor(dialog, parameter, buttonFactory) { + super(dialog, parameter, buttonFactory); + this.pressedArray = []; + this.initialValue = true; + } + getValue() { + return this.pressedArray; + } + setValue(val) { + this.pressedArray = val; + this.updateValues(); + this.updateControls(); + this.initialValue = false; + } + updateValues() { + const rowKeys = Object.keys(this.buttonRows); + const pressed = []; + for (let i = 0; i < rowKeys.length; ++i) { + const buttonRow = this.buttonRows[i]; + buttonRow.buttons.forEach((bb) => { + // If this button was just pressed + if (bb.changeFlag) { + if (this.pressedArray.indexOf(bb.smoName) >= 0) { + bb.buttonState = SuiButtonArrayButton.buttonState.initial; + } + else { + bb.buttonState = SuiButtonArrayButton.buttonState.pushed; + pressed.push(bb.smoName); + } + } + else if (this.initialValue) { // or if the initial value is being set + if (this.pressedArray.indexOf(bb.smoName) >= 0) { + bb.buttonState = SuiButtonArrayButton.buttonState.pushed; + pressed.push(bb.smoName); + } + } + else if (bb.buttonState === SuiButtonArrayButton.buttonState.pushed) { + // if the button was not changed, but pressed already + pressed.push(bb.smoName); + } + }); + } + this.pressedArray = pressed; + } + changed() { + this.changeFlag = true; + this.updateValues(); + this.updateControls(); + this.handleChanged(); + this.changeFlag = false; + } + bind() { + const rowKeys = Object.keys(this.buttonRows); + for (let i = 0; i < rowKeys.length; ++i) { + const buttonRow = this.buttonRows[i]; + buttonRow.buttons.forEach((bb) => { + bb.bind(); + }); + } + } +} + + /***/ }), /***/ "./src/ui/dialogs/components/checkdrop.ts": @@ -44357,6 +45898,7 @@ class SuiDropdownComponent extends _baseComponent__WEBPACK_IMPORTED_MODULE_1__.S var _a, _b; super(dialog, parameter); this.value = ''; + this.optionIds = []; this.options = parameter.options; this.disabledOption = (_a = parameter.disabledOption) !== null && _a !== void 0 ? _a : ''; this.dataType = (_b = parameter.dataType) !== null && _b !== void 0 ? _b : 'string'; @@ -44369,44 +45911,73 @@ class SuiDropdownComponent extends _baseComponent__WEBPACK_IMPORTED_MODULE_1__.S get html() { const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; const id = this.id; - const r = b('div').classes(this.makeClasses('dropdownControl smoControl')).attr('id', id).attr('data-param', this.smoName); - const s = b('select'); + const label = this.value.length > 0 ? this.value : this.label; + this.optionIds = []; + const menuId = `${id}-menu`; + const r = b('div').classes(this.makeClasses('dropdownControl smoControl')).attr('id', id).attr('data-param', this.smoName) + .append(b('button').classes('btn dropdown-toggle btn-primary').text(label)); + const s = b('ul').attr('role', 'menu').classes('dropdown-menu rounded-3 shadow w-220px').attr('id', menuId); this.checkDefault(s, b); - this.options.forEach((option) => { - s.append(b('option').attr('value', option.value.toString()).text(option.label)); + this.options.forEach((option, ix) => { + const optionId = `${this.parameterId}-${ix}`; + s.append(b('li').attr('id', optionId).attr('role', 'presentation'). + append(b('a').attr('role', 'menuItem').attr('href', '#').attr('data-value', option.value.toString()) + .classes('dropdown-item').text(option.label))); }); - r.append(s).append(b('label').attr('for', id + '-input').text(this.label)); + r.append(s).append(b('label').attr('for', menuId).text(this.label)); return r; } + updateControls() { + const updateEl = this._getInputElement(); + $(updateEl).html(''); + $(updateEl).append(this.html.dom()); + this.bind(); + } unselect() { $(this._getInputElement())[0].selectedIndex = -1; $(this._getInputElement()).blur(); } _getInputElement() { var pid = this.id; - return $(this.dialog.dgDom.element).find('#' + pid).find('select'); + return $(this.dialog.dgDom.element).find('#' + pid); } getValue() { - const input = this._getInputElement(); - const option = input.find('option:selected'); - let val = $(option).val(); - val = (this.dataType.toLowerCase() === 'int') ? parseInt(val, 10) : val; - val = (this.dataType.toLowerCase() === 'float') ? parseFloat(val) : val; - if (typeof (val) === 'undefined') { - val = $(input).find('option:first').val(); - $(input).find('option:first').prop('selected', true); + let val = this.value; + if (['int', 'float'].indexOf(this.dataType) >= 0) { + val = (this.dataType.toLowerCase() === 'int') ? parseInt(val, 10) : val; + val = (this.dataType.toLowerCase() === 'float') ? parseFloat(val) : val; + if (isNaN(val)) { + val = -1; + } } return val; } + getValueLabel() { + let label = this.value; + const selection = this.options.find((ff) => ff.value.toString() === this.value.toString()); + if (selection) { + label = selection.label; + } + return label; + } setValue(value) { - const input = this._getInputElement(); - $(input).val(value); + this.value = value.toString(); + if (this.value.length) { + $(this._getInputElement()).find('button.dropdown-toggle').text(this.getValueLabel()); + } } bind() { const input = this._getInputElement(); - const self = this; - $(input).off('change').on('change', () => { - self.handleChanged(); + $(input).find('button.dropdown-toggle').off('click').on('click', () => { + $(input).find('ul.dropdown-menu').toggleClass('show'); + }); + $(input).find('ul li a.dropdown-item').off('click').on('click', (elem) => { + this.value = $(elem.target).attr('data-value'); + $(input).find('ul.dropdown-menu').removeClass('show'); + if (this.value.length) { + $(this._getInputElement()).find('button.dropdown-toggle').text(this.getValueLabel()); + } + this.handleChanged(); }); } } @@ -45961,6 +47532,7 @@ class SuiTextBlockComponent extends _baseComponent__WEBPACK_IMPORTED_MODULE_2__. "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiReadOnlyTextComponent: () => (/* binding */ SuiReadOnlyTextComponent), /* harmony export */ SuiTextInputComponent: () => (/* binding */ SuiTextInputComponent), /* harmony export */ SuiTextInputComposite: () => (/* binding */ SuiTextInputComposite) /* harmony export */ }); @@ -46017,6 +47589,12 @@ class SuiTextInputComposite extends SuiTextInputComponent { this.changeFlag = false; } } +class SuiReadOnlyTextComponent extends SuiTextInputComponent { + constructor(dialog, parameter) { + super(dialog, parameter); + this.noProperty = true; + } +} /***/ }), @@ -46434,7 +48012,7 @@ class SuiDialogBase extends _components_baseComponent__WEBPACK_IMPORTED_MODULE_2 if (element.options) { component.options = []; element.options.forEach((option) => { - component.options.push({ value: option.value, label: option.label }); + component.options.push({ value: option.value, label: option.label, css: option.css }); }); } output.push(component); @@ -46666,7 +48244,7 @@ class SuiDialogBase extends _components_baseComponent__WEBPACK_IMPORTED_MODULE_2 ctrl.append(control.html); }); r.append(ctrl); - r.append(b('div').classes('buttonContainer').append(b('button').classes('ok-button button-left').text('OK')).append(b('button').classes('cancel-button button-center').text('Cancel')).append(b('button').classes('remove-button button-right').text('Remove').append(b('span').classes('icon icon-cancel-circle')))); + r.append(b('div').classes('buttonContainer').append(b('button').classes('ok-button button-left btn btn-primary').text('OK')).append(b('button').classes('cancel-button button-center btn btn-secondary').text('Cancel')).append(b('button').classes('remove-button button-right btn btn-secondary').text('Remove').append(b('span').classes('icon icon-cancel-circle')))); $('.attributeDialog').html(''); $('.attributeDialog').append(r.dom()); const trapper = new _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_1__.InputTrapper('.attributeDialog'); @@ -46744,6 +48322,199 @@ function createAndDisplayDialog(ctor, parameters) { } +/***/ }), + +/***/ "./src/ui/dialogs/durations.ts": +/*!*************************************!*\ + !*** ./src/ui/dialogs/durations.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiDurationAdapter: () => (/* binding */ SuiDurationAdapter), +/* harmony export */ SuiDurationButtonComponent: () => (/* binding */ SuiDurationButtonComponent), +/* harmony export */ SuiDurationDialog: () => (/* binding */ SuiDurationDialog) +/* harmony export */ }); +/* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); +/* harmony import */ var _components_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/button */ "./src/ui/dialogs/components/button.ts"); +/* harmony import */ var _components_baseComponent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/baseComponent */ "./src/ui/dialogs/components/baseComponent.ts"); +/* harmony import */ var _adapter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./adapter */ "./src/ui/dialogs/adapter.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + + +class SuiDurationButtonComponent extends _components_baseComponent__WEBPACK_IMPORTED_MODULE_2__.SuiComponentParent { + constructor(dialog, params) { + super(dialog, params); + this.growDurationComponent = new _components_button__WEBPACK_IMPORTED_MODULE_1__.SuiButtonComposite(this.dialog, { + id: this.id + 'growDuration', + smoName: 'growDuration', + parentControl: this, + icon: 'icon-smo ribbon-button-text icon-duration_grow', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Increase Duration', + text: '.' + }); + this.lessDurationComponent = new _components_button__WEBPACK_IMPORTED_MODULE_1__.SuiButtonComposite(this.dialog, { + id: this.id + 'lessDuration', + smoName: 'lessDuration', + parentControl: this, + icon: 'icon-smo ribbon-button-text icon-duration_less', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Decrease Duration', + text: ',' + }); + this.growDotComponent = new _components_button__WEBPACK_IMPORTED_MODULE_1__.SuiButtonComposite(this.dialog, { + id: this.id + 'growDot', + smoName: 'growDot', + parentControl: this, + icon: 'icon-smo ribbon-button-text icon-duration_grow_dot', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Add Dot', + text: '>' + }); + this.lessDotComponent = new _components_button__WEBPACK_IMPORTED_MODULE_1__.SuiButtonComposite(this.dialog, { + id: this.id + 'lessDot', + smoName: 'lessDot', + parentControl: this, + icon: 'icon-smo ribbon-button-text icon-duration_less_dot', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Remove Dot', + text: '<' + }); + } + getValue() { + if (this.growDurationComponent.changeFlag) { + return this.growDurationComponent.smoName; + } + if (this.lessDurationComponent.changeFlag) { + return this.lessDurationComponent.smoName; + } + if (this.growDotComponent.changeFlag) { + return this.growDotComponent.smoName; + } + if (this.lessDotComponent.changeFlag) { + return this.lessDotComponent.smoName; + } + return ''; + } + setValue(value) { + // ignore + } + changed() { + return __awaiter(this, void 0, void 0, function* () { + this.handleChanged(); + }); + } + get html() { + const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; + const q = b('div').classes(this.makeClasses('multiControl smoControl buttonArray')) + .attr('id', this.parameterId); + q.append(this.growDurationComponent.html); + q.append(this.lessDurationComponent.html); + q.append(this.growDotComponent.html); + q.append(this.lessDotComponent.html); + return q; + } + bind() { + this.growDurationComponent.bind(); + this.lessDurationComponent.bind(); + this.lessDotComponent.bind(); + this.growDotComponent.bind(); + } +} +class SuiDurationAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_3__.SuiComponentAdapter { + constructor(view) { + super(view); + this.view.groupUndo(true); + } + get durationButtons() { + return ''; + } + set durationButtons(value) { + if (value === 'growDuration') { + this.view.batchDurationOperation('doubleDuration'); + } + if (value === 'lessDuration') { + this.view.batchDurationOperation('halveDuration'); + } + if (value === 'growDot') { + this.view.batchDurationOperation('dotDuration'); + } + if (value === 'lessDot') { + this.view.batchDurationOperation('undotDuration'); + } + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.view.undo(); + }); + } + commit() { + return __awaiter(this, void 0, void 0, function* () { + }); + } +} +class SuiDurationDialog extends _adapter__WEBPACK_IMPORTED_MODULE_3__.SuiDialogAdapterBase { + static get applyTo() { + return { + score: 0, selected: 1, remaining: 3 + }; + } + constructor(parameters) { + const adapter = new SuiDurationAdapter(parameters.view); + super(SuiDurationDialog.dialogElements, Object.assign({ adapter }, parameters)); + this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE']; + } +} +// export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion' +//| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french'; +SuiDurationDialog.dialogElements = { + label: 'Duration', + elements: [{ + smoName: 'durationButtons', + control: 'SuiDurationButtonComponent', + label: 'Note Duration' + }, { + smoName: 'textMessage4', + control: 'SuiReadOnlyTextComponent', + label: `Learn the keyboard shortcuts, they're much faster!`, + classes: 'hide-input' + }, { + smoName: 'textMessage', + control: 'SuiReadOnlyTextComponent', + label: 'Use , . to decrease/increase note length.', + classes: 'hide-input' + }, { + smoName: 'textMessage2', + control: 'SuiReadOnlyTextComponent', + label: 'Use <> to add/remove dots.', + classes: 'hide-input' + }, { + smoName: 'textMessage3', + control: 'SuiReadOnlyTextComponent', + label: 'Use shift+arrow navigation keys to select notes', + classes: 'hide-input' + }], + staticText: [] +}; + + /***/ }), /***/ "./src/ui/dialogs/dynamics.ts": @@ -46778,7 +48549,12 @@ class SuiDynamicDialogAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_1__.SuiC super(view); this.modifier = modifier; this.backup = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoDynamicText(this.modifier); - this.selection = this.view.tracker.modifierSelections[0].selection; + if (this.view.tracker.modifierSelections.length) { + this.selection = this.view.tracker.modifierSelections[0].selection; + } + else { + this.selection = this.view.tracker.selections[0]; + } } cancel() { return __awaiter(this, void 0, void 0, function* () { @@ -46890,6 +48666,362 @@ SuiDynamicModifierDialog.dialogElements = { }; +/***/ }), + +/***/ "./src/ui/dialogs/endings.ts": +/*!***********************************!*\ + !*** ./src/ui/dialogs/endings.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiEndBarButtonComponent: () => (/* binding */ SuiEndBarButtonComponent), +/* harmony export */ SuiEndingsAdapter: () => (/* binding */ SuiEndingsAdapter), +/* harmony export */ SuiEndingsDialog: () => (/* binding */ SuiEndingsDialog), +/* harmony export */ SuiRepeatSymbolButtonComponent: () => (/* binding */ SuiRepeatSymbolButtonComponent), +/* harmony export */ SuiStartBarButtonComponent: () => (/* binding */ SuiStartBarButtonComponent) +/* harmony export */ }); +/* harmony import */ var _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../smo/data/measureModifiers */ "./src/smo/data/measureModifiers.ts"); +/* harmony import */ var _adapter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./adapter */ "./src/ui/dialogs/adapter.ts"); +/* harmony import */ var _components_buttonArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/buttonArray */ "./src/ui/dialogs/components/buttonArray.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + +const endingsButtonFactory = () => { + const params = { + label: 'Measure Endings', + rows: [{ + label: 'Endings', + classes: 'pad-span', + buttons: [ + { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-smo ribbon-button-text icon-end_rpt', + id: 'endRepeat', + label: 'end repeat', + smoName: 'endRepeat' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-smo ribbon-button-text icon-end_bar', + id: 'endBar', + label: 'end barline', + smoName: 'endBar' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-smo ribbon-button-text icon-end_bar', + id: 'doubleBar', + label: 'double barline', + smoName: 'doubleBar' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-smo ribbon-button-text', + id: 'noBarEnd', + label: 'no barline', + smoName: 'noBar' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-smo ribbon-button-text icon-single_bar', + id: 'singleBarEnd', + label: 'single bar', + smoName: 'singleBar' + } + ] + } + ] + }; + return params; +}; +const startBarButtonFactory = () => { + const params = { + label: 'Measure Endings', + rows: [{ + label: 'Start Bar', + classes: 'text-span', + buttons: [ + { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-smo ribbon-button-text icon-start_rpt', + id: 'startRepeat', + label: 'start repeat', + smoName: 'startRepeat' + }, + { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-smo ribbon-button-text', + id: 'noBarStart', + label: 'no barline', + smoName: 'noBar' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-smo ribbon-button-text icon-single_bar', + id: 'singleBarStart', + label: 'single bar', + smoName: 'singleBar' + } + ] + }] + }; + return params; +}; +const repeatSymbolButtonFactory = () => { + const params = { + label: 'Repeat Symbols', + rows: [{ + label: 'Repeat', + classes: 'text-span', + buttons: [ + { + classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'DcAlCoda', + label: 'DC Al Coda', + text: 'DC Al Coda', + smoName: 'DcAlCoda' + }, { + classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'DsAlCoda', + label: 'DS Al Coda', + text: 'DS Al Coda', + smoName: 'DsAlCoda' + }, { + classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'ToCoda', + label: 'to Coda', + text: 'to Coda', + smoName: 'ToCoda' + } + ] + }, { + label: 'Text', + classes: 'pad-span', + buttons: [{ + classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'DcAlFine', + label: 'DC Al Fine', + text: 'DC Al Fine', + smoName: 'DcAlFine' + }, { + classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'DsAlFine', + label: 'DS Al Fine', + text: 'DS Al Fine', + smoName: 'DsAlFine' + }, { + classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'Fine', + label: 'Fine', + text: 'Fine', + smoName: 'Fine' + }] + }, { + label: 'Symbols', + classes: 'pad-span', + buttons: [{ + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-lg icon-segno', + id: 'Segno', + label: 'Segno', + smoName: 'Segno' + }, + { + icon: 'icon-bravura icon-lg icon-coda', + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + smoName: 'Coda', + label: 'Coda', + id: 'Coda' + } + ] + }] + }; + return params; +}; +class SuiEndBarButtonComponent extends _components_buttonArray__WEBPACK_IMPORTED_MODULE_2__.SuiButtonArrayComponent { + constructor(dialog, parameter) { + super(dialog, parameter, endingsButtonFactory); + } +} +class SuiStartBarButtonComponent extends _components_buttonArray__WEBPACK_IMPORTED_MODULE_2__.SuiButtonArrayComponent { + constructor(dialog, parameter) { + super(dialog, parameter, startBarButtonFactory); + } +} +class SuiRepeatSymbolButtonComponent extends _components_buttonArray__WEBPACK_IMPORTED_MODULE_2__.SuiButtonArrayComponent { + constructor(dialog, parameter) { + super(dialog, parameter, repeatSymbolButtonFactory); + } +} +class SuiEndingsAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_1__.SuiComponentAdapter { + constructor(view) { + super(view); + this.view.groupUndo(true); + const measure = this.view.tracker.selections[0].measure; + this.startBarCode = _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlineString(measure.getStartBarline()); + this.endBarCode = _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlineString(measure.getEndBarline()); + const rs = measure.getRepeatSymbol(); + if (rs) { + this.repeatSymbolCode = _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.repeatSymbolString(rs); + } + else { + this.repeatSymbolCode = ''; + } + } + get repeatSymbolComponent() { + return this.repeatSymbolCode; + } + set repeatSymbolComponent(value) { + this.repeatSymbolCode = value; + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.Coda) { + this.view.setRepeatSymbol(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.Coda); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.ToCoda) { + this.view.setRepeatSymbol(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.ToCoda); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.Segno) { + this.view.setRepeatSymbol(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.Segno); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.DsAlCoda) { + this.view.setRepeatSymbol(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.DsAlCoda); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.DcAlCoda) { + this.view.setRepeatSymbol(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.DcAlCoda); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.DsAlFine) { + this.view.setRepeatSymbol(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.DsAlFine); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.DcAlFine) { + this.view.setRepeatSymbol(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.DcAlFine); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.Fine) { + this.view.setRepeatSymbol(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoRepeatSymbol.symbols.Fine); + } + } + get endBarComponent() { + return this.endBarCode; + } + set endBarComponent(value) { + this.endBarCode = value; + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.endRepeat) { + this.view.setBarline(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.endRepeat); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.startRepeat) { + this.view.setBarline(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.positions.start, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.startRepeat); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.singleBar) { + this.view.setBarline(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.singleBar); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.doubleBar) { + this.view.setBarline(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.doubleBar); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.endBar) { + this.view.setBarline(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.endBar); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.noBar) { + this.view.setBarline(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.positions.end, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.noBar); + } + } + get startBarComponent() { + return this.startBarCode; + } + set startBarComponent(value) { + this.startBarCode = value; + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.startRepeat) { + this.view.setBarline(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.positions.start, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.startRepeat); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.singleBar) { + this.view.setBarline(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.positions.start, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.singleBar); + } + if (_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines[value] === _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.noBar) { + this.view.setBarline(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.positions.start, _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoBarline.barlines.noBar); + } + } + commit() { + return __awaiter(this, void 0, void 0, function* () { + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.view.undo(); + }); + } + remove() { + return __awaiter(this, void 0, void 0, function* () { + }); + } +} +class SuiEndingsDialog extends _adapter__WEBPACK_IMPORTED_MODULE_1__.SuiDialogAdapterBase { + static get applyTo() { + return { + score: 0, selected: 1, remaining: 3 + }; + } + constructor(parameters) { + const adapter = new SuiEndingsAdapter(parameters.view); + super(SuiEndingsDialog.dialogElements, Object.assign({ adapter }, parameters)); + this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE']; + } + changed() { + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + this.view.undoTrackerMeasureSelections('endings dialog'); + yield _super.changed.call(this); + }); + } +} +// export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion' +//| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french'; +SuiEndingsDialog.dialogElements = { + label: 'Measure Endings', + elements: [{ + smoName: 'startBarComponent', + control: 'SuiStartBarButtonComponent', + label: 'Measure Start' + }, { + smoName: 'endBarComponent', + control: 'SuiEndBarButtonComponent', + label: 'Measure End' + }, { + smoName: 'repeatSymbolComponent', + control: 'SuiRepeatSymbolButtonComponent', + label: 'Repeat Symbol' + }], + staticText: [] +}; + + /***/ }), /***/ "./src/ui/dialogs/factory.ts": @@ -46908,12 +49040,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _dialog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dialog */ "./src/ui/dialogs/dialog.ts"); /* harmony import */ var _hairpin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hairpin */ "./src/ui/dialogs/hairpin.ts"); /* harmony import */ var _slur__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./slur */ "./src/ui/dialogs/slur.ts"); -/* harmony import */ var _volta__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./volta */ "./src/ui/dialogs/volta.ts"); -/* harmony import */ var _lyric__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lyric */ "./src/ui/dialogs/lyric.ts"); -/* harmony import */ var _tie__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tie */ "./src/ui/dialogs/tie.ts"); -/* harmony import */ var _dynamics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dynamics */ "./src/ui/dialogs/dynamics.ts"); -/* harmony import */ var _textBlock__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./textBlock */ "./src/ui/dialogs/textBlock.ts"); -/* harmony import */ var _textBracket__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./textBracket */ "./src/ui/dialogs/textBracket.ts"); +/* harmony import */ var _pedalMarking__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pedalMarking */ "./src/ui/dialogs/pedalMarking.ts"); +/* harmony import */ var _volta__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./volta */ "./src/ui/dialogs/volta.ts"); +/* harmony import */ var _lyric__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lyric */ "./src/ui/dialogs/lyric.ts"); +/* harmony import */ var _tie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tie */ "./src/ui/dialogs/tie.ts"); +/* harmony import */ var _dynamics__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./dynamics */ "./src/ui/dialogs/dynamics.ts"); +/* harmony import */ var _textBlock__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./textBlock */ "./src/ui/dialogs/textBlock.ts"); +/* harmony import */ var _textBracket__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./textBracket */ "./src/ui/dialogs/textBracket.ts"); + @@ -46924,7 +49058,7 @@ __webpack_require__.r(__webpack_exports__); var ModifiersWithDialogNames = ['SmoStaffHairpin', 'SmoTie', 'SmoSlur', 'SmoDynamicText', 'SmoVolta', - 'SmoScoreText', 'SmoLoadScore', 'SmoLyric', 'SmoTextGroup', 'SmoStaffTextBracket']; + 'SmoScoreText', 'SmoLoadScore', 'SmoLyric', 'SmoTextGroup', 'SmoStaffTextBracket', 'SmoPedalMarking']; function isModifierWithDialog(modifier) { return ModifiersWithDialogNames.indexOf(modifier.attrs.type) >= 0; } @@ -46943,26 +49077,29 @@ class SuiModifierDialogFactory { if (ctor === 'SmoStaffHairpin') { return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_hairpin__WEBPACK_IMPORTED_MODULE_1__.SuiHairpinAttributesDialog, parameters); } + else if (ctor === 'SmoPedalMarking') { + return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_pedalMarking__WEBPACK_IMPORTED_MODULE_3__.SuiPedalMarkingDialog, parameters); + } else if (ctor === 'SmoTie') { - return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_tie__WEBPACK_IMPORTED_MODULE_5__.SuiTieAttributesDialog, parameters); + return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_tie__WEBPACK_IMPORTED_MODULE_6__.SuiTieAttributesDialog, parameters); } else if (ctor === 'SmoSlur') { return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_slur__WEBPACK_IMPORTED_MODULE_2__.SuiSlurAttributesDialog, parameters); } else if (ctor === 'SmoDynamicText') { - return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dynamics__WEBPACK_IMPORTED_MODULE_6__.SuiDynamicModifierDialog, parameters); + return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dynamics__WEBPACK_IMPORTED_MODULE_7__.SuiDynamicModifierDialog, parameters); } else if (ctor === 'SmoVolta') { - return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_volta__WEBPACK_IMPORTED_MODULE_3__.SuiVoltaAttributeDialog, parameters); + return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_volta__WEBPACK_IMPORTED_MODULE_4__.SuiVoltaAttributeDialog, parameters); } else if (ctor === 'SmoTextGroup') { - return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_textBlock__WEBPACK_IMPORTED_MODULE_7__.SuiTextBlockDialog, parameters); + return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_textBlock__WEBPACK_IMPORTED_MODULE_8__.SuiTextBlockDialog, parameters); } else if (ctor === 'SmoStaffTextBracket') { - return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_textBracket__WEBPACK_IMPORTED_MODULE_8__.SuiTextBracketDialog, parameters); + return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_textBracket__WEBPACK_IMPORTED_MODULE_9__.SuiTextBracketDialog, parameters); } else { - return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_lyric__WEBPACK_IMPORTED_MODULE_4__.SuiLyricDialog, parameters); + return (0,_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_lyric__WEBPACK_IMPORTED_MODULE_5__.SuiLyricDialog, parameters); } } } @@ -47079,9 +49216,14 @@ class SuiLoadFileDialog extends _adapter__WEBPACK_IMPORTED_MODULE_4__.SuiDialogA this.modifier = adapter; } changed() { - super.changed(); - const enable = this.modifier.loadFile.length < 1; - $(this.dgDom.element).find('.ok-button').prop('disabled', enable); + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + _super.changed.call(this); + const enable = this.modifier.loadFile.length < 1; + $(this.dgDom.element).find('.ok-button').prop('disabled', enable); + }); } commit() { return __awaiter(this, void 0, void 0, function* () { @@ -47149,9 +49291,14 @@ class SuiLoadMxmlDialog extends _adapter__WEBPACK_IMPORTED_MODULE_4__.SuiDialogA super(SuiLoadMxmlDialog.dialogElements, Object.assign({ adapter }, parameters)); } changed() { - super.changed(); - const enable = this.adapter.loadFile.length < 1; - $(this.dgDom.element).find('.ok-button').prop('disabled', enable); + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + _super.changed.call(this); + const enable = this.adapter.loadFile.length < 1; + $(this.dgDom.element).find('.ok-button').prop('disabled', enable); + }); } } SuiLoadMxmlDialog.dialogElements = { @@ -47215,10 +49362,15 @@ class SuiLoadMidiDialog extends _adapter__WEBPACK_IMPORTED_MODULE_4__.SuiDialogA super(SuiLoadMidiDialog.dialogElements, Object.assign({ adapter }, parameters)); } changed() { - var _a, _b; - super.changed(); - const enable = ((_b = (_a = this.adapter) === null || _a === void 0 ? void 0 : _a.loadFile) === null || _b === void 0 ? void 0 : _b.length) < 1; - $(this.dgDom.element).find('.ok-button').prop('disabled', enable); + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + var _a, _b; + _super.changed.call(this); + const enable = ((_b = (_a = this.adapter) === null || _a === void 0 ? void 0 : _a.loadFile) === null || _b === void 0 ? void 0 : _b.length) < 1; + $(this.dgDom.element).find('.ok-button').prop('disabled', enable); + }); } } SuiLoadMidiDialog.dialogElements = { @@ -47436,7 +49588,7 @@ class SuiSaveJsonValidationAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_4__ this.fileName = value; } _saveScore() { - const json = this.view.storeScore.serialize({ useDictionary: false, skipStaves: false }); + const json = this.view.storeScore.serialize({ useDictionary: false, skipStaves: false, preserveStaffIds: false }); const jsonText = JSON.stringify(json); if (!this.fileName.endsWith('.json')) { this.fileName = this.fileName + '.json'; @@ -47919,10 +50071,15 @@ class SuiGlobalLayoutDialog extends _adapter__WEBPACK_IMPORTED_MODULE_2__.SuiDia super(SuiGlobalLayoutDialog.dialogElements, Object.assign({ adapter }, params)); } changed() { - super.changed(); - if (this.dimensionControls.find((x) => x.changeFlag)) { - this.initialValue(); - } + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.changed.call(this); + if (this.dimensionControls.find((x) => x.changeFlag)) { + this.initialValue(); + } + }); } } SuiGlobalLayoutDialog.dialogElements = { @@ -47988,6 +50145,164 @@ SuiGlobalLayoutDialog.dialogElements = { }; +/***/ }), + +/***/ "./src/ui/dialogs/gracenote.ts": +/*!*************************************!*\ + !*** ./src/ui/dialogs/gracenote.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiGraceNoteAdapter: () => (/* binding */ SuiGraceNoteAdapter), +/* harmony export */ SuiGraceNoteButtonsComponent: () => (/* binding */ SuiGraceNoteButtonsComponent), +/* harmony export */ SuiGraceNoteDialog: () => (/* binding */ SuiGraceNoteDialog) +/* harmony export */ }); +/* harmony import */ var _components_button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/button */ "./src/ui/dialogs/components/button.ts"); +/* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); +/* harmony import */ var _adapter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./adapter */ "./src/ui/dialogs/adapter.ts"); +/* harmony import */ var _components_baseComponent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/baseComponent */ "./src/ui/dialogs/components/baseComponent.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + + +class SuiGraceNoteButtonsComponent extends _components_baseComponent__WEBPACK_IMPORTED_MODULE_3__.SuiComponentParent { + constructor(dialog, params) { + super(dialog, params); + this.addGraceNoteBtn = new _components_button__WEBPACK_IMPORTED_MODULE_0__.SuiButtonComposite(this.dialog, { + id: this.id + 'addGraceNote', + smoName: 'addGraceNote', + parentControl: this, + icon: 'ribbon-button-text icon icon-smo icon-grace_note', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Add Grace Note', + text: 'G' + }); + this.removeGraceNoteBtn = new _components_button__WEBPACK_IMPORTED_MODULE_0__.SuiButtonComposite(this.dialog, { + id: this.id + 'removeGraceNote', + smoName: 'removeGraceNote', + parentControl: this, + icon: 'ribbon-button-text icon icon-smo icon-grace_remove', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Remove Grace Note', + text: 'alt-g' + }); + this.slashGraceNoteBtn = new _components_button__WEBPACK_IMPORTED_MODULE_0__.SuiButtonComposite(this.dialog, { + id: this.id + 'slashGraceNote', + smoName: 'slashGraceNote', + parentControl: this, + icon: 'ribbon-button-text icon icon-smo icon-grace_slash', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Slash Grace Note' + }); + } + getValue() { + if (this.addGraceNoteBtn.changeFlag) { + return this.addGraceNoteBtn.smoName; + } + if (this.removeGraceNoteBtn.changeFlag) { + return this.removeGraceNoteBtn.smoName; + } + if (this.slashGraceNoteBtn.changeFlag) { + return this.slashGraceNoteBtn.smoName; + } + return ''; + } + setValue(value) { + // ignore + } + changed() { + return __awaiter(this, void 0, void 0, function* () { + this.handleChanged(); + }); + } + get html() { + const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_1__.buildDom; + const q = b('div').classes(this.makeClasses('multiControl smoControl buttonArray')) + .attr('id', this.parameterId); + q.append(this.addGraceNoteBtn.html); + q.append(this.removeGraceNoteBtn.html); + q.append(this.slashGraceNoteBtn.html); + return q; + } + bind() { + this.addGraceNoteBtn.bind(); + this.removeGraceNoteBtn.bind(); + this.slashGraceNoteBtn.bind(); + } +} +class SuiGraceNoteAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_2__.SuiComponentAdapter { + constructor(view) { + super(view); + this.view.groupUndo(true); + } + get modifyGraceNotes() { + return ''; + } + set modifyGraceNotes(value) { + if (value === 'addGraceNote') { + this.view.addGraceNote(); + } + if (value === 'removeGraceNote') { + this.view.removeGraceNote(); + } + if (value === 'slashGraceNote') { + this.view.slashGraceNotes(); + } + } + commit() { + return __awaiter(this, void 0, void 0, function* () { + yield this.view.renderPromise(); + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.view.undo(); + }); + } +} +class SuiGraceNoteDialog extends _adapter__WEBPACK_IMPORTED_MODULE_2__.SuiDialogAdapterBase { + constructor(parameters) { + const adapter = new SuiGraceNoteAdapter(parameters.view); + super(SuiGraceNoteDialog.dialogElements, Object.assign({ adapter }, parameters)); + this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE']; + } +} +SuiGraceNoteDialog.dialogElements = { + label: 'Grace Notes', + elements: [{ + smoName: 'modifyGraceNotes', + control: 'SuiGraceNoteButtonsComponent', + label: 'Add/Remove Grace notes' + }, { + smoName: 'textLabel', + control: 'SuiReadOnlyTextComponent', + label: 'Use hot keys shift-G to add grace notes, alt-g to remove.', + classes: 'hide-input' + }, { + smoName: 'textLabelSelect', + control: 'SuiReadOnlyTextComponent', + label: 'Use hot key alt-l to select grace notes for pitches, durations', + classes: 'hide-input' + }], + staticText: [] +}; + + /***/ }), /***/ "./src/ui/dialogs/hairpin.ts": @@ -48354,6 +50669,204 @@ SuiInstrumentDialog.dialogElements = { }; +/***/ }), + +/***/ "./src/ui/dialogs/keySignature.ts": +/*!****************************************!*\ + !*** ./src/ui/dialogs/keySignature.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiKeySignatureAdapter: () => (/* binding */ SuiKeySignatureAdapter), +/* harmony export */ SuiKeySignatureDialog: () => (/* binding */ SuiKeySignatureDialog) +/* harmony export */ }); +/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../smo/xform/selections */ "./src/smo/xform/selections.ts"); +/* harmony import */ var _adapter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./adapter */ "./src/ui/dialogs/adapter.ts"); +/* harmony import */ var _smo_xform_operations__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../smo/xform/operations */ "./src/smo/xform/operations.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + +class SuiKeySignatureAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_1__.SuiComponentAdapter { + constructor(view, measure) { + super(view); + this.applyToAll = false; + this.applyToSelections = false; + this.applyToRemaining = false; + this.edited = false; + this.measure = measure; + this.keySignature = measure.keySignature; + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + }); + } + applySelections(selections) { + this.view.groupUndo(true); + this.view.modifyColumnsSelectionsNoWait('keySignature', selections, (score, selection) => { + _smo_xform_operations__WEBPACK_IMPORTED_MODULE_2__.SmoOperation.addKeySignature(score, selection, this.keySignature); + }); + this.view.groupUndo(false); + } + apply() { + return __awaiter(this, void 0, void 0, function* () { + let minSel = this.view.tracker.getExtremeSelection(-1).selector.measure; + let maxSel = minSel; + const maxMeasure = this.view.score.staves[0].measures.length - 1; + if (this.applyToAll) { + minSel = 0; + maxSel = maxMeasure; + } + else if (this.applyToRemaining) { + maxSel = maxMeasure; + } + const selections = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelection.getMeasuresBetween(this.view.score, _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.measureSelector(0, minSel), _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelector.measureSelector(0, maxSel)); + this.applySelections(selections); + yield this.view.updatePromise(); + }); + } + get applyTo() { + if (this.applyToAll) { + return 'all'; + } + if (this.applyToRemaining) { + return 'remaining'; + } + return 'selections'; + } + set applyTo(val) { + const orig = this.applyTo; + if (orig === val) { + return; + } + this.applyToAll = false; + this.applyToRemaining = false; + this.applyToSelections = false; + if (val === 'all') { + this.applyToAll = true; + } + else if (val === 'remaining') { + this.applyToRemaining = true; + } + else { + this.applyToSelections = true; + } + } + commit() { + return __awaiter(this, void 0, void 0, function* () { + yield this.apply(); + }); + } + get key() { + return this.keySignature; + } + set key(value) { + this.keySignature = value; + } +} +// ## SuiTempoDialog +// Allow user to choose a tempo or tempo change. +class SuiKeySignatureDialog extends _adapter__WEBPACK_IMPORTED_MODULE_1__.SuiDialogAdapterBase { + changed() { + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.changed.call(this); + }); + } + constructor(parameters) { + const measures = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_0__.SmoSelection.getMeasureList(parameters.view.tracker.selections) + .map((sel) => sel.measure); + const measure = measures[0]; + const adapter = new SuiKeySignatureAdapter(parameters.view, measure); + super(SuiKeySignatureDialog.dialogElements, Object.assign({ adapter }, parameters)); + } +} +SuiKeySignatureDialog.dialogElements = { + label: 'Key Signature', + staticText: [], + elements: [ + { + smoName: 'key', + defaultValue: 'C', + control: 'SuiDropdownComponent', + label: 'Tempo Mode', + options: [{ + label: 'C Major', + value: 'c', + }, { + label: 'F Major', + value: 'f', + }, { + label: 'G Major', + value: 'g', + }, { + label: 'Bb Major', + value: 'bb' + }, { + label: 'D Major', + value: 'd' + }, { + label: 'Eb Major', + value: 'eb' + }, { + label: 'A Major', + value: 'a' + }, { + label: 'Ab Major', + value: 'ab' + }, { + label: 'E Major', + value: 'e' + }, { + label: 'Db Major', + value: 'db' + }, { + label: 'B Major', + value: 'b' + }, { + label: 'F# Major', + value: 'f#' + }, { + label: 'C# Major', + value: 'c#' + }, { + label: 'Gb Major', + value: 'gb' + } + ] + }, { + smoName: 'applyTo', + defaultValue: 'selections', + control: 'SuiDropdownComponent', + label: 'Apply to:', + options: [{ + label: 'Current Selections', + value: 'selections', + }, { + label: 'Future Measures', + value: 'remaining', + }, { + label: 'Full Score', + value: 'all', + }] + } + ] +}; + + /***/ }), /***/ "./src/ui/dialogs/library.ts": @@ -48982,6 +51495,208 @@ SuiMeasureDialog.dialogElements = { }; +/***/ }), + +/***/ "./src/ui/dialogs/microtones.ts": +/*!**************************************!*\ + !*** ./src/ui/dialogs/microtones.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiMicrotoneAdapter: () => (/* binding */ SuiMicrotoneAdapter), +/* harmony export */ SuiMicrotoneButtonComponent: () => (/* binding */ SuiMicrotoneButtonComponent), +/* harmony export */ SuiMicrotoneDialog: () => (/* binding */ SuiMicrotoneDialog) +/* harmony export */ }); +/* harmony import */ var _adapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapter */ "./src/ui/dialogs/adapter.ts"); +/* harmony import */ var _components_buttonArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/buttonArray */ "./src/ui/dialogs/components/buttonArray.ts"); +/* harmony import */ var _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../smo/data/noteModifiers */ "./src/smo/data/noteModifiers.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + +const microtoneButtonFactory = () => { + const params = { + label: 'Microtones', + rows: [{ + label: 'Microtones', + classes: 'pad-span', + buttons: [ + { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-accidentalQuarterToneFlatStein', + id: 'flat75sz', + label: '3/4 flat', + smoName: 'flat75sz' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-accidentalThreeQuarterTonesFlatZimmermann', + id: 'flat25sz', + label: '1/4 flat', + smoName: 'flat25sz' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-accidentalBakiyeFlat', + id: 'flat25ar', + label: '1/4 flat', + smoName: 'flat25ar' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-accidentalThreeQuarterTonesSharpStein', + id: 'sharp75', + label: '3/4 sharp', + smoName: 'sharp75' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-accidentalQuarterToneSharpStein', + id: 'sharp25', + label: 'Marcato', + smoName: 'sharp25' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-top icon-accidentalSori', + id: 'sori', + label: 'Sori', + smoName: 'sori' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-top icon-accidentalKoron', + id: 'koron', + label: 'Koron', + smoName: 'koron' + } + ] + } + ] + }; + return params; +}; +class SuiMicrotoneButtonComponent extends _components_buttonArray__WEBPACK_IMPORTED_MODULE_1__.SuiButtonArrayComponent { + constructor(dialog, parameter) { + super(dialog, parameter, microtoneButtonFactory); + } +} +class SuiMicrotoneAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_0__.SuiComponentAdapter { + constructor(view) { + super(view); + this.toneString = ''; + const selections = this.view.tracker.selections.filter((ss) => ss.note); + this.view.groupUndo(true); + const setForAll = {}; + let notesCount = 0; + selections.forEach((sel) => { + const microtones = sel.note.getMicrotones(); + notesCount += 1; + microtones.forEach((mt) => { + if (!setForAll[mt.tone]) { + setForAll[mt.tone] = 0; + } + setForAll[mt.tone] = setForAll[mt.tone] + 1; + }); + }); + const keys = Object.keys(setForAll); + keys.forEach((key) => { + if (setForAll[key] === notesCount) { + this.toneString = key; + } + }); + } + get tone() { + return this.toneString; + } + set tone(value) { + let add = false; + const selections = this.view.tracker.selections.filter((ss) => ss.note); + // for each selection + if (this.toneString === value) { + this.toneString = ''; + } + else { + this.toneString = value; + if (this.toneString.length) { + add = true; + } + } + selections.forEach((selection) => { + // make sure any existing codes are set + this.view.modifySelectionNoWait('microtone dialog', selection, (score, selection) => { + const note = selection.note; + if (note) { + note.removeMicrotone(); + if (add) { + const defs = _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoMicrotone.defaults; + defs.tone = this.toneString; + note.addMicrotone(new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoMicrotone(defs)); + } + } + }); + }); + } + commit() { + return __awaiter(this, void 0, void 0, function* () { + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.view.undo(); + }); + } + remove() { + return __awaiter(this, void 0, void 0, function* () { + }); + } +} +class SuiMicrotoneDialog extends _adapter__WEBPACK_IMPORTED_MODULE_0__.SuiDialogAdapterBase { + static get applyTo() { + return { + score: 0, selected: 1, remaining: 3 + }; + } + constructor(parameters) { + const adapter = new SuiMicrotoneAdapter(parameters.view); + super(SuiMicrotoneDialog.dialogElements, Object.assign({ adapter }, parameters)); + this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE']; + } + changed() { + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + this.view.undoTrackerMeasureSelections('microtone dialog'); + yield _super.changed.call(this); + }); + } +} +// export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion' +//| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french'; +SuiMicrotoneDialog.dialogElements = { + label: 'Microtones', + elements: [{ + smoName: 'tone', + control: 'SuiMicrotoneButtonComponent', + label: 'Microtones' + }], + staticText: [] +}; + + /***/ }), /***/ "./src/ui/dialogs/newPart.ts": @@ -49151,6 +51866,666 @@ SuiNewPartDialog.dialogElements = { }; +/***/ }), + +/***/ "./src/ui/dialogs/noteHead.ts": +/*!************************************!*\ + !*** ./src/ui/dialogs/noteHead.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiNoteHeadAdapter: () => (/* binding */ SuiNoteHeadAdapter), +/* harmony export */ SuiNoteHeadButtonComponent: () => (/* binding */ SuiNoteHeadButtonComponent), +/* harmony export */ SuiNoteHeadDialog: () => (/* binding */ SuiNoteHeadDialog), +/* harmony export */ SuiStemButtonComponent: () => (/* binding */ SuiStemButtonComponent) +/* harmony export */ }); +/* harmony import */ var _adapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapter */ "./src/ui/dialogs/adapter.ts"); +/* harmony import */ var _components_buttonArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/buttonArray */ "./src/ui/dialogs/components/buttonArray.ts"); +/* harmony import */ var _smo_xform_operations__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../smo/xform/operations */ "./src/smo/xform/operations.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + +const stemButtonFactory = () => { + const params = { + label: 'Stem', + rows: [{ + label: 'Stems', + classes: 'pad-span', + buttons: [ + { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-restQuarter', + id: 'restIcon', + text: 'r', + label: 'Rest', + smoName: 'rest' + }, + { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-transparent icon-restQuarter', + id: 'hideIcon', + label: 'Hidden', + text: 'delete', + smoName: 'hidden' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-repeatBarSlash', + id: 'slashIcon', + label: 'Slash', + smoName: 'slash' + }, + ] + }] + }; + return params; +}; +const noteHeadButtonFactory = () => { + const params = { + label: 'Note Heads', + rows: [{ + label: 'Shapes', + classes: 'pad-span', + buttons: [ + { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadXBlack', + id: 'noteheadBlackX', + label: 'X', + smoName: 'CX' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleUpBlack', + id: 'noteheadTriangleXUp', + label: 'Triangle Up', + smoName: 'TU' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleDownBlack', + id: 'noteheadCircleX', + label: 'Triangle Down', + smoName: 'TD' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadDiamondBlack', + id: 'noteheadDiamondBlack', + label: 'Diamond', + smoName: 'D' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadSquareBlack', + id: 'noteheadSquareBlack', + label: 'Square', + smoName: 'SQ' + } + ] + }, { + label: 'Heads', + classes: 'pad-span', + buttons: [ + { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadDiamondWhole', + id: 'noteheadDiamondWhole', + label: 'Diamond whole', + smoName: 'D0' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadDiamondHalf', + id: 'noteheadDiamondHalf', + label: 'Diamond open', + smoName: 'D1' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadDiamondBlack', + id: 'noteheadDiamondBlack', + label: 'Diamond closed', + smoName: 'D2' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleUpWhole', + id: 'noteheadTriangleUpWhole', + label: 'Triangle up whole', + smoName: 'T0' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleUpHalf', + id: 'noteheadTriangleUpHalf', + label: 'Triangle up open', + smoName: 'T1' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleUpBlack', + id: 'noteheadTriangleUpBlack', + label: 'Triangle up closed', + smoName: 'T2' + } + ] + }, + { label: '', + classes: 'pad-span', + buttons: [ + { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadXWhole', + id: 'noteheadXWhole', + label: 'X Whole', + smoName: 'X0' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadXHalf', + id: 'noteheadXHalf', + label: 'X Helf', + smoName: 'X1' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadXBlack', + id: 'noteheadXBlack', + label: 'X Closed', + smoName: 'X2' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadMoonBlack', + id: 'noteheadMoonBlack', + label: 'Moon Black', + smoName: 'RE' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleLeftBlack', + id: 'noteheadTriangleLeftBlack', + label: 'Left Triangle Closed', + smoName: 'FA' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleRightBlack', + id: 'noteheadTriangleRightBlack', + label: 'Right Triangle Close', + smoName: 'FAUP' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadBlack', + id: 'noteheadBlack', + label: 'Default', + smoName: '' + } + ] + } + ] + }; + return params; +}; +class SuiNoteHeadButtonComponent extends _components_buttonArray__WEBPACK_IMPORTED_MODULE_1__.SuiButtonArrayComponent { + constructor(dialog, parameter, buttonFactory) { + super(dialog, parameter, noteHeadButtonFactory); + } +} +class SuiStemButtonComponent extends _components_buttonArray__WEBPACK_IMPORTED_MODULE_1__.SuiButtonArrayComponent { + constructor(dialog, parameter, buttonFactory) { + super(dialog, parameter, stemButtonFactory); + } +} +class SuiNoteHeadAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_0__.SuiComponentAdapter { + constructor(view) { + super(view); + this.code = ''; + this.stemCode = ''; + this.view.groupUndo(true); + const ss = {}; + const selections = this.view.tracker.selections.filter((nn) => nn.note); + // count all the notes in selection, if they all have the same note head, that is the + // selected note head so select it in the UI. + for (let i = 0; i < selections.length; ++i) { + const nn = selections[i].note; + if (typeof (ss[nn.noteHead]) === 'undefined') { + ss[nn.noteHead] = 0; + } + ss[nn.noteHead] += 1; + } + const keys = Object.keys(ss); + if (keys.length === 1) { + this.code = keys[0]; + } + } + get stemComponent() { + return this.stemCode; + } + set stemComponent(value) { + const note = this.view.tracker.selections[0].note; + if (note) { + if (value === '') { + this.stemCode = ''; + if (note.isSlash()) { + this.view.toggleSlash(); + } + else if (note.isHidden()) { + this.view.deleteNote(); + } + if (note.isRest()) { + this.view.makeRest(); + } + } + else { + this.stemCode = value; + if (value === 'rest') { + this.view.makeRest(); + } + else if (value === 'hidden') { + // hidden and rest are tri-state toggle. + if (!note.isHidden()) { + this.view.deleteNote(); + if (note.isRest()) { + this.view.deleteNote(); + } + } + } + else if (value === 'slash') { + if (!note.isSlash()) { + this.view.toggleSlash(); + } + } + } + } + } + get noteHead() { + return this.code; + } + set noteHead(value) { + this.code = value; + this.view.modifyCurrentSelections('set note head', (score, selections) => { + _smo_xform_operations__WEBPACK_IMPORTED_MODULE_2__.SmoOperation.setNoteHead(selections, this.code); + }); + } + commit() { + return __awaiter(this, void 0, void 0, function* () { + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + this.view.undo(); + }); + } + remove() { + return __awaiter(this, void 0, void 0, function* () { + }); + } +} +class SuiNoteHeadDialog extends _adapter__WEBPACK_IMPORTED_MODULE_0__.SuiDialogAdapterBase { + static get applyTo() { + return { + score: 0, selected: 1, remaining: 3 + }; + } + constructor(parameters) { + const adapter = new SuiNoteHeadAdapter(parameters.view); + super(SuiNoteHeadDialog.dialogElements, Object.assign({ adapter }, parameters)); + this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE']; + } +} +// export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion' +//| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french'; +SuiNoteHeadDialog.dialogElements = { + label: 'Note Heads', + elements: [{ + smoName: 'noteHead', + control: 'SuiNoteHeadButtonComponent', + label: 'Note Head' + }, { + smoName: 'stemComponent', + control: 'SuiStemButtonComponent', + label: 'Rest' + }, { + smoName: 'textMessage', + control: 'SuiReadOnlyTextComponent', + label: 'Use r to toggle note to rest. Use delete to toggle visibility.', + classes: 'hide-input' + }, { + smoName: 'textMessage2', + control: 'SuiReadOnlyTextComponent', + label: 'Use shortcuts when available - they are much faster!', + classes: 'hide-input' + }], + staticText: [] +}; + + +/***/ }), + +/***/ "./src/ui/dialogs/ornament.ts": +/*!************************************!*\ + !*** ./src/ui/dialogs/ornament.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiOrnamentAdapter: () => (/* binding */ SuiOrnamentAdapter), +/* harmony export */ SuiOrnamentButtonComponent: () => (/* binding */ SuiOrnamentButtonComponent), +/* harmony export */ SuiOrnamentDialog: () => (/* binding */ SuiOrnamentDialog) +/* harmony export */ }); +/* harmony import */ var _adapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adapter */ "./src/ui/dialogs/adapter.ts"); +/* harmony import */ var _components_buttonArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/buttonArray */ "./src/ui/dialogs/components/buttonArray.ts"); +/* harmony import */ var _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../smo/data/noteModifiers */ "./src/smo/data/noteModifiers.ts"); +/* harmony import */ var _smo_data_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../smo/data/common */ "./src/smo/data/common.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + + +const ornamentButtonFactory = () => { + const params = { + label: 'Ornaments', + rows: [ + { + label: 'Ornaments', + classes: 'pad-span', + buttons: [ + { classes: 'icon collapseParent articulations-above button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text articulations-above icon-ornamentShortTrill', + id: 'mordentButton', + label: 'Mordent Inverted', + smoName: 'mordentButton' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text articulations-above icon-ornamentMordent', + id: 'mordentInvertedButton', + label: 'Mordent', + smoName: 'mordentInvertedButton' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text articulations-above icon-ornamentPrecompTrillSuffixDandrieu', + id: 'prallUpButton', + label: 'Prall Up Trill', + smoName: 'prallUpButton' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text articulations-above icon-ornamentPrecompTrillLowerSuffix', + id: 'prallDownButton', + label: 'Prall Down Trill', + smoName: 'prallDownButton' + }, { classes: 'icon collapseParent articulations-above button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-ornamentTrill', + id: 'trillButton', + label: 'Trill', + smoName: 'trillButton' + }, { classes: 'icon collapseParent articulations-above button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-ornamentTurn', + id: 'turnButton', + label: 'Turn', + smoName: 'turnButton' + }, { classes: 'icon collapseParent articulations-above button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-ornamentTurnSlash', + id: 'turnSlash', + label: 'Turn Inverted', + smoName: 'turnInvertedButton' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-breathMarkComma', + id: 'breathButton', + label: 'Breath Mark', + smoName: 'breathButton' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-caesura', + id: 'caesuraButton', + label: 'Caesura', + smoName: 'caesuraButton' + } + ] + }, { + label: 'Jazz', + classes: 'pad-span', + buttons: [ + { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-brassScoop', + id: 'scoopArrayButton', + label: 'Mordent Inverted', + smoName: 'scoopButton' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-brassFallLipShort', + id: 'dropArrayButton', + label: 'Drop', + smoName: 'dropButton' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-brassFallRoughMedium', + id: 'dropLongButton', + label: 'Long Drop', + smoName: 'dropLongButton' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-brassDoitMedium', + id: 'doitArrayButton', + label: 'Doit', + smoName: 'doitButton' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-brassLiftMedium', + id: 'doitLongArrayButton', + label: 'Lift/Long Doit', + smoName: 'doitLongButton' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-brassFlip', + id: 'flipArrayButton', + label: 'Flip', + smoName: 'flipButton' + }, { classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-brassSmear', + id: 'smearArrayButton', + label: 'Smear', + smoName: 'smearButton' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-brassMuteClosed', + id: 'muteClosed', + label: 'Brass Mute Closed', + smoName: 'muteClosed' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-brassMuteOpen', + id: 'muteOpen', + label: 'Brass Mute Open', + smoName: 'muteOpen' + }, { + classes: 'icon collapseParent button-array', + control: 'SuiButtonArrayButton', + icon: 'icon-bravura ribbon-button-text icon-brassBend', + id: 'brassBend', + label: 'Brass Bend', + smoName: 'bend' + } + ] + } + ] + }; + return params; +}; +class SuiOrnamentButtonComponent extends _components_buttonArray__WEBPACK_IMPORTED_MODULE_1__.SuiButtonArrayMSComponent { + constructor(dialog, parameter) { + super(dialog, parameter, ornamentButtonFactory); + } +} +class SuiOrnamentAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_0__.SuiComponentAdapter { + static get ornamentIdMap() { + return { + mordentButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.mordent, + mordentInvertedButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.mordent_inverted, + prallUpButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.prallup, + prallDownButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.pralldown, + trillButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.trill, + turnButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.turn, + turnInvertedButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.turn_inverted, + pedalOpenButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.pedalOpen, + pedalClosedButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.pedalClosed, + caesuraButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.caesura, + breathButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.breath, + scoopButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.scoop, + dropButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.fall, + dropLongButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.fallLong, + doitButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.doit, + doitLongButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.doitLong, + flipButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.flip, + smearButton: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.smear, + muteOpen: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.plungerOpen, + muteClosed: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.plungerClosed, + bend: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament.ornaments.bend + }; + } + static ornamentTypeToId(ot) { + const keys = Object.keys(SuiOrnamentAdapter.ornamentIdMap); + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + if (ot === SuiOrnamentAdapter.ornamentIdMap[key]) { + return key; + } + } + return null; + } + static get ornamentIdMapRvs() { + return (0,_smo_data_common__WEBPACK_IMPORTED_MODULE_3__.reverseStaticMap)('SuiOrnamentAdapter.ornamentIdMap', SuiOrnamentAdapter.ornamentIdMap); + } + constructor(view) { + super(view); + this.codes = []; + this.setValues = {}; + this.positionCode = 'auto'; + const selections = this.view.tracker.selections.filter((ss) => ss.note); + this.view.groupUndo(true); + const setForAll = {}; + let notesCount = 0; + selections.forEach((sel) => { + const ornaments = sel.note.getOrnaments(); + notesCount += 1; + ornaments.forEach((ornament) => { + if (!setForAll[ornament.ornament]) { + setForAll[ornament.ornament] = 0; + } + setForAll[ornament.ornament] = setForAll[ornament.ornament] + 1; + }); + }); + const keys = Object.keys(setForAll); + keys.forEach((key) => { + if (setForAll[key] === notesCount) { + const btnId = SuiOrnamentAdapter.ornamentIdMapRvs[key]; + if (btnId) { + this.setValues[btnId] = true; + this.codes.push(btnId); + } + } + }); + } + get ornaments() { + return this.codes; + } + set ornaments(value) { + this.codes = value; + const selections = this.view.tracker.selections.filter((ss) => ss.note); + const oldCodes = Object.keys(this.setValues); + // for each selection + selections.forEach((selection) => { + const note = selection.note; + // make sure any existing codes are set + this.codes.forEach((code) => { + const smoCode = SuiOrnamentAdapter.ornamentIdMap[code]; + this.setValues[code] = true; + // only turn off the code if this value was set initially for all selections + this.view.modifySelectionNoWait('ornament dialog', selection, (score, selection) => { + selection.note.setOrnament(new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_2__.SmoOrnament({ ornament: smoCode }), true); + }); + }); + oldCodes.forEach((oldCode) => { + if (this.setValues[oldCode] && this.codes.indexOf(oldCode) < 0) { + const smoCode = SuiOrnamentAdapter.ornamentIdMap[oldCode]; + const ornament = note.getOrnament(smoCode); + if (ornament) { + this.view.modifySelectionNoWait('ornament dialog', selection, (score, selection) => { + selection.note.setOrnament(ornament, false); + }); + this.setValues[oldCode] = false; + } + } + }); + }); + } + commit() { + return __awaiter(this, void 0, void 0, function* () { + }); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + this.view.undo(); + }); + } + remove() { + return __awaiter(this, void 0, void 0, function* () { + }); + } +} +class SuiOrnamentDialog extends _adapter__WEBPACK_IMPORTED_MODULE_0__.SuiDialogAdapterBase { + static get applyTo() { + return { + score: 0, selected: 1, remaining: 3 + }; + } + constructor(parameters) { + const adapter = new SuiOrnamentAdapter(parameters.view); + super(SuiOrnamentDialog.dialogElements, Object.assign({ adapter }, parameters)); + this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE']; + } + changed() { + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + this.view.undoTrackerMeasureSelections('ornament dialog'); + yield _super.changed.call(this); + }); + } +} +// export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion' +//| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french'; +SuiOrnamentDialog.dialogElements = { + label: 'Ornaments', + elements: [{ + smoName: 'ornaments', + control: 'SuiOrnamentButtonComponent', + label: 'Ornaments' + }], + staticText: [] +}; + + /***/ }), /***/ "./src/ui/dialogs/pageLayout.ts": @@ -49601,19 +52976,24 @@ class SuiPartInfoDialog extends _adapter__WEBPACK_IMPORTED_MODULE_5__.SuiDialogA super(SuiPartInfoDialog.dialogElements, Object.assign({ adapter }, params)); } changed() { - super.changed(); - if (this.dimensionControls.find((x) => x.changeFlag)) { - this.initialValue(); - } - if (this.cmap.includeNextCtrl.changeFlag) { - const includeNext = this.cmap.includeNextCtrl; - if (includeNext.getValue()) { - const partMap = this.view.getPartMap(); - if (this.view.storeScore.staves.length === 2) { - this.complete(); + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.changed.call(this); + if (this.dimensionControls.find((x) => x.changeFlag)) { + this.initialValue(); + } + if (this.cmap.includeNextCtrl.changeFlag) { + const includeNext = this.cmap.includeNextCtrl; + if (includeNext.getValue()) { + const partMap = this.view.getPartMap(); + if (this.view.storeScore.staves.length === 2) { + this.complete(); + } } } - } + }); } } SuiPartInfoDialog.dialogElements = { @@ -49703,6 +53083,614 @@ SuiPartInfoDialog.dialogElements = { }; +/***/ }), + +/***/ "./src/ui/dialogs/pedalMarking.ts": +/*!****************************************!*\ + !*** ./src/ui/dialogs/pedalMarking.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiPedalMarkingAdapter: () => (/* binding */ SuiPedalMarkingAdapter), +/* harmony export */ SuiPedalMarkingDialog: () => (/* binding */ SuiPedalMarkingDialog) +/* harmony export */ }); +/* harmony import */ var _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../smo/data/staffModifiers */ "./src/smo/data/staffModifiers.ts"); +/* harmony import */ var _smo_xform_undo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../smo/xform/undo */ "./src/smo/xform/undo.ts"); +/* harmony import */ var _menus_staffModifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../menus/staffModifier */ "./src/ui/menus/staffModifier.ts"); +/* harmony import */ var _adapter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./adapter */ "./src/ui/dialogs/adapter.ts"); +/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../smo/xform/selections */ "./src/smo/xform/selections.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + + + +class SuiPedalMarkingAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_3__.SuiComponentAdapter { + constructor(view, bracket) { + super(view); + this.changed = false; + this.pedalMarking = bracket; + this.view = view; + this.backup = new _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoPedalMarking(this.pedalMarking.serialize()); + this.backup.attrs.id = bracket.attrs.id; + this.backup.associatedStaff = bracket.associatedStaff; + this.view.groupUndo(true); + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield (0,_menus_staffModifier__WEBPACK_IMPORTED_MODULE_2__.addOrReplacePedalMarking)(this.view, this.backup); + }); + } + remove() { + return __awaiter(this, void 0, void 0, function* () { + yield this.view.removeStaffModifier(this.pedalMarking); + }); + } + commit() { + return __awaiter(this, void 0, void 0, function* () { + return; + }); + } + get depressText() { + return this.pedalMarking.depressText; + } + set depressText(val) { + this.pedalMarking.depressText = val.trim(); + } + get releaseText() { + return this.pedalMarking.releaseText; + } + set releaseText(val) { + this.pedalMarking.releaseText = val.trim(); + } + get bracket() { + return this.pedalMarking.bracket; + } + set bracket(val) { + this.pedalMarking.bracket = val; + } + get startMark() { + return this.pedalMarking.startMark; + } + set startMark(val) { + this.pedalMarking.startMark = val; + } + get releaseMark() { + return this.pedalMarking.releaseMark; + } + set releaseMark(val) { + this.pedalMarking.releaseMark = val; + } +} +class SuiPedalMarkingDialog extends _adapter__WEBPACK_IMPORTED_MODULE_3__.SuiDialogAdapterBase { + constructor(parameters) { + const adapter = new SuiPedalMarkingAdapter(parameters.view, parameters.modifier); + super(SuiPedalMarkingDialog.dialogElements, Object.assign({ adapter }, parameters)); + this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS']; + } + changed() { + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.changed.call(this); + const redraw = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_4__.SmoSelection.getMeasuresBetween(this.view.score, this.adapter.pedalMarking.startSelector, this.adapter.pedalMarking.endSelector); + this.view.undoStaffModifier('pedal marking', this.adapter.backup, _smo_xform_undo__WEBPACK_IMPORTED_MODULE_1__.UndoBuffer.bufferSubtypes.UPDATE); + yield (0,_menus_staffModifier__WEBPACK_IMPORTED_MODULE_2__.addOrReplacePedalMarking)(this.view, this.adapter.pedalMarking); + this.view._renderChangedMeasures(redraw); + yield this.view.updatePromise(); + }); + } +} +SuiPedalMarkingDialog.dialogElements = { + label: 'Pedal Marking Properties', elements: [{ + smoName: 'bracket', + defaultValue: 1, + control: 'SuiToggleComponent', + label: 'Bracket' + }, { + smoName: 'startMark', + defaultValue: 1, + control: 'SuiToggleComponent', + label: 'Start Mark' + }, { + smoName: 'releaseMark', + defaultValue: 1, + control: 'SuiToggleComponent', + label: 'ReleaseMark' + }, { + smoName: 'depressText', + control: 'SuiTextInputComponent', + label: 'Depress Text' + }, { + smoName: 'releaseText', + control: 'SuiTextInputComponent', + label: 'Release Text' + }], + staticText: [] +}; + + +/***/ }), + +/***/ "./src/ui/dialogs/pitch.ts": +/*!*********************************!*\ + !*** ./src/ui/dialogs/pitch.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiIntervalButtonComponent: () => (/* binding */ SuiIntervalButtonComponent), +/* harmony export */ SuiLetterButtonComponent: () => (/* binding */ SuiLetterButtonComponent), +/* harmony export */ SuiPitchAdapter: () => (/* binding */ SuiPitchAdapter), +/* harmony export */ SuiPitchDialog: () => (/* binding */ SuiPitchDialog), +/* harmony export */ SuiTransposeButtonComponent: () => (/* binding */ SuiTransposeButtonComponent) +/* harmony export */ }); +/* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); +/* harmony import */ var _components_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/button */ "./src/ui/dialogs/components/button.ts"); +/* harmony import */ var _components_baseComponent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/baseComponent */ "./src/ui/dialogs/components/baseComponent.ts"); +/* harmony import */ var _smo_data_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../smo/data/common */ "./src/smo/data/common.ts"); +/* harmony import */ var _adapter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./adapter */ "./src/ui/dialogs/adapter.ts"); +/* harmony import */ var _components_buttonArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/buttonArray */ "./src/ui/dialogs/components/buttonArray.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + + + + +class SuiTransposeButtonComponent extends _components_baseComponent__WEBPACK_IMPORTED_MODULE_2__.SuiComponentParent { + constructor(dialog, params) { + super(dialog, params); + this.upOctaveComponent = new _components_button__WEBPACK_IMPORTED_MODULE_1__.SuiButtonComposite(this.dialog, { + id: this.id + 'upOctave', + smoName: 'upOctave', + parentControl: this, + icon: 'ribbon-button-text icon-bravura icon-ottavaAlta', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Up Octave', + text: '+' + }); + this.downOctaveComponent = new _components_button__WEBPACK_IMPORTED_MODULE_1__.SuiButtonComposite(this.dialog, { + id: this.id + 'downOctave', + smoName: 'downOctave', + parentControl: this, + icon: 'ribbon-button-text icon-bravura icon-ottavaBassa', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Down Octave', + text: '_' + }); + this.upStepComponent = new _components_button__WEBPACK_IMPORTED_MODULE_1__.SuiButtonComposite(this.dialog, { + id: this.id + 'upStep', + smoName: 'upStep', + parentControl: this, + icon: 'ribbon-button-text icon-bravura icon-accidentalSharp', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Add Dot', + text: '=' + }); + this.downStepComponent = new _components_button__WEBPACK_IMPORTED_MODULE_1__.SuiButtonComposite(this.dialog, { + id: this.id + 'downStep', + smoName: 'downStep', + parentControl: this, + icon: 'ribbon-button-text icon-bravura icon-accidentalFlat', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Remove Dot', + text: '-' + }); + this.toggleEnharmonicComponent = new _components_button__WEBPACK_IMPORTED_MODULE_1__.SuiButtonComposite(this.dialog, { + id: this.id + 'toggleEnharmonic', + smoName: 'toggleEnharmonic', + parentControl: this, + icon: 'icon-smo ribbon-button-text icon-accident', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Remove Dot', + text: 'Shift-E' + }); + this.toggleCourtesyComponent = new _components_button__WEBPACK_IMPORTED_MODULE_1__.SuiButtonComposite(this.dialog, { + id: this.id + 'toggleCourtesy', + smoName: 'toggleCourtesy', + parentControl: this, + icon: 'icon-smo ribbon-button-text icon-courtesy', + classes: 'icon collapseParent button-hotkey', + control: 'SuiButtonComponent', + label: 'Toggle Courtesy Accidental', + text: 'Shift-F' + }); + } + getValue() { + if (this.upOctaveComponent.changeFlag) { + return this.upOctaveComponent.smoName; + } + if (this.downOctaveComponent.changeFlag) { + return this.downOctaveComponent.smoName; + } + if (this.upStepComponent.changeFlag) { + return this.upStepComponent.smoName; + } + if (this.downStepComponent.changeFlag) { + return this.downStepComponent.smoName; + } + if (this.toggleEnharmonicComponent.changeFlag) { + return this.toggleEnharmonicComponent.smoName; + } + if (this.toggleCourtesyComponent.changeFlag) { + return this.toggleCourtesyComponent.smoName; + } + return ''; + } + setValue(value) { + // ignore + } + changed() { + return __awaiter(this, void 0, void 0, function* () { + this.handleChanged(); + }); + } + get html() { + const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; + const q = b('div').classes(this.makeClasses('multiControl smoControl buttonArray')) + .attr('id', this.parameterId); + q.append(this.upOctaveComponent.html); + q.append(this.downOctaveComponent.html); + q.append(this.upStepComponent.html); + q.append(this.downStepComponent.html); + q.append(this.toggleEnharmonicComponent.html); + q.append(this.toggleCourtesyComponent.html); + return q; + } + bind() { + this.upOctaveComponent.bind(); + this.downOctaveComponent.bind(); + this.upStepComponent.bind(); + this.downStepComponent.bind(); + this.toggleEnharmonicComponent.bind(); + this.toggleCourtesyComponent.bind(); + } +} +const intervalButtonFactory = () => { + const params = { + label: 'Intervals', + rows: [{ + label: 'Intervals Up', + classes: 'pad-span', + buttons: [ + { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'chordsecond', + text: '2nd', + label: '2nd', + smoName: 'chordsecond' + }, + { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'chordthird', + text: '3rd', + label: '3rd', + smoName: 'chordthird' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'chordfourth', + text: '4th', + label: '4th', + smoName: 'chordfourth' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'chordfifth', + text: '5th', + label: '5th', + smoName: 'chordfifth' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'chordsixth', + text: '6th', + label: '6th', + smoName: 'chordsixth' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'chordseventh', + text: '7th', + label: '7th', + smoName: 'chordseventh' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'chordoctave', + text: '8va', + label: '8va', + smoName: 'chordoctave' + } + ] + }, + { + label: 'Intervals Down', + classes: 'pad-span', + buttons: [ + { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'downchordsecond', + text: '2nd', + label: '2nd', + smoName: 'downchordsecond' + }, + { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'downchordthird', + text: '3rd', + label: '3rd', + smoName: 'downchordthird' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'downchordfourth', + text: '4th', + label: '4th', + smoName: 'downchordfourth' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'downchordfifth', + text: '5th', + label: '5th', + smoName: 'downchordfifth' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'downchordsixth', + text: '6th', + label: '6th', + smoName: 'downchordsixth' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'downchordseventh', + text: '7th', + label: '7th', + smoName: 'downchordseventh' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'downchordoctave', + text: '8va', + label: '8va', + smoName: 'downchordoctave' + } + ] + }] + }; + return params; +}; +const letterButtonFactory = () => { + const params = { + label: 'Pitches', + rows: [{ + label: 'Pitches', + classes: 'pad-span', + buttons: [ + { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'pitchA', + text: 'A', + label: 'A', + smoName: 'a' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'pitchB', + text: 'B', + label: 'B', + smoName: 'b' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'pitchC', + text: 'C', + label: 'C', + smoName: 'c' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'pitchD', + text: 'D', + label: 'D', + smoName: 'd' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'pitchE', + text: 'E', + label: 'E', + smoName: 'e' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'pitchF', + text: 'F', + label: 'F', + smoName: 'f' + }, { classes: 'icon collapseParent button-array repetext', + control: 'SuiButtonArrayButton', + icon: '', + id: 'pitchG', + text: 'G', + label: 'G', + smoName: 'g' + }, + ] + }] + }; + return params; +}; +class SuiIntervalButtonComponent extends _components_buttonArray__WEBPACK_IMPORTED_MODULE_5__.SuiButtonArrayComponent { + constructor(dialog, parameter, buttonFactory) { + super(dialog, parameter, intervalButtonFactory); + } +} +class SuiLetterButtonComponent extends _components_buttonArray__WEBPACK_IMPORTED_MODULE_5__.SuiButtonArrayComponent { + constructor(dialog, parameter, buttonFactory) { + super(dialog, parameter, letterButtonFactory); + } +} +class SuiPitchAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_4__.SuiComponentAdapter { + constructor(view) { + super(view); + this.view.groupUndo(true); + } + get transposeButtons() { + return ''; + } + set transposeButtons(value) { + if (value === 'upOctave') { + this.view.transposeScore(12); + } + if (value === 'downOctave') { + this.view.transposeScore(-12); + } + if (value === 'upStep') { + this.view.transposeScore(1); + } + if (value === 'downStep') { + this.view.transposeScore(-1); + } + if (value === 'toggleEnharmonic') { + this.view.toggleEnharmonic(); + } + if (value === 'toggleCourtesy') { + this.view.toggleCourtesyAccidentals(); + } + } + get intervalButtons() { + return ''; + } + set intervalButtons(value) { + const intervalUp = SuiPitchAdapter.intervalUp.indexOf(value); + const intervalDown = SuiPitchAdapter.intervalDown.indexOf(value); + if (intervalUp >= 0) { + this.view.setInterval(intervalUp + 1); + } + if (intervalDown >= 0) { + this.view.setInterval((intervalDown + 1) * -1); + } + } + get pitchButtons() { + return ''; + } + set pitchButtons(value) { + if ((0,_smo_data_common__WEBPACK_IMPORTED_MODULE_3__.IsPitchLetter)(value)) { + this.view.setPitch(value); + } + } + cancel() { + return __awaiter(this, void 0, void 0, function* () { + yield this.view.undo(); + }); + } + commit() { + return __awaiter(this, void 0, void 0, function* () { + }); + } +} +SuiPitchAdapter.intervalUp = ['chordsecond', 'chordthird', 'chordfourth', 'chordfifth', 'chordsixth', 'chordseventh', 'chordoctave']; +SuiPitchAdapter.intervalDown = ['downchordsecond', 'downchordthird', 'downchordfourth', 'downchordfifth', 'downchordsixth', + 'downchordseventh', 'downchordoctave']; +class SuiPitchDialog extends _adapter__WEBPACK_IMPORTED_MODULE_4__.SuiDialogAdapterBase { + static get applyTo() { + return { + score: 0, selected: 1, remaining: 3 + }; + } + constructor(parameters) { + const adapter = new SuiPitchAdapter(parameters.view); + super(SuiPitchDialog.dialogElements, Object.assign({ adapter }, parameters)); + this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE']; + } +} +// export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion' +//| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french'; +SuiPitchDialog.dialogElements = { + label: 'Pitch', + elements: [{ + smoName: 'transposeButtons', + control: 'SuiTransposeButtonComponent', + label: 'Pitch and Transposition' + }, { + smoName: 'intervalButtons', + control: 'SuiIntervalButtonComponent', + label: 'Intervals' + }, { + smoName: 'pitchButtons', + control: 'SuiLetterButtonComponent', + label: 'Letter Names' + }, { + smoName: 'textMessage4', + control: 'SuiReadOnlyTextComponent', + label: 'Use a-g on the keyboard for notes with those letter names', + classes: 'hide-input' + }, { + smoName: 'textMessage1', + control: 'SuiReadOnlyTextComponent', + label: `Learn the keyboard shortcuts, they're much faster!`, + classes: 'hide-input' + }, { + smoName: 'textMessage5', + control: 'SuiReadOnlyTextComponent', + label: 'Use - = keys to move pitch up/down 1/2 step', + classes: 'hide-input' + }, { + smoName: 'textMessage2', + control: 'SuiReadOnlyTextComponent', + label: 'Use _ (shift minus) + (shift = ) keys to move pitch up/down octaves', + classes: 'hide-input' + }, { + smoName: 'textMessage3', + control: 'SuiReadOnlyTextComponent', + label: 'Use 2-8 on the keyboard for intervals (Shift for interval below)', + classes: 'hide-input' + }, { + smoName: 'textMessage2', + control: 'SuiReadOnlyTextComponent', + label: 'Use shift + arrow keys to navigate and select notes', + classes: 'hide-input' + }], + staticText: [] +}; + + /***/ }), /***/ "./src/ui/dialogs/preferences.ts": @@ -50110,12 +54098,6 @@ class SuiSlurAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_1__.SuiComponentA view.addOrUpdateStaffModifier(current, slur); this.changed = true; } - writeSlurBool(view, slur, key, value) { - const current = new _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur(slur); - slur[key] = value; - view.addOrUpdateStaffModifier(current, slur); - this.changed = true; - } cancel() { return __awaiter(this, void 0, void 0, function* () { if (!this.changed) { @@ -50138,7 +54120,7 @@ class SuiSlurAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_1__.SuiComponentA const self = this; this.updating = true; const updateSlur = (score, slur) => __awaiter(this, void 0, void 0, function* () { - const params = _smo_xform_operations__WEBPACK_IMPORTED_MODULE_2__.SmoOperation.getDefaultSlurDirection(score, slur.startSelector, slur.endSelector, _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.positions.AUTO, _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.orientations.AUTO); + const params = _smo_xform_operations__WEBPACK_IMPORTED_MODULE_2__.SmoOperation.getDefaultSlurDirection(score, slur.startSelector, slur.endSelector); const original = new _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur(slur); _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SlurNumberParams.forEach((key) => { slur[key] = params[key]; @@ -50174,7 +54156,7 @@ class SuiSlurAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_1__.SuiComponentA return false; } set resetDefaults(value) { - const params = _smo_xform_operations__WEBPACK_IMPORTED_MODULE_2__.SmoOperation.getDefaultSlurDirection(this.view.score, this.slur.startSelector, this.slur.endSelector, _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.positions.AUTO, _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.orientations.AUTO); + const params = _smo_xform_operations__WEBPACK_IMPORTED_MODULE_2__.SmoOperation.getDefaultSlurDirection(this.view.score, this.slur.startSelector, this.slur.endSelector); _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SlurNumberParams.forEach((key) => { this.slur[key] = params[key]; }); @@ -50205,11 +54187,11 @@ class SuiSlurAdapter extends _adapter__WEBPACK_IMPORTED_MODULE_1__.SuiComponentA set cp1x(value) { this.writeSlurNumber(this.view, this.slur, 'cp1x', value); } - get invert() { - return this.slur.invert; + get orientation() { + return this.slur.orientation; } - set invert(value) { - this.writeSlurBool(this.view, this.slur, 'invert', value); + set orientation(value) { + this.writeSlurNumber(this.view, this.slur, 'orientation', value); } get position_end() { return this.slur.position_end; @@ -50281,14 +54263,17 @@ class SuiSlurAttributesDialog extends _adapter__WEBPACK_IMPORTED_MODULE_1__.SuiD }); } changed() { - super.changed(); - if (this.adapter.updating) { - const self = this; - this.disableClose(); - this.modalPromise().then(() => { - self.enableClose(); - }); - } + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.changed.call(this); + if (this.adapter.updating) { + this.disableClose(); + yield this.modalPromise(); + this.enableClose(); + } + }); } constructor(parameters) { const adapter = new SuiSlurAdapter(parameters.view, parameters.modifier); @@ -50319,9 +54304,12 @@ SuiSlurAttributesDialog.dialogElements = { label: 'Y Offset' }, { smoName: 'position', - defaultValue: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.positions.HEAD, + defaultValue: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.positions.AUTO, dataType: 'int', options: [{ + value: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.positions.AUTO, + label: 'Auto' + }, { value: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.positions.HEAD, label: 'Head' }, { @@ -50335,6 +54323,9 @@ SuiSlurAttributesDialog.dialogElements = { defaultValue: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.positions.HEAD, dataType: 'int', options: [{ + value: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.positions.AUTO, + label: 'Auto' + }, { value: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.positions.HEAD, label: 'Head' }, { @@ -50344,9 +54335,21 @@ SuiSlurAttributesDialog.dialogElements = { control: 'SuiDropdownComponent', label: 'End Position' }, { - smoName: 'invert', - control: 'SuiToggleComponent', - label: 'Invert' + smoName: 'orientation', + defaultValue: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.orientations.AUTO, + dataType: 'int', + options: [{ + value: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.orientations.AUTO, + label: 'Auto' + }, { + value: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.orientations.UP, + label: 'Up' + }, { + value: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoSlur.orientations.DOWN, + label: 'Down' + }], + control: 'SuiDropdownComponent', + label: 'Orientation' }, { smoName: 'resetDefaults', control: 'SuiToggleComponent', @@ -50767,8 +54770,13 @@ class SuiTempoDialog extends _adapter__WEBPACK_IMPORTED_MODULE_2__.SuiDialogAdap } } changed() { - super.changed(); - this.showHideCustom(); + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.changed.call(this); + this.showHideCustom(); + }); } initialValue() { super.initialValue(); @@ -50936,6 +54944,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _render_sui_textEdit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../render/sui/textEdit */ "./src/render/sui/textEdit.ts"); /* harmony import */ var _dialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dialog */ "./src/ui/dialogs/dialog.ts"); /* harmony import */ var _help__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../help */ "./src/ui/help.ts"); +/* harmony import */ var _smo_xform_undo__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../smo/xform/undo */ "./src/smo/xform/undo.ts"); // [Smoosic](https://github.com/AaronDavidNewman/Smoosic) // Copyright (c) Aaron David Newman 2021. @@ -50945,6 +54954,7 @@ __webpack_require__.r(__webpack_exports__); + class SuiTextBlockDialog extends _dialog__WEBPACK_IMPORTED_MODULE_5__.SuiDialogBase { get textEditorCtrl() { return this.cmap.textEditorCtrl; @@ -50974,15 +54984,16 @@ class SuiTextBlockDialog extends _dialog__WEBPACK_IMPORTED_MODULE_5__.SuiDialogB return this.cmap.attachToSelectorCtrl; } constructor(parameters) { + var _a; let edited = false; let isNew = false; + const originalTextGroup = (_a = parameters.modifier) !== null && _a !== void 0 ? _a : null; const tracker = parameters.view.tracker; ['staffModifier', 'suggestion'].forEach((outlineType) => { if (tracker.outlines[outlineType]) { _render_sui_svgHelpers__WEBPACK_IMPORTED_MODULE_3__.SvgHelpers.eraseOutline(tracker.outlines[outlineType]); } }); - const layout = parameters.view.score.layoutManager.getGlobalLayout(); // Create a new text modifier, if this is new text. Else use selection if (!parameters.modifier) { isNew = true; @@ -51006,15 +55017,19 @@ class SuiTextBlockDialog extends _dialog__WEBPACK_IMPORTED_MODULE_5__.SuiDialogB const newGroup = new _smo_data_scoreText__WEBPACK_IMPORTED_MODULE_0__.SmoTextGroup(grpParams); parameters.modifier = newGroup; parameters.modifier.setActiveBlock(newText); + parameters.view.groupUndo(true); parameters.view.addTextGroup(parameters.modifier); edited = true; } else { // Make sure there is a score text to start the editing. + parameters.modifier = _smo_data_scoreText__WEBPACK_IMPORTED_MODULE_0__.SmoTextGroup.deserializePreserveId(parameters.modifier); parameters.modifier.setActiveBlock(parameters.modifier.textBlocks[0].text); } super(SuiTextBlockDialog.dialogElements, parameters); + this.originalTextGroup = null; this.outlineRect = null; + this.originalTextGroup = originalTextGroup; this.isNew = isNew; this.modifier = parameters.modifier; this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS']; @@ -51046,6 +55061,17 @@ class SuiTextBlockDialog extends _dialog__WEBPACK_IMPORTED_MODULE_5__.SuiDialogB this.paginationCtrl.setValue(this.modifier.pagination); this.highlightActiveRegion(); } + static unrenderTextGroup(tg) { + tg.elements.forEach((el) => { + el.remove(); + }); + tg.elements = []; + } + unrenderOriginal() { + if (this.originalTextGroup) { + SuiTextBlockDialog.unrenderTextGroup(this.originalTextGroup); + } + } display() { const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.activeScoreText); const svg = pageContext.svg; @@ -51063,6 +55089,7 @@ class SuiTextBlockDialog extends _dialog__WEBPACK_IMPORTED_MODULE_5__.SuiDialogB if (!this.modifier.edited) { this.modifier.edited = true; _render_sui_layoutDebug__WEBPACK_IMPORTED_MODULE_2__.layoutDebug.addDialogDebug('text transform db: startEditSession'); + this.unrenderOriginal(); this.textEditorCtrl.startEditSession(); } this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove'); @@ -51140,6 +55167,7 @@ class SuiTextBlockDialog extends _dialog__WEBPACK_IMPORTED_MODULE_5__.SuiDialogB this.activeScoreText.fontInfo.style = fontInfo.style; } // Use layout context because render may have reset svg. + const subtype = this.isNew ? _smo_xform_undo__WEBPACK_IMPORTED_MODULE_7__.UndoBuffer.bufferSubtypes.ADD : _smo_xform_undo__WEBPACK_IMPORTED_MODULE_7__.UndoBuffer.bufferSubtypes.UPDATE; this.view.updateTextGroup(this.modifier); } highlightActiveRegion() { @@ -51224,16 +55252,19 @@ class SuiTextBlockDialog extends _dialog__WEBPACK_IMPORTED_MODULE_5__.SuiDialogB this.complete(); } _removeText() { + // The modifier rendered is for edit, not the one attached to the score. so + // unrender it now + SuiTextBlockDialog.unrenderTextGroup(this.modifier); this.view.removeTextGroup(this.modifier); } bindElements() { const dgDom = this.dgDom; $(dgDom.element).find('.ok-button').off('click').on('click', () => { + const subtype = this.isNew ? _smo_xform_undo__WEBPACK_IMPORTED_MODULE_7__.UndoBuffer.bufferSubtypes.ADD : _smo_xform_undo__WEBPACK_IMPORTED_MODULE_7__.UndoBuffer.bufferSubtypes.UPDATE; this.view.updateTextGroup(this.modifier); this._complete(); }); $(dgDom.element).find('.cancel-button').off('click').on('click', () => { - this.view.groupUndo(false); if (this.edited) { this.modifier.elements.forEach((element) => { element.remove(); @@ -51830,10 +55861,15 @@ class SuiTransposeScoreDialog extends _adapter__WEBPACK_IMPORTED_MODULE_0__.SuiD super(SuiTransposeScoreDialog.dialogElements, Object.assign({ adapter }, params)); } changed() { - super.changed(); - if (this.dimensionControls.find((x) => x.changeFlag)) { - this.initialValue(); - } + const _super = Object.create(null, { + changed: { get: () => super.changed } + }); + return __awaiter(this, void 0, void 0, function* () { + yield _super.changed.call(this); + if (this.dimensionControls.find((x) => x.changeFlag)) { + this.initialValue(); + } + }); } } SuiTransposeScoreDialog.dialogElements = { @@ -52028,9 +56064,12 @@ class BrowserEventSource { this.mouseUpHandlers = []; this.mouseDownHandlers = []; this.domTriggers = []; + this.keyupHandlers = []; this.handleKeydown = this.evKey.bind(this); + this.handleKeyup = this.keyUp.bind(this); this.handleScoreChangeEvent = this.evScoreChange.bind(this); window.addEventListener("keydown", this.handleKeydown, true); + window.addEventListener("keyup", this.handleKeyup, true); window.addEventListener(_render_sui_renderState__WEBPACK_IMPORTED_MODULE_0__.scoreChangeEvent, this.handleScoreChangeEvent, true); } evKey(event) { @@ -52042,6 +56081,15 @@ class BrowserEventSource { } }); } + keyUp(event) { + return __awaiter(this, void 0, void 0, function* () { + let i = 0; + for (i = 0; i < this.keyupHandlers.length; ++i) { + const handler = this.keyupHandlers[i]; + yield handler.sink[handler.method](event); + } + }); + } evScoreChange(event) { return __awaiter(this, void 0, void 0, function* () { let i = 0; @@ -52115,6 +56163,11 @@ class BrowserEventSource { this._unbindHandlerArray(this.keydownHandlers, handlers, handler); this.keydownHandlers = handlers; } + unbindKeyupHandler(handler) { + const handlers = []; + this._unbindHandlerArray(this.keyupHandlers, handlers, handler); + this.keyupHandlers = handlers; + } // ### bindKeydownHandler // add a handler for the evKey event, for keyboard data. bindKeydownHandler(sink, method) { @@ -52122,6 +56175,11 @@ class BrowserEventSource { this.keydownHandlers.push(handler); return handler; } + bindKeyupHandler(sink, method) { + var handler = { symbol: Symbol(), sink, method }; + this.keyupHandlers.push(handler); + return handler; + } bindMouseMoveHandler(sink, method) { var handler = { symbol: Symbol(), sink, method }; this.mouseMoveHandlers.push(handler); @@ -52218,10 +56276,6 @@ class SuiExceptionHandler { stack = 'Error with stack: ' + e2.message; } doing = 'Last operation not available.'; - const lastOp = this.view.storeUndo.peek(); - if (lastOp) { - doing = lastOp.title; - } const url = 'https://github.com/AaronDavidNewman/Smoosic/issues'; const bodyObject = JSON.stringify({ message, @@ -52240,13 +56294,9 @@ class SuiExceptionHandler { .append(b('div').classes('button-container').append(b('button').classes('bug-submit-button').text('Submit Report')))); $('.bugDialog').html(''); $('.bugDialog').append(r.dom()); + // used to try to restore the last good score here... $('.bug-dismiss-button').off('click').on('click', () => { $('body').removeClass('bugReport'); - if (lastOp) { - this.view.storeUndo.undo(this.view.score, {}, true); - this.view.renderer.render(); - _application_eventHandler__WEBPACK_IMPORTED_MODULE_1__.SuiEventHandler.reentry = false; - } }); $('.bug-submit-button').off('click').on('click', () => { $('#bug-text-area').select(); @@ -58217,13 +62267,6 @@ class defaultEditorKeys { altKey: false, shiftKey: false, action: "stopPlayer" - }, { - event: "keydown", - key: "t", - ctrlKey: false, - altKey: false, - shiftKey: false, - action: "tempoDialog" }, { event: "keydown", @@ -58695,6 +62738,230 @@ class defaultTrackerKeys { } +/***/ }), + +/***/ "./src/ui/menus/beams.ts": +/*!*******************************!*\ + !*** ./src/ui/menus/beams.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiBeamMenu: () => (/* binding */ SuiBeamMenu) +/* harmony export */ }); +/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + +class SuiBeamMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiConfiguredMenu { + constructor(params) { + super(params, 'Beams', SuiBeamMenuOptions); + } +} +const toggleBeamGroupMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.toggleBeamGroup(); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + for (let j = 0; j < mm.voices.length; ++j) { + const vv = mm.voices[j]; + for (let k = 0; k < vv.notes.length; ++k) { + const nn = vv.notes[k]; + if (nn) { + if (nn.noteType === 'n' && nn.tickCount < 4096) { + return true; + } + } + } + } + } + return false; + }, + menuChoice: { + icon: 'icon smo-icon icon-beamBreak', + text: 'Toggle Beam Group', + hotkey: 'x', + value: 'toggleBeamMenuOption' + } +}; +const beamSelectionsMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.beamSelections(); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + for (let j = 0; j < mm.voices.length; ++j) { + const vv = mm.voices[j]; + for (let k = 0; k < vv.notes.length; ++k) { + const nn = vv.notes[k]; + if (nn) { + if (nn.noteType === 'n' && nn.tickCount < 4096) { + return true; + } + } + } + } + } + return false; + }, + menuChoice: { + icon: 'icon smo-icon icon-beam', + text: 'Beam Selections', + hotkey: 'Shift-X', + value: 'beamSelectionsMenuOption' + } +}; +const toggleBeamDirectionMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.toggleBeamDirection(); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + for (let j = 0; j < mm.voices.length; ++j) { + const vv = mm.voices[j]; + for (let k = 0; k < vv.notes.length; ++k) { + const nn = vv.notes[k]; + if (nn) { + if (nn.noteType === 'n') { + return true; + } + } + } + } + } + return false; + }, + menuChoice: { + icon: 'icon icon-smo icon-flagFlip', + text: 'Toggle Stem Direction (auto, up, down)', + hotkey: 'Shift-B', + value: 'toggleBeamDirection' + } +}; +const tripletMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.makeTuplet(3); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + for (let j = 0; j < mm.voices.length; ++j) { + const vv = mm.voices[j]; + for (let k = 0; k < vv.notes.length; ++k) { + const nn = vv.notes[k]; + if (nn) { + if (nn.noteType === 'n') { + return true; + } + } + } + } + } + return false; + }, + menuChoice: { + icon: ' icon icon-smo icon-triplet', + text: 'Make Triplet', + hotkey: 'Ctrl-3', + value: 'tripletMenuOption' + } +}; +const quintupletMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.makeTuplet(3); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + for (let j = 0; j < mm.voices.length; ++j) { + const vv = mm.voices[j]; + for (let k = 0; k < vv.notes.length; ++k) { + const nn = vv.notes[k]; + if (nn) { + if (nn.noteType === 'n') { + return true; + } + } + } + } + } + return false; + }, + menuChoice: { + icon: 'icon-smo icon-quint', + text: 'Make 5-tuplet', + hotkey: 'Ctrl-5', + value: 'quintupletMenuOption' + } +}; +const sevenTupletMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.makeTuplet(3); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + for (let j = 0; j < mm.voices.length; ++j) { + const vv = mm.voices[j]; + for (let k = 0; k < vv.notes.length; ++k) { + const nn = vv.notes[k]; + if (nn) { + if (nn.noteType === 'n') { + return true; + } + } + } + } + } + return false; + }, + menuChoice: { + icon: 'icon-smo icon icon-septuplet', + hotkey: 'Ctrl-7', + text: 'Make 7-tuplet', + value: 'sevenTupletMenuOption' + } +}; +const removeTupletMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.unmakeTuplet(); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + for (let j = 0; j < mm.voices.length; ++j) { + const vv = mm.voices[j]; + for (let k = 0; k < vv.notes.length; ++k) { + const nn = vv.notes[k]; + if (nn) { + if (nn.isTuplet) { + return true; + } + } + } + } + } + return false; + }, + menuChoice: { + icon: 'icon icon-smo icon-no_tuplet', + text: 'Unmake tuplet', + hotkey: 'Ctrl-0', + value: 'unmakeTuplet' + } +}; +const SuiBeamMenuOptions = [toggleBeamGroupMenuOption, + beamSelectionsMenuOption, toggleBeamDirectionMenuOption, tripletMenuOption, quintupletMenuOption, + sevenTupletMenuOption, removeTupletMenuOption +]; + + /***/ }), /***/ "./src/ui/menus/dynamics.ts": @@ -58710,6 +62977,15 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ }); /* harmony import */ var _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../smo/data/noteModifiers */ "./src/smo/data/noteModifiers.ts"); /* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; class SuiDynamicsMenu extends _menu__WEBPACK_IMPORTED_MODULE_1__.SuiMenuBase { @@ -58720,12 +62996,14 @@ class SuiDynamicsMenu extends _menu__WEBPACK_IMPORTED_MODULE_1__.SuiMenuBase { return SuiDynamicsMenu.defaults; } selection(ev) { - const text = $(ev.currentTarget).attr('data-value'); - const props = _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoDynamicText.defaults; - props.text = text; - const dynamic = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoDynamicText(props); - this.view.addDynamic(this.tracker.selections[0], dynamic); - this.complete(); + return __awaiter(this, void 0, void 0, function* () { + const text = $(ev.currentTarget).attr('data-value'); + const props = _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoDynamicText.defaults; + props.text = text; + const dynamic = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_0__.SmoDynamicText(props); + yield this.view.addDynamic(this.tracker.selections[0], dynamic); + this.complete(); + }); } keydown() { } } @@ -59003,6 +63281,15 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ SuiKeySignatureMenu: () => (/* binding */ SuiKeySignatureMenu) /* harmony export */ }); /* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; class SuiKeySignatureMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBase { constructor(params) { @@ -59015,13 +63302,15 @@ class SuiKeySignatureMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBase return SuiKeySignatureMenu.defaults; } selection(ev) { - let keySig = $(ev.currentTarget).attr('data-value'); - keySig = (keySig === 'cancel' ? keySig : keySig.substring(5, keySig.length)); - if (keySig === 'cancel') { - return; - } - this.view.addKeySignature(keySig); - this.complete(); + return __awaiter(this, void 0, void 0, function* () { + let keySig = $(ev.currentTarget).attr('data-value'); + keySig = (keySig === 'cancel' ? keySig : keySig.substring(5, keySig.length)); + if (keySig === 'cancel') { + return; + } + yield this.view.addKeySignature(keySig); + this.complete(); + }); } keydown() { } } @@ -59103,6 +63392,15 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ }); /* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); /* harmony import */ var _i18n_language__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/language */ "./src/ui/i18n/language.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; class SuiLanguageMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBase { @@ -59116,9 +63414,11 @@ class SuiLanguageMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBase { return SuiLanguageMenu.defaults; } selection(ev) { - var op = $(ev.currentTarget).attr('data-value'); - _i18n_language__WEBPACK_IMPORTED_MODULE_1__.SmoTranslator.setLanguage(op); - this.complete(); + return __awaiter(this, void 0, void 0, function* () { + var op = $(ev.currentTarget).attr('data-value'); + _i18n_language__WEBPACK_IMPORTED_MODULE_1__.SmoTranslator.setLanguage(op); + this.complete(); + }); } keydown() { } @@ -59160,12 +63460,25 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ }); /* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); /* harmony import */ var _render_sui_layoutDebug__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../render/sui/layoutDebug */ "./src/render/sui/layoutDebug.ts"); -/* harmony import */ var _qwerty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../qwerty */ "./src/ui/qwerty.ts"); +/* harmony import */ var _dialogs_keySignature__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dialogs/keySignature */ "./src/ui/dialogs/keySignature.ts"); +/* harmony import */ var _dialogs_dialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); +/* harmony import */ var _qwerty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../qwerty */ "./src/ui/qwerty.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; // [Smoosic](https://github.com/AaronDavidNewman/Smoosic) // Copyright (c) Aaron David Newman 2021. + + class SuiMenuManager { constructor(params) { var _a; @@ -59205,20 +63518,6 @@ class SuiMenuManager { static get menuKeyBindingDefaults() { return [ { - event: 'keydown', - key: 'n', - ctrlKey: false, - altKey: false, - shiftKey: false, - action: 'SuiLanguageMenu' - }, { - event: 'keydown', - key: 'k', - ctrlKey: false, - altKey: false, - shiftKey: false, - action: 'SuiKeySignatureMenu' - }, { event: 'keydown', key: 'p', ctrlKey: false, @@ -59270,14 +63569,17 @@ class SuiMenuManager { } ]; } + get optionElements() { + return $('.menuContainer ul.menuElement li.menuOption'); + } _advanceSelection(inc) { if (!this.menu) { return; } - const options = $('.menuContainer ul.menuElement li.menuOption'); + const options = this.optionElements; inc = inc < 0 ? options.length - 1 : 1; this.menu.focusIndex = (this.menu.focusIndex + inc) % options.length; - $(options[this.menu.focusIndex]).find('button').focus(); + $(options[this.menu.focusIndex]).find('a').trigger('focus'); } unattach() { if (!this.keydownHandler) { @@ -59298,13 +63600,15 @@ class SuiMenuManager { $(this.menuContainer).html(''); $(this.menuContainer).attr('z-index', '12'); const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; - const r = b('ul').classes('menuElement').attr('size', this.menu.menuItems.length.toString()) + const r = b('ul').classes('menuElement dropdown-menu rounded-3 shadow w-220px show').attr('size', this.menu.menuItems.length.toString()) + .attr('role', 'menu') .css('left', '' + this.menuPosition.x + 'px') .css('top', '' + this.menuPosition.y + 'px'); this.menu.menuItems.forEach((item) => { var vkey = (hotkey < 10) ? String.fromCharCode(48 + hotkey) : String.fromCharCode(87 + hotkey); - r.append(b('li').classes('menuOption').append(b('button').attr('data-value', item.value).append(b('span').classes('menuText').text(item.text)) + r.append(b('li').classes('menuOption').append(b('a').attr('data-value', item.value).attr('href', '#') + .attr('role', 'menuItem').classes('dropdown-item').append(b('span').classes('menuText').text(item.text)) .append(b('span').classes('icon icon-' + item.icon)) .append(b('span').classes('menu-key').text('' + vkey)))); item.hotkey = vkey; @@ -59314,7 +63618,7 @@ class SuiMenuManager { $('body').addClass('modal'); this.bindEvents(); } - slashMenuMode(completeNotifier) { + captureMenuEvents(completeNotifier) { var self = this; if (this.closeMenuPromise) { console.log('menu already open, skipping'); @@ -59327,7 +63631,7 @@ class SuiMenuManager { $('body').off('menuDismiss').on('menuDismiss', () => { _render_sui_layoutDebug__WEBPACK_IMPORTED_MODULE_1__.layoutDebug.addDialogDebug('menuDismiss received, resolve closeMenuPromise'); self.unattach(); - $('body').removeClass('slash-menu'); + $('body').removeClass('slash-menu d-block'); self.closeMenuPromise = null; resolve(); }); @@ -59352,8 +63656,15 @@ class SuiMenuManager { this.hotkeyBindings[item.hotkey] = item.value; } }); + setTimeout(() => { + const options = this.optionElements; + if (options.length > 0) { + $(options[options.length - 1]).find('a').trigger('focus'); + } + }, 1); } - createMenu(action) { + createMenu(action, notifier) { + this.captureMenuEvents(notifier); if (!this.completeNotifier) { return; } @@ -59361,9 +63672,21 @@ class SuiMenuManager { // If we were called from the ribbon, we notify the controller that we are // taking over the keyboard. If this was a key-based command we already did. _render_sui_layoutDebug__WEBPACK_IMPORTED_MODULE_1__.layoutDebug.addDialogDebug('createMenu creating ' + action); + if (action === 'SuiKeySignatureMenu') { + // TODO: find a better way of handling slash menus from ribbon buttons + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_3__.createAndDisplayDialog)(_dialogs_keySignature__WEBPACK_IMPORTED_MODULE_2__.SuiKeySignatureDialog, { + view: this.view, + completeNotifier: this.completeNotifier, + startPromise: null, + eventSource: this.eventSource, + tracker: this.view.tracker, + ctor: 'SuiKeySignatureDialog', + id: 'key-signature-dialog', + modifier: null + }); + } const ctor = eval('globalThis.Smo.' + action); const params = { - position: this.menuPosition, tracker: this.tracker, score: this.score, completeNotifier: this.completeNotifier, @@ -59379,7 +63702,7 @@ class SuiMenuManager { // We have taken over menu commands from controller. If there is a menu active, send the key // to it. If there is not, see if the keystroke creates one. If neither, dismissi the menu. evKey(event) { - _qwerty__WEBPACK_IMPORTED_MODULE_2__.Qwerty.handleKeyEvent(event); + _qwerty__WEBPACK_IMPORTED_MODULE_4__.Qwerty.handleKeyEvent(event); if (['Tab', 'Enter'].indexOf(event.code) >= 0) { return; } @@ -59395,7 +63718,7 @@ class SuiMenuManager { this._advanceSelection(1); } else if (this.hotkeyBindings[event.key]) { - $('button[data-value="' + this.hotkeyBindings[event.key] + '"]').click(); + $('a[data-value="' + this.hotkeyBindings[event.key] + '"]').click(); } else { this.menu.keydown(); @@ -59404,27 +63727,40 @@ class SuiMenuManager { } const binding = this.menuBind.find((ev) => ev.key === event.key); if (!binding) { + // TODO: find a better place for the slash menus + if (event.key === 'k') { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_3__.createAndDisplayDialog)(_dialogs_keySignature__WEBPACK_IMPORTED_MODULE_2__.SuiKeySignatureDialog, { + view: this.view, + completeNotifier: this.completeNotifier, + startPromise: null, + eventSource: this.eventSource, + tracker: this.view.tracker, + ctor: 'SuiKeySignatureDialog', + id: 'key-signature-dialog', + modifier: null + }); + } this.dismiss(); return; } - this.createMenu(binding.action); + // this.createMenu(binding.action); } bindEvents() { this.hotkeyBindings = {}; - $('body').addClass('slash-menu'); + $('body').addClass('slash-menu d-block'); // We need to keep track of is bound, b/c the menu can be created from // different sources. if (!this.bound) { this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey'); this.bound = true; } - $(this.menuContainer).find('button').off('click').on('click', (ev) => { + $(this.menuContainer).find('a.dropdown-item').off('click').on('click', (ev) => __awaiter(this, void 0, void 0, function* () { if ($(ev.currentTarget).attr('data-value') === 'cancel') { this.menu.complete(); return; } - this.menu.selection(ev); - }); + yield this.menu.selection(ev); + })); } } @@ -59444,96 +63780,149 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ }); /* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); /* harmony import */ var _dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); -/* harmony import */ var _dialogs_addMeasure__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dialogs/addMeasure */ "./src/ui/dialogs/addMeasure.ts"); -/* harmony import */ var _dialogs_measureFormat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dialogs/measureFormat */ "./src/ui/dialogs/measureFormat.ts"); -/* harmony import */ var _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../smo/data/measureModifiers */ "./src/smo/data/measureModifiers.ts"); +/* harmony import */ var _dialogs_endings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dialogs/endings */ "./src/ui/dialogs/endings.ts"); +/* harmony import */ var _dialogs_addMeasure__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dialogs/addMeasure */ "./src/ui/dialogs/addMeasure.ts"); +/* harmony import */ var _dialogs_measureFormat__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dialogs/measureFormat */ "./src/ui/dialogs/measureFormat.ts"); +/* harmony import */ var _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../smo/data/measureModifiers */ "./src/smo/data/measureModifiers.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; -class SuiMeasureMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBase { - getDefinition() { - return SuiMeasureMenu.defaults; - } + +class SuiMeasureMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiConfiguredMenu { constructor(params) { - super(params); - } - selection(ev) { - const text = $(ev.currentTarget).attr('data-value'); - if (text === 'formatMeasureDialog') { - (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_measureFormat__WEBPACK_IMPORTED_MODULE_3__.SuiMeasureDialog, { - view: this.view, - completeNotifier: this.completeNotifier, - startPromise: this.closePromise, - eventSource: this.eventSource, - tracker: this.tracker, - ctor: 'SuiMeasureDialog', - id: 'measure-dialog', - modifier: null - }); - this.complete(); - return; - } - if (text === 'addMenuCmd') { - (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_addMeasure__WEBPACK_IMPORTED_MODULE_2__.SuiInsertMeasures, { - view: this.view, - completeNotifier: this.completeNotifier, - startPromise: this.closePromise, - eventSource: this.eventSource, - tracker: this.tracker, - ctor: 'SuiMeasureDialog', - id: 'insert-dialog', - modifier: null - }); - this.complete(); - } - if (text === 'addMenuAfterCmd') { - this.view.addMeasure(true); - this.complete(); - } - if (text === 'deleteSelected') { - this.view.deleteMeasure(); - } - if (text === 'removeSystemBreaks') { - this.view.removeSystemBreaks(); - } - if (text === 'resetFormatting') { - this.view.setMeasureFormat(new _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoMeasureFormat(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_4__.SmoMeasureFormat.defaults)); - } - this.complete(); + super(params, 'Notes', SuiMeasureMenuConfig); } } SuiMeasureMenu.defaults = { - label: 'Measure', - menuItems: [ - { - icon: '', - text: 'Add Measures', - value: 'addMenuCmd' - }, { - icon: 'icon-cross', - text: 'Delete Selected Measures', - value: 'deleteSelected' - }, { - icon: '', - text: 'Format Measure', - value: 'formatMeasureDialog' - }, { - icon: '', - text: 'Remove system breaks selection', - value: 'removeSystemBreaks' - }, { - icon: '', - text: 'Reset formatting selection', - value: 'resetFormatting' - }, { - icon: '', - text: 'Cancel', - value: 'cancel' + label: 'Measure Menu', + menuItems: [], +}; +const formatMeasureMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_measureFormat__WEBPACK_IMPORTED_MODULE_4__.SuiMeasureDialog, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiMeasureDialog', + id: 'measure-dialog', + modifier: null + }); + }), + display: (menu) => true, + menuChoice: { + icon: '', + text: 'Format Measure', + value: 'formatMeasure' + } +}; +const addMeasureMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_addMeasure__WEBPACK_IMPORTED_MODULE_3__.SuiInsertMeasures, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiMeasureDialog', + id: 'insert-dialog', + modifier: null + }); + }), + display: (menu) => true, + menuChoice: { + icon: '', + text: 'Add Measures', + value: 'addMeasures' + } +}; +const endingsMeasureMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_endings__WEBPACK_IMPORTED_MODULE_2__.SuiEndingsDialog, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiEndingsDialog', + id: 'endings-dialog', + modifier: null + }); + }), + display: (menu) => true, + menuChoice: { + icon: '', + text: 'Endings', + value: 'endings' + } +}; +const deleteSelectedMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.deleteMeasure(); + }), + display: (menu) => true, + menuChoice: { + icon: '', + text: 'Delete Selected Measures', + value: 'deleteSelected' + } +}; +const resetSystemBreaksMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + yield menu.view.removeSystemBreaks(); + }), + display: (menu) => { + const selections = menu.tracker.getSelectedMeasures(); + for (let i = 0; i < selections.length; ++i) { + const sel = selections[i]; + if (sel.measure.format.systemBreak) { + return true; + } } - ] + return false; + }, + menuChoice: { + icon: '', + text: 'Reset system breaks', + value: 'resetFormatting' + } +}; +const resetFormattingMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + yield menu.view.setMeasureFormat(new _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_5__.SmoMeasureFormat(_smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_5__.SmoMeasureFormat.defaults)); + }), + display: (menu) => { + const selections = menu.tracker.getSelectedMeasures(); + for (let i = 0; i < selections.length; ++i) { + const selection = selections[i]; + if (!selection.measure.format.isDefault) { + return true; + } + } + return false; + }, + menuChoice: { + icon: '', + text: 'Reset formatting selection', + value: 'resetFormatting' + } }; +const SuiMeasureMenuConfig = [ + addMeasureMenuOption, formatMeasureMenuOption, endingsMeasureMenuOption, deleteSelectedMenuOption, + resetSystemBreaksMenuOption, resetFormattingMenuOption +]; /***/ }), @@ -59547,15 +63936,26 @@ SuiMeasureMenu.defaults = { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiConfiguredMenu: () => (/* binding */ SuiConfiguredMenu), /* harmony export */ SuiMenuBase: () => (/* binding */ SuiMenuBase) /* harmony export */ }); /* harmony import */ var _i18n_language__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/language */ "./src/ui/i18n/language.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; class SuiMenuBase { constructor(params) { + var _a; this.focusIndex = -1; this.ctor = params.ctor; - const definition = this.getDefinition(); + const definition = (_a = params.items) !== null && _a !== void 0 ? _a : this.getDefinition(); this.label = definition.label; this.menuItems = definition.menuItems; this.completeNotifier = params.completeNotifier; @@ -59587,6 +63987,64 @@ class SuiMenuBase { // Most menus don't process their own events keydown() { } } +const cancelOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.complete(); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Cancel', + value: 'cancel' + } +}; +class SuiConfiguredMenu extends SuiMenuBase { + constructor(params, label, options) { + const cancel = options.find((op) => op.menuChoice.value === 'cancel'); + if (!cancel) { + options.push(cancelOption); + } + super(Object.assign({ items: SuiConfiguredMenu.definitionFromOptions(label, options) }, params)); + this.menuOptions = []; + this.label = ''; + this.menuOptions = options; + } + selection(ev) { + return __awaiter(this, void 0, void 0, function* () { + const text = $(ev.currentTarget).attr('data-value'); + for (let i = 0; i < this.menuOptions.length; ++i) { + const option = this.menuOptions[i]; + if (option.menuChoice.value === text) { + yield option.handler(this); + break; + } + } + this.complete(); + }); + } + static definitionFromOptions(label, options) { + const menuItems = options.map(oo => oo.menuChoice); + return { label, menuItems }; + } + getDefinition() { + const choices = []; + for (let i = 0; i < this.menuOptions.length; ++i) { + const option = this.menuOptions[i]; + choices.push(option.menuChoice); + } + return { + label: this.label, + menuItems: choices + }; + } + preAttach() { + this.menuItems = []; + this.menuOptions.forEach((option) => { + if (option.display(this)) { + this.menuItems.push(option.menuChoice); + } + }); + } +} /***/ }), @@ -59605,7 +64063,16 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); /* harmony import */ var _dialogs_arpeggio__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dialogs/arpeggio */ "./src/ui/dialogs/arpeggio.ts"); /* harmony import */ var _dialogs_clefChange__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dialogs/clefChange */ "./src/ui/dialogs/clefChange.ts"); -/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); +/* harmony import */ var _dialogs_noteHead__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dialogs/noteHead */ "./src/ui/dialogs/noteHead.ts"); +/* harmony import */ var _dialogs_ornament__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dialogs/ornament */ "./src/ui/dialogs/ornament.ts"); +/* harmony import */ var _dialogs_durations__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dialogs/durations */ "./src/ui/dialogs/durations.ts"); +/* harmony import */ var _dialogs_articulation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dialogs/articulation */ "./src/ui/dialogs/articulation.ts"); +/* harmony import */ var _dialogs_gracenote__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../dialogs/gracenote */ "./src/ui/dialogs/gracenote.ts"); +/* harmony import */ var _dialogs_microtones__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dialogs/microtones */ "./src/ui/dialogs/microtones.ts"); +/* harmony import */ var _dialogs_pitch__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dialogs/pitch */ "./src/ui/dialogs/pitch.ts"); +/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../smo/xform/selections */ "./src/smo/xform/selections.ts"); +/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); +/* harmony import */ var _staffModifier__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./staffModifier */ "./src/ui/menus/staffModifier.ts"); var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -59619,71 +64086,249 @@ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _argume -class SuiNoteMenu extends _menu__WEBPACK_IMPORTED_MODULE_3__.SuiMenuBase { - getDefinition() { - return SuiNoteMenu.defaults; - } + + + + + + + + + +class SuiNoteMenu extends _menu__WEBPACK_IMPORTED_MODULE_11__.SuiConfiguredMenu { constructor(params) { - super(params); + super(params, 'Notes', SuiNoteMenuOptions); } - selection(ev) { - return __awaiter(this, void 0, void 0, function* () { - const text = $(ev.currentTarget).attr('data-value'); - if (text === 'toggleCueCmd') { - yield this.view.toggleCue(); - } - else if (text === 'arpeggioDialog') { - (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dialogs_arpeggio__WEBPACK_IMPORTED_MODULE_1__.SuiArpeggioDialog, { - view: this.view, - completeNotifier: this.completeNotifier, - startPromise: this.closePromise, - eventSource: this.eventSource, - tracker: this.tracker, - ctor: 'SuiArpeggioDialog', - id: 'insert-dialog', - modifier: null - }); - this.complete(); - } - else if (text === 'clefNoteDialog') { - (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dialogs_clefChange__WEBPACK_IMPORTED_MODULE_2__.SuiClefChangeDialog, { - view: this.view, - completeNotifier: this.completeNotifier, - startPromise: this.closePromise, - eventSource: this.eventSource, - tracker: this.tracker, - ctor: 'SuiClefChangeDialog', - id: 'insert-dialog', - modifier: null +} +const toggleCueMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + yield menu.view.toggleCue(); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Toggle Cue', + value: 'toggleCueMenuOption' + } +}; +const arpeggioMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dialogs_arpeggio__WEBPACK_IMPORTED_MODULE_1__.SuiArpeggioDialog, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiArpeggioDialog', + id: 'insert-dialog', + modifier: null + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Arpeggio', + value: 'arpeggioDialog' + } +}; +const noteHeadMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dialogs_noteHead__WEBPACK_IMPORTED_MODULE_3__.SuiNoteHeadDialog, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiNoteHeadDialog', + id: 'notehead-dialog', + modifier: null + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Head and Stem', + value: 'noteHeadDialog' + } +}; +const pitchMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dialogs_pitch__WEBPACK_IMPORTED_MODULE_9__.SuiPitchDialog, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiPitchDialog', + id: 'pitch-dialog', + modifier: null + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Pitches', + value: 'pitchDialog' + } +}; +const graceNotesMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dialogs_gracenote__WEBPACK_IMPORTED_MODULE_7__.SuiGraceNoteDialog, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiNoteHeadDialog', + id: 'insert-dialog', + modifier: null + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Grace Notes', + value: 'graceNotes' + } +}; +const clefNoteDialogMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dialogs_clefChange__WEBPACK_IMPORTED_MODULE_2__.SuiClefChangeDialog, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiClefChangeDialog', + id: 'insert-dialog', + modifier: null + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Change Clef', + value: 'clefNoteDialog' + } +}; +const togglePedalRelease = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.tracker.selections.forEach((selection) => __awaiter(void 0, void 0, void 0, function* () { + const pms = selection.staff.getPedalMarkingsContaining(selection.selector); + const selectorToAdd = selection.selector; + let shouldAdd = true; + pms.forEach((mod) => __awaiter(void 0, void 0, void 0, function* () { + const pm = mod; + const releaseAr = []; + pm.releases.forEach((rr) => { + if (_smo_xform_selections__WEBPACK_IMPORTED_MODULE_10__.SmoSelector.eq(rr, selectorToAdd)) { + shouldAdd = false; + } + else if (_smo_xform_selections__WEBPACK_IMPORTED_MODULE_10__.SmoSelector.gt(mod.startSelector, selectorToAdd) && _smo_xform_selections__WEBPACK_IMPORTED_MODULE_10__.SmoSelector.lt(mod.endSelector, selectorToAdd)) { + releaseAr.push(rr); + } }); - this.complete(); + if (shouldAdd) { + releaseAr.push(selectorToAdd); + } + pm.releases = releaseAr.sort((a, b) => _smo_xform_selections__WEBPACK_IMPORTED_MODULE_10__.SmoSelector.gt(a, b) ? 1 : -1); + yield (0,_staffModifier__WEBPACK_IMPORTED_MODULE_12__.addOrReplacePedalMarking)(menu.view, pm); + })); + })); + }), display: ((menu) => { + let show = false; + menu.tracker.selections.forEach((selection) => { + const pms = selection.staff.getPedalMarkingsContaining(selection.selector); + if (pms.length) { + show = true; } - this.complete(); }); + return show; + }), + menuChoice: { + icon: '', + text: 'Toggle Pedal Release', + value: 'togglePedalRelease' + } +}; +const ornamentNoteDialogMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dialogs_ornament__WEBPACK_IMPORTED_MODULE_4__.SuiOrnamentDialog, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiOrnamentDialog', + id: 'ornament-dialog', + modifier: null + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Ornaments', + value: 'ornamentDialog' + } +}; +const durationDialogMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dialogs_durations__WEBPACK_IMPORTED_MODULE_5__.SuiDurationDialog, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiDurationDialog', + id: 'duration-dialog', + modifier: null + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Durations', + value: 'durationDialog' + } +}; +const articulationNoteDialogMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dialogs_articulation__WEBPACK_IMPORTED_MODULE_6__.SuiArticulationDialog, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiArticulationDialog', + id: 'ornament-dialog', + modifier: null + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Articulations', + value: 'articulationDialog' + } +}; +const microtoneNoteDialogMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_0__.createAndDisplayDialog)(_dialogs_microtones__WEBPACK_IMPORTED_MODULE_8__.SuiMicrotoneDialog, { + view: menu.view, + completeNotifier: menu.completeNotifier, + startPromise: menu.closePromise, + eventSource: menu.eventSource, + tracker: menu.tracker, + ctor: 'SuiMicrotoneDialog', + id: 'microtone-dialog', + modifier: null + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Microtones', + value: 'microtoneDialog' } -} -SuiNoteMenu.defaults = { - label: 'Measure', - menuItems: [ - { - icon: '', - text: 'Toggle Cue', - value: 'toggleCueCmd' - }, { - icon: '', - text: 'Arpeggio', - value: 'arpeggioDialog' - }, { - icon: '', - text: 'Change Clef', - value: 'clefNoteDialog' - }, { - icon: '', - text: 'Cancel', - value: 'cancel' - } - ] }; +const SuiNoteMenuOptions = [ + toggleCueMenuOption, arpeggioMenuOption, clefNoteDialogMenuOption, + graceNotesMenuOption, + noteHeadMenuOption, ornamentNoteDialogMenuOption, + articulationNoteDialogMenuOption, + microtoneNoteDialogMenuOption, togglePedalRelease, + durationDialogMenuOption, pitchMenuOption +]; /***/ }), @@ -59700,6 +64345,15 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ SuiPartSelectionMenu: () => (/* binding */ SuiPartSelectionMenu) /* harmony export */ }); /* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; class SuiPartSelectionMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBase { constructor(params) { @@ -59744,12 +64398,14 @@ class SuiPartSelectionMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBas this.menuItems = defs; } selection(ev) { - const op = $(ev.currentTarget).attr('data-value'); - const choice = parseInt(op); - if (isNaN(choice)) { - this.complete(); // cancel - } - this.selectPart(choice); + return __awaiter(this, void 0, void 0, function* () { + const op = $(ev.currentTarget).attr('data-value'); + const choice = parseInt(op); + if (isNaN(choice)) { + this.complete(); // cancel + } + this.selectPart(choice); + }); } keydown() { } } @@ -59776,7 +64432,18 @@ SuiPartSelectionMenu.defaults = { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ SuiPartMenu: () => (/* binding */ SuiPartMenu) +/* harmony export */ SuiPartMenu: () => (/* binding */ SuiPartMenu), +/* harmony export */ SuiPartMenuOptions: () => (/* binding */ SuiPartMenuOptions), +/* harmony export */ createNotePartMenuOption: () => (/* binding */ createNotePartMenuOption), +/* harmony export */ editInstrumentMenuOption: () => (/* binding */ editInstrumentMenuOption), +/* harmony export */ moveDownMenuOption: () => (/* binding */ moveDownMenuOption), +/* harmony export */ moveUpMenuOption: () => (/* binding */ moveUpMenuOption), +/* harmony export */ pageLayoutMenuOption: () => (/* binding */ pageLayoutMenuOption), +/* harmony export */ partPropertiesMenuOption: () => (/* binding */ partPropertiesMenuOption), +/* harmony export */ removePartMenuOption: () => (/* binding */ removePartMenuOption), +/* harmony export */ tabStaveMenuOption: () => (/* binding */ tabStaveMenuOption), +/* harmony export */ viewFullScoreMenuOption: () => (/* binding */ viewFullScoreMenuOption), +/* harmony export */ viewPartialScoreMenuOption: () => (/* binding */ viewPartialScoreMenuOption) /* harmony export */ }); /* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); /* harmony import */ var _dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); @@ -59786,6 +64453,15 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _dialogs_pageLayout__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dialogs/pageLayout */ "./src/ui/dialogs/pageLayout.ts"); /* harmony import */ var _dialogs_newPart__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dialogs/newPart */ "./src/ui/dialogs/newPart.ts"); /* harmony import */ var _dialogs_tabStave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../dialogs/tabStave */ "./src/ui/dialogs/tabStave.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; @@ -59794,211 +64470,177 @@ __webpack_require__.r(__webpack_exports__); -class SuiPartMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBase { - constructor(params) { - super(params); - } - getDefinition() { - return SuiPartMenu.defaults; - } - createPart() { +const createNotePartMenuOption = { + menuChoice: { + icon: '', + text: 'Create New Part/Stave', + value: 'createPart' + }, display: () => true, + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_newPart__WEBPACK_IMPORTED_MODULE_6__.SuiNewPartDialog, { - completeNotifier: this.completeNotifier, - view: this.view, - eventSource: this.eventSource, + completeNotifier: menu.completeNotifier, + view: menu.view, + eventSource: menu.eventSource, id: 'newPartDialog', ctor: 'SuiNewPartDialog', - tracker: this.view.tracker, + tracker: menu.view.tracker, + modifier: menu, + startPromise: menu.closePromise + }); + }) +}; +const removePartMenuOption = { + menuChoice: { + icon: 'cancel-circle', + text: 'Remove Selected Parts/Staves', + value: 'removePart' + }, display: () => true, + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + yield menu.view.removeStaff(); + }) +}; +const partPropertiesMenuOption = { + menuChoice: { + icon: '', + text: 'Part Properties', + value: 'editPart' + }, display: (menu) => menu.view.isPartExposed(), + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + const selection = menu.view.tracker.selections[0]; + if (menu.view.score.staves.length !== selection.staff.partInfo.stavesAfter + selection.staff.partInfo.stavesBefore + 1) { + menu.view.exposePart(selection.staff); + } + yield menu.view.renderPromise(); + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_partInfo__WEBPACK_IMPORTED_MODULE_4__.SuiPartInfoDialog, { + completeNotifier: menu.completeNotifier, + view: menu.view, + eventSource: menu.eventSource, + id: 'editPart', + ctor: 'SuiPartInfoDialog', + tracker: menu.view.tracker, modifier: null, - startPromise: this.closePromise + startPromise: menu.closePromise }); - } - execView() { + }) +}; +const pageLayoutMenuOption = { + menuChoice: { + icon: '', + text: 'Page Layout', + value: 'pageLayout' + }, display: (menu) => menu.view.isPartExposed(), + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_pageLayout__WEBPACK_IMPORTED_MODULE_5__.SuiPageLayoutDialog, { + completeNotifier: menu.completeNotifier, + view: menu.view, + eventSource: menu.eventSource, + id: 'layoutDialog', + ctor: 'SuiPageLayoutDialog', + tracker: menu.view.tracker, + modifier: null, + startPromise: menu.closePromise + }); + }) +}; +const viewPartialScoreMenuOption = { + menuChoice: { + icon: '', + text: 'View Partial Score', + value: 'view' + }, display: (menu) => !menu.view.isPartExposed(), + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_scoreView__WEBPACK_IMPORTED_MODULE_2__.SuiScoreViewDialog, { - completeNotifier: this.completeNotifier, - view: this.view, - eventSource: this.eventSource, + completeNotifier: menu.completeNotifier, + view: menu.view, + eventSource: menu.eventSource, id: 'scoreViewDialog', ctor: 'SuiScoreViewDialog', - tracker: this.view.tracker, + tracker: menu.view.tracker, modifier: null, - startPromise: this.closePromise - }); - } - editPart() { - const selection = this.view.tracker.selections[0]; - const self = this; - if (this.view.score.staves.length !== selection.staff.partInfo.stavesAfter + selection.staff.partInfo.stavesBefore + 1) { - this.view.exposePart(selection.staff); - } - this.view.renderPromise().then(() => { - (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_partInfo__WEBPACK_IMPORTED_MODULE_4__.SuiPartInfoDialog, { - completeNotifier: self.completeNotifier, - view: self.view, - eventSource: self.eventSource, - id: 'editPart', - ctor: 'SuiPartInfoDialog', - tracker: self.view.tracker, - modifier: null, - startPromise: self.closePromise - }); + startPromise: menu.closePromise }); - } - editInstrument() { + }) +}; +const viewFullScoreMenuOption = { + menuChoice: { + icon: '', + text: 'View All', + value: 'viewAll' + }, display: (menu) => menu.view.score.staves.length < menu.view.storeScore.staves.length, + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + yield menu.view.viewAll(); + }) +}; +const editInstrumentMenuOption = { + menuChoice: { + icon: '', + text: 'Instrument Properties', + value: 'editInstrument' + }, display: (menu) => true, + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_instrument__WEBPACK_IMPORTED_MODULE_3__.SuiInstrumentDialog, { - completeNotifier: this.completeNotifier, - view: this.view, - eventSource: this.eventSource, + completeNotifier: menu.completeNotifier, + view: menu.view, + eventSource: menu.eventSource, id: 'instrumentModal', ctor: 'SuiInstrumentDialog', - tracker: this.view.tracker, - modifier: null, - startPromise: this.closePromise + tracker: menu.view.tracker, + modifier: menu, + startPromise: menu.closePromise }); - } - tabStave() { + }) +}; +const tabStaveMenuOption = { + menuChoice: { + icon: '', + text: 'Guitar Tablature', + value: 'tabStave' + }, display: (menu) => true, + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_tabStave__WEBPACK_IMPORTED_MODULE_7__.SuiTabStaveDialog, { ctor: 'SuiTabStaveDialog', id: 'tabStaveDialog', - tracker: this.view.tracker, - completeNotifier: this.completeNotifier, + tracker: menu.view.tracker, + completeNotifier: menu.completeNotifier, startPromise: null, - view: this.view, - eventSource: this.eventSource - }); - } - removePart() { - this.view.removeStaff(); - this.complete(); - } - pageLayout() { - (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_pageLayout__WEBPACK_IMPORTED_MODULE_5__.SuiPageLayoutDialog, { - completeNotifier: this.completeNotifier, - view: this.view, - eventSource: this.eventSource, - id: 'layoutDialog', - ctor: 'SuiPageLayoutDialog', - tracker: this.view.tracker, - modifier: null, - startPromise: this.closePromise - }); - } - preAttach() { - const fullScore = this.view.score.staves.length < this.view.storeScore.staves.length; - const defs = []; - this.menuItems.forEach((item) => { - // Only show 'display all' if the full score is not already displayed - if (item.value === 'viewAll') { - if (!fullScore) { - defs.push(item); - } - } - else if (item.value === 'pageLayout') { - // only show the page layout in part menu if we are in part mode - if (this.view.isPartExposed()) { - defs.push(item); - } - } - else if (item.value === 'view') { - if (this.view.isPartExposed() === false) { - // don't let the user restrict the view if we are already viewing a part. - defs.push(item); - } - } - else if (item.value === 'editPart') { - if (this.view.isPartExposed()) { - item.text = 'Part Properties'; - defs.push(item); - } - } - else { - defs.push(item); - } + view: menu.view, + eventSource: menu.eventSource }); - this.menuItems = defs; - } - selection(ev) { - const op = $(ev.currentTarget).attr('data-value'); - if (op === 'pageLayout') { - this.pageLayout(); - this.complete(); - } - else if (op === 'view') { - this.execView(); - this.complete(); - } - else if (op === 'createPart') { - this.createPart(); - this.complete(); - } - else if (op === 'removePart') { - this.removePart(); - this.complete(); - } - else if (op === 'editPart') { - this.editPart(); - this.complete(); - } - else if (op === 'editInstrument') { - this.editInstrument(); - this.complete(); - } - else if (op === 'tabStave') { - this.tabStave(); - this.complete(); - } - else if (op === 'cancel') { - this.complete(); - } - else if (op === 'viewAll') { - this.view.viewAll(); - this.complete(); - } + }) +}; +const moveUpMenuOption = { + menuChoice: { + icon: 'icon-smo icon-arrow-up', + text: 'Move Part Up', + value: 'partUp' + }, display: (menu) => { + return menu.view.score.staves.length > 1; + }, + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + yield menu.view.moveStaffUpDown(-1); + }) +}; +const moveDownMenuOption = { + menuChoice: { + icon: 'icon-smo icon-arrow-up', + text: 'Move Part Down', + value: 'partDown' + }, display: (menu) => { + return menu.view.score.staves.length > 1; + }, + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + yield menu.view.moveStaffUpDown(1); + }) +}; +const SuiPartMenuOptions = [ + createNotePartMenuOption, removePartMenuOption, partPropertiesMenuOption, pageLayoutMenuOption, viewPartialScoreMenuOption, + editInstrumentMenuOption, viewFullScoreMenuOption, tabStaveMenuOption, moveUpMenuOption, moveDownMenuOption +]; +class SuiPartMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiConfiguredMenu { + constructor(params) { + super(params, 'Parts', SuiPartMenuOptions); } - keydown() { } } -SuiPartMenu.defaults = { - label: 'Parts', - menuItems: [ - { - icon: '', - text: 'Create New Part/Stave', - value: 'createPart' - }, { - icon: 'cancel-circle', - text: 'Remove Selected Parts/Staves', - value: 'removePart' - }, { - icon: '', - text: 'Part Properties', - value: 'editPart' - }, { - icon: '', - text: 'Page Layout', - value: 'pageLayout' - }, { - icon: '', - text: 'View Partial Score', - value: 'view' - }, { - icon: '', - text: 'View All', - value: 'viewAll' - }, { - icon: '', - text: 'Instrument Properties', - value: 'editInstrument' - }, { - icon: '', - text: 'Guitar Tablature', - value: 'tabStave' - }, { - icon: '', - text: 'Cancel', - value: 'cancel' - } - ] -}; /***/ }), @@ -60024,6 +64666,15 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _dialogs_dialog__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); /* harmony import */ var _dialogs_staffGroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dialogs/staffGroup */ "./src/ui/dialogs/staffGroup.ts"); /* harmony import */ var _dialogs_audioSettings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dialogs/audioSettings */ "./src/ui/dialogs/audioSettings.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; @@ -60160,35 +64811,37 @@ class SuiScoreMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBase { }); } selection(ev) { - const text = $(ev.currentTarget).attr('data-value'); - if (text === 'pageLayout') { - this.execPageLayout(); - } - else if (text === 'staffGroups') { - this.execStaffGroups(); - } - else if (text === 'preferences') { - this.execPreferences(); - } - else if (text === 'fonts') { - this.execFonts(); - } - else if (text === 'globalLayout') { - this.execGlobalLayout(); - } - else if (text === 'identification') { - this.execScoreId(); - } - else if (text === 'viewAll') { - this.view.viewAll(); - } - else if (text === 'audioSettings') { - this.execAudioSettings(); - } - else if (text === 'transposeScore') { - this.execTransposeScore(); - } - this.complete(); + return __awaiter(this, void 0, void 0, function* () { + const text = $(ev.currentTarget).attr('data-value'); + if (text === 'pageLayout') { + this.execPageLayout(); + } + else if (text === 'staffGroups') { + this.execStaffGroups(); + } + else if (text === 'preferences') { + this.execPreferences(); + } + else if (text === 'fonts') { + this.execFonts(); + } + else if (text === 'globalLayout') { + this.execGlobalLayout(); + } + else if (text === 'identification') { + this.execScoreId(); + } + else if (text === 'viewAll') { + this.view.viewAll(); + } + else if (text === 'audioSettings') { + this.execAudioSettings(); + } + else if (text === 'transposeScore') { + this.execTransposeScore(); + } + this.complete(); + }); } keydown() { } } @@ -60249,10 +64902,34 @@ SuiScoreMenu.defaults = { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ SuiStaffModifierMenu: () => (/* binding */ SuiStaffModifierMenu) +/* harmony export */ SuiStaffModifierMenu: () => (/* binding */ SuiStaffModifierMenu), +/* harmony export */ addOrReplacePedalMarking: () => (/* binding */ addOrReplacePedalMarking) /* harmony export */ }); /* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); +/* harmony import */ var _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../smo/data/staffModifiers */ "./src/smo/data/staffModifiers.ts"); +/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../smo/xform/selections */ "./src/smo/xform/selections.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + +function addOrReplacePedalMarking(view, obj) { + return __awaiter(this, void 0, void 0, function* () { + yield view.addOrReplaceStaffModifier((score, fromSelection, toSelection) => { + const modifier = new _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoPedalMarking(obj.serialize()); + modifier.startSelector = fromSelection.selector; + modifier.endSelector = toSelection.selector; + score.staves[modifier.startSelector.staff].addStaffModifier(modifier); + }, obj); + }); +} class SuiStaffModifierMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBase { constructor(params) { super(params); @@ -60261,43 +64938,65 @@ class SuiStaffModifierMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBas return SuiStaffModifierMenu.defaults; } selection(ev) { - var op = $(ev.currentTarget).attr('data-value'); - if (op === 'ending') { - this.view.addEnding(); - } - else if (op === 'slur') { - this.view.slur(); - } - else if (op === 'tie') { - this.view.tie(); - } - else if (op === 'accel') { - this.view.accelerando(); - } - else if (op === 'dimenuendo') { - this.view.dimenuendo(); - } - else if (op === 'ritard') { - this.view.ritard(); - } - else if (op === 'crescendoBracket') { - this.view.crescendoBracket(); - } - else if (op === 'crescendo') { - this.view.crescendo(); - } - else if (op === 'decrescendo') { - this.view.decrescendo(); - } - else if (op === 'resetSlurs') { - const self = this; - this.view.refreshViewport().then(() => { - self.complete(); - }); - return; - } - // else cancel... - this.complete(); + return __awaiter(this, void 0, void 0, function* () { + var op = $(ev.currentTarget).attr('data-value'); + if (op === 'ending') { + this.view.addEnding(); + } + else if (op === 'slur') { + this.view.addSlur(); + } + else if (op === 'tie') { + this.view.tie(); + } + else if (op === 'accel') { + this.view.accelerando(); + } + else if (op === 'dimenuendo') { + this.view.dimenuendo(); + } + else if (op === 'ritard') { + this.view.ritard(); + } + else if (op === 'crescendoBracket') { + this.view.crescendoBracket(); + } + else if (op === 'endings') { + this.view.addEnding(); + } + else if (op === 'pedalMarking') { + const ft = this.tracker.getExtremeSelection(-1); + const tt = this.tracker.getExtremeSelection(1); + const defaults = _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoPedalMarking.defaults; + defaults.startSelector = ft.selector; + defaults.endSelector = tt.selector; + const pedalMarking = new _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_1__.SmoPedalMarking(defaults); + const overlaps = this.score.staves[pedalMarking.startSelector.staff].findSimlarOverlap(pedalMarking); + if (overlaps.length) { + const minSelector = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_2__.SmoSelector.order(overlaps[0].startSelector, pedalMarking.startSelector)[0]; + const maxSelector = _smo_xform_selections__WEBPACK_IMPORTED_MODULE_2__.SmoSelector.order(overlaps[0].endSelector, pedalMarking.endSelector)[1]; + pedalMarking.startSelector = minSelector; + pedalMarking.endSelector = maxSelector; + yield this.view.removeStaffModifier(overlaps[0]); + } + yield addOrReplacePedalMarking(this.view, pedalMarking); + } + else if (op === 'crescendo') { + this.view.crescendo(); + } + else if (op === 'decrescendo') { + this.view.decrescendo(); + } + else if (op === 'resetSlurs') { + const self = this; + this.view.refreshViewport().then(() => { + self.complete(); + }); + return; + } + // else cancel... + this.complete(); + }); } keydown() { } @@ -60320,6 +65019,10 @@ SuiStaffModifierMenu.defaults = { icon: 'slur', text: 'Tie', value: 'tie' + }, { + icon: 'pedal', + text: 'Pedal Marking', + value: 'pedalMarking' }, { icon: 'ending', text: 'nth ending', @@ -60345,6 +65048,11 @@ SuiStaffModifierMenu.defaults = { text: 'Reset slurs', value: 'resetSlurs' }, { + icon: 'icon-ending', + text: 'Repeate Endings', + value: 'endings' + }, + { icon: '', text: 'Cancel', value: 'cancel' @@ -60352,6 +65060,164 @@ SuiStaffModifierMenu.defaults = { }; +/***/ }), + +/***/ "./src/ui/menus/text.ts": +/*!******************************!*\ + !*** ./src/ui/menus/text.ts ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SuiTextMenu: () => (/* binding */ SuiTextMenu) +/* harmony export */ }); +/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); +/* harmony import */ var _dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); +/* harmony import */ var _dialogs_textBlock__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dialogs/textBlock */ "./src/ui/dialogs/textBlock.ts"); +/* harmony import */ var _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../smo/data/noteModifiers */ "./src/smo/data/noteModifiers.ts"); +/* harmony import */ var _dialogs_chordChange__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dialogs/chordChange */ "./src/ui/dialogs/chordChange.ts"); +/* harmony import */ var _dialogs_lyric__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dialogs/lyric */ "./src/ui/dialogs/lyric.ts"); +/* harmony import */ var _dialogs_dynamics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dialogs/dynamics */ "./src/ui/dialogs/dynamics.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; + + + + + + + +class SuiTextMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiConfiguredMenu { + constructor(params) { + super(params, 'Notes', SuiTextMenuOptions); + } +} +const rehearsalLetterDialogMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.toggleRehearsalMark(); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Rehearsal Letter', + value: 'rehearsalLetter' + } +}; +const textBlockDialogMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_textBlock__WEBPACK_IMPORTED_MODULE_2__.SuiTextBlockDialog, { + completeNotifier: menu.completeNotifier, + view: menu.view, + eventSource: menu.eventSource, + id: 'textDialog', + ctor: 'SuiTextBlockDialog', + tracker: menu.view.tracker, + startPromise: menu.closePromise, + modifier: null + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Score Text', + value: 'textBlock' + } +}; +const chordChangeDialogMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + const sel = menu.view.tracker.selections[0]; + const note = sel.note; + if (!note) { + return; + } + const lyrics = note.getChords(); + const lyric = lyrics.length > 0 ? null : lyrics[0]; + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_chordChange__WEBPACK_IMPORTED_MODULE_4__.SuiChordChangeDialog, { + completeNotifier: menu.completeNotifier, + view: menu.view, + eventSource: menu.eventSource, + id: 'chordDialog', + ctor: 'SuiChordChangeDialog', + tracker: menu.view.tracker, + startPromise: menu.closePromise, + modifier: lyric + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Chord Changes', + value: 'chordChanges' + } +}; +const lyricsDialogMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + const sel = menu.view.tracker.selections[0]; + const note = sel.note; + if (!note) { + return; + } + const lyrics = note.getTrueLyrics(); + const lyric = lyrics.length > 0 ? lyrics[0] : null; + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_lyric__WEBPACK_IMPORTED_MODULE_5__.SuiLyricDialog, { + completeNotifier: menu.completeNotifier, + view: menu.view, + eventSource: menu.eventSource, + id: 'lyricDialog', + ctor: 'SuiLyricDialog', + tracker: menu.view.tracker, + startPromise: menu.closePromise, + modifier: lyric + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Lyrics', + value: 'lyricMenu' + } +}; +const dynamicsDialogMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + const sel = menu.view.tracker.selections[0]; + let modifier = null; + if (sel.note) { + const dynamics = sel.note.getModifiers('SmoDynamicText'); + if (dynamics.length) { + modifier = dynamics[0]; + } + else { + const params = _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoDynamicText.defaults; + modifier = new _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoDynamicText(params); + menu.view.addDynamic(sel, modifier); + } + } + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_1__.createAndDisplayDialog)(_dialogs_dynamics__WEBPACK_IMPORTED_MODULE_6__.SuiDynamicModifierDialog, { + completeNotifier: menu.completeNotifier, + view: menu.view, + eventSource: menu.eventSource, + id: 'dynamicsDialog', + ctor: 'SuiDynamicModifierDialog', + tracker: menu.view.tracker, + startPromise: menu.closePromise, + modifier + }); + }), display: (menu) => true, + menuChoice: { + icon: '', + text: 'Dynamics', + value: 'dynamicsMenu' + } +}; +const SuiTextMenuOptions = [dynamicsDialogMenuOption, textBlockDialogMenuOption, + chordChangeDialogMenuOption, lyricsDialogMenuOption, rehearsalLetterDialogMenuOption]; + + /***/ }), /***/ "./src/ui/menus/timeSignature.ts": @@ -60369,6 +65235,15 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _smo_data_measure__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../smo/data/measure */ "./src/smo/data/measure.ts"); /* harmony import */ var _dialogs_dialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); /* harmony import */ var _dialogs_timeSignature__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dialogs/timeSignature */ "./src/ui/dialogs/timeSignature.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; // [Smoosic](https://github.com/AaronDavidNewman/Smoosic) // Copyright (c) Aaron David Newman 2021. @@ -60383,23 +65258,25 @@ class SuiTimeSignatureMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiMenuBas return SuiTimeSignatureMenu.defaults; } selection(ev) { - var text = $(ev.currentTarget).attr('data-value'); - if (text === 'TimeSigOther') { - (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_2__.createAndDisplayDialog)(_dialogs_timeSignature__WEBPACK_IMPORTED_MODULE_3__.SuiTimeSignatureDialog, { - completeNotifier: this.completeNotifier, - view: this.view, - eventSource: this.eventSource, - id: 'staffGroups', - ctor: 'SuiStaffGroupDialog', - tracker: this.view.tracker, - modifier: null, - startPromise: this.closePromise - }); + return __awaiter(this, void 0, void 0, function* () { + var text = $(ev.currentTarget).attr('data-value'); + if (text === 'TimeSigOther') { + (0,_dialogs_dialog__WEBPACK_IMPORTED_MODULE_2__.createAndDisplayDialog)(_dialogs_timeSignature__WEBPACK_IMPORTED_MODULE_3__.SuiTimeSignatureDialog, { + completeNotifier: this.completeNotifier, + view: this.view, + eventSource: this.eventSource, + id: 'staffGroups', + ctor: 'SuiStaffGroupDialog', + tracker: this.view.tracker, + modifier: null, + startPromise: this.closePromise + }); + this.complete(); + return; + } + yield this.view.setTimeSignature(_smo_data_measure__WEBPACK_IMPORTED_MODULE_1__.SmoMeasure.convertLegacyTimeSignature(text)); this.complete(); - return; - } - this.view.setTimeSignature(_smo_data_measure__WEBPACK_IMPORTED_MODULE_1__.SmoMeasure.convertLegacyTimeSignature(text)); - this.complete(); + }); } keydown() { } } @@ -60447,59 +65324,184 @@ SuiTimeSignatureMenu.defaults = { /***/ }), -/***/ "./src/ui/qwerty.ts": -/*!**************************!*\ - !*** ./src/ui/qwerty.ts ***! - \**************************/ +/***/ "./src/ui/menus/voices.ts": +/*!********************************!*\ + !*** ./src/ui/menus/voices.ts ***! + \********************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ Qwerty: () => (/* binding */ Qwerty) +/* harmony export */ SuiVoiceMenu: () => (/* binding */ SuiVoiceMenu) /* harmony export */ }); -/* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); -// [Smoosic](https://github.com/AaronDavidNewman/Smoosic) -// Copyright (c) Aaron David Newman 2021. +/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./menu */ "./src/ui/menus/menu.ts"); +var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; -; -; -class Qwerty { - static get navigationElements() { - const kbRows = [ - { row: '1234567890-=', shifted: '!@#$%^&*()_+' }, - { row: 'QWERTYUIOP[]', shifted: 'QWERTYUIOP{}' }, - { row: "ASDFGHJKL;'", shifted: 'ASDFGHJKL:"' }, - { row: 'ZXCVBNM,./', shifted: 'ZXCVBNM<>?' } - ]; - const arrows = [ - { icon: 'icon-arrow-left', text: '', shifted: '', classes: 'helpKey', dataKey: 'ArrowLeft' }, - { icon: 'icon-arrow-right', text: '', shifted: '', classes: 'helpKey', dataKey: 'ArrowRight' }, - { icon: '', text: 'Space', classes: 'wideKey', shifted: '', dataKey: 'Space' }, - { icon: 'icon-arrow-up', text: '', shifted: '', classes: 'helpKey', dataKey: 'ArrowUp' }, - { icon: 'icon-arrow-down', text: '', shifted: '', classes: 'helpKey', dataKey: 'ArrowDown' }, - { icon: '', text: 'Ins', shifted: '', classes: 'helpKey', dataKey: 'Insert' }, - { icon: '', text: 'Del', shifted: '', classes: 'helpKey', dataKey: 'Delete' }, - { icon: '', text: 'Enter', shifted: '', classes: 'wideKey', dataKey: 'Enter' } - ]; - let keyRows = {}; - const labels = ['topNumbers', 'keys1', 'keys2', 'keys3', 'arrows']; - let j = 0; - kbRows.forEach((kbRow) => { - var str = kbRow.row; - var shifted = kbRow.shifted; - var keys = []; - for (var i = 0; i < str.length; ++i) { - if (j === 2 && i === 0) { - keys.push({ icon: '', text: 'Shift', shifted: '', classes: 'wideKey', dataKey: 'shift' }); - } - if (j === 3 && i === 0) { - keys.push({ icon: '', text: 'Ctrl', shifted: '', classes: 'wideKey', dataKey: 'ctrl' }); - keys.push({ icon: '', text: 'Alt', shifted: '', classes: 'helpKey', dataKey: 'alt' }); - } - keys.push({ icon: '', text: str[i], shifted: shifted[i], classes: 'helpKey', dataKey: str[i] }); - } - keyRows[labels[j]] = keys; +class SuiVoiceMenu extends _menu__WEBPACK_IMPORTED_MODULE_0__.SuiConfiguredMenu { + constructor(params) { + super(params, 'Voices', SuiVoiceMenuOptions); + } +} +const selectVoiceOneMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.populateVoice(0); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + if (mm.voices.length > 1) { + return true; + } + } + return false; + }, + menuChoice: { + icon: '', + text: 'Voice 1', + value: 'voiceOne' + } +}; +const selectVoiceTwoMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.populateVoice(1); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + if (mm.voices.length < 4) { + return true; + } + } + return false; + }, + menuChoice: { + icon: '', + text: 'Voice 2', + value: 'voiceTwo' + } +}; +const selectVoiceThreeMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.populateVoice(2); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + if (mm.voices.length < 4 && mm.voices.length > 1) { + return true; + } + } + return false; + }, + menuChoice: { + icon: '', + text: 'Voice 3', + value: 'voiceThree' + } +}; +const selectVoiceFourMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.populateVoice(3); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + if (mm.voices.length < 4 && mm.voices.length > 2) { + return true; + } + } + return false; + }, + menuChoice: { + icon: '', + text: 'Voice 4', + value: 'voiceFour' + } +}; +const removeVoiceMenuOption = { + handler: (menu) => __awaiter(void 0, void 0, void 0, function* () { + menu.view.depopulateVoice(); + }), display: (menu) => { + for (let i = 0; i < menu.view.tracker.selections.length; ++i) { + const mm = menu.view.tracker.selections[i].measure; + if (mm.activeVoice > 0) { + return true; + } + } + return false; + }, + menuChoice: { + icon: '', + text: 'Remove Voice', + value: 'removeVoice' + } +}; +const SuiVoiceMenuOptions = [ + selectVoiceOneMenuOption, selectVoiceTwoMenuOption, selectVoiceThreeMenuOption, selectVoiceFourMenuOption, + removeVoiceMenuOption +]; + + +/***/ }), + +/***/ "./src/ui/qwerty.ts": +/*!**************************!*\ + !*** ./src/ui/qwerty.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Qwerty: () => (/* binding */ Qwerty) +/* harmony export */ }); +/* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); +// [Smoosic](https://github.com/AaronDavidNewman/Smoosic) +// Copyright (c) Aaron David Newman 2021. + +; +; +class Qwerty { + static get navigationElements() { + const kbRows = [ + { row: '1234567890-=', shifted: '!@#$%^&*()_+' }, + { row: 'QWERTYUIOP[]', shifted: 'QWERTYUIOP{}' }, + { row: "ASDFGHJKL;'", shifted: 'ASDFGHJKL:"' }, + { row: 'ZXCVBNM,./', shifted: 'ZXCVBNM<>?' } + ]; + const arrows = [ + { icon: 'icon-arrow-left', text: '', shifted: '', classes: 'helpKey', dataKey: 'ArrowLeft' }, + { icon: 'icon-arrow-right', text: '', shifted: '', classes: 'helpKey', dataKey: 'ArrowRight' }, + { icon: '', text: 'Space', classes: 'wideKey', shifted: '', dataKey: 'Space' }, + { icon: 'icon-arrow-up', text: '', shifted: '', classes: 'helpKey', dataKey: 'ArrowUp' }, + { icon: 'icon-arrow-down', text: '', shifted: '', classes: 'helpKey', dataKey: 'ArrowDown' }, + { icon: '', text: 'Ins', shifted: '', classes: 'helpKey', dataKey: 'Insert' }, + { icon: '', text: 'Del', shifted: '', classes: 'helpKey', dataKey: 'Delete' }, + { icon: '', text: 'Enter', shifted: '', classes: 'wideKey', dataKey: 'Enter' } + ]; + let keyRows = {}; + const labels = ['topNumbers', 'keys1', 'keys2', 'keys3', 'arrows']; + let j = 0; + kbRows.forEach((kbRow) => { + var str = kbRow.row; + var shifted = kbRow.shifted; + var keys = []; + for (var i = 0; i < str.length; ++i) { + if (j === 2 && i === 0) { + keys.push({ icon: '', text: 'Shift', shifted: '', classes: 'wideKey', dataKey: 'shift' }); + } + if (j === 3 && i === 0) { + keys.push({ icon: '', text: 'Ctrl', shifted: '', classes: 'wideKey', dataKey: 'ctrl' }); + keys.push({ icon: '', text: 'Alt', shifted: '', classes: 'helpKey', dataKey: 'alt' }); + } + keys.push({ icon: '', text: str[i], shifted: shifted[i], classes: 'helpKey', dataKey: str[i] }); + } + keyRows[labels[j]] = keys; j += 1; }); keyRows[labels[j]] = arrows; @@ -60588,1647 +65590,260 @@ class Qwerty { var b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; var r = b('span').classes('keyContainer'); buttons.forEach((button) => { - var text = button.text; - var shiftedText = button.shifted ? button.shifted : text; - r.append(b('span').classes(button.icon + ' ' + button.classes) - .attr('data-key', button.dataKey).attr('data-shift', shiftedText) - .append(b('span').classes('button-text').text(text)) - .append(b('span').classes('button-shifted').text(shiftedText))); - }); - return r; - } - static _buttonBlock(buttons, id) { - var b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; - var r = b('div').classes('keyBlock').attr('id', id); - r.append(Qwerty._kbButton(buttons)); - return r; - } - static _buildElements(rows) { - const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; - const r = b('div').classes('buttonLine') - .append(b('span').classes('icon icon-move')); - const keys = Object.keys(rows); - keys.forEach((key, rowIx) => { - const row = rows[key]; - r.append(Qwerty._buttonBlock(row, 'row-' + rowIx)); - }); - return r; - } - static hideKb() { - $('body').removeClass('showQwerty'); - Qwerty.displayed = false; - } - static displayKb() { - if (Qwerty.created) { - $('body').addClass('showQwerty'); - Qwerty.displayed = true; - return; - } - (0,_common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.createTopDomContainer)('.qwertyKb'); - $('body').addClass('showQwerty'); - $('.qwertyKb').html(''); - var b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; - var r = b('div').classes('kb-float'); - r.append(Qwerty._buildElements(Qwerty.navigationElements)); - $('.qwertyKb').append(r.dom()); - var cb = function (x, y) { }; - (0,_common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.createTopDomContainer)('.draganime'); - (0,_common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.draggable)({ - parent: $('.qwertyKb'), - handle: $('.qwertyKb').find('.icon-move'), - animateDiv: '.draganime', - cb: cb, - moveParent: true - }); - Qwerty.displayed = true; - Qwerty.created = true; - } -} -Qwerty._shiftTime = 0; -Qwerty.displayed = false; -Qwerty.created = false; - - -/***/ }), - -/***/ "./src/ui/ribbonLayout/default/defaultRibbon.ts": -/*!******************************************************!*\ - !*** ./src/ui/ribbonLayout/default/defaultRibbon.ts ***! - \******************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ defaultRibbonLayout: () => (/* binding */ defaultRibbonLayout) -/* harmony export */ }); -// [Smoosic](https://github.com/AaronDavidNewman/Smoosic) -// Copyright (c) Aaron David Newman 2021. -class defaultRibbonLayout { - static get ribbons() { - var left = defaultRibbonLayout.leftRibbonIds; - var top = defaultRibbonLayout.displayIds.concat(defaultRibbonLayout.noteButtonIds).concat(defaultRibbonLayout.navigateButtonIds) - .concat(defaultRibbonLayout.articulateButtonIds).concat(defaultRibbonLayout.microtoneIds) - .concat(defaultRibbonLayout.durationIds) - .concat(defaultRibbonLayout.beamIds).concat(defaultRibbonLayout.measureIds) - .concat(defaultRibbonLayout.staveIds) - .concat(defaultRibbonLayout.textIds).concat(defaultRibbonLayout.playerIds) - .concat(defaultRibbonLayout.voiceButtonIds).concat(defaultRibbonLayout.debugIds); - return { - left: left, - top: top - }; - } - static get ribbonButtons() { - return defaultRibbonLayout.leftRibbonButtons.concat(defaultRibbonLayout.navigationButtons).concat(defaultRibbonLayout.noteRibbonButtons).concat(defaultRibbonLayout.articulationButtons).concat(defaultRibbonLayout.microtoneButtons).concat(defaultRibbonLayout.chordButtons).concat(defaultRibbonLayout.durationRibbonButtons).concat(defaultRibbonLayout.beamRibbonButtons).concat(defaultRibbonLayout.measureRibbonButtons) - .concat(defaultRibbonLayout.staveRibbonButtons) - .concat(defaultRibbonLayout.textRibbonButtons).concat(defaultRibbonLayout.playerButtons) - .concat(defaultRibbonLayout.voiceRibbonButtons).concat(defaultRibbonLayout.displayButtons).concat(defaultRibbonLayout.debugRibbonButtons); - } - static get leftRibbonIds() { - return ['helpDialog', 'languageMenu', 'fileMenu', 'libraryMenu', - 'scoreMenu', 'partMenu', 'noteMenu', 'addStaffMenu', 'measureModal', - 'tempoModal', 'timeSignatureMenu', 'keyMenu', 'staffModifierMenu', - 'pianoModal']; - } - static get noteButtonIds() { - return ['NoteButtons', - 'UpNoteButton', 'DownNoteButton', 'AddGraceNote', 'RemoveGraceNote', 'SlashGraceNote', - 'XNoteHead', 'TriUpNoteHead', 'CircleXNoteHead', 'DiamondNoteHead', - 'UpOctaveButton', 'DownOctaveButton', 'ToggleRestButton', 'ToggleSlashButton', 'ToggleAccidental', 'ToggleCourtesy']; - } - static get voiceButtonIds() { - return ['VoiceButtons', 'V1Button', 'V2Button', 'V3Button', 'V4Button', 'VXButton']; - } - static get navigateButtonIds() { - return ['NavigationButtons', 'navLeftButton', 'navRightButton', 'navUpButton', 'navDownButton', 'moreNavButtons', 'navFastForward', 'navRewind', - 'navGrowLeft', 'navGrowRight']; - } - static get articulateButtonIds() { - return ['articulationButtons', 'accentButton', 'tenutoButton', 'staccatoButton', 'marcatoButton', 'fermataButton', 'pizzicatoButton', 'mordentButton', 'mordentInvertedButton', 'trillButton', - 'pedalOpenButton', 'caesuraButton', 'pedalClosedButton', 'breathButton', - 'scoopButton', 'dropButton', 'dropLongButton', 'doitButton', 'doitLongButton', 'flipButton', 'smearButton' - ]; - } - static get intervalIds() { - return ['CreateChordButtons', 'SecondUpButton', 'SecondDownButton', 'ThirdUpButton', 'ThirdDownButton', 'FourthUpButton', 'FourthDownButton', - 'FifthUpButton', 'FifthDownButton', 'SixthUpButton', 'SixthDownButton', - 'SeventhUpButton', 'SeventhDownButton', 'OctaveUpButton', 'OctaveDownButton', 'CollapseChordButton']; - } - static get debugIds() { - return ['DebugGroup', 'DebugButton2']; - } - static get durationIds() { - return ['DurationButtons', 'GrowDuration', 'LessDuration', 'GrowDurationDot', 'LessDurationDot', 'TripletButton', 'QuintupletButton', 'SeptupletButton', 'NoTupletButton']; - } - static get measureIds() { - return ['MeasureButtons', 'endRepeat', 'startRepeat', 'endBar', 'doubleBar', 'singleBarEnd', 'singleBarStart', 'nthEnding', 'dcAlCoda', 'dsAlCoda', 'dcAlFine', 'dsAlFine', 'coda', 'toCoda', 'segno', 'toSegno', 'fine']; - } - static get staveIds() { - return ['StaveButtons', 'clefTreble', 'clefBass', 'clefAddRemove', 'clefMoveUp', 'clefMoveDown', 'moreStaffButtons', - 'clefTenor', 'clefAlto', 'clefPercussion', - 'staffBracketLower', 'staffBraceLower', 'staffDoubleConnectorLower', 'staffSingleConnectorLower']; - } - static get textIds() { - return ['TextButtons', 'addTextMenu', 'rehearsalMark', 'lyrics', 'chordChanges', 'addDynamicsMenu']; - } - static get beamIds() { - return ['BeamButtons', 'breakBeam', 'beamSelections', 'toggleBeamDirection']; - } - static get playerIds() { - return ['playerButtons', 'playButton', 'pauseButton', 'stopButton']; - } - static get microtoneIds() { - return ['MicrotoneButtons', 'flat75sz', 'flat25sz', 'flat25ar', 'flat125ar', 'sharp75', 'sharp125', 'sharp25', 'sori', 'koron']; - } - static get displayIds() { - return ['quickButtons', 'selectPart', 'refresh', 'zoomout', 'zoomin', 'playButton2', 'stopButton2']; - } - static get textRibbonButtons() { - return [ - { - leftText: '', - rightText: '', - classes: 'icon collapseParent measure', - icon: 'icon-text', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'textEdit', - id: 'TextButtons' - }, { - leftText: '', - rightText: '/t', - classes: 'icon collapsed textButton', - icon: 'icon-textBasic', - action: 'collapseChild', - ctor: 'TextButtons', - group: 'textEdit', - id: 'addTextMenu' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed textButton', - icon: 'icon-rehearsemark', - action: 'collapseChild', - ctor: 'TextButtons', - group: 'textEdit', - id: 'rehearsalMark' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed textButton', - icon: 'icon-lyric', - action: 'collapseChild', - ctor: 'TextButtons', - group: 'textEdit', - id: 'lyrics' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed textButton', - icon: 'icon-chordSymbol', - action: 'collapseChild', - ctor: 'TextButtons', - group: 'textEdit', - id: 'chordChanges' - }, { - leftText: '', - rightText: '/d', - classes: 'icon collapsed textButton', - icon: 'icon-mezzopiano', - action: 'collapseChild', - ctor: 'TextButtons', - group: 'textEdit', - id: 'addDynamicsMenu' - } - ]; - } - static get displayButtons() { - return [{ - leftText: '', - rightText: '', - classes: 'icon hide', - icon: 'icon-zoomplus', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'quickButtons', - id: 'quickButtons' - }, { - leftText: '', - rightText: 'Select Part', - classes: 'icon select-part-button', - icon: 'icon-circle-down', - action: 'collapseChild', - ctor: 'DisplaySettings', - group: 'quickButtons', - id: 'selectPart' - }, { - leftText: '', - rightText: '', - classes: 'icon refresh', - icon: 'icon-refresh', - action: 'collapseChild', - ctor: 'DisplaySettings', - group: 'quickButtons', - id: 'refresh' - }, { - leftText: '', - rightText: '', - classes: 'icon refresh', - icon: 'icon-zoomplus', - action: 'collapseChild', - ctor: 'DisplaySettings', - group: 'quickButtons', - id: 'zoomout' - }, { - leftText: '', - rightText: '', - classes: 'icon refresh', - icon: 'icon-zoomminus', - action: 'collapseChild', - ctor: 'DisplaySettings', - group: 'quickButtons', - id: 'zoomin' - }, { - leftText: '', - rightText: '', - classes: 'icon play', - icon: 'icon-play3', - action: 'collapseChild', - ctor: 'DisplaySettings', - group: 'quickButtons', - id: 'playButton2' - }, { - leftText: '', - rightText: '', - classes: 'icon stop2', - icon: 'icon-stop2', - action: 'collapseChild', - ctor: 'DisplaySettings', - group: 'quickButtons', - id: 'stopButton2' - } - ]; - } - static get microtoneButtons() { - return [{ - leftText: '', - rightText: '', - classes: 'icon collapseParent microtones', - icon: 'icon-microtone', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'microtone', - id: 'MicrotoneButtons' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed microtones', - icon: 'icon-flat25sz', - action: 'collapseChild', - ctor: 'MicrotoneButtons', - group: 'microtone', - id: 'flat25sz' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed microtones', - icon: 'icon-flat75sz', - action: 'collapseChild', - ctor: 'MicrotoneButtons', - group: 'microtone', - id: 'flat75sz' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed microtones', - icon: 'icon-flat25ar', - action: 'collapseChild', - ctor: 'MicrotoneButtons', - group: 'microtone', - id: 'flat25ar' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed microtones', - icon: 'icon-sharp75', - action: 'collapseChild', - ctor: 'MicrotoneButtons', - group: 'microtone', - id: 'sharp75' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed microtones', - icon: 'icon-sharp125', - action: 'collapseChild', - ctor: 'MicrotoneButtons', - group: 'microtone', - id: 'sharp125' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed microtones', - icon: 'icon-sharp25', - action: 'collapseChild', - ctor: 'MicrotoneButtons', - group: 'microtone', - id: 'sharp25' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed microtones', - icon: 'icon-sori', - action: 'collapseChild', - ctor: 'MicrotoneButtons', - group: 'microtone', - id: 'sori' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed microtones', - icon: 'icon-koron', - action: 'collapseChild', - ctor: 'MicrotoneButtons', - group: 'microtone', - id: 'koron' - }]; - } - static get staveRibbonButtons() { - return [{ - leftText: '', - rightText: '', - classes: 'icon collapseParent staves', - icon: 'icon-treble', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'staves', - id: 'StaveButtons' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed staves', - icon: 'icon-treble', - action: 'collapseChild', - ctor: 'StaveButtons', - group: 'staves', - id: 'clefTreble' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed staves', - icon: 'icon-bass', - action: 'collapseChild', - ctor: 'StaveButtons', - group: 'staves', - id: 'clefBass' - }, - { - leftText: '', - rightText: '', - classes: 'icon collapsed staves', - icon: 'icon-arrow-up', - action: 'collapseChild', - ctor: 'StaveButtons', - group: 'staves', - id: 'clefMoveUp' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed staves', - icon: 'icon-arrow-down', - action: 'collapseChild', - ctor: 'StaveButtons', - group: 'staves', - id: 'clefMoveDown' - }, - { - leftText: '...', - rightText: '', - icon: 'icon-circle-left', - classes: 'collapsed expander', - action: 'collapseMore', - ctor: 'ExtendedCollapseParent', - group: 'staves', - id: 'moreStaffButtons' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed staves', - icon: 'icon-tenor', - action: 'collapseGrandchild', - ctor: 'StaveButtons', - group: 'staves', - id: 'clefTenor' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed staves', - icon: 'icon-alto', - action: 'collapseGrandchild', - ctor: 'StaveButtons', - group: 'staves', - id: 'clefAlto' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed staves', - icon: 'icon-percussion', - action: 'collapseGrandchild', - ctor: 'StaveButtons', - group: 'staves', - id: 'clefPercussion' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed staves', - icon: 'icon-brace', - action: 'collapseGrandchild', - ctor: 'StaveButtons', - group: 'staves', - id: 'staffBraceLower' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed staves', - icon: 'icon-bracket', - action: 'collapseGrandchild', - ctor: 'StaveButtons', - group: 'staves', - id: 'staffBracketLower' - } - ]; - } - static get beamRibbonButtons() { - return [{ - leftText: '', - rightText: '', - classes: 'icon collapseParent beams', - icon: 'icon-flag', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'beams', - id: 'BeamButtons' - }, { - leftText: '', - rightText: 'x', - icon: 'icon-beamBreak', - classes: 'collapsed beams', - action: 'collapseChild', - ctor: 'BeamButtons', - group: 'beams', - id: 'breakBeam' - }, - { - leftText: '', - rightText: 'Shift-X', - icon: 'icon-beam', - classes: 'collapsed beams', - action: 'collapseChild', - ctor: 'BeamButtons', - group: 'beams', - id: 'beamSelections' - }, - { - leftText: '', - rightText: 'Shift-B', - icon: 'icon-flagFlip', - classes: 'collapsed beams', - action: 'collapseChild', - ctor: 'BeamButtons', - group: 'beams', - id: 'toggleBeamDirection' - } - ]; - } - static get measureRibbonButtons() { - return [{ - leftText: '', - rightText: '', - classes: 'icon collapseParent measure', - icon: 'icon-end_rpt', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'measure', - id: 'MeasureButtons' - }, { - leftText: '', - rightText: '', - icon: 'icon-end_rpt', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'endRepeat' - }, - { - leftText: '', - rightText: '', - icon: 'icon-start_rpt', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'startRepeat' - }, - { - leftText: '', - rightText: '', - icon: 'icon-end_bar', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'endBar' - }, - { - leftText: '', - rightText: '', - icon: 'icon-double_bar', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'doubleBar' - }, - { - leftText: '', - rightText: '', - icon: 'icon-single_bar', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'singleBarEnd' - }, - { - leftText: '', - rightText: '', - icon: 'icon-single_bar_start', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'singleBarStart' - }, - { - leftText: '', - rightText: '', - icon: 'icon-ending', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'nthEnding' - }, - { - leftText: 'DC Al Coda', - rightText: '', - icon: '', - classes: 'collapsed repetext', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'dcAlCoda' - }, - { - leftText: 'DS Al Coda', - rightText: '', - icon: '', - classes: 'collapsed repetext', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'dsAlCoda' - }, - { - leftText: 'DC Al Fine', - rightText: '', - icon: '', - classes: 'collapsed repetext', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'dcAlFine' - }, - { - leftText: 'DS Al Fine', - rightText: '', - icon: '', - classes: 'collapsed repetext', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'dsAlFine' - }, - { - leftText: '', - rightText: '', - icon: 'icon-coda', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'coda' - }, - { - leftText: 'to ', - rightText: '', - icon: 'icon-coda', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'toCoda' - }, - { - leftText: '', - rightText: '', - icon: 'icon-segno', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'segno' - }, - { - leftText: 'Fine', - rightText: '', - icon: '', - classes: 'collapsed repetext', - action: 'collapseChild', - ctor: 'MeasureButtons', - group: 'measure', - id: 'fine' - } - ]; - } - static get debugRibbonButtons() { - return [{ - leftText: '', - rightText: '', - classes: 'icon collapseParent', - icon: 'icon-new-tab', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'debug', - id: 'DebugGroup' - }, { - leftText: '', - rightText: '', - classes: 'icon collapsed', - icon: 'icon-new-tab', - action: 'collapseChild', - ctor: 'DebugButtons', - group: 'debug', - id: 'DebugButton2' - }]; - } - static get durationRibbonButtons() { - return [{ - leftText: '', - rightText: '', - classes: 'icon collapseParent duration', - icon: 'icon-duration', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'duration', - id: 'DurationButtons' - }, { - leftText: '', - rightText: '.', - icon: 'icon-duration_grow', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'DurationButtons', - group: 'duration', - id: 'GrowDuration' - }, { - leftText: '', - rightText: ',', - icon: 'icon-duration_less', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'DurationButtons', - group: 'duration', - id: 'LessDuration' - }, { - leftText: '', - rightText: '>', - icon: 'icon-duration_grow_dot', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'DurationButtons', - group: 'duration', - id: 'GrowDurationDot' - }, { - leftText: '', - rightText: '<', - icon: 'icon-duration_less_dot', - classes: 'collapsed duration', - action: 'collapseChild', - ctor: 'DurationButtons', - group: 'duration', - id: 'LessDurationDot' - }, { - leftText: '', - rightText: 'Ctrl-3', - icon: 'icon-triplet', - classes: 'collapsed duration tuplet', - action: 'collapseChild', - ctor: 'DurationButtons', - group: 'duration', - id: 'TripletButton' - }, { - leftText: '', - rightText: 'Ctrl-5', - icon: 'icon-quint', - classes: 'collapsed duration tuplet', - action: 'collapseChild', - ctor: 'DurationButtons', - group: 'duration', - id: 'QuintupletButton' - }, { - leftText: '', - rightText: 'Ctrl-7', - icon: 'icon-septuplet', - classes: 'collapsed duration tuplet', - action: 'collapseChild', - ctor: 'DurationButtons', - group: 'duration', - id: 'SeptupletButton' - }, - { - leftText: '', - rightText: 'Ctrl-0', - icon: 'icon-no_tuplet', - classes: 'collapsed duration tuplet', - action: 'collapseChild', - ctor: 'DurationButtons', - group: 'duration', - id: 'NoTupletButton' - } - ]; - } - static get voiceRibbonButtons() { - return [{ - leftText: '', - rightText: '', - classes: 'icon collapseParent', - icon: 'icon-Vo', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'voices', - id: 'VoiceButtons' - }, { - leftText: '', - rightText: '', - icon: 'icon-V1', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'VoiceButtons', - group: 'voices', - id: 'V1Button' - }, { - leftText: '', - rightText: '', - icon: 'icon-V2', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'VoiceButtons', - group: 'voices', - id: 'V2Button' - }, { - leftText: '', - rightText: '', - icon: 'icon-V3', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'VoiceButtons', - group: 'voices', - id: 'V3Button' - }, { - leftText: '', - rightText: '', - icon: 'icon-V4', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'VoiceButtons', - group: 'voices', - id: 'V4Button' - }, { - leftText: '', - rightText: '', - icon: 'icon-Vx', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'VoiceButtons', - group: 'voices', - id: 'VXButton' - } - ]; - } - static get noteRibbonButtons() { - return [{ - leftText: '', - rightText: '', - classes: 'icon collapseParent', - icon: 'icon-note', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'notes', - id: 'NoteButtons' - }, { - leftText: 'A', - rightText: 'a', - icon: '', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'ANoteButton' - }, { - leftText: 'B', - rightText: 'b', - icon: '', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'BNoteButton' - }, { - leftText: 'C', - rightText: 'c', - icon: '', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'CNoteButton' - }, { - leftText: 'D', - rightText: 'd', - icon: '', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'DNoteButton' - }, { - leftText: 'E', - rightText: 'e', - icon: '', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'ENoteButton' - }, { - leftText: 'F', - rightText: 'f', - icon: '', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'FNoteButton' - }, { - leftText: 'G', - rightText: 'g', - icon: '', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'GNoteButton' - }, { - leftText: '', - rightText: '-', - icon: 'icon-sharp', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'UpNoteButton' - }, { - leftText: '', - rightText: '=', - icon: 'icon-bravura icon-accidentalFlat', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'DownNoteButton' - }, { - leftText: '', - rightText: 'r', - icon: 'icon-rest', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'ToggleRestButton' - }, { - leftText: '', - rightText: 'r', - icon: 'icon-slash', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'ToggleSlashButton' - }, { - leftText: '...', - rightText: '', - icon: 'icon-circle-left', - classes: 'collapsed expander', - action: 'collapseMore', - ctor: 'ExtendedCollapseParent', - group: 'notes', - id: 'moreNoteButtons' - }, { - leftText: '', - rightText: 'G', - icon: 'icon-grace_note', - classes: 'collapsed graceIcon', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'AddGraceNote' - }, { - leftText: '', - rightText: '', - icon: 'icon-grace_slash', - classes: 'collapsed graceIcon', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'SlashGraceNote' - }, { - leftText: '', - rightText: 'alt-g', - icon: 'icon-grace_remove', - classes: 'collapsed graceIcon', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'RemoveGraceNote' - }, { - leftText: '', - rightText: '', - icon: 'icon-notex', - classes: 'collapsed graceIcon', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'XNoteHead' - }, { - leftText: '', - rightText: '', - icon: 'icon-notehead-triangleup', - classes: 'collapsed graceIcon', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'TriUpNoteHead' - }, { - leftText: '', - rightText: '', - icon: 'icon-notehead-circlex', - classes: 'collapsed graceIcon', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'CircleXNoteHead' - }, { - leftText: '', - rightText: '', - icon: 'icon-notehead-diamondblack', - classes: 'collapsed graceIcon', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'DiamondNoteHead' - }, { - leftText: '8va', - rightText: 'Shift=', - icon: '', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'UpOctaveButton' - }, { - leftText: '8vb', - rightText: 'Shift-', - icon: '', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'DownOctaveButton' - }, { - leftText: '', - rightText: 'ShiftE', - icon: 'icon-accident', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'ToggleAccidental' - }, { - leftText: '', - rightText: 'ShiftF', - icon: 'icon-courtesy', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NoteButtons', - group: 'notes', - id: 'ToggleCourtesy' - } + var text = button.text; + var shiftedText = button.shifted ? button.shifted : text; + r.append(b('span').classes(button.icon + ' ' + button.classes) + .attr('data-key', button.dataKey).attr('data-shift', shiftedText) + .append(b('span').classes('button-text').text(text)) + .append(b('span').classes('button-shifted').text(shiftedText))); + }); + return r; + } + static _buttonBlock(buttons, id) { + var b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; + var r = b('div').classes('keyBlock').attr('id', id); + r.append(Qwerty._kbButton(buttons)); + return r; + } + static _buildElements(rows) { + const b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; + const r = b('div').classes('buttonLine') + .append(b('span').classes('icon icon-move')); + const keys = Object.keys(rows); + keys.forEach((key, rowIx) => { + const row = rows[key]; + r.append(Qwerty._buttonBlock(row, 'row-' + rowIx)); + }); + return r; + } + static hideKb() { + $('body').removeClass('showQwerty'); + Qwerty.displayed = false; + } + static displayKb() { + if (Qwerty.created) { + $('body').addClass('showQwerty'); + Qwerty.displayed = true; + return; + } + (0,_common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.createTopDomContainer)('.qwertyKb'); + $('body').addClass('showQwerty'); + $('.qwertyKb').html(''); + var b = _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.buildDom; + var r = b('div').classes('kb-float'); + r.append(Qwerty._buildElements(Qwerty.navigationElements)); + $('.qwertyKb').append(r.dom()); + var cb = function (x, y) { }; + (0,_common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.createTopDomContainer)('.draganime'); + (0,_common_htmlHelpers__WEBPACK_IMPORTED_MODULE_0__.draggable)({ + parent: $('.qwertyKb'), + handle: $('.qwertyKb').find('.icon-move'), + animateDiv: '.draganime', + cb: cb, + moveParent: true + }); + Qwerty.displayed = true; + Qwerty.created = true; + } +} +Qwerty._shiftTime = 0; +Qwerty.displayed = false; +Qwerty.created = false; + + +/***/ }), + +/***/ "./src/ui/ribbonLayout/default/defaultRibbon.ts": +/*!******************************************************!*\ + !*** ./src/ui/ribbonLayout/default/defaultRibbon.ts ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ defaultRibbonLayout: () => (/* binding */ defaultRibbonLayout) +/* harmony export */ }); +// [Smoosic](https://github.com/AaronDavidNewman/Smoosic) +// Copyright (c) Aaron David Newman 2021. +class defaultRibbonLayout { + static get ribbons() { + var left = defaultRibbonLayout.leftRibbonIds; + var top = defaultRibbonLayout.displayIds.concat(defaultRibbonLayout.debugIds); + return { + left: left, + top: top + }; + } + static get ribbonButtons() { + return defaultRibbonLayout.leftRibbonButtons.concat(defaultRibbonLayout.displayButtons).concat(defaultRibbonLayout.debugRibbonButtons); + } + static get leftRibbonIds() { + return ['helpDialog', 'languageMenu', 'fileMenu', + 'scoreMenu', 'partMenu', 'staffModifierMenu', 'measureModal', 'voiceMenu', 'beamMenu', + 'noteMenu', 'textMenu', 'libraryMenu', ]; } - static get playerButtons() { - // .icon-play3 - return [{ - leftText: '', - rightText: '', - icon: 'icon-equalizer2', - classes: 'icon collapseParent player', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'playerButtons', - id: 'playerButtons' - }, { - leftText: '', - rightText: 'p', - icon: 'icon-play3', - classes: 'icon collapsed player', - action: 'collapseChild', - ctor: 'PlayerButtons', - group: 'playerButtons', - id: 'playButton' - }, - { - leftText: '', - rightText: 's', - icon: 'icon-stop2', - classes: 'icon collapsed player', - action: 'collapseChild', - ctor: 'PlayerButtons', - group: 'playerButtons', - id: 'stopButton' - }, - { - leftText: '', - rightText: 'P', - icon: 'icon-pause2', - classes: 'icon collapsed player', - action: 'collapseChild', - ctor: 'PlayerButtons', - group: 'playerButtons', - id: 'pauseButton' - }]; + static get debugIds() { + return ['DebugGroup', 'DebugButton2']; + } + static get displayIds() { + return ['quickButtons', 'selectPart', 'refresh', 'zoomout', 'zoomin', 'playButton2', 'stopButton2', 'keySignature', 'ribbonTempo', 'ribbonTime']; } - static get articulationButtons() { + static get displayButtons() { return [{ leftText: '', rightText: '', - icon: 'icon-articulation', - classes: 'icon collapseParent articulation', + classes: 'icon hide', + icon: 'icon-smo icon-zoomplus', action: 'collapseParent', ctor: 'CollapseRibbonControl', - group: 'articulations', - id: 'articulationButtons' - }, { - leftText: '', - rightText: 'h', - icon: 'icon-accent_above', - classes: 'icon collapsed articulation', - action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'accentButton' - }, { - leftText: '', - rightText: 'i', - icon: 'icon-tenuto_above', - classes: 'icon collapsed articulation', - action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'tenutoButton' - }, { - leftText: '', - rightText: 'j', - icon: 'icon-staccato_above', - classes: 'icon collapsed articulation', - action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'staccatoButton' - }, { - leftText: '', - rightText: 'k', - icon: 'icon-marcato_above', - classes: 'icon collapsed articulation', - action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'marcatoButton' - }, { - leftText: '', - rightText: '', - icon: 'icon-fermata', - classes: 'icon collapsed articulation', - action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'fermataButton' + group: 'quickButtons', + id: 'quickButtons' }, { leftText: '', - rightText: 'l', - icon: 'icon-pitz_above', - classes: 'icon collapsed articulation', + rightText: 'Select Part', + classes: 'icon select-part-button', + icon: 'icon-smo icon-circle-down', action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'pizzicatoButton' + ctor: 'DisplaySettings', + group: 'quickButtons', + id: 'selectPart' }, { leftText: '', rightText: '', - icon: 'icon-mordent-inv', - classes: 'icon collapsed articulation', + classes: 'icon refresh', + icon: 'icon-smo icon-refresh', action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'mordentInvertedButton' + ctor: 'DisplaySettings', + group: 'quickButtons', + id: 'refresh' }, { leftText: '', rightText: '', - icon: 'icon-mordent', - classes: 'icon collapsed articulation', + classes: 'icon refresh', + icon: 'icon-smo icon-zoomplus', action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'mordentButton' + ctor: 'DisplaySettings', + group: 'quickButtons', + id: 'zoomout' }, { leftText: '', rightText: '', - icon: 'icon-bravura icon-breath', - classes: 'icon collapsed articulation', + classes: 'icon refresh', + icon: 'icon-smo icon-zoomminus', action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'breathButton' + ctor: 'DisplaySettings', + group: 'quickButtons', + id: 'zoomin' }, { leftText: '', rightText: '', - icon: 'icon-bravura icon-caesura', - classes: 'icon collapsed articulation', + classes: 'icon play', + icon: 'icon-smo icon-play3', action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'caesuraButton' + ctor: 'DisplaySettings', + group: 'quickButtons', + id: 'playButton2' }, { leftText: '', rightText: '', - icon: 'icon-bravura icon-pedal-open', - classes: 'icon collapsed articulation', + classes: 'icon stop2', + icon: 'icon-smo icon-stop2', action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'pedalOpenButton' + ctor: 'DisplaySettings', + group: 'quickButtons', + id: 'stopButton2' }, { - leftText: '', - rightText: '', - icon: 'icon-bravura icon-pedal-closed', - classes: 'icon collapsed articulation', + leftText: 'Key', + rightText: 'Alt-k', + hotKey: 'k', + classes: 'icon keysignature button-wide hover-text', + icon: 'icon-smo icon-key-sig-b', action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'pedalClosedButton' + ctor: 'DisplaySettings', + group: 'quickButtons', + id: 'keySignature' }, { - leftText: '', - rightText: '', - icon: 'icon-trill', - classes: 'icon collapsed articulation', + leftText: 'Tempo', + rightText: 'Alt-o', + hotKey: 'o', + classes: 'icon keysignature button-wide hover-text', + icon: 'icon-smo icon-metronome4', action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'trillButton' + ctor: 'DisplaySettings', + group: 'quickButtons', + id: 'ribbonTempo' }, { - leftText: '', - rightText: '', - icon: 'icon-scoop', - classes: 'icon collapsed articulation', - action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'scoopButton' - }, - { - leftText: '', - rightText: '', - icon: 'icon-drop', - classes: 'icon collapsed articulation', - action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'dropButton' - }, - { - leftText: '', - rightText: '', - icon: 'icon-drop-long', - classes: 'icon collapsed articulation', - action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'dropLongButton' - }, - { - leftText: '', - rightText: '', - icon: 'icon-doit', - classes: 'icon collapsed articulation', - action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'doitButton' - }, - { - leftText: '', - rightText: '', - icon: 'icon-doit-long', - classes: 'icon collapsed articulation', - action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'doitLongButton' - }, - { - leftText: '', - rightText: '', - icon: 'icon-flip', - classes: 'icon collapsed articulation', - action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'flipButton' - }, - { - leftText: '', - rightText: '', - icon: 'icon-smear', - classes: 'icon collapsed articulation', + leftText: 'Time', + rightText: 'Alt-t', + hotKey: 't', + classes: 'icon keysignature button-wide hover-text', + icon: 'icon-bravura icon-timeSigCommon', action: 'collapseChild', - ctor: 'ArticulationButtons', - group: 'articulations', - id: 'smearButton' + ctor: 'DisplaySettings', + group: 'quickButtons', + id: 'ribbonTime' } ]; } - static get navigationButtons() { + static get debugRibbonButtons() { return [{ leftText: '', rightText: '', classes: 'icon collapseParent', - icon: 'icon-navigate', + icon: 'icon-new-tab', action: 'collapseParent', ctor: 'CollapseRibbonControl', - group: 'navigation', - id: 'NavigationButtons' - }, { - leftText: '', - rightText: '', - icon: 'icon-arrow-left', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NavigationButtons', - group: 'navigation', - id: 'navLeftButton' - }, { - leftText: '', - rightText: '', - icon: 'icon-arrow-right', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NavigationButtons', - group: 'navigation', - id: 'navRightButton' - }, { - leftText: '', - rightText: '', - icon: 'icon-arrow-up', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NavigationButtons', - group: 'navigation', - id: 'navUpButton' - }, { - leftText: '', - rightText: '', - icon: 'icon-arrow-down', - classes: 'collapsed', - action: 'collapseChild', - ctor: 'NavigationButtons', - group: 'navigation', - id: 'navDownButton' - }, { - leftText: '...', - rightText: '', - icon: '', - classes: 'collapsed expander', - action: 'collapseMore', - ctor: 'ExtendedCollapseParent', - group: 'navigation', - id: 'moreNavButtons' - }, { - leftText: '', - rightText: '', - icon: 'icon-fforward', - classes: 'collapsed', - action: 'collapseGrandchild', - ctor: 'NavigationButtons', - group: 'navigation', - id: 'navFastForward' - }, { - leftText: '', - rightText: '', - icon: 'icon-rewind', - classes: 'collapsed', - action: 'collapseGrandchild', - ctor: 'NavigationButtons', - group: 'navigation', - id: 'navRewind' - }, { - leftText: '', - rightText: '', - icon: 'icon-note_select_left', - classes: 'collapsed selection-icon', - action: 'collapseGrandchild', - ctor: 'NavigationButtons', - group: 'navigation', - id: 'navGrowLeft' + group: 'debug', + id: 'DebugGroup' }, { leftText: '', rightText: '', - icon: 'icon-note_select_right', - classes: 'collapsed selection-icon', - action: 'collapseGrandchild', - ctor: 'NavigationButtons', - group: 'navigation', - id: 'navGrowRight' - } - ]; - } - static get chordButtons() { - return [{ - icon: 'icon-chords', - leftText: '', - rightText: '', - classes: 'icon collapseParent', - action: 'collapseParent', - ctor: 'CollapseRibbonControl', - group: 'chords', - id: 'CreateChordButtons' - }, { - icon: 'icon-arrow-up', - leftText: '2nd', - rightText: '2', - classes: 'collapsed addChord', - action: 'collapseChild', - dataElements: { - interval: '1', - direction: '1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'SecondUpButton' - }, { - icon: 'icon-arrow-down', - leftText: '2nd', - rightText: 'Shift 2', - classes: 'collapsed addChord dirdown', - action: 'collapseChild', - dataElements: { - interval: '1', - direction: '1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'SecondDownButton' - }, { - icon: 'icon-arrow-up', - leftText: '3rd', - rightText: '3', - classes: 'collapsed addChord', - action: 'collapseChild', - dataElements: { - interval: '2', - direction: '1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'ThirdUpButton' - }, { - icon: 'icon-arrow-down', - leftText: '3rd', - rightText: 'Shift 3', - classes: 'collapsed addChord dirdown', - action: 'collapseChild', - dataElements: { - interval: '2', - direction: '-1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'ThirdDownButton' - }, { - icon: 'icon-arrow-up', - leftText: '4th', - rightText: '4', - classes: 'collapsed addChord', - action: 'collapseChild', - dataElements: { - interval: '3', - direction: '1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'FourthUpButton' - }, { - icon: 'icon-arrow-down', - leftText: '4th', - rightText: 'Shift 4', - classes: 'collapsed addChord dirdown', - action: 'collapseChild', - dataElements: { - interval: '3', - direction: '-1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'FourthDownButton' - }, { - icon: 'icon-arrow-up', - leftText: '5th', - rightText: '5', - classes: 'collapsed addChord dirdown', - action: 'collapseChild', - dataElements: { - interval: '4', - direction: '1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'FifthUpButton' - }, { - icon: 'icon-arrow-down', - leftText: '5th', - rightText: 'Shift 5', - classes: 'collapsed addChord dirdown', - action: 'collapseChild', - dataElements: { - interval: '4', - direction: '-1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'FifthDownButton' - }, { - icon: 'icon-arrow-up', - leftText: '6th', - rightText: '6', - classes: 'collapsed addChord dirdown', - action: 'collapseChild', - dataElements: { - interval: '5', - direction: '1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'SixthUpButton' - }, { - icon: 'icon-arrow-down', - leftText: '6th', - rightText: 'Shift 6', - classes: 'collapsed addChord dirdown', - action: 'collapseChild', - dataElements: { - interval: '5', - direction: '-1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'SixthDownButton' - }, { - icon: 'icon-arrow-up', - leftText: '7th', - rightText: '7', - classes: 'collapsed addChord dirdown', - action: 'collapseChild', - dataElements: { - interval: '6', - direction: '1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'SeventhUpButton' - }, { - icon: 'icon-arrow-down', - leftText: '7th', - rightText: 'Shift 7', - classes: 'collapsed addChord dirdown', - action: 'collapseChild', - dataElements: { - interval: '6', - direction: '-1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'SeventhDownButton' - }, { - icon: 'icon-arrow-up', - leftText: '8va', - rightText: '8', - classes: 'collapsed addChord dirdown', - action: 'collapseChild', - dataElements: { - interval: '7', - direction: '1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'OctaveUpButton' - }, { - icon: 'icon-arrow-down', - leftText: '7th', - rightText: 'Shift 7', - classes: 'collapsed addChord dirdown', - action: 'collapseChild', - dataElements: { - interval: '7', - direction: '-1' - }, - ctor: 'ChordButtons', - group: 'chords', - id: 'OctaveDownButton' - }, { - icon: '', - leftText: 'Collapse', - rightText: '', - classes: 'collapsed addChord dirdown', + classes: 'icon collapsed', + icon: 'icon-new-tab', action: 'collapseChild', - ctor: 'ChordButtons', - group: 'chords', - id: 'CollapseChordButton' - } - ]; + ctor: 'DebugButtons', + group: 'debug', + id: 'DebugButton2' + }]; } static get leftRibbonButtons() { return [{ icon: '', leftText: 'Help', rightText: '?', - classes: 'help-button', + classes: 'help-button nav-link link-body-emphasis', action: 'modal', ctor: 'helpModal', group: 'scoreEdit', id: 'helpDialog' }, { leftText: 'Language', - rightText: '/n', + rightText: 'Alt-g', icon: '', - classes: 'language-select menu-select', + hotKey: 'g', + classes: 'language-select nav-link link-body-emphasis hover-text', action: 'menu', ctor: 'SuiLanguageMenu', group: 'scoreEdit', id: 'languageMenu' }, { leftText: 'File', - rightText: '/f', + rightText: 'Alt-f', + hotKey: 'f', icon: '', - classes: 'file-modify menu-select', + classes: 'file-modify nav-link link-body-emphasis hover-text', action: 'menu', ctor: 'SuiFileMenu', group: 'scoreEdit', id: 'fileMenu' - }, { - leftText: 'Library', - rightText: '/L', - icon: '', - classes: 'file-modify menu-select', - action: 'modal', - ctor: 'SuiLibraryDialog', - group: 'scoreEdit', - id: 'libraryMenu' }, { leftText: 'Score', - rightText: '', + rightText: 'Alt-s', + hotKey: 's', icon: '', - classes: 'icon ', + classes: 'icon nav-link link-body-emphasis hover-text', action: 'menu', ctor: 'SuiScoreMenu', group: 'scoreEdit', @@ -62236,68 +65851,85 @@ class defaultRibbonLayout { }, { leftText: 'Parts', - rightText: '/p', + rightText: 'Alt-p', + hotKey: 'p', icon: '', - classes: 'icon', + classes: 'icon nav-link link-body-emphasis hover-text', action: 'menu', ctor: 'SuiPartMenu', group: 'scoreEdit', id: 'partMenu' }, { - leftText: 'Notes', - rightText: '', - icon: 'icon-note', - classes: 'icon', + leftText: 'Lines', + rightText: 'Alt-l', + hotKey: 'l', + icon: '', + classes: 'icon note-modify nav-link link-body-emphasis hover-text', action: 'menu', - ctor: 'SuiNoteMenu', + ctor: 'SuiStaffModifierMenu', group: 'scoreEdit', - id: 'noteMenu' + id: 'staffModifierMenu' }, { leftText: 'Measure', - rightText: '/a', + rightText: 'Alt-m', + hotKey: 'm', icon: '', - classes: 'icon menu-select', + classes: 'icon menu-select nav-link link-body-emphasis hover-text', action: 'menu', ctor: 'SuiMeasureMenu', group: 'scoreEdit', id: 'measureModal' }, { - leftText: 'Tempo', - rightText: 't', + leftText: 'Voices', + rightText: 'Alt-v', + hotKey: 'v', icon: '', - classes: 'icon ', - action: 'modal', - ctor: 'SuiTempoDialog', + classes: 'icon nav-link link-body-emphasis hover-text', + action: 'menu', + ctor: 'SuiVoiceMenu', group: 'scoreEdit', - id: 'tempoModal' + id: 'voiceMenu' }, { - leftText: 'Time Signature', - rightText: '/m', + leftText: 'Beams', + rightText: 'Alt-b', + hotKey: 'b', icon: '', - classes: 'staff-modify menu-select', + classes: 'icon nav-link link-body-emphasis hover-text', action: 'menu', - ctor: 'SuiTimeSignatureMenu', + ctor: 'SuiBeamMenu', group: 'scoreEdit', - id: 'timeSignatureMenu' + id: 'beamMenu' + }, { + leftText: 'Notes', + rightText: 'Alt-n', + hotKey: 'n', + icon: '', + classes: 'icon nav-link link-body-emphasis hover-text', + action: 'menu', + ctor: 'SuiNoteMenu', + group: 'scoreEdit', + id: 'noteMenu' }, { - leftText: 'Key', - rightText: '/k', + leftText: 'Text', + rightText: 'Alt-x', + hotKey: 'x', icon: '', - classes: 'note-modify menu-select', + classes: 'menu-select nav-link link-body-emphasis hover-text', action: 'menu', - ctor: 'SuiKeySignatureMenu', + ctor: 'SuiTextMenu', group: 'scoreEdit', - id: 'keyMenu' + id: 'textMenu' }, { - leftText: 'Lines', - rightText: '/l', + leftText: 'Library', + rightText: 'Alt-y', + hotKey: 'y', icon: '', - classes: 'icon note-modify menu-select', - action: 'menu', - ctor: 'SuiStaffModifierMenu', + classes: 'file-modify menu-select nav-link link-body-emphasis hover-text', + action: 'modal', + ctor: 'SuiLibraryDialog', group: 'scoreEdit', - id: 'staffModifierMenu' + id: 'libraryMenu' }, ]; } @@ -62978,7 +66610,7 @@ function createLoadTests() { midiScore = (new _src_smo_midi_midiToSmo__WEBPACK_IMPORTED_MODULE_4__.MidiToSmo(parseMidi(midiData.value), 1024)).convert(); yield view.changeScore(midiScore); QUnit.test('loadMidi2', assert => { - assert.equal(midiScore.staves[0].measures[0].tuplets.length, 1); + assert.equal(midiScore.staves[0].measures[0].tupletTrees.length, 1); }); midiData = new _src_ui_fileio_xhrLoader__WEBPACK_IMPORTED_MODULE_3__.SuiXhrLoader(midiKeyPath); yield midiData.loadAsync(); @@ -63009,7 +66641,7 @@ function createLoadTests() { /***/ (function(module) { /*! - * VexFlow 4.2.6 2024-03-31T22:07:36.979Z 9cbdf86a23fafc6a0c86f9a5e91ccc7be26684e2 + * VexFlow 4.2.8 2024-08-22T00:54:49.402Z 26945f85b426cc69f2acae2474cd84f863046c6d * Vexflow_smoosic, forked from : * Copyright (c) 2010 Mohit Muthanna Cheppudira * https://www.vexflow.com https://github.com/0xfe/vexflow @@ -63035,9 +66667,9 @@ __nested_webpack_require_976__.r(__nested_webpack_exports__); /* harmony export */ ID: () => (/* binding */ ID), /* harmony export */ VERSION: () => (/* binding */ VERSION) /* harmony export */ }); -const VERSION = '4.2.6'; -const ID = '9cbdf86a23fafc6a0c86f9a5e91ccc7be26684e2'; -const DATE = '2024-03-31T22:07:36.979Z'; +const VERSION = '4.2.8'; +const ID = '26945f85b426cc69f2acae2474cd84f863046c6d'; +const DATE = '2024-08-22T00:54:49.402Z'; /***/ }), @@ -63538,28 +67170,27 @@ class Accidental extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { Accidental.DEBUG = false; - /***/ }), /***/ "./src/annotation.ts": /*!***************************!*\ !*** ./src/annotation.ts ***! \***************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_26232__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_26231__) => { -__nested_webpack_require_26232__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_26232__.d(__nested_webpack_exports__, { +__nested_webpack_require_26231__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_26231__.d(__nested_webpack_exports__, { /* harmony export */ Annotation: () => (/* binding */ Annotation), /* harmony export */ AnnotationHorizontalJustify: () => (/* binding */ AnnotationHorizontalJustify), /* harmony export */ AnnotationVerticalJustify: () => (/* binding */ AnnotationVerticalJustify) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_26232__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_26232__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_26232__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_26232__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_26232__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_26232__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_26232__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_26231__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_26231__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_26231__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_26231__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_26231__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_26231__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_26231__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -63846,25 +67477,24 @@ Annotation.VerticalJustifyString = { }; - /***/ }), /***/ "./src/articulation.ts": /*!*****************************!*\ !*** ./src/articulation.ts ***! \*****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_41361__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_41359__) => { -__nested_webpack_require_41361__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_41361__.d(__nested_webpack_exports__, { +__nested_webpack_require_41359__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_41359__.d(__nested_webpack_exports__, { /* harmony export */ Articulation: () => (/* binding */ Articulation) /* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_41361__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_41361__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_41361__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_41361__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_41361__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_41361__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_41359__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_41359__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_41359__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_41359__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_41359__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_41359__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author: Larry Kuhns. // MIT License @@ -64206,23 +67836,22 @@ Articulation.DEBUG = false; Articulation.INITIAL_OFFSET = -0.5; - /***/ }), /***/ "./src/barnote.ts": /*!************************!*\ !*** ./src/barnote.ts ***! \************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_57179__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_57176__) => { -__nested_webpack_require_57179__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_57179__.d(__nested_webpack_exports__, { +__nested_webpack_require_57176__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_57176__.d(__nested_webpack_exports__, { /* harmony export */ BarNote: () => (/* binding */ BarNote) /* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_57179__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_57179__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_57179__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_57179__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_57176__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_57176__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_57176__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_57176__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -64263,6 +67892,7 @@ class BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { // Tell the formatter that bar notes have no duration. this.ignore_ticks = true; this.setType(type); + this.barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(type); } /** Get the type of bar note.*/ getType() { @@ -64291,9 +67921,11 @@ class BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { const ctx = this.checkContext(); L('Rendering bar line at: ', this.getAbsoluteX()); this.applyStyle(ctx); - const barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(this.type); - barline.setX(this.getAbsoluteX()); - barline.draw(this.checkStave()); + ctx.openGroup('barnote', this.getAttribute('id')); + this.barline.setType(this.type); + this.barline.setX(this.getAbsoluteX()); + this.barline.draw(this.checkStave()); + ctx.closeGroup(); this.restoreStyle(ctx); this.setRendered(); } @@ -64302,29 +67934,28 @@ class BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { BarNote.DEBUG = false; - /***/ }), /***/ "./src/beam.ts": /*!*********************!*\ !*** ./src/beam.ts ***! \*********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_60626__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_60752__) => { -__nested_webpack_require_60626__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_60626__.d(__nested_webpack_exports__, { +__nested_webpack_require_60752__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_60752__.d(__nested_webpack_exports__, { /* harmony export */ BEAM_BOTH: () => (/* binding */ BEAM_BOTH), /* harmony export */ BEAM_LEFT: () => (/* binding */ BEAM_LEFT), /* harmony export */ BEAM_RIGHT: () => (/* binding */ BEAM_RIGHT), /* harmony export */ Beam: () => (/* binding */ Beam) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_60626__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_60626__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_60626__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_60626__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_60626__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_60626__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_60626__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_60752__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_60752__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_60752__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_60752__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_60752__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_60752__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_60752__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -65157,17 +68788,17 @@ class Beam extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { /*!*********************!*\ !*** ./src/bend.ts ***! \*********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_100825__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_100951__) => { -__nested_webpack_require_100825__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_100825__.d(__nested_webpack_exports__, { +__nested_webpack_require_100951__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_100951__.d(__nested_webpack_exports__, { /* harmony export */ Bend: () => (/* binding */ Bend) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_100825__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_100825__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_100825__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_100825__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_100825__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_100951__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_100951__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_100951__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_100951__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_100951__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -65418,17 +69049,16 @@ class Bend extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { Bend.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); - /***/ }), /***/ "./src/boundingbox.ts": /*!****************************!*\ !*** ./src/boundingbox.ts ***! \****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_110887__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_111012__) => { -__nested_webpack_require_110887__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_110887__.d(__nested_webpack_exports__, { +__nested_webpack_require_111012__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_111012__.d(__nested_webpack_exports__, { /* harmony export */ BoundingBox: () => (/* binding */ BoundingBox) /* harmony export */ }); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. @@ -65517,10 +69147,10 @@ class BoundingBox { /*!***************************************!*\ !*** ./src/boundingboxcomputation.ts ***! \***************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_113107__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_113232__) => { -__nested_webpack_require_113107__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_113107__.d(__nested_webpack_exports__, { +__nested_webpack_require_113232__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_113232__.d(__nested_webpack_exports__, { /* harmony export */ BoundingBoxComputation: () => (/* binding */ BoundingBoxComputation) /* harmony export */ }); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. @@ -65659,16 +69289,16 @@ class BoundingBoxComputation { /*!******************************!*\ !*** ./src/canvascontext.ts ***! \******************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_117666__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_117791__) => { -__nested_webpack_require_117666__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_117666__.d(__nested_webpack_exports__, { +__nested_webpack_require_117791__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_117791__.d(__nested_webpack_exports__, { /* harmony export */ CanvasContext: () => (/* binding */ CanvasContext) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_117666__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_117666__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_117666__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_117666__(/*! ./web */ "./src/web.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_117791__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_117791__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_117791__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_117791__(/*! ./web */ "./src/web.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -65922,23 +69552,23 @@ class CanvasContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderCo /*!****************************!*\ !*** ./src/chordsymbol.ts ***! \****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_126677__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_126802__) => { -__nested_webpack_require_126677__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_126677__.d(__nested_webpack_exports__, { +__nested_webpack_require_126802__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_126802__.d(__nested_webpack_exports__, { /* harmony export */ ChordSymbol: () => (/* binding */ ChordSymbol), /* harmony export */ ChordSymbolHorizontalJustify: () => (/* binding */ ChordSymbolHorizontalJustify), /* harmony export */ ChordSymbolVerticalJustify: () => (/* binding */ ChordSymbolVerticalJustify), /* harmony export */ SymbolModifiers: () => (/* binding */ SymbolModifiers), /* harmony export */ SymbolTypes: () => (/* binding */ SymbolTypes) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_126677__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_126677__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_126677__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_126677__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_126677__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_126677__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_126677__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_126802__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_126802__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_126802__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_126802__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_126802__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_126802__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_126802__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // Author: Aaron (@AaronDavidNewman) @@ -66588,6 +70218,12 @@ ChordSymbol.glyphs = { diminished: { code: 'csymDiminished', }, + csymDiminished: { + code: 'csymDiminished' + }, + csymMinor: { + code: 'csymMinor', + }, dim: { code: 'csymDiminished', }, @@ -66652,24 +70288,23 @@ ChordSymbol.symbolModifiers = SymbolModifiers; ChordSymbol.noFormat = false; - /***/ }), /***/ "./src/clef.ts": /*!*********************!*\ !*** ./src/clef.ts ***! \*********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_158389__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_158624__) => { -__nested_webpack_require_158389__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_158389__.d(__nested_webpack_exports__, { +__nested_webpack_require_158624__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_158624__.d(__nested_webpack_exports__, { /* harmony export */ Clef: () => (/* binding */ Clef) /* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_158389__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_158389__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_158389__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_158389__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_158389__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_158624__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_158624__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_158624__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_158624__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_158624__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013. // Co-author: Benjamin W. Bohl // MIT License @@ -66835,23 +70470,22 @@ class Clef extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { Clef.DEBUG = false; - /***/ }), /***/ "./src/clefnote.ts": /*!*************************!*\ !*** ./src/clefnote.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_164886__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_165120__) => { -__nested_webpack_require_164886__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_164886__.d(__nested_webpack_exports__, { +__nested_webpack_require_165120__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_165120__.d(__nested_webpack_exports__, { /* harmony export */ ClefNote: () => (/* binding */ ClefNote) /* harmony export */ }); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_164886__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_164886__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_164886__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_164886__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_165120__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_165120__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_165120__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_165120__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author Taehoon Moon 2014 // MIT License @@ -66921,16 +70555,16 @@ class ClefNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { /*!**************************!*\ !*** ./src/crescendo.ts ***! \**************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_168341__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_168575__) => { -__nested_webpack_require_168341__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_168341__.d(__nested_webpack_exports__, { +__nested_webpack_require_168575__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_168575__.d(__nested_webpack_exports__, { /* harmony export */ Crescendo: () => (/* binding */ Crescendo) /* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_168341__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_168341__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_168341__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_168341__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_168575__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_168575__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_168575__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_168575__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // This file implements the `Crescendo` object which draws crescendos and @@ -67034,23 +70668,22 @@ class Crescendo extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { Crescendo.DEBUG = false; - /***/ }), /***/ "./src/curve.ts": /*!**********************!*\ !*** ./src/curve.ts ***! \**********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_172735__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_172968__) => { -__nested_webpack_require_172735__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_172735__.d(__nested_webpack_exports__, { +__nested_webpack_require_172968__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_172968__.d(__nested_webpack_exports__, { /* harmony export */ Curve: () => (/* binding */ Curve), /* harmony export */ CurvePosition: () => (/* binding */ CurvePosition) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_172735__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_172735__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_172735__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_172968__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_172968__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_172968__(/*! ./util */ "./src/util.ts"); // VexFlow - Music Engraving for HTML5 // Copyright Mohit Muthanna 2010 // @@ -67084,7 +70717,7 @@ class Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { // y_shift: pixels to shift constructor(from, to, options) { super(); - this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [ + this.render_options = Object.assign({ openingDirection: 'auto', thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [ { x: 0, y: 10 }, { x: 0, y: 10 }, ] }, options); @@ -67173,6 +70806,12 @@ class Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { last_x = stave.getTieEndX(); last_y = first_note.getStemExtents()[end_metric]; } + if (this.render_options.openingDirection === 'up') { + stem_direction = 1; + } + if (this.render_options.openingDirection === 'down') { + stem_direction = -1; + } this.renderCurve({ first_x, last_x, @@ -67191,15 +70830,15 @@ class Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { /*!********************!*\ !*** ./src/dot.ts ***! \********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_178351__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_178819__) => { -__nested_webpack_require_178351__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_178351__.d(__nested_webpack_exports__, { +__nested_webpack_require_178819__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_178819__.d(__nested_webpack_exports__, { /* harmony export */ Dot: () => (/* binding */ Dot) /* harmony export */ }); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_178351__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_178351__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_178351__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_178819__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_178819__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_178819__(/*! ./util */ "./src/util.ts"); // VexFlow - Music Engraving for HTML5 // Copyright Mohit Muthanna 2010 // @@ -67363,22 +71002,22 @@ class Dot extends _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier { /*!**************************!*\ !*** ./src/easyscore.ts ***! \**************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_185341__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_185809__) => { -__nested_webpack_require_185341__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_185341__.d(__nested_webpack_exports__, { +__nested_webpack_require_185809__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_185809__.d(__nested_webpack_exports__, { /* harmony export */ Builder: () => (/* binding */ Builder), /* harmony export */ EasyScore: () => (/* binding */ EasyScore), /* harmony export */ EasyScoreGrammar: () => (/* binding */ EasyScoreGrammar), /* harmony export */ Piece: () => (/* binding */ Piece) /* harmony export */ }); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_185341__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_185341__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_185341__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_185341__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_185341__(/*! ./parser */ "./src/parser.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_185341__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_185341__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_185809__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_185809__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_185809__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_185809__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_185809__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_185809__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_185809__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -67798,23 +71437,22 @@ class EasyScore { EasyScore.DEBUG = false; - /***/ }), /***/ "./src/element.ts": /*!************************!*\ !*** ./src/element.ts ***! \************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_199766__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_200233__) => { -__nested_webpack_require_199766__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_199766__.d(__nested_webpack_exports__, { +__nested_webpack_require_200233__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_200233__.d(__nested_webpack_exports__, { /* harmony export */ Element: () => (/* binding */ Element) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_199766__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_199766__(/*! ./registry */ "./src/registry.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_199766__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_199766__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_200233__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_200233__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_200233__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_200233__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // @author Mohit Cheppudira // MIT License @@ -68206,62 +71844,61 @@ Element.TEXT_FONT = { }; - /***/ }), /***/ "./src/factory.ts": /*!************************!*\ !*** ./src/factory.ts ***! \************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_215380__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_215846__) => { -__nested_webpack_require_215380__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_215380__.d(__nested_webpack_exports__, { +__nested_webpack_require_215846__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_215846__.d(__nested_webpack_exports__, { /* harmony export */ Factory: () => (/* binding */ Factory) /* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_215380__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_215380__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_215380__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_215380__(/*! ./barnote */ "./src/barnote.ts"); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_215380__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_215380__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_215380__(/*! ./clefnote */ "./src/clefnote.ts"); -/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_215380__(/*! ./curve */ "./src/curve.ts"); -/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_215380__(/*! ./easyscore */ "./src/easyscore.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_215380__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_215380__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_215380__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_215380__(/*! ./ghostnote */ "./src/ghostnote.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_215380__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_215380__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_215380__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_215380__(/*! ./keysignote */ "./src/keysignote.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_215380__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_215380__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_215380__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_215380__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_215380__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_215380__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_215380__(/*! ./repeatnote */ "./src/repeatnote.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_215380__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_215380__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_215380__(/*! ./staveline */ "./src/staveline.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_215380__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_215380__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_215380__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_215380__(/*! ./system */ "./src/system.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_215380__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_215380__(/*! ./tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_215380__(/*! ./textbracket */ "./src/textbracket.ts"); -/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_215380__(/*! ./textdynamics */ "./src/textdynamics.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_215380__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_215380__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_215380__(/*! ./timesignote */ "./src/timesignote.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_215380__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_215380__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_215380__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __nested_webpack_require_215380__(/*! ./voice */ "./src/voice.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __nested_webpack_require_215380__(/*! ./web */ "./src/web.ts"); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_215846__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_215846__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_215846__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_215846__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_215846__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_215846__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_215846__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_215846__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_215846__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_215846__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_215846__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_215846__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_215846__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_215846__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_215846__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_215846__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_215846__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_215846__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_215846__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_215846__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_215846__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_215846__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_215846__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_215846__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_215846__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_215846__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_215846__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_215846__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_215846__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_215846__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_215846__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_215846__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_215846__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_215846__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_215846__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_215846__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_215846__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_215846__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_215846__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_215846__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_215846__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __nested_webpack_require_215846__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __nested_webpack_require_215846__(/*! ./web */ "./src/web.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // @author Mohit Cheppudira // MIT License @@ -68774,101 +72411,100 @@ Factory.DEBUG = false; Factory.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_9__.Element.TEXT_FONT); - /***/ }), /***/ "./src/flow.ts": /*!*********************!*\ !*** ./src/flow.ts ***! \*********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_240921__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_241386__) => { -__nested_webpack_require_240921__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_240921__.d(__nested_webpack_exports__, { +__nested_webpack_require_241386__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_241386__.d(__nested_webpack_exports__, { /* harmony export */ Flow: () => (/* binding */ Flow) /* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_240921__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_240921__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_240921__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_240921__(/*! ./barnote */ "./src/barnote.ts"); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_240921__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_240921__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_240921__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_240921__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); -/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_240921__(/*! ./canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_240921__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_240921__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_240921__(/*! ./clefnote */ "./src/clefnote.ts"); -/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_240921__(/*! ./crescendo */ "./src/crescendo.ts"); -/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_240921__(/*! ./curve */ "./src/curve.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_240921__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_240921__(/*! ./easyscore */ "./src/easyscore.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_240921__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_240921__(/*! ./factory */ "./src/factory.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_240921__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_240921__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_240921__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_240921__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_240921__(/*! ./ghostnote */ "./src/ghostnote.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_240921__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_240921__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_240921__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_240921__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_240921__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); -/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_240921__(/*! ./keymanager */ "./src/keymanager.ts"); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_240921__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_240921__(/*! ./keysignote */ "./src/keysignote.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_240921__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_240921__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_240921__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_240921__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_240921__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_240921__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_240921__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_240921__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_240921__(/*! ./parenthesis */ "./src/parenthesis.ts"); -/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_240921__(/*! ./parser */ "./src/parser.ts"); -/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __nested_webpack_require_240921__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); -/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __nested_webpack_require_240921__(/*! ./registry */ "./src/registry.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __nested_webpack_require_240921__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __nested_webpack_require_240921__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __nested_webpack_require_240921__(/*! ./repeatnote */ "./src/repeatnote.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __nested_webpack_require_240921__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __nested_webpack_require_240921__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __nested_webpack_require_240921__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __nested_webpack_require_240921__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); -/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __nested_webpack_require_240921__(/*! ./staveline */ "./src/staveline.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __nested_webpack_require_240921__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __nested_webpack_require_240921__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __nested_webpack_require_240921__(/*! ./staverepetition */ "./src/staverepetition.ts"); -/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __nested_webpack_require_240921__(/*! ./stavetempo */ "./src/stavetempo.ts"); -/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __nested_webpack_require_240921__(/*! ./stavetext */ "./src/stavetext.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __nested_webpack_require_240921__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __nested_webpack_require_240921__(/*! ./stavevolta */ "./src/stavevolta.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __nested_webpack_require_240921__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __nested_webpack_require_240921__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __nested_webpack_require_240921__(/*! ./strokes */ "./src/strokes.ts"); -/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __nested_webpack_require_240921__(/*! ./svgcontext */ "./src/svgcontext.ts"); -/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __nested_webpack_require_240921__(/*! ./system */ "./src/system.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __nested_webpack_require_240921__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __nested_webpack_require_240921__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __nested_webpack_require_240921__(/*! ./tabslide */ "./src/tabslide.ts"); -/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __nested_webpack_require_240921__(/*! ./tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __nested_webpack_require_240921__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __nested_webpack_require_240921__(/*! ./textbracket */ "./src/textbracket.ts"); -/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __nested_webpack_require_240921__(/*! ./textdynamics */ "./src/textdynamics.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __nested_webpack_require_240921__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __nested_webpack_require_240921__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __nested_webpack_require_240921__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __nested_webpack_require_240921__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __nested_webpack_require_240921__(/*! ./timesignote */ "./src/timesignote.ts"); -/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __nested_webpack_require_240921__(/*! ./tremolo */ "./src/tremolo.ts"); -/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __nested_webpack_require_240921__(/*! ./tuning */ "./src/tuning.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __nested_webpack_require_240921__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __nested_webpack_require_240921__(/*! ./version */ "./src/version.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __nested_webpack_require_240921__(/*! ./vibrato */ "./src/vibrato.ts"); -/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __nested_webpack_require_240921__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __nested_webpack_require_240921__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_241386__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_241386__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_241386__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_241386__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_241386__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_241386__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_241386__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_241386__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_241386__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_241386__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_241386__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_241386__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_241386__(/*! ./crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_241386__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_241386__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_241386__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_241386__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_241386__(/*! ./factory */ "./src/factory.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_241386__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_241386__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_241386__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_241386__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_241386__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_241386__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_241386__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_241386__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_241386__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_241386__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_241386__(/*! ./keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_241386__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_241386__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_241386__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_241386__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_241386__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_241386__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_241386__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_241386__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_241386__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_241386__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_241386__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_241386__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __nested_webpack_require_241386__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __nested_webpack_require_241386__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __nested_webpack_require_241386__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __nested_webpack_require_241386__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __nested_webpack_require_241386__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __nested_webpack_require_241386__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __nested_webpack_require_241386__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __nested_webpack_require_241386__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __nested_webpack_require_241386__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __nested_webpack_require_241386__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __nested_webpack_require_241386__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __nested_webpack_require_241386__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __nested_webpack_require_241386__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __nested_webpack_require_241386__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __nested_webpack_require_241386__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __nested_webpack_require_241386__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __nested_webpack_require_241386__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __nested_webpack_require_241386__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __nested_webpack_require_241386__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __nested_webpack_require_241386__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __nested_webpack_require_241386__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __nested_webpack_require_241386__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __nested_webpack_require_241386__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __nested_webpack_require_241386__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __nested_webpack_require_241386__(/*! ./tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __nested_webpack_require_241386__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __nested_webpack_require_241386__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __nested_webpack_require_241386__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __nested_webpack_require_241386__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __nested_webpack_require_241386__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __nested_webpack_require_241386__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __nested_webpack_require_241386__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __nested_webpack_require_241386__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __nested_webpack_require_241386__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __nested_webpack_require_241386__(/*! ./tremolo */ "./src/tremolo.ts"); +/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __nested_webpack_require_241386__(/*! ./tuning */ "./src/tuning.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __nested_webpack_require_241386__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __nested_webpack_require_241386__(/*! ./version */ "./src/version.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __nested_webpack_require_241386__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __nested_webpack_require_241386__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __nested_webpack_require_241386__(/*! ./voice */ "./src/voice.ts"); var __awaiter = ( false) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -69210,22 +72846,21 @@ Flow.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextJustificati Flow.VoiceMode = _voice__WEBPACK_IMPORTED_MODULE_81__.VoiceMode; - /***/ }), /***/ "./src/font.ts": /*!*********************!*\ !*** ./src/font.ts ***! \*********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_266116__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_266580__) => { -__nested_webpack_require_266116__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_266116__.d(__nested_webpack_exports__, { +__nested_webpack_require_266580__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_266580__.d(__nested_webpack_exports__, { /* harmony export */ Font: () => (/* binding */ Font), /* harmony export */ FontStyle: () => (/* binding */ FontStyle), /* harmony export */ FontWeight: () => (/* binding */ FontWeight) /* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_266116__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_266580__(/*! ./util */ "./src/util.ts"); var __awaiter = ( false) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -69611,17 +73246,16 @@ Font.WEB_FONT_FILES = { }; - /***/ }), /***/ "./src/fonts/bravura_glyphs.ts": /*!*************************************!*\ !*** ./src/fonts/bravura_glyphs.ts ***! \*************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_281661__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_282124__) => { -__nested_webpack_require_281661__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_281661__.d(__nested_webpack_exports__, { +__nested_webpack_require_282124__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_282124__.d(__nested_webpack_exports__, { /* harmony export */ BravuraFont: () => (/* binding */ BravuraFont) /* harmony export */ }); const BravuraFont = { @@ -73175,10 +76809,10 @@ const BravuraFont = { /*!*************************************!*\ !*** ./src/fonts/common_metrics.ts ***! \*************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_531738__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_532201__) => { -__nested_webpack_require_531738__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_531738__.d(__nested_webpack_exports__, { +__nested_webpack_require_532201__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_532201__.d(__nested_webpack_exports__, { /* harmony export */ CommonMetrics: () => (/* binding */ CommonMetrics) /* harmony export */ }); const CommonMetrics = { @@ -73602,10 +77236,10 @@ const CommonMetrics = { /*!************************************!*\ !*** ./src/fonts/custom_glyphs.ts ***! \************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_542829__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_543292__) => { -__nested_webpack_require_542829__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_542829__.d(__nested_webpack_exports__, { +__nested_webpack_require_543292__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_543292__.d(__nested_webpack_exports__, { /* harmony export */ CustomFont: () => (/* binding */ CustomFont) /* harmony export */ }); const CustomFont = { @@ -73658,10 +77292,10 @@ const CustomFont = { /*!**************************************!*\ !*** ./src/fonts/gonville_glyphs.ts ***! \**************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_551251__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_551714__) => { -__nested_webpack_require_551251__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_551251__.d(__nested_webpack_exports__, { +__nested_webpack_require_551714__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_551714__.d(__nested_webpack_exports__, { /* harmony export */ GonvilleSmuflFont: () => (/* binding */ GonvilleSmuflFont) /* harmony export */ }); const GonvilleSmuflFont = { @@ -74791,10 +78425,10 @@ const GonvilleSmuflFont = { /*!************************************!*\ !*** ./src/fonts/leland_glyphs.ts ***! \************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_703734__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_704197__) => { -__nested_webpack_require_703734__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_703734__.d(__nested_webpack_exports__, { +__nested_webpack_require_704197__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_704197__.d(__nested_webpack_exports__, { /* harmony export */ LelandFont: () => (/* binding */ LelandFont) /* harmony export */ }); const LelandFont = { @@ -75996,17 +79630,17 @@ const LelandFont = { /*!*******************************!*\ !*** ./src/fonts/load_all.ts ***! \*******************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_810349__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_810812__) => { -__nested_webpack_require_810349__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_810349__.d(__nested_webpack_exports__, { +__nested_webpack_require_810812__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_810812__.d(__nested_webpack_exports__, { /* harmony export */ loadAllMusicFonts: () => (/* binding */ loadAllMusicFonts) /* harmony export */ }); -/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_810349__(/*! ./load_bravura */ "./src/fonts/load_bravura.ts"); -/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_810349__(/*! ./load_custom */ "./src/fonts/load_custom.ts"); -/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_810349__(/*! ./load_gonville */ "./src/fonts/load_gonville.ts"); -/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_810349__(/*! ./load_leland */ "./src/fonts/load_leland.ts"); -/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_810349__(/*! ./load_petaluma */ "./src/fonts/load_petaluma.ts"); +/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_810812__(/*! ./load_bravura */ "./src/fonts/load_bravura.ts"); +/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_810812__(/*! ./load_custom */ "./src/fonts/load_custom.ts"); +/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_810812__(/*! ./load_gonville */ "./src/fonts/load_gonville.ts"); +/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_810812__(/*! ./load_leland */ "./src/fonts/load_leland.ts"); +/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_810812__(/*! ./load_petaluma */ "./src/fonts/load_petaluma.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License // @@ -76036,15 +79670,15 @@ function loadAllMusicFonts() { /*!***********************************!*\ !*** ./src/fonts/load_bravura.ts ***! \***********************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_812231__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_812694__) => { -__nested_webpack_require_812231__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_812231__.d(__nested_webpack_exports__, { +__nested_webpack_require_812694__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_812694__.d(__nested_webpack_exports__, { /* harmony export */ loadBravura: () => (/* binding */ loadBravura) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_812231__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_812231__(/*! ./bravura_glyphs */ "./src/fonts/bravura_glyphs.ts"); -/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_812231__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_812694__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_812694__(/*! ./bravura_glyphs */ "./src/fonts/bravura_glyphs.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_812694__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License // If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base. @@ -76069,15 +79703,15 @@ function loadBravura() { /*!**********************************!*\ !*** ./src/fonts/load_custom.ts ***! \**********************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_814052__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_814515__) => { -__nested_webpack_require_814052__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_814052__.d(__nested_webpack_exports__, { +__nested_webpack_require_814515__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_814515__.d(__nested_webpack_exports__, { /* harmony export */ loadCustom: () => (/* binding */ loadCustom) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_814052__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_814052__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); -/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_814052__(/*! ./custom_glyphs */ "./src/fonts/custom_glyphs.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_814515__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_814515__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_814515__(/*! ./custom_glyphs */ "./src/fonts/custom_glyphs.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -76094,15 +79728,15 @@ function loadCustom() { /*!************************************!*\ !*** ./src/fonts/load_gonville.ts ***! \************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_815215__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_815678__) => { -__nested_webpack_require_815215__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_815215__.d(__nested_webpack_exports__, { +__nested_webpack_require_815678__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_815678__.d(__nested_webpack_exports__, { /* harmony export */ loadGonville: () => (/* binding */ loadGonville) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_815215__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_815215__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); -/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_815215__(/*! ./gonville_glyphs */ "./src/fonts/gonville_glyphs.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_815678__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_815678__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_815678__(/*! ./gonville_glyphs */ "./src/fonts/gonville_glyphs.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -76119,15 +79753,15 @@ function loadGonville() { /*!**********************************!*\ !*** ./src/fonts/load_leland.ts ***! \**********************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_816393__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_816856__) => { -__nested_webpack_require_816393__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_816393__.d(__nested_webpack_exports__, { +__nested_webpack_require_816856__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_816856__.d(__nested_webpack_exports__, { /* harmony export */ loadLeland: () => (/* binding */ loadLeland) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_816393__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_816393__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); -/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_816393__(/*! ./leland_glyphs */ "./src/fonts/leland_glyphs.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_816856__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_816856__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_816856__(/*! ./leland_glyphs */ "./src/fonts/leland_glyphs.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -76144,15 +79778,15 @@ function loadLeland() { /*!************************************!*\ !*** ./src/fonts/load_petaluma.ts ***! \************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_817556__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_818019__) => { -__nested_webpack_require_817556__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_817556__.d(__nested_webpack_exports__, { +__nested_webpack_require_818019__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_818019__.d(__nested_webpack_exports__, { /* harmony export */ loadPetaluma: () => (/* binding */ loadPetaluma) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_817556__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_817556__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); -/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_817556__(/*! ./petaluma_glyphs */ "./src/fonts/petaluma_glyphs.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_818019__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_818019__(/*! ./common_metrics */ "./src/fonts/common_metrics.ts"); +/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_818019__(/*! ./petaluma_glyphs */ "./src/fonts/petaluma_glyphs.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -76260,10 +79894,10 @@ function loadPetaluma() { /*!**************************************!*\ !*** ./src/fonts/petaluma_glyphs.ts ***! \**************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_820779__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_821242__) => { -__nested_webpack_require_820779__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_820779__.d(__nested_webpack_exports__, { +__nested_webpack_require_821242__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_821242__.d(__nested_webpack_exports__, { /* harmony export */ PetalumaFont: () => (/* binding */ PetalumaFont) /* harmony export */ }); const PetalumaFont = { @@ -77913,10 +81547,10 @@ const PetalumaFont = { /*!********************************************!*\ !*** ./src/fonts/petalumascript_glyphs.ts ***! \********************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1035184__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1035647__) => { -__nested_webpack_require_1035184__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1035184__.d(__nested_webpack_exports__, { +__nested_webpack_require_1035647__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1035647__.d(__nested_webpack_exports__, { /* harmony export */ PetalumaScriptFont: () => (/* binding */ PetalumaScriptFont) /* harmony export */ }); const PetalumaScriptFont = { @@ -78790,10 +82424,10 @@ const PetalumaScriptFont = { /*!****************************************!*\ !*** ./src/fonts/robotoslab_glyphs.ts ***! \****************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1055286__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1055749__) => { -__nested_webpack_require_1055286__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1055286__.d(__nested_webpack_exports__, { +__nested_webpack_require_1055749__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1055749__.d(__nested_webpack_exports__, { /* harmony export */ RobotoSlabFont: () => (/* binding */ RobotoSlabFont) /* harmony export */ }); const RobotoSlabFont = { @@ -79667,10 +83301,10 @@ const RobotoSlabFont = { /*!*********************************************!*\ !*** ./src/fonts/sans_bold_text_metrics.ts ***! \*********************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1075784__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1076247__) => { -__nested_webpack_require_1075784__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1075784__.d(__nested_webpack_exports__, { +__nested_webpack_require_1076247__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1076247__.d(__nested_webpack_exports__, { /* harmony export */ SansFontBold: () => (/* binding */ SansFontBold) /* harmony export */ }); const SansFontBold = { @@ -80543,10 +84177,10 @@ const SansFontBold = { /*!****************************************!*\ !*** ./src/fonts/sans_text_metrics.ts ***! \****************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1096185__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1096648__) => { -__nested_webpack_require_1096185__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1096185__.d(__nested_webpack_exports__, { +__nested_webpack_require_1096648__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1096648__.d(__nested_webpack_exports__, { /* harmony export */ SansFont: () => (/* binding */ SansFont) /* harmony export */ }); const SansFont = { @@ -81427,10 +85061,10 @@ const SansFont = { /*!*****************************************!*\ !*** ./src/fonts/serif_text_metrics.ts ***! \*****************************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1116770__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1117233__) => { -__nested_webpack_require_1116770__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1116770__.d(__nested_webpack_exports__, { +__nested_webpack_require_1117233__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1117233__.d(__nested_webpack_exports__, { /* harmony export */ SerifFont: () => (/* binding */ SerifFont) /* harmony export */ }); const SerifFont = { @@ -82311,19 +85945,19 @@ const SerifFont = { /*!********************************!*\ !*** ./src/fonts/textfonts.ts ***! \********************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1137399__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1137862__) => { -__nested_webpack_require_1137399__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1137399__.d(__nested_webpack_exports__, { +__nested_webpack_require_1137862__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1137862__.d(__nested_webpack_exports__, { /* harmony export */ loadTextFonts: () => (/* binding */ loadTextFonts) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1137399__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1137399__(/*! ../textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1137399__(/*! ./petalumascript_glyphs */ "./src/fonts/petalumascript_glyphs.ts"); -/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1137399__(/*! ./robotoslab_glyphs */ "./src/fonts/robotoslab_glyphs.ts"); -/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1137399__(/*! ./sans_bold_text_metrics */ "./src/fonts/sans_bold_text_metrics.ts"); -/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1137399__(/*! ./sans_text_metrics */ "./src/fonts/sans_text_metrics.ts"); -/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1137399__(/*! ./serif_text_metrics */ "./src/fonts/serif_text_metrics.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1137862__(/*! ../font */ "./src/font.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1137862__(/*! ../textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1137862__(/*! ./petalumascript_glyphs */ "./src/fonts/petalumascript_glyphs.ts"); +/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1137862__(/*! ./robotoslab_glyphs */ "./src/fonts/robotoslab_glyphs.ts"); +/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1137862__(/*! ./sans_bold_text_metrics */ "./src/fonts/sans_bold_text_metrics.ts"); +/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1137862__(/*! ./sans_text_metrics */ "./src/fonts/sans_text_metrics.ts"); +/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1137862__(/*! ./serif_text_metrics */ "./src/fonts/serif_text_metrics.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -82453,23 +86087,23 @@ function loadTextFonts() { /*!**************************!*\ !*** ./src/formatter.ts ***! \**************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1143371__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1143834__) => { -__nested_webpack_require_1143371__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1143371__.d(__nested_webpack_exports__, { +__nested_webpack_require_1143834__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1143834__.d(__nested_webpack_exports__, { /* harmony export */ Formatter: () => (/* binding */ Formatter) /* harmony export */ }); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1143371__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1143371__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1143371__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1143371__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1143371__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1143371__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1143371__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1143371__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1143371__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1143371__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1143371__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1143834__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1143834__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1143834__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1143834__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1143834__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1143834__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1143834__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1143834__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1143834__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1143834__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1143834__(/*! ./voice */ "./src/voice.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -83340,21 +86974,20 @@ class Formatter { Formatter.DEBUG = false; - /***/ }), /***/ "./src/fraction.ts": /*!*************************!*\ !*** ./src/fraction.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1189070__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1189532__) => { -__nested_webpack_require_1189070__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1189070__.d(__nested_webpack_exports__, { +__nested_webpack_require_1189532__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1189532__.d(__nested_webpack_exports__, { /* harmony export */ Fraction: () => (/* binding */ Fraction) /* harmony export */ }); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1189070__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1189070__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1189532__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1189532__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License // @@ -83556,7 +87189,6 @@ class Fraction { Fraction.__staticFractionA = new Fraction(); Fraction.__staticFractionB = new Fraction(); Fraction.__staticFractionTmp = new Fraction(); - /** Helper function to extract the numerator and denominator from another fraction. */ function getNumeratorAndDenominator(n, d = 1) { if (typeof n === 'number') { @@ -83576,18 +87208,18 @@ function getNumeratorAndDenominator(n, d = 1) { /*!*******************************!*\ !*** ./src/frethandfinger.ts ***! \*******************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1196919__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1197380__) => { -__nested_webpack_require_1196919__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1196919__.d(__nested_webpack_exports__, { +__nested_webpack_require_1197380__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1197380__.d(__nested_webpack_exports__, { /* harmony export */ FretHandFinger: () => (/* binding */ FretHandFinger) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1196919__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1196919__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1196919__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1196919__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1196919__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1196919__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1197380__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1197380__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1197380__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1197380__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1197380__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1197380__(/*! ./util */ "./src/util.ts"); // VexFlow - Music Engraving for HTML5 // Copyright Mohit Muthanna 2010 // Author Larry Kuhns 2013 @@ -83754,22 +87386,21 @@ FretHandFinger.TEXT_FONT = { }; - /***/ }), /***/ "./src/ghostnote.ts": /*!**************************!*\ !*** ./src/ghostnote.ts ***! \**************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1204573__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1205033__) => { -__nested_webpack_require_1204573__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1204573__.d(__nested_webpack_exports__, { +__nested_webpack_require_1205033__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1205033__.d(__nested_webpack_exports__, { /* harmony export */ GhostNote: () => (/* binding */ GhostNote) /* harmony export */ }); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1204573__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1204573__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1204573__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1205033__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1205033__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1205033__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -83840,19 +87471,19 @@ class GhostNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_0__.StemmableNot /*!**********************!*\ !*** ./src/glyph.ts ***! \**********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1207245__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1207705__) => { -__nested_webpack_require_1207245__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1207245__.d(__nested_webpack_exports__, { +__nested_webpack_require_1207705__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1207705__.d(__nested_webpack_exports__, { /* harmony export */ Glyph: () => (/* binding */ Glyph), /* harmony export */ OutlineCode: () => (/* binding */ OutlineCode) /* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1207245__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1207245__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1207245__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1207245__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1207245__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1207245__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1207705__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1207705__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1207705__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1207705__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1207705__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1207705__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -84248,21 +87879,20 @@ Glyph.CURRENT_CACHE_KEY = ''; Glyph.MUSIC_FONT_STACK = []; - /***/ }), /***/ "./src/glyphnote.ts": /*!**************************!*\ !*** ./src/glyphnote.ts ***! \**************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1223339__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1223798__) => { -__nested_webpack_require_1223339__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1223339__.d(__nested_webpack_exports__, { +__nested_webpack_require_1223798__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1223798__.d(__nested_webpack_exports__, { /* harmony export */ GlyphNote: () => (/* binding */ GlyphNote) /* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1223339__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1223339__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1223798__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1223798__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // Any glyph that is set to appear on a Stave and take up musical time and graphical space. @@ -84334,17 +87964,17 @@ class GlyphNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { /*!**************************!*\ !*** ./src/gracenote.ts ***! \**************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1226118__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1226577__) => { -__nested_webpack_require_1226118__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1226118__.d(__nested_webpack_exports__, { +__nested_webpack_require_1226577__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1226577__.d(__nested_webpack_exports__, { /* harmony export */ GraceNote: () => (/* binding */ GraceNote) /* harmony export */ }); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1226118__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1226118__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1226118__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1226118__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1226118__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1226577__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1226577__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1226577__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1226577__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1226577__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. @@ -84492,22 +88122,22 @@ class GraceNote extends _stavenote__WEBPACK_IMPORTED_MODULE_0__.StaveNote { /*!*******************************!*\ !*** ./src/gracenotegroup.ts ***! \*******************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1233132__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1233591__) => { -__nested_webpack_require_1233132__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1233132__.d(__nested_webpack_exports__, { +__nested_webpack_require_1233591__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1233591__.d(__nested_webpack_exports__, { /* harmony export */ GraceNoteGroup: () => (/* binding */ GraceNoteGroup) /* harmony export */ }); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1233132__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1233132__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1233132__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1233132__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1233132__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1233132__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1233132__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1233132__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1233132__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1233132__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1233591__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1233591__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1233591__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1233591__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1233591__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1233591__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1233591__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1233591__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1233591__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1233591__(/*! ./voice */ "./src/voice.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -84655,22 +88285,21 @@ class GraceNoteGroup extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { GraceNoteGroup.DEBUG = false; - /***/ }), /***/ "./src/gracetabnote.ts": /*!*****************************!*\ !*** ./src/gracetabnote.ts ***! \*****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1240556__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1241014__) => { -__nested_webpack_require_1240556__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1240556__.d(__nested_webpack_exports__, { +__nested_webpack_require_1241014__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1241014__.d(__nested_webpack_exports__, { /* harmony export */ GraceTabNote: () => (/* binding */ GraceTabNote) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1240556__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1240556__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1240556__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1241014__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1241014__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1241014__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // @author Balazs Forian-Szabo // @@ -84707,10 +88336,10 @@ class GraceTabNote extends _tabnote__WEBPACK_IMPORTED_MODULE_1__.TabNote { /*!**********************!*\ !*** ./src/index.ts ***! \**********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1242219__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1242677__) => { -__nested_webpack_require_1242219__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1242219__.d(__nested_webpack_exports__, { +__nested_webpack_require_1242677__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1242677__.d(__nested_webpack_exports__, { /* harmony export */ Accidental: () => (/* reexport safe */ _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental), /* harmony export */ Annotation: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation), /* harmony export */ AnnotationHorizontalJustify: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify), @@ -84849,95 +88478,95 @@ __nested_webpack_require_1242219__.r(__nested_webpack_exports__); /* harmony export */ sumArray: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.sumArray), /* harmony export */ warn: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.warn) /* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1242219__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1242219__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1242219__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1242219__(/*! ./barnote */ "./src/barnote.ts"); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1242219__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1242219__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1242219__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1242219__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); -/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1242219__(/*! ./canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1242219__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1242219__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1242219__(/*! ./clefnote */ "./src/clefnote.ts"); -/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1242219__(/*! ./crescendo */ "./src/crescendo.ts"); -/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1242219__(/*! ./curve */ "./src/curve.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1242219__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1242219__(/*! ./easyscore */ "./src/easyscore.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1242219__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_1242219__(/*! ./factory */ "./src/factory.ts"); -/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_1242219__(/*! ./flow */ "./src/flow.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_1242219__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_1242219__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_1242219__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_1242219__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_1242219__(/*! ./ghostnote */ "./src/ghostnote.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_1242219__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_1242219__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_1242219__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_1242219__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_1242219__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); -/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_1242219__(/*! ./keymanager */ "./src/keymanager.ts"); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_1242219__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_1242219__(/*! ./keysignote */ "./src/keysignote.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_1242219__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_1242219__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_1242219__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_1242219__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_1242219__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_1242219__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_1242219__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_1242219__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_1242219__(/*! ./parenthesis */ "./src/parenthesis.ts"); -/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __nested_webpack_require_1242219__(/*! ./parser */ "./src/parser.ts"); -/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __nested_webpack_require_1242219__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); -/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __nested_webpack_require_1242219__(/*! ./registry */ "./src/registry.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __nested_webpack_require_1242219__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __nested_webpack_require_1242219__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __nested_webpack_require_1242219__(/*! ./repeatnote */ "./src/repeatnote.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __nested_webpack_require_1242219__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __nested_webpack_require_1242219__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __nested_webpack_require_1242219__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __nested_webpack_require_1242219__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); -/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __nested_webpack_require_1242219__(/*! ./staveline */ "./src/staveline.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __nested_webpack_require_1242219__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __nested_webpack_require_1242219__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __nested_webpack_require_1242219__(/*! ./staverepetition */ "./src/staverepetition.ts"); -/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __nested_webpack_require_1242219__(/*! ./stavesection */ "./src/stavesection.ts"); -/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __nested_webpack_require_1242219__(/*! ./stavetempo */ "./src/stavetempo.ts"); -/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __nested_webpack_require_1242219__(/*! ./stavetext */ "./src/stavetext.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __nested_webpack_require_1242219__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __nested_webpack_require_1242219__(/*! ./stavevolta */ "./src/stavevolta.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __nested_webpack_require_1242219__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __nested_webpack_require_1242219__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __nested_webpack_require_1242219__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __nested_webpack_require_1242219__(/*! ./strokes */ "./src/strokes.ts"); -/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __nested_webpack_require_1242219__(/*! ./svgcontext */ "./src/svgcontext.ts"); -/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __nested_webpack_require_1242219__(/*! ./system */ "./src/system.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __nested_webpack_require_1242219__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __nested_webpack_require_1242219__(/*! ./tabslide */ "./src/tabslide.ts"); -/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __nested_webpack_require_1242219__(/*! ./tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __nested_webpack_require_1242219__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __nested_webpack_require_1242219__(/*! ./textbracket */ "./src/textbracket.ts"); -/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __nested_webpack_require_1242219__(/*! ./textdynamics */ "./src/textdynamics.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __nested_webpack_require_1242219__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __nested_webpack_require_1242219__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __nested_webpack_require_1242219__(/*! ./tickable */ "./src/tickable.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __nested_webpack_require_1242219__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __nested_webpack_require_1242219__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __nested_webpack_require_1242219__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __nested_webpack_require_1242219__(/*! ./timesignote */ "./src/timesignote.ts"); -/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __nested_webpack_require_1242219__(/*! ./tremolo */ "./src/tremolo.ts"); -/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __nested_webpack_require_1242219__(/*! ./tuning */ "./src/tuning.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __nested_webpack_require_1242219__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __nested_webpack_require_1242219__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __nested_webpack_require_1242219__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __nested_webpack_require_1242219__(/*! ./vex */ "./src/vex.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __nested_webpack_require_1242219__(/*! ./vibrato */ "./src/vibrato.ts"); -/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __nested_webpack_require_1242219__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __nested_webpack_require_1242219__(/*! ./voice */ "./src/voice.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __nested_webpack_require_1242219__(/*! ./web */ "./src/web.ts"); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1242677__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1242677__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1242677__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1242677__(/*! ./barnote */ "./src/barnote.ts"); +/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1242677__(/*! ./beam */ "./src/beam.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1242677__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1242677__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1242677__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1242677__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1242677__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1242677__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1242677__(/*! ./clefnote */ "./src/clefnote.ts"); +/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1242677__(/*! ./crescendo */ "./src/crescendo.ts"); +/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1242677__(/*! ./curve */ "./src/curve.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1242677__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1242677__(/*! ./easyscore */ "./src/easyscore.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1242677__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __nested_webpack_require_1242677__(/*! ./factory */ "./src/factory.ts"); +/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __nested_webpack_require_1242677__(/*! ./flow */ "./src/flow.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __nested_webpack_require_1242677__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __nested_webpack_require_1242677__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __nested_webpack_require_1242677__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __nested_webpack_require_1242677__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __nested_webpack_require_1242677__(/*! ./ghostnote */ "./src/ghostnote.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __nested_webpack_require_1242677__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __nested_webpack_require_1242677__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __nested_webpack_require_1242677__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __nested_webpack_require_1242677__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __nested_webpack_require_1242677__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); +/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __nested_webpack_require_1242677__(/*! ./keymanager */ "./src/keymanager.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __nested_webpack_require_1242677__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __nested_webpack_require_1242677__(/*! ./keysignote */ "./src/keysignote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __nested_webpack_require_1242677__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __nested_webpack_require_1242677__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); +/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __nested_webpack_require_1242677__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __nested_webpack_require_1242677__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __nested_webpack_require_1242677__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __nested_webpack_require_1242677__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __nested_webpack_require_1242677__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __nested_webpack_require_1242677__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __nested_webpack_require_1242677__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __nested_webpack_require_1242677__(/*! ./parser */ "./src/parser.ts"); +/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __nested_webpack_require_1242677__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); +/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __nested_webpack_require_1242677__(/*! ./registry */ "./src/registry.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __nested_webpack_require_1242677__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __nested_webpack_require_1242677__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __nested_webpack_require_1242677__(/*! ./repeatnote */ "./src/repeatnote.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __nested_webpack_require_1242677__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __nested_webpack_require_1242677__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __nested_webpack_require_1242677__(/*! ./staveconnector */ "./src/staveconnector.ts"); +/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __nested_webpack_require_1242677__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); +/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __nested_webpack_require_1242677__(/*! ./staveline */ "./src/staveline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __nested_webpack_require_1242677__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __nested_webpack_require_1242677__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __nested_webpack_require_1242677__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __nested_webpack_require_1242677__(/*! ./stavesection */ "./src/stavesection.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __nested_webpack_require_1242677__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __nested_webpack_require_1242677__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __nested_webpack_require_1242677__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __nested_webpack_require_1242677__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __nested_webpack_require_1242677__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __nested_webpack_require_1242677__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __nested_webpack_require_1242677__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __nested_webpack_require_1242677__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __nested_webpack_require_1242677__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __nested_webpack_require_1242677__(/*! ./system */ "./src/system.ts"); +/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __nested_webpack_require_1242677__(/*! ./tabnote */ "./src/tabnote.ts"); +/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __nested_webpack_require_1242677__(/*! ./tabslide */ "./src/tabslide.ts"); +/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __nested_webpack_require_1242677__(/*! ./tabstave */ "./src/tabstave.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __nested_webpack_require_1242677__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __nested_webpack_require_1242677__(/*! ./textbracket */ "./src/textbracket.ts"); +/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __nested_webpack_require_1242677__(/*! ./textdynamics */ "./src/textdynamics.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __nested_webpack_require_1242677__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __nested_webpack_require_1242677__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __nested_webpack_require_1242677__(/*! ./tickable */ "./src/tickable.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __nested_webpack_require_1242677__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __nested_webpack_require_1242677__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __nested_webpack_require_1242677__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __nested_webpack_require_1242677__(/*! ./timesignote */ "./src/timesignote.ts"); +/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __nested_webpack_require_1242677__(/*! ./tremolo */ "./src/tremolo.ts"); +/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __nested_webpack_require_1242677__(/*! ./tuning */ "./src/tuning.ts"); +/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __nested_webpack_require_1242677__(/*! ./tuplet */ "./src/tuplet.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __nested_webpack_require_1242677__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __nested_webpack_require_1242677__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __nested_webpack_require_1242677__(/*! ./vex */ "./src/vex.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __nested_webpack_require_1242677__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __nested_webpack_require_1242677__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __nested_webpack_require_1242677__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __nested_webpack_require_1242677__(/*! ./web */ "./src/web.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -85040,14 +88669,14 @@ __nested_webpack_require_1242219__.r(__nested_webpack_exports__); /*!***************************!*\ !*** ./src/keymanager.ts ***! \***************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1270467__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1270925__) => { -__nested_webpack_require_1270467__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1270467__.d(__nested_webpack_exports__, { +__nested_webpack_require_1270925__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1270925__.d(__nested_webpack_exports__, { /* harmony export */ KeyManager: () => (/* binding */ KeyManager) /* harmony export */ }); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1270467__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1270467__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1270925__(/*! ./music */ "./src/music.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1270925__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -85165,17 +88794,17 @@ class KeyManager { /*!*****************************!*\ !*** ./src/keysignature.ts ***! \*****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1275638__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1276096__) => { -__nested_webpack_require_1275638__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1275638__.d(__nested_webpack_exports__, { +__nested_webpack_require_1276096__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1276096__.d(__nested_webpack_exports__, { /* harmony export */ KeySignature: () => (/* binding */ KeySignature) /* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1275638__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1275638__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1275638__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1275638__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1275638__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1276096__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1276096__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1276096__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1276096__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1276096__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author: Cyril Silverman // @@ -85472,22 +89101,21 @@ KeySignature.accidentalSpacing = { }; - /***/ }), /***/ "./src/keysignote.ts": /*!***************************!*\ !*** ./src/keysignote.ts ***! \***************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1286665__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1287122__) => { -__nested_webpack_require_1286665__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1286665__.d(__nested_webpack_exports__, { +__nested_webpack_require_1287122__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1287122__.d(__nested_webpack_exports__, { /* harmony export */ KeySigNote: () => (/* binding */ KeySigNote) /* harmony export */ }); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1286665__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1286665__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1286665__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1287122__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1287122__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1287122__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author Mark Meeus 2019 @@ -85531,16 +89159,16 @@ class KeySigNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { /*!*************************!*\ !*** ./src/modifier.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1288587__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1289044__) => { -__nested_webpack_require_1288587__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1288587__.d(__nested_webpack_exports__, { +__nested_webpack_require_1289044__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1289044__.d(__nested_webpack_exports__, { /* harmony export */ Modifier: () => (/* binding */ Modifier), /* harmony export */ ModifierPosition: () => (/* binding */ ModifierPosition) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1288587__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1288587__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1288587__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1289044__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1289044__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1289044__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -85736,29 +89364,29 @@ class Modifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { /*!********************************!*\ !*** ./src/modifiercontext.ts ***! \********************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1296195__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1296652__) => { -__nested_webpack_require_1296195__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1296195__.d(__nested_webpack_exports__, { +__nested_webpack_require_1296652__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1296652__.d(__nested_webpack_exports__, { /* harmony export */ ModifierContext: () => (/* binding */ ModifierContext) /* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1296195__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1296195__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1296195__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1296195__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1296195__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1296195__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1296195__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1296195__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1296195__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1296195__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1296195__(/*! ./parenthesis */ "./src/parenthesis.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1296195__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1296195__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1296195__(/*! ./strokes */ "./src/strokes.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1296195__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1296195__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1296195__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1296652__(/*! ./accidental */ "./src/accidental.ts"); +/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1296652__(/*! ./annotation */ "./src/annotation.ts"); +/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1296652__(/*! ./articulation */ "./src/articulation.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1296652__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1296652__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); +/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1296652__(/*! ./dot */ "./src/dot.ts"); +/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1296652__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); +/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1296652__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); +/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1296652__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); +/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1296652__(/*! ./ornament */ "./src/ornament.ts"); +/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1296652__(/*! ./parenthesis */ "./src/parenthesis.ts"); +/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1296652__(/*! ./stavenote */ "./src/stavenote.ts"); +/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1296652__(/*! ./stringnumber */ "./src/stringnumber.ts"); +/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1296652__(/*! ./strokes */ "./src/strokes.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1296652__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1296652__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __nested_webpack_require_1296652__(/*! ./vibrato */ "./src/vibrato.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -85903,27 +89531,26 @@ class ModifierContext { ModifierContext.DEBUG = false; - /***/ }), /***/ "./src/multimeasurerest.ts": /*!*********************************!*\ !*** ./src/multimeasurerest.ts ***! \*********************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1304761__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1305217__) => { -__nested_webpack_require_1304761__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1304761__.d(__nested_webpack_exports__, { +__nested_webpack_require_1305217__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1305217__.d(__nested_webpack_exports__, { /* harmony export */ MultiMeasureRest: () => (/* binding */ MultiMeasureRest) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1304761__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1304761__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1304761__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1304761__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1304761__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1304761__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1304761__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1304761__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1305217__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1305217__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1305217__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1305217__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1305217__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1305217__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1305217__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1305217__(/*! ./util */ "./src/util.ts"); // VexFlow - Music Engraving for HTML5 // Copyright Mohit Muthanna 2010 // @@ -86123,13 +89750,13 @@ class MultiMeasureRest extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { /*!**********************!*\ !*** ./src/music.ts ***! \**********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1314291__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1314747__) => { -__nested_webpack_require_1314291__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1314291__.d(__nested_webpack_exports__, { +__nested_webpack_require_1314747__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1314747__.d(__nested_webpack_exports__, { /* harmony export */ Music: () => (/* binding */ Music) /* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1314291__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1314747__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -86509,18 +90136,18 @@ class Music { /*!*********************!*\ !*** ./src/note.ts ***! \*********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1328808__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1329264__) => { -__nested_webpack_require_1328808__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1328808__.d(__nested_webpack_exports__, { +__nested_webpack_require_1329264__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1329264__.d(__nested_webpack_exports__, { /* harmony export */ Note: () => (/* binding */ Note) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1328808__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1328808__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1328808__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1328808__(/*! ./tickable */ "./src/tickable.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1328808__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1328808__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1329264__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1329264__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1329264__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1329264__(/*! ./tickable */ "./src/tickable.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1329264__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1329264__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -87025,19 +90652,19 @@ class Note extends _tickable__WEBPACK_IMPORTED_MODULE_3__.Tickable { /*!*************************!*\ !*** ./src/notehead.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1348731__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1349187__) => { -__nested_webpack_require_1348731__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1348731__.d(__nested_webpack_exports__, { +__nested_webpack_require_1349187__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1349187__.d(__nested_webpack_exports__, { /* harmony export */ NoteHead: () => (/* binding */ NoteHead) /* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1348731__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1348731__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1348731__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1348731__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1348731__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1348731__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1348731__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1349187__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1349187__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1349187__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1349187__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1349187__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1349187__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1349187__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -87251,24 +90878,23 @@ class NoteHead extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { NoteHead.DEBUG = false; - /***/ }), /***/ "./src/notesubgroup.ts": /*!*****************************!*\ !*** ./src/notesubgroup.ts ***! \*****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1358629__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1359084__) => { -__nested_webpack_require_1358629__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1358629__.d(__nested_webpack_exports__, { +__nested_webpack_require_1359084__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1359084__.d(__nested_webpack_exports__, { /* harmony export */ NoteSubGroup: () => (/* binding */ NoteSubGroup) /* harmony export */ }); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1358629__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1358629__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1358629__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1358629__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1358629__(/*! ./voice */ "./src/voice.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1359084__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1359084__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1359084__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1359084__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1359084__(/*! ./voice */ "./src/voice.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author Taehoon Moon 2016 // @@ -87346,19 +90972,19 @@ class NoteSubGroup extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { /*!*************************!*\ !*** ./src/ornament.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1361893__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1362348__) => { -__nested_webpack_require_1361893__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1361893__.d(__nested_webpack_exports__, { +__nested_webpack_require_1362348__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1362348__.d(__nested_webpack_exports__, { /* harmony export */ Ornament: () => (/* binding */ Ornament) /* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1361893__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1361893__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1361893__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1361893__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1361893__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1361893__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1361893__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1362348__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1362348__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1362348__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1362348__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1362348__(/*! ./tickcontext */ "./src/tickcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1362348__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1362348__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author: Cyril Silverman // MIT License @@ -87640,24 +91266,23 @@ class Ornament extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { Ornament.DEBUG = false; - /***/ }), /***/ "./src/parenthesis.ts": /*!****************************!*\ !*** ./src/parenthesis.ts ***! \****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1375783__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1376237__) => { -__nested_webpack_require_1375783__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1375783__.d(__nested_webpack_exports__, { +__nested_webpack_require_1376237__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1376237__.d(__nested_webpack_exports__, { /* harmony export */ Parenthesis: () => (/* binding */ Parenthesis) /* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1375783__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1375783__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1375783__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1375783__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1375783__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1376237__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1376237__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1376237__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1376237__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1376237__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author: Rodrigo Vilar // MIT License @@ -87758,13 +91383,13 @@ class Parenthesis extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { /*!***********************!*\ !*** ./src/parser.ts ***! \***********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1381414__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1381868__) => { -__nested_webpack_require_1381414__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1381414__.d(__nested_webpack_exports__, { +__nested_webpack_require_1381868__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1381868__.d(__nested_webpack_exports__, { /* harmony export */ Parser: () => (/* binding */ Parser) /* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1381414__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1381868__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // A generic text parsing class for VexFlow. @@ -87979,25 +91604,24 @@ class Parser { Parser.DEBUG = false; - /***/ }), /***/ "./src/pedalmarking.ts": /*!*****************************!*\ !*** ./src/pedalmarking.ts ***! \*****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1389898__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1390351__) => { -__nested_webpack_require_1389898__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1389898__.d(__nested_webpack_exports__, { +__nested_webpack_require_1390351__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1390351__.d(__nested_webpack_exports__, { /* harmony export */ PedalMarking: () => (/* binding */ PedalMarking) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1389898__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1389898__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1389898__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1389898__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1389898__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1389898__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1390351__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1390351__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1390351__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1390351__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1390351__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1390351__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -88099,41 +91723,43 @@ class PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { let is_pedal_depressed = false; let prev_x; let prev_y; + let text_width = 0; // Iterate through each note this.notes.forEach((note, index, notes) => { - var _a; + var _a, _b, _c, _d, _e; // Each note triggers the opposite pedal action is_pedal_depressed = !is_pedal_depressed; // Get the initial coordinates for the note - const x = note.getAbsoluteX(); + let x = note.getAbsoluteX(); const y = note.checkStave().getYForBottomText(this.line + 3); // Throw if current note is positioned before the previous note + // This happens sometimes if the pedal marking is bigger than the note width. Just go with it. if (x < prev_x) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions'); + // throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions'); + x = x + (prev_x - x) + 5; } // Determine if the previous or next note are the same // as the current note. We need to keep track of this for // when adjustments are made for the release+depress action const next_is_same = notes[index + 1] === note; const prev_is_same = notes[index - 1] === note; - let x_shift = 0; const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; + let x_shift = 0; if (is_pedal_depressed) { // Adjustment for release+depress x_shift = prev_is_same ? 5 : 0; if (this.type === PedalMarking.type.MIXED && !prev_is_same) { - // For MIXED style, start with text instead of bracket if (this.custom_depress_text) { - // If we have custom text, use instead of the default "Ped" glyph - const text_width = ctx.measureText(this.custom_depress_text).width; - ctx.fillText(this.custom_depress_text, x - text_width / 2, y); - x_shift = text_width / 2 + this.render_options.text_margin_right; + text_width = ctx.measureText(this.custom_depress_text).width; + ctx.fillText(this.custom_depress_text, x, y); + x_shift = text_width + this.render_options.text_margin_right; } else { // Render the Ped glyph in position drawPedalGlyph('pedal_depress', ctx, x, y, point); x_shift = 20 + this.render_options.text_margin_right; } + // For MIXED style, start with text instead of bracket } else { // Draw start bracket @@ -88146,12 +91772,18 @@ class PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { } else { // Adjustment for release+depress - x_shift = next_is_same ? -5 : 0; + const noteNdx = note.getVoice().getTickables().indexOf(note); + const voiceNotes = note.getVoice().getTickables().length; + const noteEndX = noteNdx + 1 < voiceNotes + ? // If the next note is in the same voice, use the x position of the next note + note.getVoice().getTickables()[noteNdx + 1].getAbsoluteX() + : // If this is the last note is the voice, use the x position of the next stave + ((_c = (_b = note.getStave()) === null || _b === void 0 ? void 0 : _b.getX()) !== null && _c !== void 0 ? _c : 0) + ((_e = (_d = note.getStave()) === null || _d === void 0 ? void 0 : _d.getWidth()) !== null && _e !== void 0 ? _e : 0); // Draw end bracket ctx.beginPath(); ctx.moveTo(prev_x, prev_y); - ctx.lineTo(x + x_shift, y); - ctx.lineTo(x, y - this.render_options.bracket_height); + ctx.lineTo(next_is_same ? x - 5 : noteEndX - 5, y); + ctx.lineTo(next_is_same ? x : noteEndX - 5, y - this.render_options.bracket_height); ctx.stroke(); ctx.closePath(); } @@ -88167,15 +91799,15 @@ class PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { drawText() { const ctx = this.checkContext(); let is_pedal_depressed = false; + let text_width = 0; // Iterate through each note, placing glyphs or custom text accordingly this.notes.forEach((note) => { - var _a; + var _a, _b, _c, _d, _e; is_pedal_depressed = !is_pedal_depressed; const stave = note.checkStave(); const x = note.getAbsoluteX(); const y = stave.getYForBottomText(this.line + 3); const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE; - let text_width = 0; if (is_pedal_depressed) { if (this.custom_depress_text) { text_width = ctx.measureText(this.custom_depress_text).width; @@ -88187,8 +91819,16 @@ class PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { } else { if (this.custom_release_text) { + const noteNdx = note.getVoice().getTickables().indexOf(note); + const voiceNotes = note.getVoice().getTickables().length; + // Get the shift for the next note + const noteEndX = noteNdx + 1 < voiceNotes + ? // If the next note is in the same voice, use the x position of the next note + note.getVoice().getTickables()[noteNdx + 1].getAbsoluteX() + : // If this is the last note is the voice, use the x position of the next stave + ((_c = (_b = note.getStave()) === null || _b === void 0 ? void 0 : _b.getX()) !== null && _c !== void 0 ? _c : 0) + ((_e = (_d = note.getStave()) === null || _d === void 0 ? void 0 : _d.getWidth()) !== null && _e !== void 0 ? _e : 0); text_width = ctx.measureText(this.custom_release_text).width; - ctx.fillText(this.custom_release_text, x - text_width / 2, y); + ctx.fillText(this.custom_release_text, noteEndX - text_width, y); } else { drawPedalGlyph('pedal_release', ctx, x, y, point); @@ -88246,20 +91886,19 @@ PedalMarking.typeString = { }; - /***/ }), /***/ "./src/registry.ts": /*!*************************!*\ !*** ./src/registry.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1400876__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1402980__) => { -__nested_webpack_require_1400876__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1400876__.d(__nested_webpack_exports__, { +__nested_webpack_require_1402980__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1402980__.d(__nested_webpack_exports__, { /* harmony export */ Registry: () => (/* binding */ Registry) /* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1400876__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1402980__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // @author Mohit Cheppudira // @@ -88384,14 +92023,14 @@ class Registry { /*!******************************!*\ !*** ./src/rendercontext.ts ***! \******************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1405579__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1407683__) => { -__nested_webpack_require_1405579__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1405579__.d(__nested_webpack_exports__, { +__nested_webpack_require_1407683__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1407683__.d(__nested_webpack_exports__, { /* harmony export */ RenderContext: () => (/* binding */ RenderContext), /* harmony export */ drawDot: () => (/* binding */ drawDot) /* harmony export */ }); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1405579__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1407683__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021. // MIT License @@ -88439,19 +92078,19 @@ function drawDot(ctx, x, y, color = '#F55') { /*!*************************!*\ !*** ./src/renderer.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1407171__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1409275__) => { -__nested_webpack_require_1407171__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1407171__.d(__nested_webpack_exports__, { +__nested_webpack_require_1409275__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1409275__.d(__nested_webpack_exports__, { /* harmony export */ Renderer: () => (/* binding */ Renderer), /* harmony export */ RendererBackends: () => (/* binding */ RendererBackends), /* harmony export */ RendererLineEndType: () => (/* binding */ RendererLineEndType) /* harmony export */ }); -/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1407171__(/*! ./canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1407171__(/*! ./svgcontext */ "./src/svgcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1407171__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1407171__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1407171__(/*! ./web */ "./src/web.ts"); +/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1409275__(/*! ./canvascontext */ "./src/canvascontext.ts"); +/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1409275__(/*! ./svgcontext */ "./src/svgcontext.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1409275__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1409275__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1409275__(/*! ./web */ "./src/web.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -88581,23 +92220,22 @@ Renderer.LineEndType = RendererLineEndType; Renderer.lastContext = undefined; - /***/ }), /***/ "./src/repeatnote.ts": /*!***************************!*\ !*** ./src/repeatnote.ts ***! \***************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1413685__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1415788__) => { -__nested_webpack_require_1413685__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1413685__.d(__nested_webpack_exports__, { +__nested_webpack_require_1415788__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1415788__.d(__nested_webpack_exports__, { /* harmony export */ RepeatNote: () => (/* binding */ RepeatNote) /* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1413685__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1413685__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1413685__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1413685__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1415788__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1415788__(/*! ./glyphnote */ "./src/glyphnote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1415788__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1415788__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. @@ -88630,28 +92268,28 @@ class RepeatNote extends _glyphnote__WEBPACK_IMPORTED_MODULE_1__.GlyphNote { /*!**********************!*\ !*** ./src/stave.ts ***! \**********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1415447__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1417550__) => { -__nested_webpack_require_1415447__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1415447__.d(__nested_webpack_exports__, { +__nested_webpack_require_1417550__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1417550__.d(__nested_webpack_exports__, { /* harmony export */ Stave: () => (/* binding */ Stave) /* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1415447__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1415447__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1415447__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1415447__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1415447__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1415447__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1415447__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1415447__(/*! ./staverepetition */ "./src/staverepetition.ts"); -/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1415447__(/*! ./stavesection */ "./src/stavesection.ts"); -/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1415447__(/*! ./stavetempo */ "./src/stavetempo.ts"); -/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1415447__(/*! ./stavetext */ "./src/stavetext.ts"); -/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1415447__(/*! ./stavevolta */ "./src/stavevolta.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1415447__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1415447__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1415447__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1415447__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1417550__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1417550__(/*! ./clef */ "./src/clef.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1417550__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1417550__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1417550__(/*! ./keysignature */ "./src/keysignature.ts"); +/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1417550__(/*! ./stavebarline */ "./src/stavebarline.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1417550__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1417550__(/*! ./staverepetition */ "./src/staverepetition.ts"); +/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __nested_webpack_require_1417550__(/*! ./stavesection */ "./src/stavesection.ts"); +/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __nested_webpack_require_1417550__(/*! ./stavetempo */ "./src/stavetempo.ts"); +/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __nested_webpack_require_1417550__(/*! ./stavetext */ "./src/stavetext.ts"); +/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __nested_webpack_require_1417550__(/*! ./stavevolta */ "./src/stavevolta.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __nested_webpack_require_1417550__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __nested_webpack_require_1417550__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __nested_webpack_require_1417550__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __nested_webpack_require_1417550__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -89399,23 +93037,22 @@ Stave.TEXT_FONT = { }; - /***/ }), /***/ "./src/stavebarline.ts": /*!*****************************!*\ !*** ./src/stavebarline.ts ***! \*****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1448275__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1450377__) => { -__nested_webpack_require_1448275__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1448275__.d(__nested_webpack_exports__, { +__nested_webpack_require_1450377__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1450377__.d(__nested_webpack_exports__, { /* harmony export */ Barline: () => (/* binding */ Barline), /* harmony export */ BarlineType: () => (/* binding */ BarlineType) /* harmony export */ }); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1448275__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1448275__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1448275__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1450377__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1450377__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1450377__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // Author Larry Kuhns 2011 @@ -89622,18 +93259,18 @@ class Barline extends _stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifier /*!*******************************!*\ !*** ./src/staveconnector.ts ***! \*******************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1456124__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1458226__) => { -__nested_webpack_require_1456124__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1456124__.d(__nested_webpack_exports__, { +__nested_webpack_require_1458226__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1458226__.d(__nested_webpack_exports__, { /* harmony export */ StaveConnector: () => (/* binding */ StaveConnector) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1456124__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1456124__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1456124__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1456124__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1456124__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1456124__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1458226__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1458226__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1458226__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1458226__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1458226__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1458226__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -89875,23 +93512,22 @@ StaveConnector.typeString = { }; - /***/ }), /***/ "./src/stavehairpin.ts": /*!*****************************!*\ !*** ./src/stavehairpin.ts ***! \*****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1466488__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1468589__) => { -__nested_webpack_require_1466488__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1466488__.d(__nested_webpack_exports__, { +__nested_webpack_require_1468589__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1468589__.d(__nested_webpack_exports__, { /* harmony export */ StaveHairpin: () => (/* binding */ StaveHairpin) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1466488__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1466488__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1466488__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1466488__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1468589__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1468589__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1468589__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1468589__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -90054,24 +93690,23 @@ StaveHairpin.type = { }; - /***/ }), /***/ "./src/staveline.ts": /*!**************************!*\ !*** ./src/staveline.ts ***! \**************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1473344__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1475444__) => { -__nested_webpack_require_1473344__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1473344__.d(__nested_webpack_exports__, { +__nested_webpack_require_1475444__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1475444__.d(__nested_webpack_exports__, { /* harmony export */ StaveLine: () => (/* binding */ StaveLine) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1473344__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1473344__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1473344__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1473344__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1473344__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1475444__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1475444__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1475444__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1475444__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1475444__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -90348,23 +93983,22 @@ StaveLine.TextVerticalPosition = { StaveLine.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification; - /***/ }), /***/ "./src/stavemodifier.ts": /*!******************************!*\ !*** ./src/stavemodifier.ts ***! \******************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1485530__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1487629__) => { -__nested_webpack_require_1485530__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1485530__.d(__nested_webpack_exports__, { +__nested_webpack_require_1487629__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1487629__.d(__nested_webpack_exports__, { /* harmony export */ StaveModifier: () => (/* binding */ StaveModifier), /* harmony export */ StaveModifierPosition: () => (/* binding */ StaveModifierPosition) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1485530__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1485530__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1485530__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1487629__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1487629__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1487629__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -90466,20 +94100,20 @@ class StaveModifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { /*!**************************!*\ !*** ./src/stavenote.ts ***! \**************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1489400__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1491499__) => { -__nested_webpack_require_1489400__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1489400__.d(__nested_webpack_exports__, { +__nested_webpack_require_1491499__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1491499__.d(__nested_webpack_exports__, { /* harmony export */ StaveNote: () => (/* binding */ StaveNote) /* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1489400__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1489400__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1489400__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1489400__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1489400__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1489400__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1489400__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1489400__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1491499__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1491499__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1491499__(/*! ./notehead */ "./src/notehead.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1491499__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1491499__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1491499__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1491499__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1491499__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // This file implements notes for standard notation. This consists of one or @@ -91553,24 +95187,23 @@ class StaveNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNot StaveNote.DEBUG = false; - /***/ }), /***/ "./src/staverepetition.ts": /*!********************************!*\ !*** ./src/staverepetition.ts ***! \********************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1537805__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1539903__) => { -__nested_webpack_require_1537805__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1537805__.d(__nested_webpack_exports__, { +__nested_webpack_require_1539903__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1539903__.d(__nested_webpack_exports__, { /* harmony export */ Repetition: () => (/* binding */ Repetition) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1537805__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1537805__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1537805__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1537805__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1537805__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1539903__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1539903__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1539903__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1539903__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1539903__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author Larry Kuhns 2011 @@ -91735,23 +95368,22 @@ Repetition.type = { }; - /***/ }), /***/ "./src/stavesection.ts": /*!*****************************!*\ !*** ./src/stavesection.ts ***! \*****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1545280__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1547377__) => { -__nested_webpack_require_1545280__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1545280__.d(__nested_webpack_exports__, { +__nested_webpack_require_1547377__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1547377__.d(__nested_webpack_exports__, { /* harmony export */ StaveSection: () => (/* binding */ StaveSection) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1545280__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1545280__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1545280__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1545280__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1547377__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1547377__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1547377__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1547377__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author Larry Kuhns 2011 @@ -91820,25 +95452,24 @@ StaveSection.TEXT_FONT = { }; - /***/ }), /***/ "./src/stavetempo.ts": /*!***************************!*\ !*** ./src/stavetempo.ts ***! \***************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1548429__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1550525__) => { -__nested_webpack_require_1548429__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1548429__.d(__nested_webpack_exports__, { +__nested_webpack_require_1550525__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1550525__.d(__nested_webpack_exports__, { /* harmony export */ StaveTempo: () => (/* binding */ StaveTempo) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1548429__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1548429__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1548429__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1548429__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1548429__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1548429__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1550525__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1550525__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1550525__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1550525__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1550525__(/*! ./textformatter */ "./src/textformatter.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1550525__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author Radosaw Eichler 2012 @@ -91942,24 +95573,23 @@ StaveTempo.TEXT_FONT = { }; - /***/ }), /***/ "./src/stavetext.ts": /*!**************************!*\ !*** ./src/stavetext.ts ***! \**************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1553765__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1555860__) => { -__nested_webpack_require_1553765__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1553765__.d(__nested_webpack_exports__, { +__nested_webpack_require_1555860__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1555860__.d(__nested_webpack_exports__, { /* harmony export */ StaveText: () => (/* binding */ StaveText) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1553765__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1553765__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1553765__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1553765__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1553765__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1555860__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1555860__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1555860__(/*! ./textnote */ "./src/textnote.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1555860__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1555860__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author Taehoon Moon 2014 @@ -92047,22 +95677,21 @@ StaveText.TEXT_FONT = { }; - /***/ }), /***/ "./src/stavetie.ts": /*!*************************!*\ !*** ./src/stavetie.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1558144__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1560238__) => { -__nested_webpack_require_1558144__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1558144__.d(__nested_webpack_exports__, { +__nested_webpack_require_1560238__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1560238__.d(__nested_webpack_exports__, { /* harmony export */ StaveTie: () => (/* binding */ StaveTie) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1558144__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1558144__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1558144__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1560238__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1560238__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1560238__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // This class implements varies types of ties between contiguous notes. The @@ -92245,23 +95874,22 @@ class StaveTie extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { StaveTie.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); - /***/ }), /***/ "./src/stavevolta.ts": /*!***************************!*\ !*** ./src/stavevolta.ts ***! \***************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1565804__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1567897__) => { -__nested_webpack_require_1565804__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1565804__.d(__nested_webpack_exports__, { +__nested_webpack_require_1567897__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1567897__.d(__nested_webpack_exports__, { /* harmony export */ Volta: () => (/* binding */ Volta), /* harmony export */ VoltaType: () => (/* binding */ VoltaType) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1565804__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1565804__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1565804__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1567897__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1567897__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1567897__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author Larry Kuhns 2011 @@ -92335,23 +95963,22 @@ Volta.TEXT_FONT = { }; - /***/ }), /***/ "./src/stem.ts": /*!*********************!*\ !*** ./src/stem.ts ***! \*********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1569105__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1571197__) => { -__nested_webpack_require_1569105__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1569105__.d(__nested_webpack_exports__, { +__nested_webpack_require_1571197__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1571197__.d(__nested_webpack_exports__, { /* harmony export */ Stem: () => (/* binding */ Stem) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1569105__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1569105__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1569105__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1569105__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1571197__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1571197__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1571197__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1571197__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -92517,25 +96144,24 @@ class Stem extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { Stem.DEBUG = false; - /***/ }), /***/ "./src/stemmablenote.ts": /*!******************************!*\ !*** ./src/stemmablenote.ts ***! \******************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1576936__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1579027__) => { -__nested_webpack_require_1576936__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1576936__.d(__nested_webpack_exports__, { +__nested_webpack_require_1579027__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1579027__.d(__nested_webpack_exports__, { /* harmony export */ StemmableNote: () => (/* binding */ StemmableNote) /* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1576936__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1576936__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1576936__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1576936__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1576936__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1576936__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1579027__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1579027__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1579027__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1579027__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1579027__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1579027__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -92769,19 +96395,19 @@ class StemmableNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { /*!*****************************!*\ !*** ./src/stringnumber.ts ***! \*****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1587055__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1589146__) => { -__nested_webpack_require_1587055__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1587055__.d(__nested_webpack_exports__, { +__nested_webpack_require_1589146__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1589146__.d(__nested_webpack_exports__, { /* harmony export */ StringNumber: () => (/* binding */ StringNumber) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1587055__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1587055__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1587055__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1587055__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1587055__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1587055__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1587055__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1589146__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1589146__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1589146__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1589146__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1589146__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1589146__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1589146__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author: Larry Kuhns // @@ -93038,25 +96664,24 @@ StringNumber.TEXT_FONT = { }; - /***/ }), /***/ "./src/strokes.ts": /*!************************!*\ !*** ./src/strokes.ts ***! \************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1599112__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1601202__) => { -__nested_webpack_require_1599112__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1599112__.d(__nested_webpack_exports__, { +__nested_webpack_require_1601202__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1601202__.d(__nested_webpack_exports__, { /* harmony export */ Stroke: () => (/* binding */ Stroke) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1599112__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1599112__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1599112__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1599112__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1599112__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1599112__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1601202__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1601202__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1601202__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1601202__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1601202__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1601202__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author: Larry Kuhns // @@ -93276,23 +96901,22 @@ Stroke.TEXT_FONT = { }; - /***/ }), /***/ "./src/svgcontext.ts": /*!***************************!*\ !*** ./src/svgcontext.ts ***! \***************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1609144__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1611233__) => { -__nested_webpack_require_1609144__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1609144__.d(__nested_webpack_exports__, { +__nested_webpack_require_1611233__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1611233__.d(__nested_webpack_exports__, { /* harmony export */ SVGContext: () => (/* binding */ SVGContext) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1609144__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1609144__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1609144__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1609144__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1611233__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1611233__(/*! ./rendercontext */ "./src/rendercontext.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1611233__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1611233__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License // @author Gregory Ristow (2015) @@ -93594,7 +97218,7 @@ class SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderConte height *= -1; } const rectangle = this.create('rect'); - attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' }; + attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth }; x = this.round(x); y = this.round(y); width = this.round(width); @@ -93859,26 +97483,25 @@ class SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderConte SVGContext.measureTextCache = new MeasureTextCache(); - /***/ }), /***/ "./src/system.ts": /*!***********************!*\ !*** ./src/system.ts ***! \***********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1631976__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1634047__) => { -__nested_webpack_require_1631976__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1631976__.d(__nested_webpack_exports__, { +__nested_webpack_require_1634047__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1634047__.d(__nested_webpack_exports__, { /* harmony export */ System: () => (/* binding */ System) /* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1631976__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1631976__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1631976__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1631976__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1631976__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1631976__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1631976__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1634047__(/*! ./boundingbox */ "./src/boundingbox.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1634047__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1634047__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1634047__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1634047__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1634047__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1634047__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -94091,15 +97714,15 @@ class System extends _element__WEBPACK_IMPORTED_MODULE_1__.Element { /*!***********************!*\ !*** ./src/tables.ts ***! \***********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1641117__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1643188__) => { -__nested_webpack_require_1641117__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1641117__.d(__nested_webpack_exports__, { +__nested_webpack_require_1643188__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1643188__.d(__nested_webpack_exports__, { /* harmony export */ Tables: () => (/* binding */ Tables) /* harmony export */ }); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1641117__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1641117__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1641117__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1643188__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1643188__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1643188__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. @@ -95114,7 +98737,6 @@ Tables.TIME4_4 = { beat_value: 4, resolution: RESOLUTION, }; - // 1/2, 1, 2, 4, 8, 16, 32, 64, 128 // NOTE: There is no 256 here! However, there are other mentions of 256 in this file. // For example, in durations has a 256 key, and sanitizeDuration() can return 256. @@ -95418,20 +99040,20 @@ const durationCodes = { /*!************************!*\ !*** ./src/tabnote.ts ***! \************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1703678__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1705748__) => { -__nested_webpack_require_1703678__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1703678__.d(__nested_webpack_exports__, { +__nested_webpack_require_1705748__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1705748__.d(__nested_webpack_exports__, { /* harmony export */ TabNote: () => (/* binding */ TabNote) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1703678__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1703678__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1703678__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1703678__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1703678__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1703678__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1703678__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1703678__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1705748__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1705748__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1705748__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1705748__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1705748__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1705748__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1705748__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __nested_webpack_require_1705748__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -95834,16 +99456,16 @@ class TabNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote /*!*************************!*\ !*** ./src/tabslide.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1721915__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1723985__) => { -__nested_webpack_require_1721915__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1721915__.d(__nested_webpack_exports__, { +__nested_webpack_require_1723985__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1723985__.d(__nested_webpack_exports__, { /* harmony export */ TabSlide: () => (/* binding */ TabSlide) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1721915__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1721915__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1721915__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1721915__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1723985__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1723985__(/*! ./tabtie */ "./src/tabtie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1723985__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1723985__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License // @@ -95947,21 +99569,20 @@ TabSlide.TEXT_FONT = { }; - /***/ }), /***/ "./src/tabstave.ts": /*!*************************!*\ !*** ./src/tabstave.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1726784__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1728853__) => { -__nested_webpack_require_1726784__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1726784__.d(__nested_webpack_exports__, { +__nested_webpack_require_1728853__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1728853__.d(__nested_webpack_exports__, { /* harmony export */ TabStave: () => (/* binding */ TabStave) /* harmony export */ }); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1726784__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1726784__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1728853__(/*! ./stave */ "./src/stave.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1728853__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. @@ -95990,14 +99611,14 @@ class TabStave extends _stave__WEBPACK_IMPORTED_MODULE_0__.Stave { /*!***********************!*\ !*** ./src/tabtie.ts ***! \***********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1728053__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1730122__) => { -__nested_webpack_require_1728053__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1728053__.d(__nested_webpack_exports__, { +__nested_webpack_require_1730122__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1730122__.d(__nested_webpack_exports__, { /* harmony export */ TabTie: () => (/* binding */ TabTie) /* harmony export */ }); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1728053__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1728053__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1730122__(/*! ./stavetie */ "./src/stavetie.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1730122__(/*! ./typeguard */ "./src/typeguard.ts"); // / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -96042,19 +99663,19 @@ class TabTie extends _stavetie__WEBPACK_IMPORTED_MODULE_0__.StaveTie { /*!****************************!*\ !*** ./src/textbracket.ts ***! \****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1729782__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1731851__) => { -__nested_webpack_require_1729782__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1729782__.d(__nested_webpack_exports__, { +__nested_webpack_require_1731851__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1731851__.d(__nested_webpack_exports__, { /* harmony export */ TextBracket: () => (/* binding */ TextBracket), /* harmony export */ TextBracketPosition: () => (/* binding */ TextBracketPosition) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1729782__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1729782__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1729782__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1729782__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1729782__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1729782__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1731851__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1731851__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1731851__(/*! ./renderer */ "./src/renderer.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1731851__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1731851__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1731851__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author: Cyril Silverman // @@ -96241,24 +99862,23 @@ TextBracket.TEXT_FONT = { }; - /***/ }), /***/ "./src/textdynamics.ts": /*!*****************************!*\ !*** ./src/textdynamics.ts ***! \*****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1738277__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1740345__) => { -__nested_webpack_require_1738277__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1738277__.d(__nested_webpack_exports__, { +__nested_webpack_require_1740345__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1740345__.d(__nested_webpack_exports__, { /* harmony export */ TextDynamics: () => (/* binding */ TextDynamics) /* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1738277__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1738277__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1738277__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1738277__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1738277__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1740345__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1740345__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1740345__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1740345__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1740345__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -96375,21 +99995,20 @@ class TextDynamics extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { TextDynamics.DEBUG = false; - /***/ }), /***/ "./src/textformatter.ts": /*!******************************!*\ !*** ./src/textformatter.ts ***! \******************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1743270__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1745337__) => { -__nested_webpack_require_1743270__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1743270__.d(__nested_webpack_exports__, { +__nested_webpack_require_1745337__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1745337__.d(__nested_webpack_exports__, { /* harmony export */ TextFormatter: () => (/* binding */ TextFormatter) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1743270__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1743270__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1745337__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1745337__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -96709,26 +100328,25 @@ class TextFormatter { TextFormatter.DEBUG = false; - /***/ }), /***/ "./src/textnote.ts": /*!*************************!*\ !*** ./src/textnote.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1756072__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1758138__) => { -__nested_webpack_require_1756072__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1756072__.d(__nested_webpack_exports__, { +__nested_webpack_require_1758138__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1758138__.d(__nested_webpack_exports__, { /* harmony export */ TextJustification: () => (/* binding */ TextJustification), /* harmony export */ TextNote: () => (/* binding */ TextNote) /* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1756072__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1756072__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1756072__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1756072__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1756072__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1756072__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1758138__(/*! ./font */ "./src/font.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1758138__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1758138__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1758138__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1758138__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1758138__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -96902,7 +100520,7 @@ class TextNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { x -= width / 2; } else if (this.justification === TextJustification.RIGHT) { - x += width; + x -= width; } let y; if (this.glyph) { @@ -96941,24 +100559,23 @@ TextNote.TEXT_FONT = { TextNote.Justification = TextJustification; - /***/ }), /***/ "./src/tickable.ts": /*!*************************!*\ !*** ./src/tickable.ts ***! \*************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1764675__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1766740__) => { -__nested_webpack_require_1764675__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1764675__.d(__nested_webpack_exports__, { +__nested_webpack_require_1766740__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1766740__.d(__nested_webpack_exports__, { /* harmony export */ Tickable: () => (/* binding */ Tickable) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1764675__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1764675__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1764675__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1764675__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1764675__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1766740__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1766740__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1766740__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1766740__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1766740__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -97256,14 +100873,14 @@ class Tickable extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { /*!****************************!*\ !*** ./src/tickcontext.ts ***! \****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1775765__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1777830__) => { -__nested_webpack_require_1775765__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1775765__.d(__nested_webpack_exports__, { +__nested_webpack_require_1777830__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1777830__.d(__nested_webpack_exports__, { /* harmony export */ TickContext: () => (/* binding */ TickContext) /* harmony export */ }); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1775765__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1775765__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1777830__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1777830__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -97466,14 +101083,14 @@ class TickContext { /*!*****************************!*\ !*** ./src/timesigglyph.ts ***! \*****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1783697__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1785762__) => { -__nested_webpack_require_1783697__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1783697__.d(__nested_webpack_exports__, { +__nested_webpack_require_1785762__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1785762__.d(__nested_webpack_exports__, { /* harmony export */ TimeSignatureGlyph: () => (/* binding */ TimeSignatureGlyph) /* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1783697__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1783697__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1785762__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1785762__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -97578,18 +101195,18 @@ class TimeSignatureGlyph extends _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph { /*!******************************!*\ !*** ./src/timesignature.ts ***! \******************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1788762__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1790827__) => { -__nested_webpack_require_1788762__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1788762__.d(__nested_webpack_exports__, { +__nested_webpack_require_1790827__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1790827__.d(__nested_webpack_exports__, { /* harmony export */ TimeSignature: () => (/* binding */ TimeSignature) /* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1788762__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1788762__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1788762__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1788762__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1788762__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1788762__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1790827__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1790827__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1790827__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1790827__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1790827__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1790827__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // ## Description @@ -97781,15 +101398,15 @@ class TimeSignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveMod /*!****************************!*\ !*** ./src/timesignote.ts ***! \****************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1796682__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1798747__) => { -__nested_webpack_require_1796682__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1796682__.d(__nested_webpack_exports__, { +__nested_webpack_require_1798747__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1798747__.d(__nested_webpack_exports__, { /* harmony export */ TimeSigNote: () => (/* binding */ TimeSigNote) /* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1796682__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1796682__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1796682__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1798747__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1798747__(/*! ./timesignature */ "./src/timesignature.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1798747__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author Taehoon Moon 2014 @@ -97837,19 +101454,19 @@ class TimeSigNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { /*!************************!*\ !*** ./src/tremolo.ts ***! \************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1798728__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1800793__) => { -__nested_webpack_require_1798728__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1798728__.d(__nested_webpack_exports__, { +__nested_webpack_require_1800793__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1800793__.d(__nested_webpack_exports__, { /* harmony export */ Tremolo: () => (/* binding */ Tremolo) /* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1798728__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1798728__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1798728__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1798728__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1798728__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1798728__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1798728__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1800793__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1800793__(/*! ./gracenote */ "./src/gracenote.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1800793__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1800793__(/*! ./note */ "./src/note.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1800793__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1800793__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1800793__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author: Mike Corrigan // MIT License @@ -97917,14 +101534,14 @@ class Tremolo extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { /*!***********************!*\ !*** ./src/tuning.ts ***! \***********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1802463__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1804528__) => { -__nested_webpack_require_1802463__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1802463__.d(__nested_webpack_exports__, { +__nested_webpack_require_1804528__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1804528__.d(__nested_webpack_exports__, { /* harmony export */ Tuning: () => (/* binding */ Tuning) /* harmony export */ }); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1802463__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1802463__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1804528__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1804528__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -98004,20 +101621,20 @@ class Tuning { /*!***********************!*\ !*** ./src/tuplet.ts ***! \***********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1806031__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1808096__) => { -__nested_webpack_require_1806031__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1806031__.d(__nested_webpack_exports__, { +__nested_webpack_require_1808096__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1808096__.d(__nested_webpack_exports__, { /* harmony export */ Tuplet: () => (/* binding */ Tuplet), /* harmony export */ TupletLocation: () => (/* binding */ TupletLocation) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1806031__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1806031__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1806031__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1806031__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1806031__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1806031__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1806031__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1808096__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1808096__(/*! ./formatter */ "./src/formatter.ts"); +/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1808096__(/*! ./glyph */ "./src/glyph.ts"); +/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1808096__(/*! ./stem */ "./src/stem.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1808096__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __nested_webpack_require_1808096__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __nested_webpack_require_1808096__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. /** * ## Description @@ -98352,10 +101969,10 @@ class Tuplet extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { /*!**************************!*\ !*** ./src/typeguard.ts ***! \**************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1821202__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1823267__) => { -__nested_webpack_require_1821202__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1821202__.d(__nested_webpack_exports__, { +__nested_webpack_require_1823267__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1823267__.d(__nested_webpack_exports__, { /* harmony export */ Category: () => (/* binding */ Category), /* harmony export */ isAccidental: () => (/* binding */ isAccidental), /* harmony export */ isAnnotation: () => (/* binding */ isAnnotation), @@ -98497,10 +102114,10 @@ var Category; /*!*********************!*\ !*** ./src/util.ts ***! \*********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1827934__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1829999__) => { -__nested_webpack_require_1827934__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1827934__.d(__nested_webpack_exports__, { +__nested_webpack_require_1829999__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1829999__.d(__nested_webpack_exports__, { /* harmony export */ RuntimeError: () => (/* binding */ RuntimeError), /* harmony export */ defined: () => (/* binding */ defined), /* harmony export */ globalObject: () => (/* binding */ globalObject), @@ -98533,8 +102150,8 @@ function globalObject() { if (typeof window !== 'undefined') { return window; } - if (typeof __nested_webpack_require_1827934__.g !== 'undefined') { - return __nested_webpack_require_1827934__.g; + if (typeof __nested_webpack_require_1829999__.g !== 'undefined') { + return __nested_webpack_require_1829999__.g; } return Function('return this')(); } @@ -98606,14 +102223,14 @@ function sumArray(arr) { /*!********************!*\ !*** ./src/vex.ts ***! \********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1831525__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1833590__) => { -__nested_webpack_require_1831525__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1831525__.d(__nested_webpack_exports__, { +__nested_webpack_require_1833590__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1833590__.d(__nested_webpack_exports__, { /* harmony export */ Vex: () => (/* binding */ Vex) /* harmony export */ }); -/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1831525__(/*! ./flow */ "./src/flow.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1831525__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1833590__(/*! ./flow */ "./src/flow.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1833590__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // // Utility methods used by the rest of the VexFlow codebase. @@ -98685,23 +102302,22 @@ class Vex { Vex.Flow = _flow__WEBPACK_IMPORTED_MODULE_0__.Flow; - /***/ }), /***/ "./src/vibrato.ts": /*!************************!*\ !*** ./src/vibrato.ts ***! \************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1834539__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1836603__) => { -__nested_webpack_require_1834539__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1834539__.d(__nested_webpack_exports__, { +__nested_webpack_require_1836603__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1836603__.d(__nested_webpack_exports__, { /* harmony export */ Vibrato: () => (/* binding */ Vibrato) /* harmony export */ }); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1834539__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1834539__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1834539__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1834539__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1836603__(/*! ./bend */ "./src/bend.ts"); +/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1836603__(/*! ./modifier */ "./src/modifier.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1836603__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1836603__(/*! ./typeguard */ "./src/typeguard.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -98825,16 +102441,16 @@ class Vibrato extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { /*!*******************************!*\ !*** ./src/vibratobracket.ts ***! \*******************************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1839880__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1841944__) => { -__nested_webpack_require_1839880__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1839880__.d(__nested_webpack_exports__, { +__nested_webpack_require_1841944__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1841944__.d(__nested_webpack_exports__, { /* harmony export */ VibratoBracket: () => (/* binding */ VibratoBracket) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1839880__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1839880__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1839880__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1839880__(/*! ./vibrato */ "./src/vibrato.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1841944__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1841944__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1841944__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1841944__(/*! ./vibrato */ "./src/vibrato.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author: Balazs Forian-Szabo // MIT License @@ -98906,25 +102522,24 @@ class VibratoBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { VibratoBracket.DEBUG = false; - /***/ }), /***/ "./src/voice.ts": /*!**********************!*\ !*** ./src/voice.ts ***! \**********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1843455__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1845518__) => { -__nested_webpack_require_1843455__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1843455__.d(__nested_webpack_exports__, { +__nested_webpack_require_1845518__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1845518__.d(__nested_webpack_exports__, { /* harmony export */ Voice: () => (/* binding */ Voice), /* harmony export */ VoiceMode: () => (/* binding */ VoiceMode) /* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1843455__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1843455__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1843455__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1843455__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1843455__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1845518__(/*! ./element */ "./src/element.ts"); +/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1845518__(/*! ./fraction */ "./src/fraction.ts"); +/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1845518__(/*! ./tables */ "./src/tables.ts"); +/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1845518__(/*! ./typeguard */ "./src/typeguard.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __nested_webpack_require_1845518__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License @@ -99189,14 +102804,14 @@ class Voice extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { /*!********************!*\ !*** ./src/web.ts ***! \********************/ -/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1854093__) => { +/***/ ((__unused_webpack_module, __nested_webpack_exports__, __nested_webpack_require_1856156__) => { -__nested_webpack_require_1854093__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1854093__.d(__nested_webpack_exports__, { +__nested_webpack_require_1856156__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1856156__.d(__nested_webpack_exports__, { /* harmony export */ isHTMLCanvas: () => (/* binding */ isHTMLCanvas), /* harmony export */ isHTMLDiv: () => (/* binding */ isHTMLDiv) /* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1854093__(/*! ./util */ "./src/util.ts"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1856156__(/*! ./util */ "./src/util.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // Author: Ron B. Yeh // MIT License @@ -99237,7 +102852,7 @@ function isHTMLDiv(element) { /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function -/******/ function __nested_webpack_require_1856052__(moduleId) { +/******/ function __nested_webpack_require_1858115__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { @@ -99251,7 +102866,7 @@ function isHTMLDiv(element) { /******/ }; /******/ /******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_1856052__); +/******/ __webpack_modules__[moduleId](module, module.exports, __nested_webpack_require_1858115__); /******/ /******/ // Return the exports of the module /******/ return module.exports; @@ -99261,9 +102876,9 @@ function isHTMLDiv(element) { /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports -/******/ __nested_webpack_require_1856052__.d = (exports, definition) => { +/******/ __nested_webpack_require_1858115__.d = (exports, definition) => { /******/ for(var key in definition) { -/******/ if(__nested_webpack_require_1856052__.o(definition, key) && !__nested_webpack_require_1856052__.o(exports, key)) { +/******/ if(__nested_webpack_require_1858115__.o(definition, key) && !__nested_webpack_require_1858115__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } @@ -99272,7 +102887,7 @@ function isHTMLDiv(element) { /******/ /******/ /* webpack/runtime/global */ /******/ (() => { -/******/ __nested_webpack_require_1856052__.g = (function() { +/******/ __nested_webpack_require_1858115__.g = (function() { /******/ if (typeof globalThis === 'object') return globalThis; /******/ try { /******/ return this || new Function('return this')(); @@ -99284,13 +102899,13 @@ function isHTMLDiv(element) { /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { -/******/ __nested_webpack_require_1856052__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ __nested_webpack_require_1858115__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports -/******/ __nested_webpack_require_1856052__.r = (exports) => { +/******/ __nested_webpack_require_1858115__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } @@ -99305,8 +102920,8 @@ var __nested_webpack_exports__ = {}; /*!********************************!*\ !*** ./entry/vexflow-debug.ts ***! \********************************/ -__nested_webpack_require_1856052__.r(__nested_webpack_exports__); -/* harmony export */ __nested_webpack_require_1856052__.d(__nested_webpack_exports__, { +__nested_webpack_require_1858115__.r(__nested_webpack_exports__); +/* harmony export */ __nested_webpack_require_1858115__.d(__nested_webpack_exports__, { /* harmony export */ Accidental: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Accidental), /* harmony export */ Annotation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Annotation), /* harmony export */ AnnotationHorizontalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationHorizontalJustify), @@ -99446,10 +103061,10 @@ __nested_webpack_require_1856052__.r(__nested_webpack_exports__); /* harmony export */ sumArray: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.sumArray), /* harmony export */ warn: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.warn) /* harmony export */ }); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1856052__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1856052__(/*! ../src/fonts/load_all */ "./src/fonts/load_all.ts"); -/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1856052__(/*! ../src/fonts/textfonts */ "./src/fonts/textfonts.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1856052__(/*! ../src/index */ "./src/index.ts"); +/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_0__ = __nested_webpack_require_1858115__(/*! ../src/flow */ "./src/flow.ts"); +/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__ = __nested_webpack_require_1858115__(/*! ../src/fonts/load_all */ "./src/fonts/load_all.ts"); +/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__ = __nested_webpack_require_1858115__(/*! ../src/fonts/textfonts */ "./src/fonts/textfonts.ts"); +/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_3__ = __nested_webpack_require_1858115__(/*! ../src/index */ "./src/index.ts"); // [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. // MIT License // @@ -99576,20 +103191,20 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _ui_buttons_display__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../ui/buttons/display */ "./src/ui/buttons/display.ts"); /* harmony import */ var _ui_buttons_duration__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../ui/buttons/duration */ "./src/ui/buttons/duration.ts"); /* harmony import */ var _ui_buttons_measure__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../ui/buttons/measure */ "./src/ui/buttons/measure.ts"); -/* harmony import */ var _ui_buttons_microtone__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../ui/buttons/microtone */ "./src/ui/buttons/microtone.ts"); -/* harmony import */ var _ui_buttons_navigation__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../ui/buttons/navigation */ "./src/ui/buttons/navigation.ts"); -/* harmony import */ var _ui_buttons_note__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../ui/buttons/note */ "./src/ui/buttons/note.ts"); -/* harmony import */ var _ui_buttons_player__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../ui/buttons/player */ "./src/ui/buttons/player.ts"); -/* harmony import */ var _ui_buttons_stave__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../ui/buttons/stave */ "./src/ui/buttons/stave.ts"); -/* harmony import */ var _ui_buttons_text__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../ui/buttons/text */ "./src/ui/buttons/text.ts"); -/* harmony import */ var _ui_buttons_voice__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../ui/buttons/voice */ "./src/ui/buttons/voice.ts"); -/* harmony import */ var _ui_i18n_translationEditor__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../ui/i18n/translationEditor */ "./src/ui/i18n/translationEditor.ts"); -/* harmony import */ var _configuration__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./configuration */ "./src/application/configuration.ts"); -/* harmony import */ var _ui_buttons_ribbon__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../ui/buttons/ribbon */ "./src/ui/buttons/ribbon.ts"); -/* harmony import */ var _ui_ribbonLayout_default_tabletRibbon__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../ui/ribbonLayout/default/tabletRibbon */ "./src/ui/ribbonLayout/default/tabletRibbon.ts"); -/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./common */ "./src/application/common.ts"); -/* harmony import */ var _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../ui/i18n/language_en */ "./src/ui/i18n/language_en.js"); -/* harmony import */ var _ui_dialogs_dialog__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../ui/dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); +/* harmony import */ var _ui_buttons_navigation__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../ui/buttons/navigation */ "./src/ui/buttons/navigation.ts"); +/* harmony import */ var _ui_buttons_note__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../ui/buttons/note */ "./src/ui/buttons/note.ts"); +/* harmony import */ var _ui_buttons_player__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../ui/buttons/player */ "./src/ui/buttons/player.ts"); +/* harmony import */ var _ui_buttons_stave__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../ui/buttons/stave */ "./src/ui/buttons/stave.ts"); +/* harmony import */ var _ui_buttons_text__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../ui/buttons/text */ "./src/ui/buttons/text.ts"); +/* harmony import */ var _ui_buttons_voice__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../ui/buttons/voice */ "./src/ui/buttons/voice.ts"); +/* harmony import */ var _ui_i18n_translationEditor__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../ui/i18n/translationEditor */ "./src/ui/i18n/translationEditor.ts"); +/* harmony import */ var _configuration__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./configuration */ "./src/application/configuration.ts"); +/* harmony import */ var _ui_buttons_ribbon__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../ui/buttons/ribbon */ "./src/ui/buttons/ribbon.ts"); +/* harmony import */ var _ui_ribbonLayout_default_tabletRibbon__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../ui/ribbonLayout/default/tabletRibbon */ "./src/ui/ribbonLayout/default/tabletRibbon.ts"); +/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./common */ "./src/application/common.ts"); +/* harmony import */ var _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../ui/i18n/language_en */ "./src/ui/i18n/language_en.js"); +/* harmony import */ var _ui_dialogs_dialog__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../ui/dialogs/dialog */ "./src/ui/dialogs/dialog.ts"); +/* harmony import */ var _ui_dialogs_gracenote__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../ui/dialogs/gracenote */ "./src/ui/dialogs/gracenote.ts"); /* harmony import */ var _ui_dialogs_factory__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../ui/dialogs/factory */ "./src/ui/dialogs/factory.ts"); /* harmony import */ var _ui_dialogs_transposeScore__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../ui/dialogs/transposeScore */ "./src/ui/dialogs/transposeScore.ts"); /* harmony import */ var _ui_dialogs_measureFormat__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../ui/dialogs/measureFormat */ "./src/ui/dialogs/measureFormat.ts"); @@ -99597,91 +103212,103 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _ui_dialogs_instrument__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../ui/dialogs/instrument */ "./src/ui/dialogs/instrument.ts"); /* harmony import */ var _ui_dialogs_timeSignature__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../ui/dialogs/timeSignature */ "./src/ui/dialogs/timeSignature.ts"); /* harmony import */ var _ui_dialogs_tempo__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../ui/dialogs/tempo */ "./src/ui/dialogs/tempo.ts"); -/* harmony import */ var _ui_dialogs_scoreId__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../ui/dialogs/scoreId */ "./src/ui/dialogs/scoreId.ts"); -/* harmony import */ var _ui_dialogs_preferences__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../ui/dialogs/preferences */ "./src/ui/dialogs/preferences.ts"); -/* harmony import */ var _ui_dialogs_pageLayout__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../ui/dialogs/pageLayout */ "./src/ui/dialogs/pageLayout.ts"); -/* harmony import */ var _ui_dialogs_textBracket__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../ui/dialogs/textBracket */ "./src/ui/dialogs/textBracket.ts"); -/* harmony import */ var _ui_dialogs_fonts__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../ui/dialogs/fonts */ "./src/ui/dialogs/fonts.ts"); -/* harmony import */ var _ui_dialogs_globalLayout__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../ui/dialogs/globalLayout */ "./src/ui/dialogs/globalLayout.ts"); -/* harmony import */ var _ui_dialogs_scoreView__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../ui/dialogs/scoreView */ "./src/ui/dialogs/scoreView.ts"); -/* harmony import */ var _ui_dialogs_library__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../ui/dialogs/library */ "./src/ui/dialogs/library.ts"); -/* harmony import */ var _ui_dialogs_chordChange__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ../ui/dialogs/chordChange */ "./src/ui/dialogs/chordChange.ts"); -/* harmony import */ var _ui_dialogs_lyric__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ../ui/dialogs/lyric */ "./src/ui/dialogs/lyric.ts"); -/* harmony import */ var _ui_dialogs_textBlock__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ../ui/dialogs/textBlock */ "./src/ui/dialogs/textBlock.ts"); -/* harmony import */ var _ui_dialogs_dynamics__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ../ui/dialogs/dynamics */ "./src/ui/dialogs/dynamics.ts"); -/* harmony import */ var _ui_dialogs_slur__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ../ui/dialogs/slur */ "./src/ui/dialogs/slur.ts"); -/* harmony import */ var _ui_dialogs_tie__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ../ui/dialogs/tie */ "./src/ui/dialogs/tie.ts"); -/* harmony import */ var _ui_dialogs_volta__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ../ui/dialogs/volta */ "./src/ui/dialogs/volta.ts"); -/* harmony import */ var _ui_dialogs_hairpin__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ../ui/dialogs/hairpin */ "./src/ui/dialogs/hairpin.ts"); -/* harmony import */ var _ui_dialogs_staffGroup__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ../ui/dialogs/staffGroup */ "./src/ui/dialogs/staffGroup.ts"); -/* harmony import */ var _ui_dialogs_arpeggio__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ../ui/dialogs/arpeggio */ "./src/ui/dialogs/arpeggio.ts"); -/* harmony import */ var _ui_dialogs_clefChange__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ../ui/dialogs/clefChange */ "./src/ui/dialogs/clefChange.ts"); -/* harmony import */ var _ui_dialogs_partInfo__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ../ui/dialogs/partInfo */ "./src/ui/dialogs/partInfo.ts"); -/* harmony import */ var _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ../ui/dialogs/fileDialogs */ "./src/ui/dialogs/fileDialogs.ts"); -/* harmony import */ var _ui_dialogs_components_textInput__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ../ui/dialogs/components/textInput */ "./src/ui/dialogs/components/textInput.ts"); -/* harmony import */ var _ui_dialogs_components_dropdown__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ../ui/dialogs/components/dropdown */ "./src/ui/dialogs/components/dropdown.ts"); -/* harmony import */ var _ui_dialogs_components_button__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ../ui/dialogs/components/button */ "./src/ui/dialogs/components/button.ts"); -/* harmony import */ var _ui_dialogs_components_toggle__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ../ui/dialogs/components/toggle */ "./src/ui/dialogs/components/toggle.ts"); -/* harmony import */ var _ui_dialogs_components_fileDownload__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ../ui/dialogs/components/fileDownload */ "./src/ui/dialogs/components/fileDownload.ts"); -/* harmony import */ var _ui_dialogs_components_rocker__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ../ui/dialogs/components/rocker */ "./src/ui/dialogs/components/rocker.ts"); -/* harmony import */ var _ui_dialogs_components_fontComponent__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ../ui/dialogs/components/fontComponent */ "./src/ui/dialogs/components/fontComponent.ts"); -/* harmony import */ var _ui_dialogs_components_textInPlace__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ../ui/dialogs/components/textInPlace */ "./src/ui/dialogs/components/textInPlace.ts"); -/* harmony import */ var _ui_dialogs_components_tree__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ../ui/dialogs/components/tree */ "./src/ui/dialogs/components/tree.ts"); -/* harmony import */ var _ui_dialogs_components_pitch__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ../ui/dialogs/components/pitch */ "./src/ui/dialogs/components/pitch.ts"); -/* harmony import */ var _ui_dialogs_components_noteText__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ../ui/dialogs/components/noteText */ "./src/ui/dialogs/components/noteText.ts"); -/* harmony import */ var _ui_dialogs_components_dragText__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ../ui/dialogs/components/dragText */ "./src/ui/dialogs/components/dragText.ts"); -/* harmony import */ var _ui_dialogs_components_checkdrop__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ../ui/dialogs/components/checkdrop */ "./src/ui/dialogs/components/checkdrop.ts"); -/* harmony import */ var _ui_dialogs_components_tie__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ../ui/dialogs/components/tie */ "./src/ui/dialogs/components/tie.ts"); -/* harmony import */ var _ui_dialogs_components_staffComponents__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ../ui/dialogs/components/staffComponents */ "./src/ui/dialogs/components/staffComponents.ts"); -/* harmony import */ var _ui_dialogs_components_textCheck__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ../ui/dialogs/components/textCheck */ "./src/ui/dialogs/components/textCheck.ts"); -/* harmony import */ var _ui_menus_manager__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ../ui/menus/manager */ "./src/ui/menus/manager.ts"); -/* harmony import */ var _ui_menus_menu__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ../ui/menus/menu */ "./src/ui/menus/menu.ts"); -/* harmony import */ var _ui_menus_score__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ../ui/menus/score */ "./src/ui/menus/score.ts"); -/* harmony import */ var _ui_menus_parts__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ../ui/menus/parts */ "./src/ui/menus/parts.ts"); -/* harmony import */ var _ui_menus_partSelection__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ../ui/menus/partSelection */ "./src/ui/menus/partSelection.ts"); -/* harmony import */ var _ui_menus_dynamics__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ../ui/menus/dynamics */ "./src/ui/menus/dynamics.ts"); -/* harmony import */ var _ui_menus_timeSignature__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ../ui/menus/timeSignature */ "./src/ui/menus/timeSignature.ts"); -/* harmony import */ var _ui_menus_keySignature__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ../ui/menus/keySignature */ "./src/ui/menus/keySignature.ts"); -/* harmony import */ var _ui_menus_staffModifier__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ../ui/menus/staffModifier */ "./src/ui/menus/staffModifier.ts"); -/* harmony import */ var _ui_menus_file__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ../ui/menus/file */ "./src/ui/menus/file.ts"); -/* harmony import */ var _ui_menus_language__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ../ui/menus/language */ "./src/ui/menus/language.ts"); -/* harmony import */ var _ui_i18n_language__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ../ui/i18n/language */ "./src/ui/i18n/language.ts"); -/* harmony import */ var _ui_menus_measure__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ../ui/menus/measure */ "./src/ui/menus/measure.ts"); -/* harmony import */ var _ui_menus_note__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ../ui/menus/note */ "./src/ui/menus/note.ts"); -/* harmony import */ var _ui_fileio_xhrLoader__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ../ui/fileio/xhrLoader */ "./src/ui/fileio/xhrLoader.ts"); -/* harmony import */ var _common_promiseHelpers__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(/*! ../common/promiseHelpers */ "./src/common/promiseHelpers.ts"); -/* harmony import */ var _render_sui_scoreView__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(/*! ../render/sui/scoreView */ "./src/render/sui/scoreView.ts"); -/* harmony import */ var _render_sui_scoreViewOperations__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(/*! ../render/sui/scoreViewOperations */ "./src/render/sui/scoreViewOperations.ts"); -/* harmony import */ var _render_sui_scoreRender__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(/*! ../render/sui/scoreRender */ "./src/render/sui/scoreRender.ts"); -/* harmony import */ var _render_sui_layoutDebug__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(/*! ../render/sui/layoutDebug */ "./src/render/sui/layoutDebug.ts"); -/* harmony import */ var _render_sui_mapper__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(/*! ../render/sui/mapper */ "./src/render/sui/mapper.ts"); -/* harmony import */ var _render_sui_scroller__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(/*! ../render/sui/scroller */ "./src/render/sui/scroller.ts"); -/* harmony import */ var _render_sui_svgHelpers__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(/*! ../render/sui/svgHelpers */ "./src/render/sui/svgHelpers.ts"); -/* harmony import */ var _render_audio_player__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(/*! ../render/audio/player */ "./src/render/audio/player.ts"); -/* harmony import */ var _render_audio_oscillator__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(/*! ../render/audio/oscillator */ "./src/render/audio/oscillator.ts"); -/* harmony import */ var _render_audio_samples__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(/*! ../render/audio/samples */ "./src/render/audio/samples.ts"); -/* harmony import */ var _smo_data_score__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(/*! ../smo/data/score */ "./src/smo/data/score.ts"); -/* harmony import */ var _smo_xform_undo__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(/*! ../smo/xform/undo */ "./src/smo/xform/undo.ts"); -/* harmony import */ var _smo_data_note__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(/*! ../smo/data/note */ "./src/smo/data/note.ts"); -/* harmony import */ var _smo_xform_tickDuration__WEBPACK_IMPORTED_MODULE_103__ = __webpack_require__(/*! ../smo/xform/tickDuration */ "./src/smo/xform/tickDuration.ts"); -/* harmony import */ var _tests_file_load__WEBPACK_IMPORTED_MODULE_104__ = __webpack_require__(/*! ../../tests/file-load */ "./tests/file-load.ts"); -/* harmony import */ var _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_105__ = __webpack_require__(/*! ../smo/data/staffModifiers */ "./src/smo/data/staffModifiers.ts"); -/* harmony import */ var _smo_data_measure__WEBPACK_IMPORTED_MODULE_106__ = __webpack_require__(/*! ../smo/data/measure */ "./src/smo/data/measure.ts"); -/* harmony import */ var _smo_data_music__WEBPACK_IMPORTED_MODULE_107__ = __webpack_require__(/*! ../smo/data/music */ "./src/smo/data/music.ts"); -/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_108__ = __webpack_require__(/*! ../smo/xform/selections */ "./src/smo/xform/selections.ts"); -/* harmony import */ var _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_109__ = __webpack_require__(/*! ../smo/data/noteModifiers */ "./src/smo/data/noteModifiers.ts"); -/* harmony import */ var _smo_data_systemStaff__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(/*! ../smo/data/systemStaff */ "./src/smo/data/systemStaff.ts"); -/* harmony import */ var _smo_data_scoreModifiers__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(/*! ../smo/data/scoreModifiers */ "./src/smo/data/scoreModifiers.ts"); -/* harmony import */ var _smo_data_scoreText__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(/*! ../smo/data/scoreText */ "./src/smo/data/scoreText.ts"); -/* harmony import */ var _smo_xform_operations__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(/*! ../smo/xform/operations */ "./src/smo/xform/operations.ts"); -/* harmony import */ var _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(/*! ../smo/data/measureModifiers */ "./src/smo/data/measureModifiers.ts"); -/* harmony import */ var _smo_mxml_smoToXml__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(/*! ../smo/mxml/smoToXml */ "./src/smo/mxml/smoToXml.ts"); -/* harmony import */ var _smo_midi_midiToSmo__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(/*! ../smo/midi/midiToSmo */ "./src/smo/midi/midiToSmo.ts"); -/* harmony import */ var _smo_midi_smoToMidi__WEBPACK_IMPORTED_MODULE_117__ = __webpack_require__(/*! ../smo/midi/smoToMidi */ "./src/smo/midi/smoToMidi.ts"); -/* harmony import */ var _smo_mxml_xmlToSmo__WEBPACK_IMPORTED_MODULE_118__ = __webpack_require__(/*! ../smo/mxml/xmlToSmo */ "./src/smo/mxml/xmlToSmo.ts"); -/* harmony import */ var _render_vex_toVex__WEBPACK_IMPORTED_MODULE_119__ = __webpack_require__(/*! ../render/vex/toVex */ "./src/render/vex/toVex.ts"); -/* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_120__ = __webpack_require__(/*! ../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); -/* harmony import */ var _generateVexTests__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(/*! ./generateVexTests */ "./src/application/generateVexTests.ts"); +/* harmony import */ var _ui_dialogs_noteHead__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../ui/dialogs/noteHead */ "./src/ui/dialogs/noteHead.ts"); +/* harmony import */ var _ui_dialogs_endings__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../ui/dialogs/endings */ "./src/ui/dialogs/endings.ts"); +/* harmony import */ var _ui_dialogs_scoreId__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../ui/dialogs/scoreId */ "./src/ui/dialogs/scoreId.ts"); +/* harmony import */ var _ui_dialogs_preferences__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../ui/dialogs/preferences */ "./src/ui/dialogs/preferences.ts"); +/* harmony import */ var _ui_dialogs_pageLayout__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../ui/dialogs/pageLayout */ "./src/ui/dialogs/pageLayout.ts"); +/* harmony import */ var _ui_dialogs_textBracket__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../ui/dialogs/textBracket */ "./src/ui/dialogs/textBracket.ts"); +/* harmony import */ var _ui_dialogs_fonts__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../ui/dialogs/fonts */ "./src/ui/dialogs/fonts.ts"); +/* harmony import */ var _ui_dialogs_globalLayout__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ../ui/dialogs/globalLayout */ "./src/ui/dialogs/globalLayout.ts"); +/* harmony import */ var _ui_dialogs_scoreView__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ../ui/dialogs/scoreView */ "./src/ui/dialogs/scoreView.ts"); +/* harmony import */ var _ui_dialogs_library__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ../ui/dialogs/library */ "./src/ui/dialogs/library.ts"); +/* harmony import */ var _ui_dialogs_chordChange__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ../ui/dialogs/chordChange */ "./src/ui/dialogs/chordChange.ts"); +/* harmony import */ var _ui_dialogs_lyric__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ../ui/dialogs/lyric */ "./src/ui/dialogs/lyric.ts"); +/* harmony import */ var _ui_dialogs_textBlock__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ../ui/dialogs/textBlock */ "./src/ui/dialogs/textBlock.ts"); +/* harmony import */ var _ui_dialogs_dynamics__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ../ui/dialogs/dynamics */ "./src/ui/dialogs/dynamics.ts"); +/* harmony import */ var _ui_dialogs_slur__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ../ui/dialogs/slur */ "./src/ui/dialogs/slur.ts"); +/* harmony import */ var _ui_dialogs_pedalMarking__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ../ui/dialogs/pedalMarking */ "./src/ui/dialogs/pedalMarking.ts"); +/* harmony import */ var _ui_dialogs_tie__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ../ui/dialogs/tie */ "./src/ui/dialogs/tie.ts"); +/* harmony import */ var _ui_dialogs_volta__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ../ui/dialogs/volta */ "./src/ui/dialogs/volta.ts"); +/* harmony import */ var _ui_dialogs_hairpin__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ../ui/dialogs/hairpin */ "./src/ui/dialogs/hairpin.ts"); +/* harmony import */ var _ui_dialogs_staffGroup__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ../ui/dialogs/staffGroup */ "./src/ui/dialogs/staffGroup.ts"); +/* harmony import */ var _ui_dialogs_ornament__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ../ui/dialogs/ornament */ "./src/ui/dialogs/ornament.ts"); +/* harmony import */ var _ui_dialogs_articulation__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ../ui/dialogs/articulation */ "./src/ui/dialogs/articulation.ts"); +/* harmony import */ var _ui_dialogs_microtones__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ../ui/dialogs/microtones */ "./src/ui/dialogs/microtones.ts"); +/* harmony import */ var _ui_dialogs_arpeggio__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ../ui/dialogs/arpeggio */ "./src/ui/dialogs/arpeggio.ts"); +/* harmony import */ var _ui_dialogs_clefChange__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ../ui/dialogs/clefChange */ "./src/ui/dialogs/clefChange.ts"); +/* harmony import */ var _ui_dialogs_partInfo__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ../ui/dialogs/partInfo */ "./src/ui/dialogs/partInfo.ts"); +/* harmony import */ var _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ../ui/dialogs/fileDialogs */ "./src/ui/dialogs/fileDialogs.ts"); +/* harmony import */ var _ui_dialogs_components_textInput__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ../ui/dialogs/components/textInput */ "./src/ui/dialogs/components/textInput.ts"); +/* harmony import */ var _ui_dialogs_components_dropdown__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ../ui/dialogs/components/dropdown */ "./src/ui/dialogs/components/dropdown.ts"); +/* harmony import */ var _ui_dialogs_components_button__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ../ui/dialogs/components/button */ "./src/ui/dialogs/components/button.ts"); +/* harmony import */ var _ui_dialogs_components_buttonArray__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ../ui/dialogs/components/buttonArray */ "./src/ui/dialogs/components/buttonArray.ts"); +/* harmony import */ var _ui_dialogs_components_toggle__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ../ui/dialogs/components/toggle */ "./src/ui/dialogs/components/toggle.ts"); +/* harmony import */ var _ui_dialogs_components_fileDownload__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ../ui/dialogs/components/fileDownload */ "./src/ui/dialogs/components/fileDownload.ts"); +/* harmony import */ var _ui_dialogs_components_rocker__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ../ui/dialogs/components/rocker */ "./src/ui/dialogs/components/rocker.ts"); +/* harmony import */ var _ui_dialogs_components_fontComponent__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ../ui/dialogs/components/fontComponent */ "./src/ui/dialogs/components/fontComponent.ts"); +/* harmony import */ var _ui_dialogs_components_textInPlace__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ../ui/dialogs/components/textInPlace */ "./src/ui/dialogs/components/textInPlace.ts"); +/* harmony import */ var _ui_dialogs_components_tree__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ../ui/dialogs/components/tree */ "./src/ui/dialogs/components/tree.ts"); +/* harmony import */ var _ui_dialogs_components_pitch__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ../ui/dialogs/components/pitch */ "./src/ui/dialogs/components/pitch.ts"); +/* harmony import */ var _ui_dialogs_components_noteText__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ../ui/dialogs/components/noteText */ "./src/ui/dialogs/components/noteText.ts"); +/* harmony import */ var _ui_dialogs_components_dragText__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ../ui/dialogs/components/dragText */ "./src/ui/dialogs/components/dragText.ts"); +/* harmony import */ var _ui_dialogs_components_checkdrop__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ../ui/dialogs/components/checkdrop */ "./src/ui/dialogs/components/checkdrop.ts"); +/* harmony import */ var _ui_dialogs_components_tie__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ../ui/dialogs/components/tie */ "./src/ui/dialogs/components/tie.ts"); +/* harmony import */ var _ui_dialogs_components_staffComponents__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ../ui/dialogs/components/staffComponents */ "./src/ui/dialogs/components/staffComponents.ts"); +/* harmony import */ var _ui_dialogs_keySignature__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ../ui/dialogs/keySignature */ "./src/ui/dialogs/keySignature.ts"); +/* harmony import */ var _ui_dialogs_components_textCheck__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ../ui/dialogs/components/textCheck */ "./src/ui/dialogs/components/textCheck.ts"); +/* harmony import */ var _ui_menus_manager__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ../ui/menus/manager */ "./src/ui/menus/manager.ts"); +/* harmony import */ var _ui_menus_menu__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ../ui/menus/menu */ "./src/ui/menus/menu.ts"); +/* harmony import */ var _ui_menus_score__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ../ui/menus/score */ "./src/ui/menus/score.ts"); +/* harmony import */ var _ui_menus_text__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ../ui/menus/text */ "./src/ui/menus/text.ts"); +/* harmony import */ var _ui_menus_parts__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ../ui/menus/parts */ "./src/ui/menus/parts.ts"); +/* harmony import */ var _ui_menus_voices__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ../ui/menus/voices */ "./src/ui/menus/voices.ts"); +/* harmony import */ var _ui_menus_beams__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ../ui/menus/beams */ "./src/ui/menus/beams.ts"); +/* harmony import */ var _ui_menus_partSelection__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(/*! ../ui/menus/partSelection */ "./src/ui/menus/partSelection.ts"); +/* harmony import */ var _ui_menus_dynamics__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(/*! ../ui/menus/dynamics */ "./src/ui/menus/dynamics.ts"); +/* harmony import */ var _ui_menus_timeSignature__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(/*! ../ui/menus/timeSignature */ "./src/ui/menus/timeSignature.ts"); +/* harmony import */ var _ui_menus_keySignature__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(/*! ../ui/menus/keySignature */ "./src/ui/menus/keySignature.ts"); +/* harmony import */ var _ui_menus_staffModifier__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(/*! ../ui/menus/staffModifier */ "./src/ui/menus/staffModifier.ts"); +/* harmony import */ var _ui_menus_file__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(/*! ../ui/menus/file */ "./src/ui/menus/file.ts"); +/* harmony import */ var _ui_menus_language__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(/*! ../ui/menus/language */ "./src/ui/menus/language.ts"); +/* harmony import */ var _ui_i18n_language__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(/*! ../ui/i18n/language */ "./src/ui/i18n/language.ts"); +/* harmony import */ var _ui_menus_measure__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(/*! ../ui/menus/measure */ "./src/ui/menus/measure.ts"); +/* harmony import */ var _ui_menus_note__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(/*! ../ui/menus/note */ "./src/ui/menus/note.ts"); +/* harmony import */ var _ui_fileio_xhrLoader__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(/*! ../ui/fileio/xhrLoader */ "./src/ui/fileio/xhrLoader.ts"); +/* harmony import */ var _common_promiseHelpers__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(/*! ../common/promiseHelpers */ "./src/common/promiseHelpers.ts"); +/* harmony import */ var _render_sui_scoreView__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(/*! ../render/sui/scoreView */ "./src/render/sui/scoreView.ts"); +/* harmony import */ var _render_sui_scoreViewOperations__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(/*! ../render/sui/scoreViewOperations */ "./src/render/sui/scoreViewOperations.ts"); +/* harmony import */ var _render_sui_scoreRender__WEBPACK_IMPORTED_MODULE_103__ = __webpack_require__(/*! ../render/sui/scoreRender */ "./src/render/sui/scoreRender.ts"); +/* harmony import */ var _render_sui_layoutDebug__WEBPACK_IMPORTED_MODULE_104__ = __webpack_require__(/*! ../render/sui/layoutDebug */ "./src/render/sui/layoutDebug.ts"); +/* harmony import */ var _render_sui_mapper__WEBPACK_IMPORTED_MODULE_105__ = __webpack_require__(/*! ../render/sui/mapper */ "./src/render/sui/mapper.ts"); +/* harmony import */ var _render_sui_scroller__WEBPACK_IMPORTED_MODULE_106__ = __webpack_require__(/*! ../render/sui/scroller */ "./src/render/sui/scroller.ts"); +/* harmony import */ var _render_sui_svgHelpers__WEBPACK_IMPORTED_MODULE_107__ = __webpack_require__(/*! ../render/sui/svgHelpers */ "./src/render/sui/svgHelpers.ts"); +/* harmony import */ var _render_audio_player__WEBPACK_IMPORTED_MODULE_108__ = __webpack_require__(/*! ../render/audio/player */ "./src/render/audio/player.ts"); +/* harmony import */ var _render_audio_oscillator__WEBPACK_IMPORTED_MODULE_109__ = __webpack_require__(/*! ../render/audio/oscillator */ "./src/render/audio/oscillator.ts"); +/* harmony import */ var _render_audio_samples__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(/*! ../render/audio/samples */ "./src/render/audio/samples.ts"); +/* harmony import */ var _smo_data_score__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(/*! ../smo/data/score */ "./src/smo/data/score.ts"); +/* harmony import */ var _smo_xform_undo__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(/*! ../smo/xform/undo */ "./src/smo/xform/undo.ts"); +/* harmony import */ var _smo_data_note__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(/*! ../smo/data/note */ "./src/smo/data/note.ts"); +/* harmony import */ var _tests_file_load__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(/*! ../../tests/file-load */ "./tests/file-load.ts"); +/* harmony import */ var _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(/*! ../smo/data/staffModifiers */ "./src/smo/data/staffModifiers.ts"); +/* harmony import */ var _smo_data_measure__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(/*! ../smo/data/measure */ "./src/smo/data/measure.ts"); +/* harmony import */ var _smo_data_music__WEBPACK_IMPORTED_MODULE_117__ = __webpack_require__(/*! ../smo/data/music */ "./src/smo/data/music.ts"); +/* harmony import */ var _smo_xform_selections__WEBPACK_IMPORTED_MODULE_118__ = __webpack_require__(/*! ../smo/xform/selections */ "./src/smo/xform/selections.ts"); +/* harmony import */ var _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_119__ = __webpack_require__(/*! ../smo/data/noteModifiers */ "./src/smo/data/noteModifiers.ts"); +/* harmony import */ var _smo_data_systemStaff__WEBPACK_IMPORTED_MODULE_120__ = __webpack_require__(/*! ../smo/data/systemStaff */ "./src/smo/data/systemStaff.ts"); +/* harmony import */ var _smo_data_scoreModifiers__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(/*! ../smo/data/scoreModifiers */ "./src/smo/data/scoreModifiers.ts"); +/* harmony import */ var _smo_data_scoreText__WEBPACK_IMPORTED_MODULE_122__ = __webpack_require__(/*! ../smo/data/scoreText */ "./src/smo/data/scoreText.ts"); +/* harmony import */ var _smo_xform_operations__WEBPACK_IMPORTED_MODULE_123__ = __webpack_require__(/*! ../smo/xform/operations */ "./src/smo/xform/operations.ts"); +/* harmony import */ var _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(/*! ../smo/data/measureModifiers */ "./src/smo/data/measureModifiers.ts"); +/* harmony import */ var _smo_mxml_smoToXml__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(/*! ../smo/mxml/smoToXml */ "./src/smo/mxml/smoToXml.ts"); +/* harmony import */ var _smo_midi_midiToSmo__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(/*! ../smo/midi/midiToSmo */ "./src/smo/midi/midiToSmo.ts"); +/* harmony import */ var _smo_midi_smoToMidi__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(/*! ../smo/midi/smoToMidi */ "./src/smo/midi/smoToMidi.ts"); +/* harmony import */ var _smo_mxml_xmlToSmo__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(/*! ../smo/mxml/xmlToSmo */ "./src/smo/mxml/xmlToSmo.ts"); +/* harmony import */ var _render_vex_toVex__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(/*! ../render/vex/toVex */ "./src/render/vex/toVex.ts"); +/* harmony import */ var _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(/*! ../common/htmlHelpers */ "./src/common/htmlHelpers.ts"); +/* harmony import */ var _generateVexTests__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(/*! ./generateVexTests */ "./src/application/generateVexTests.ts"); +/* harmony import */ var _ui_dialogs_durations__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(/*! ../ui/dialogs/durations */ "./src/ui/dialogs/durations.ts"); +/* harmony import */ var _ui_dialogs_pitch__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(/*! ../ui/dialogs/pitch */ "./src/ui/dialogs/pitch.ts"); // Smoosic relies on dynamic creation of almost everything. This class exports all the symbols // that need to be created via reflection. // ui application components @@ -99711,7 +103338,6 @@ __webpack_require__.r(__webpack_exports__); - // Language strings @@ -99739,6 +103365,13 @@ __webpack_require__.r(__webpack_exports__); + + + + + + + @@ -99765,6 +103398,8 @@ __webpack_require__.r(__webpack_exports__); + + // menus @@ -99782,6 +103417,9 @@ __webpack_require__.r(__webpack_exports__); + + + // render library @@ -99798,7 +103436,7 @@ __webpack_require__.r(__webpack_exports__); - +// import { SmoDuration } from '../smo/xform/tickDuration'; @@ -99819,97 +103457,108 @@ __webpack_require__.r(__webpack_exports__); // utilities + + const getClass = (jsonString) => { return eval('Smo.' + jsonString); }; const Smo = { // Application-level classes - SmoConfiguration: _configuration__WEBPACK_IMPORTED_MODULE_24__.SmoConfiguration, + SmoConfiguration: _configuration__WEBPACK_IMPORTED_MODULE_23__.SmoConfiguration, SuiApplication: _application__WEBPACK_IMPORTED_MODULE_2__.SuiApplication, SuiDom: _dom__WEBPACK_IMPORTED_MODULE_7__.SuiDom, SuiEventHandler: _eventHandler__WEBPACK_IMPORTED_MODULE_3__.SuiEventHandler, SuiExceptionHandler: _ui_exceptions__WEBPACK_IMPORTED_MODULE_4__.SuiExceptionHandler, - Qwerty: _ui_qwerty__WEBPACK_IMPORTED_MODULE_5__.Qwerty, SuiHelp: _ui_help__WEBPACK_IMPORTED_MODULE_8__.SuiHelp, SmoTranslationEditor: _ui_i18n_translationEditor__WEBPACK_IMPORTED_MODULE_23__.SmoTranslationEditor, SimpleEventHandler: _common__WEBPACK_IMPORTED_MODULE_27__.SimpleEventHandler, ModalEventHandler: _common__WEBPACK_IMPORTED_MODULE_27__.ModalEventHandler, + Qwerty: _ui_qwerty__WEBPACK_IMPORTED_MODULE_5__.Qwerty, SuiHelp: _ui_help__WEBPACK_IMPORTED_MODULE_8__.SuiHelp, SmoTranslationEditor: _ui_i18n_translationEditor__WEBPACK_IMPORTED_MODULE_22__.SmoTranslationEditor, ModalEventHandler: _common__WEBPACK_IMPORTED_MODULE_26__.ModalEventHandler, // Ribbon buttons - simpleRibbonLayout: _ui_ribbonLayout_default_tabletRibbon__WEBPACK_IMPORTED_MODULE_26__.simpleRibbonLayout, - RibbonButtons: _ui_buttons_ribbon__WEBPACK_IMPORTED_MODULE_25__.RibbonButtons, NoteButtons: _ui_buttons_note__WEBPACK_IMPORTED_MODULE_18__.NoteButtons, TextButtons: _ui_buttons_text__WEBPACK_IMPORTED_MODULE_21__.TextButtons, ChordButtons: _ui_buttons_chord__WEBPACK_IMPORTED_MODULE_11__.ChordButtons, MicrotoneButtons: _ui_buttons_microtone__WEBPACK_IMPORTED_MODULE_16__.MicrotoneButtons, - StaveButtons: _ui_buttons_stave__WEBPACK_IMPORTED_MODULE_20__.StaveButtons, BeamButtons: _ui_buttons_beam__WEBPACK_IMPORTED_MODULE_10__.BeamButtons, MeasureButtons: _ui_buttons_measure__WEBPACK_IMPORTED_MODULE_15__.MeasureButtons, DurationButtons: _ui_buttons_duration__WEBPACK_IMPORTED_MODULE_14__.DurationButtons, - VoiceButtons: _ui_buttons_voice__WEBPACK_IMPORTED_MODULE_22__.VoiceButtons, PlayerButtons: _ui_buttons_player__WEBPACK_IMPORTED_MODULE_19__.PlayerButtons, ArticulationButtons: _ui_buttons_articulation__WEBPACK_IMPORTED_MODULE_9__.ArticulationButtons, NavigationButtons: _ui_buttons_navigation__WEBPACK_IMPORTED_MODULE_17__.NavigationButtons, + simpleRibbonLayout: _ui_ribbonLayout_default_tabletRibbon__WEBPACK_IMPORTED_MODULE_25__.simpleRibbonLayout, + RibbonButtons: _ui_buttons_ribbon__WEBPACK_IMPORTED_MODULE_24__.RibbonButtons, NoteButtons: _ui_buttons_note__WEBPACK_IMPORTED_MODULE_17__.NoteButtons, TextButtons: _ui_buttons_text__WEBPACK_IMPORTED_MODULE_20__.TextButtons, ChordButtons: _ui_buttons_chord__WEBPACK_IMPORTED_MODULE_11__.ChordButtons, + StaveButtons: _ui_buttons_stave__WEBPACK_IMPORTED_MODULE_19__.StaveButtons, BeamButtons: _ui_buttons_beam__WEBPACK_IMPORTED_MODULE_10__.BeamButtons, MeasureButtons: _ui_buttons_measure__WEBPACK_IMPORTED_MODULE_15__.MeasureButtons, DurationButtons: _ui_buttons_duration__WEBPACK_IMPORTED_MODULE_14__.DurationButtons, + VoiceButtons: _ui_buttons_voice__WEBPACK_IMPORTED_MODULE_21__.VoiceButtons, PlayerButtons: _ui_buttons_player__WEBPACK_IMPORTED_MODULE_18__.PlayerButtons, ArticulationButtons: _ui_buttons_articulation__WEBPACK_IMPORTED_MODULE_9__.ArticulationButtons, NavigationButtons: _ui_buttons_navigation__WEBPACK_IMPORTED_MODULE_16__.NavigationButtons, DisplaySettings: _ui_buttons_display__WEBPACK_IMPORTED_MODULE_13__.DisplaySettings, ExtendedCollapseParent: _ui_buttons_collapsable__WEBPACK_IMPORTED_MODULE_12__.ExtendedCollapseParent, CollapseRibbonControl: _ui_buttons_collapsable__WEBPACK_IMPORTED_MODULE_12__.CollapseRibbonControl, // Menus - SuiMenuManager: _ui_menus_manager__WEBPACK_IMPORTED_MODULE_74__.SuiMenuManager, SuiMenuBase: _ui_menus_menu__WEBPACK_IMPORTED_MODULE_75__.SuiMenuBase, SuiScoreMenu: _ui_menus_score__WEBPACK_IMPORTED_MODULE_76__.SuiScoreMenu, SuiFileMenu: _ui_menus_file__WEBPACK_IMPORTED_MODULE_83__.SuiFileMenu, - SuiDynamicsMenu: _ui_menus_dynamics__WEBPACK_IMPORTED_MODULE_79__.SuiDynamicsMenu, SuiTimeSignatureMenu: _ui_menus_timeSignature__WEBPACK_IMPORTED_MODULE_80__.SuiTimeSignatureMenu, SuiKeySignatureMenu: _ui_menus_keySignature__WEBPACK_IMPORTED_MODULE_81__.SuiKeySignatureMenu, SuiStaffModifierMenu: _ui_menus_staffModifier__WEBPACK_IMPORTED_MODULE_82__.SuiStaffModifierMenu, - SuiLanguageMenu: _ui_menus_language__WEBPACK_IMPORTED_MODULE_84__.SuiLanguageMenu, SuiMeasureMenu: _ui_menus_measure__WEBPACK_IMPORTED_MODULE_86__.SuiMeasureMenu, SuiNoteMenu: _ui_menus_note__WEBPACK_IMPORTED_MODULE_87__.SuiNoteMenu, SmoLanguage: _ui_i18n_language__WEBPACK_IMPORTED_MODULE_85__.SmoLanguage, SmoTranslator: _ui_i18n_language__WEBPACK_IMPORTED_MODULE_85__.SmoTranslator, SuiPartMenu: _ui_menus_parts__WEBPACK_IMPORTED_MODULE_77__.SuiPartMenu, - SuiPartSelectionMenu: _ui_menus_partSelection__WEBPACK_IMPORTED_MODULE_78__.SuiPartSelectionMenu, + SuiMenuManager: _ui_menus_manager__WEBPACK_IMPORTED_MODULE_82__.SuiMenuManager, SuiMenuBase: _ui_menus_menu__WEBPACK_IMPORTED_MODULE_83__.SuiMenuBase, SuiScoreMenu: _ui_menus_score__WEBPACK_IMPORTED_MODULE_84__.SuiScoreMenu, SuiFileMenu: _ui_menus_file__WEBPACK_IMPORTED_MODULE_94__.SuiFileMenu, + SuiDynamicsMenu: _ui_menus_dynamics__WEBPACK_IMPORTED_MODULE_90__.SuiDynamicsMenu, SuiTimeSignatureMenu: _ui_menus_timeSignature__WEBPACK_IMPORTED_MODULE_91__.SuiTimeSignatureMenu, SuiKeySignatureMenu: _ui_menus_keySignature__WEBPACK_IMPORTED_MODULE_92__.SuiKeySignatureMenu, SuiStaffModifierMenu: _ui_menus_staffModifier__WEBPACK_IMPORTED_MODULE_93__.SuiStaffModifierMenu, + SuiLanguageMenu: _ui_menus_language__WEBPACK_IMPORTED_MODULE_95__.SuiLanguageMenu, SuiMeasureMenu: _ui_menus_measure__WEBPACK_IMPORTED_MODULE_97__.SuiMeasureMenu, SuiNoteMenu: _ui_menus_note__WEBPACK_IMPORTED_MODULE_98__.SuiNoteMenu, SmoLanguage: _ui_i18n_language__WEBPACK_IMPORTED_MODULE_96__.SmoLanguage, SmoTranslator: _ui_i18n_language__WEBPACK_IMPORTED_MODULE_96__.SmoTranslator, SuiPartMenu: _ui_menus_parts__WEBPACK_IMPORTED_MODULE_86__.SuiPartMenu, + SuiPartSelectionMenu: _ui_menus_partSelection__WEBPACK_IMPORTED_MODULE_89__.SuiPartSelectionMenu, SuiTextMenu: _ui_menus_text__WEBPACK_IMPORTED_MODULE_85__.SuiTextMenu, SuiVoiceMenu: _ui_menus_voices__WEBPACK_IMPORTED_MODULE_87__.SuiVoiceMenu, SuiBeamMenu: _ui_menus_beams__WEBPACK_IMPORTED_MODULE_88__.SuiBeamMenu, // Dialogs - SuiTempoDialog: _ui_dialogs_tempo__WEBPACK_IMPORTED_MODULE_36__.SuiTempoDialog, SuiInstrumentDialog: _ui_dialogs_instrument__WEBPACK_IMPORTED_MODULE_34__.SuiInstrumentDialog, SuiModifierDialogFactory: _ui_dialogs_factory__WEBPACK_IMPORTED_MODULE_30__.SuiModifierDialogFactory, SuiLibraryDialog: _ui_dialogs_library__WEBPACK_IMPORTED_MODULE_44__.SuiLibraryDialog, - SuiTextBracketDialog: _ui_dialogs_textBracket__WEBPACK_IMPORTED_MODULE_40__.SuiTextBracketDialog, - SuiScoreViewDialog: _ui_dialogs_scoreView__WEBPACK_IMPORTED_MODULE_43__.SuiScoreViewDialog, SuiGlobalLayoutDialog: _ui_dialogs_globalLayout__WEBPACK_IMPORTED_MODULE_42__.SuiGlobalLayoutDialog, SuiScoreIdentificationDialog: _ui_dialogs_scoreId__WEBPACK_IMPORTED_MODULE_37__.SuiScoreIdentificationDialog, SuiTransposeScoreAdapter: _ui_dialogs_transposeScore__WEBPACK_IMPORTED_MODULE_31__.SuiTransposeScoreAdapter, + SuiGraceNoteAdapter: _ui_dialogs_gracenote__WEBPACK_IMPORTED_MODULE_29__.SuiGraceNoteAdapter, SuiGraceNoteDialog: _ui_dialogs_gracenote__WEBPACK_IMPORTED_MODULE_29__.SuiGraceNoteDialog, SuiGraceNoteButtonsComponent: _ui_dialogs_gracenote__WEBPACK_IMPORTED_MODULE_29__.SuiGraceNoteButtonsComponent, + SuiDurationAdapter: _ui_dialogs_durations__WEBPACK_IMPORTED_MODULE_132__.SuiDurationAdapter, SuiDurationDialog: _ui_dialogs_durations__WEBPACK_IMPORTED_MODULE_132__.SuiDurationDialog, SuiDurationButtonComponent: _ui_dialogs_durations__WEBPACK_IMPORTED_MODULE_132__.SuiDurationButtonComponent, + SuiTempoDialog: _ui_dialogs_tempo__WEBPACK_IMPORTED_MODULE_36__.SuiTempoDialog, SuiInstrumentDialog: _ui_dialogs_instrument__WEBPACK_IMPORTED_MODULE_34__.SuiInstrumentDialog, SuiModifierDialogFactory: _ui_dialogs_factory__WEBPACK_IMPORTED_MODULE_30__.SuiModifierDialogFactory, SuiLibraryDialog: _ui_dialogs_library__WEBPACK_IMPORTED_MODULE_46__.SuiLibraryDialog, + SuiTextBracketDialog: _ui_dialogs_textBracket__WEBPACK_IMPORTED_MODULE_42__.SuiTextBracketDialog, SuiKeySignatureDialog: _ui_dialogs_keySignature__WEBPACK_IMPORTED_MODULE_80__.SuiKeySignatureDialog, SuiKeySignatureAdapter: _ui_dialogs_keySignature__WEBPACK_IMPORTED_MODULE_80__.SuiKeySignatureAdapter, + SuiScoreViewDialog: _ui_dialogs_scoreView__WEBPACK_IMPORTED_MODULE_45__.SuiScoreViewDialog, SuiGlobalLayoutDialog: _ui_dialogs_globalLayout__WEBPACK_IMPORTED_MODULE_44__.SuiGlobalLayoutDialog, SuiScoreIdentificationDialog: _ui_dialogs_scoreId__WEBPACK_IMPORTED_MODULE_39__.SuiScoreIdentificationDialog, SuiTransposeScoreAdapter: _ui_dialogs_transposeScore__WEBPACK_IMPORTED_MODULE_31__.SuiTransposeScoreAdapter, SuiTransposeScoreDialog: _ui_dialogs_transposeScore__WEBPACK_IMPORTED_MODULE_31__.SuiTransposeScoreDialog, - SuiScoreFontDialog: _ui_dialogs_fonts__WEBPACK_IMPORTED_MODULE_41__.SuiScoreFontDialog, SuiPageLayoutDialog: _ui_dialogs_pageLayout__WEBPACK_IMPORTED_MODULE_39__.SuiPageLayoutDialog, SuiMeasureDialog: _ui_dialogs_measureFormat__WEBPACK_IMPORTED_MODULE_32__.SuiMeasureDialog, SuiInsertMeasures: _ui_dialogs_addMeasure__WEBPACK_IMPORTED_MODULE_33__.SuiInsertMeasures, - SuiTimeSignatureDialog: _ui_dialogs_timeSignature__WEBPACK_IMPORTED_MODULE_35__.SuiTimeSignatureDialog, SuiTextBlockDialog: _ui_dialogs_textBlock__WEBPACK_IMPORTED_MODULE_47__.SuiTextBlockDialog, SuiLyricDialog: _ui_dialogs_lyric__WEBPACK_IMPORTED_MODULE_46__.SuiLyricDialog, SuiChordChangeDialog: _ui_dialogs_chordChange__WEBPACK_IMPORTED_MODULE_45__.SuiChordChangeDialog, - SuiSlurAttributesDialog: _ui_dialogs_slur__WEBPACK_IMPORTED_MODULE_49__.SuiSlurAttributesDialog, SuiTieAttributesDialog: _ui_dialogs_tie__WEBPACK_IMPORTED_MODULE_50__.SuiTieAttributesDialog, SuiVoltaAttributeDialog: _ui_dialogs_volta__WEBPACK_IMPORTED_MODULE_51__.SuiVoltaAttributeDialog, - SuiHairpinAttributesDialog: _ui_dialogs_hairpin__WEBPACK_IMPORTED_MODULE_52__.SuiHairpinAttributesDialog, SuiStaffGroupDialog: _ui_dialogs_staffGroup__WEBPACK_IMPORTED_MODULE_53__.SuiStaffGroupDialog, helpModal: _ui_dialogs_textBlock__WEBPACK_IMPORTED_MODULE_47__.helpModal, - SuiLoadFileDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_57__.SuiLoadFileDialog, SuiLoadMxmlDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_57__.SuiLoadMxmlDialog, SuiScorePreferencesDialog: _ui_dialogs_preferences__WEBPACK_IMPORTED_MODULE_38__.SuiScorePreferencesDialog, - SuiPartInfoDialog: _ui_dialogs_partInfo__WEBPACK_IMPORTED_MODULE_56__.SuiPartInfoDialog, + SuiScoreFontDialog: _ui_dialogs_fonts__WEBPACK_IMPORTED_MODULE_43__.SuiScoreFontDialog, SuiPageLayoutDialog: _ui_dialogs_pageLayout__WEBPACK_IMPORTED_MODULE_41__.SuiPageLayoutDialog, SuiMeasureDialog: _ui_dialogs_measureFormat__WEBPACK_IMPORTED_MODULE_32__.SuiMeasureDialog, SuiInsertMeasures: _ui_dialogs_addMeasure__WEBPACK_IMPORTED_MODULE_33__.SuiInsertMeasures, + SuiTimeSignatureDialog: _ui_dialogs_timeSignature__WEBPACK_IMPORTED_MODULE_35__.SuiTimeSignatureDialog, SuiTextBlockDialog: _ui_dialogs_textBlock__WEBPACK_IMPORTED_MODULE_49__.SuiTextBlockDialog, SuiLyricDialog: _ui_dialogs_lyric__WEBPACK_IMPORTED_MODULE_48__.SuiLyricDialog, SuiChordChangeDialog: _ui_dialogs_chordChange__WEBPACK_IMPORTED_MODULE_47__.SuiChordChangeDialog, + SuiSlurAttributesDialog: _ui_dialogs_slur__WEBPACK_IMPORTED_MODULE_51__.SuiSlurAttributesDialog, SuiPedalMarkingDialog: _ui_dialogs_pedalMarking__WEBPACK_IMPORTED_MODULE_52__.SuiPedalMarkingDialog, SuiTieAttributesDialog: _ui_dialogs_tie__WEBPACK_IMPORTED_MODULE_53__.SuiTieAttributesDialog, SuiVoltaAttributeDialog: _ui_dialogs_volta__WEBPACK_IMPORTED_MODULE_54__.SuiVoltaAttributeDialog, + SuiHairpinAttributesDialog: _ui_dialogs_hairpin__WEBPACK_IMPORTED_MODULE_55__.SuiHairpinAttributesDialog, SuiStaffGroupDialog: _ui_dialogs_staffGroup__WEBPACK_IMPORTED_MODULE_56__.SuiStaffGroupDialog, helpModal: _ui_dialogs_textBlock__WEBPACK_IMPORTED_MODULE_49__.helpModal, + SuiLoadFileDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_63__.SuiLoadFileDialog, SuiLoadMxmlDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_63__.SuiLoadMxmlDialog, SuiScorePreferencesDialog: _ui_dialogs_preferences__WEBPACK_IMPORTED_MODULE_40__.SuiScorePreferencesDialog, + SuiPartInfoDialog: _ui_dialogs_partInfo__WEBPACK_IMPORTED_MODULE_62__.SuiPartInfoDialog, SuiOrnamentDialog: _ui_dialogs_ornament__WEBPACK_IMPORTED_MODULE_57__.SuiOrnamentDialog, SuiOrnamentButtonComponent: _ui_dialogs_ornament__WEBPACK_IMPORTED_MODULE_57__.SuiOrnamentButtonComponent, + SuiArticulationDialog: _ui_dialogs_articulation__WEBPACK_IMPORTED_MODULE_58__.SuiArticulationDialog, SuiArticulationButtonComponent: _ui_dialogs_articulation__WEBPACK_IMPORTED_MODULE_58__.SuiArticulationButtonComponent, SuiArticulationAdapter: _ui_dialogs_articulation__WEBPACK_IMPORTED_MODULE_58__.SuiArticulationAdapter, + SuiMicrotoneAdapter: _ui_dialogs_microtones__WEBPACK_IMPORTED_MODULE_59__.SuiMicrotoneAdapter, SuiMicrotoneButtonComponent: _ui_dialogs_microtones__WEBPACK_IMPORTED_MODULE_59__.SuiMicrotoneButtonComponent, SuiMicrotoneDialog: _ui_dialogs_microtones__WEBPACK_IMPORTED_MODULE_59__.SuiMicrotoneDialog, + SuiNoteHeadAdapter: _ui_dialogs_noteHead__WEBPACK_IMPORTED_MODULE_37__.SuiNoteHeadAdapter, SuiNoteHeadDialog: _ui_dialogs_noteHead__WEBPACK_IMPORTED_MODULE_37__.SuiNoteHeadDialog, SuiStemButtonComponent: _ui_dialogs_noteHead__WEBPACK_IMPORTED_MODULE_37__.SuiStemButtonComponent, SuiNoteHeadButtonComponent: _ui_dialogs_noteHead__WEBPACK_IMPORTED_MODULE_37__.SuiNoteHeadButtonComponent, + SuiEndingsAdapter: _ui_dialogs_endings__WEBPACK_IMPORTED_MODULE_38__.SuiEndingsAdapter, SuiEndingsDialog: _ui_dialogs_endings__WEBPACK_IMPORTED_MODULE_38__.SuiEndingsDialog, + SuiEndBarButtonComponent: _ui_dialogs_endings__WEBPACK_IMPORTED_MODULE_38__.SuiEndBarButtonComponent, SuiStartBarButtonComponent: _ui_dialogs_endings__WEBPACK_IMPORTED_MODULE_38__.SuiStartBarButtonComponent, SuiRepeatSymbolButtonComponent: _ui_dialogs_endings__WEBPACK_IMPORTED_MODULE_38__.SuiRepeatSymbolButtonComponent, /* SuiLoadActionsDialog, SuiSaveActionsDialog, */ - SuiPrintFileDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_57__.SuiPrintFileDialog, SuiSaveFileDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_57__.SuiSaveFileDialog, SuiSaveXmlDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_57__.SuiSaveXmlDialog, SuiSaveVexDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_57__.SuiSaveVexDialog, - SuiSaveMidiDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_57__.SuiSaveMidiDialog, SuiDialogBase: _ui_dialogs_dialog__WEBPACK_IMPORTED_MODULE_29__.SuiDialogBase, + SuiPrintFileDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_63__.SuiPrintFileDialog, SuiSaveFileDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_63__.SuiSaveFileDialog, SuiSaveXmlDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_63__.SuiSaveXmlDialog, SuiSaveVexDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_63__.SuiSaveVexDialog, + SuiSaveMidiDialog: _ui_dialogs_fileDialogs__WEBPACK_IMPORTED_MODULE_63__.SuiSaveMidiDialog, SuiDialogBase: _ui_dialogs_dialog__WEBPACK_IMPORTED_MODULE_28__.SuiDialogBase, + SuiPitchDialog: _ui_dialogs_pitch__WEBPACK_IMPORTED_MODULE_133__.SuiPitchDialog, SuiPitchAdapter: _ui_dialogs_pitch__WEBPACK_IMPORTED_MODULE_133__.SuiPitchAdapter, SuiIntervalButtonComponent: _ui_dialogs_pitch__WEBPACK_IMPORTED_MODULE_133__.SuiIntervalButtonComponent, SuiLetterButtonComponent: _ui_dialogs_pitch__WEBPACK_IMPORTED_MODULE_133__.SuiLetterButtonComponent, + SuiTransposeButtonComponent: _ui_dialogs_pitch__WEBPACK_IMPORTED_MODULE_133__.SuiTransposeButtonComponent, // Dialog components - SuiTreeComponent: _ui_dialogs_components_tree__WEBPACK_IMPORTED_MODULE_66__.SuiTreeComponent, - SuiDropdownComponent: _ui_dialogs_components_dropdown__WEBPACK_IMPORTED_MODULE_59__.SuiDropdownComponent, - SuiRockerComponent: _ui_dialogs_components_rocker__WEBPACK_IMPORTED_MODULE_63__.SuiRockerComponent, SuiFileDownloadComponent: _ui_dialogs_components_fileDownload__WEBPACK_IMPORTED_MODULE_62__.SuiFileDownloadComponent, - SuiToggleComponent: _ui_dialogs_components_toggle__WEBPACK_IMPORTED_MODULE_61__.SuiToggleComponent, SuiButtonComponent: _ui_dialogs_components_button__WEBPACK_IMPORTED_MODULE_60__.SuiButtonComponent, SuiDropdownComposite: _ui_dialogs_components_dropdown__WEBPACK_IMPORTED_MODULE_59__.SuiDropdownComposite, - SuiToggleComposite: _ui_dialogs_components_toggle__WEBPACK_IMPORTED_MODULE_61__.SuiToggleComposite, SuiButtonComposite: _ui_dialogs_components_button__WEBPACK_IMPORTED_MODULE_60__.SuiButtonComposite, SuiRockerComposite: _ui_dialogs_components_rocker__WEBPACK_IMPORTED_MODULE_63__.SuiRockerComposite, SuiTextInputComposite: _ui_dialogs_components_textInput__WEBPACK_IMPORTED_MODULE_58__.SuiTextInputComposite, - SuiFontComponent: _ui_dialogs_components_fontComponent__WEBPACK_IMPORTED_MODULE_64__.SuiFontComponent, SuiTextInPlace: _ui_dialogs_components_textInPlace__WEBPACK_IMPORTED_MODULE_65__.SuiTextInPlace, SuiLyricComponent: _ui_dialogs_components_noteText__WEBPACK_IMPORTED_MODULE_68__.SuiLyricComponent, SuiChordComponent: _ui_dialogs_components_noteText__WEBPACK_IMPORTED_MODULE_68__.SuiChordComponent, SuiDragText: _ui_dialogs_components_dragText__WEBPACK_IMPORTED_MODULE_69__.SuiDragText, - SuiNoteTextComponent: _ui_dialogs_components_noteText__WEBPACK_IMPORTED_MODULE_68__.SuiNoteTextComponent, SuiTextBlockComponent: _ui_dialogs_components_textInPlace__WEBPACK_IMPORTED_MODULE_65__.SuiTextBlockComponent, SuiTextInputComponent: _ui_dialogs_components_textInput__WEBPACK_IMPORTED_MODULE_58__.SuiTextInputComponent, - SuiDynamicModifierDialog: _ui_dialogs_dynamics__WEBPACK_IMPORTED_MODULE_48__.SuiDynamicModifierDialog, CheckboxDropdownComponent: _ui_dialogs_components_checkdrop__WEBPACK_IMPORTED_MODULE_70__.CheckboxDropdownComponent, TieMappingComponent: _ui_dialogs_components_tie__WEBPACK_IMPORTED_MODULE_71__.TieMappingComponent, StaffAddRemoveComponent: _ui_dialogs_components_staffComponents__WEBPACK_IMPORTED_MODULE_72__.StaffAddRemoveComponent, - StaffCheckComponent: _ui_dialogs_components_staffComponents__WEBPACK_IMPORTED_MODULE_72__.StaffCheckComponent, TextCheckComponent: _ui_dialogs_components_textCheck__WEBPACK_IMPORTED_MODULE_73__.TextCheckComponent, SuiArpeggioDialog: _ui_dialogs_arpeggio__WEBPACK_IMPORTED_MODULE_54__.SuiArpeggioDialog, SuiClefChangeDialog: _ui_dialogs_clefChange__WEBPACK_IMPORTED_MODULE_55__.SuiClefChangeDialog, - SuiPitchArrayComponent: _ui_dialogs_components_pitch__WEBPACK_IMPORTED_MODULE_67__.SuiPitchArrayComponent, SuiPitchArrayComponentTab: _ui_dialogs_components_pitch__WEBPACK_IMPORTED_MODULE_67__.SuiPitchArrayComponentTab, SuiPitchComponent: _ui_dialogs_components_pitch__WEBPACK_IMPORTED_MODULE_67__.SuiPitchComponent, - SuiPitchComposite: _ui_dialogs_components_pitch__WEBPACK_IMPORTED_MODULE_67__.SuiPitchComposite, - SuiXhrLoader: _ui_fileio_xhrLoader__WEBPACK_IMPORTED_MODULE_88__.SuiXhrLoader, PromiseHelpers: _common_promiseHelpers__WEBPACK_IMPORTED_MODULE_89__.PromiseHelpers, + SuiTreeComponent: _ui_dialogs_components_tree__WEBPACK_IMPORTED_MODULE_73__.SuiTreeComponent, + SuiDropdownComponent: _ui_dialogs_components_dropdown__WEBPACK_IMPORTED_MODULE_65__.SuiDropdownComponent, + SuiRockerComponent: _ui_dialogs_components_rocker__WEBPACK_IMPORTED_MODULE_70__.SuiRockerComponent, SuiFileDownloadComponent: _ui_dialogs_components_fileDownload__WEBPACK_IMPORTED_MODULE_69__.SuiFileDownloadComponent, SuiButtonArrayComponent: _ui_dialogs_components_buttonArray__WEBPACK_IMPORTED_MODULE_67__.SuiButtonArrayComponent, SuiButtonArrayMSComponent: _ui_dialogs_components_buttonArray__WEBPACK_IMPORTED_MODULE_67__.SuiButtonArrayMSComponent, + SuiToggleComponent: _ui_dialogs_components_toggle__WEBPACK_IMPORTED_MODULE_68__.SuiToggleComponent, SuiButtonComponent: _ui_dialogs_components_button__WEBPACK_IMPORTED_MODULE_66__.SuiButtonComponent, SuiDropdownComposite: _ui_dialogs_components_dropdown__WEBPACK_IMPORTED_MODULE_65__.SuiDropdownComposite, + SuiToggleComposite: _ui_dialogs_components_toggle__WEBPACK_IMPORTED_MODULE_68__.SuiToggleComposite, SuiButtonComposite: _ui_dialogs_components_button__WEBPACK_IMPORTED_MODULE_66__.SuiButtonComposite, SuiRockerComposite: _ui_dialogs_components_rocker__WEBPACK_IMPORTED_MODULE_70__.SuiRockerComposite, SuiTextInputComposite: _ui_dialogs_components_textInput__WEBPACK_IMPORTED_MODULE_64__.SuiTextInputComposite, + SuiFontComponent: _ui_dialogs_components_fontComponent__WEBPACK_IMPORTED_MODULE_71__.SuiFontComponent, SuiTextInPlace: _ui_dialogs_components_textInPlace__WEBPACK_IMPORTED_MODULE_72__.SuiTextInPlace, SuiLyricComponent: _ui_dialogs_components_noteText__WEBPACK_IMPORTED_MODULE_75__.SuiLyricComponent, SuiChordComponent: _ui_dialogs_components_noteText__WEBPACK_IMPORTED_MODULE_75__.SuiChordComponent, SuiDragText: _ui_dialogs_components_dragText__WEBPACK_IMPORTED_MODULE_76__.SuiDragText, + SuiNoteTextComponent: _ui_dialogs_components_noteText__WEBPACK_IMPORTED_MODULE_75__.SuiNoteTextComponent, SuiTextBlockComponent: _ui_dialogs_components_textInPlace__WEBPACK_IMPORTED_MODULE_72__.SuiTextBlockComponent, SuiTextInputComponent: _ui_dialogs_components_textInput__WEBPACK_IMPORTED_MODULE_64__.SuiTextInputComponent, SuiReadOnlyTextComponent: _ui_dialogs_components_textInput__WEBPACK_IMPORTED_MODULE_64__.SuiReadOnlyTextComponent, + SuiDynamicModifierDialog: _ui_dialogs_dynamics__WEBPACK_IMPORTED_MODULE_50__.SuiDynamicModifierDialog, CheckboxDropdownComponent: _ui_dialogs_components_checkdrop__WEBPACK_IMPORTED_MODULE_77__.CheckboxDropdownComponent, TieMappingComponent: _ui_dialogs_components_tie__WEBPACK_IMPORTED_MODULE_78__.TieMappingComponent, StaffAddRemoveComponent: _ui_dialogs_components_staffComponents__WEBPACK_IMPORTED_MODULE_79__.StaffAddRemoveComponent, + StaffCheckComponent: _ui_dialogs_components_staffComponents__WEBPACK_IMPORTED_MODULE_79__.StaffCheckComponent, TextCheckComponent: _ui_dialogs_components_textCheck__WEBPACK_IMPORTED_MODULE_81__.TextCheckComponent, SuiArpeggioDialog: _ui_dialogs_arpeggio__WEBPACK_IMPORTED_MODULE_60__.SuiArpeggioDialog, SuiClefChangeDialog: _ui_dialogs_clefChange__WEBPACK_IMPORTED_MODULE_61__.SuiClefChangeDialog, + SuiPitchArrayComponent: _ui_dialogs_components_pitch__WEBPACK_IMPORTED_MODULE_74__.SuiPitchArrayComponent, SuiPitchArrayComponentTab: _ui_dialogs_components_pitch__WEBPACK_IMPORTED_MODULE_74__.SuiPitchArrayComponentTab, SuiPitchComponent: _ui_dialogs_components_pitch__WEBPACK_IMPORTED_MODULE_74__.SuiPitchComponent, + SuiPitchComposite: _ui_dialogs_components_pitch__WEBPACK_IMPORTED_MODULE_74__.SuiPitchComposite, + SuiXhrLoader: _ui_fileio_xhrLoader__WEBPACK_IMPORTED_MODULE_99__.SuiXhrLoader, PromiseHelpers: _common_promiseHelpers__WEBPACK_IMPORTED_MODULE_100__.PromiseHelpers, // Rendering components - SuiPiano: _render_sui_piano__WEBPACK_IMPORTED_MODULE_6__.SuiPiano, layoutDebug: _render_sui_layoutDebug__WEBPACK_IMPORTED_MODULE_93__.layoutDebug, SuiScoreView: _render_sui_scoreView__WEBPACK_IMPORTED_MODULE_90__.SuiScoreView, SuiScroller: _render_sui_scroller__WEBPACK_IMPORTED_MODULE_95__.SuiScroller, SvgHelpers: _render_sui_svgHelpers__WEBPACK_IMPORTED_MODULE_96__.SvgHelpers, SuiMapper: _render_sui_mapper__WEBPACK_IMPORTED_MODULE_94__.SuiMapper, SuiScoreRender: _render_sui_scoreRender__WEBPACK_IMPORTED_MODULE_92__.SuiScoreRender, - SuiScoreViewOperations: _render_sui_scoreViewOperations__WEBPACK_IMPORTED_MODULE_91__.SuiScoreViewOperations, TextFormatter: _common_textformatter__WEBPACK_IMPORTED_MODULE_0__.TextFormatter, VexFlow: _common_vex__WEBPACK_IMPORTED_MODULE_1__.VexFlow, + SuiPiano: _render_sui_piano__WEBPACK_IMPORTED_MODULE_6__.SuiPiano, layoutDebug: _render_sui_layoutDebug__WEBPACK_IMPORTED_MODULE_104__.layoutDebug, SuiScoreView: _render_sui_scoreView__WEBPACK_IMPORTED_MODULE_101__.SuiScoreView, SuiScroller: _render_sui_scroller__WEBPACK_IMPORTED_MODULE_106__.SuiScroller, SvgHelpers: _render_sui_svgHelpers__WEBPACK_IMPORTED_MODULE_107__.SvgHelpers, SuiMapper: _render_sui_mapper__WEBPACK_IMPORTED_MODULE_105__.SuiMapper, SuiScoreRender: _render_sui_scoreRender__WEBPACK_IMPORTED_MODULE_103__.SuiScoreRender, + SuiScoreViewOperations: _render_sui_scoreViewOperations__WEBPACK_IMPORTED_MODULE_102__.SuiScoreViewOperations, TextFormatter: _common_textformatter__WEBPACK_IMPORTED_MODULE_0__.TextFormatter, VexFlow: _common_vex__WEBPACK_IMPORTED_MODULE_1__.VexFlow, // Audio components - SuiAudioPlayer: _render_audio_player__WEBPACK_IMPORTED_MODULE_97__.SuiAudioPlayer, SuiOscillator: _render_audio_oscillator__WEBPACK_IMPORTED_MODULE_98__.SuiOscillator, SuiSampleMedia: _render_audio_samples__WEBPACK_IMPORTED_MODULE_99__.SuiSampleMedia, SuiSampler: _render_audio_oscillator__WEBPACK_IMPORTED_MODULE_98__.SuiSampler, SuiReverb: _render_audio_oscillator__WEBPACK_IMPORTED_MODULE_98__.SuiReverb, + SuiAudioPlayer: _render_audio_player__WEBPACK_IMPORTED_MODULE_108__.SuiAudioPlayer, SuiOscillator: _render_audio_oscillator__WEBPACK_IMPORTED_MODULE_109__.SuiOscillator, SuiSampleMedia: _render_audio_samples__WEBPACK_IMPORTED_MODULE_110__.SuiSampleMedia, SuiSampler: _render_audio_oscillator__WEBPACK_IMPORTED_MODULE_109__.SuiSampler, SuiReverb: _render_audio_oscillator__WEBPACK_IMPORTED_MODULE_109__.SuiReverb, // Smo Music Objects - SmoScore: _smo_data_score__WEBPACK_IMPORTED_MODULE_100__.SmoScore, - SmoScorePreferences: _smo_data_scoreModifiers__WEBPACK_IMPORTED_MODULE_111__.SmoScorePreferences, - engravingFontTypes: _smo_data_score__WEBPACK_IMPORTED_MODULE_100__.engravingFontTypes, isEngravingFont: _smo_data_score__WEBPACK_IMPORTED_MODULE_100__.isEngravingFont, - XmlToSmo: _smo_mxml_xmlToSmo__WEBPACK_IMPORTED_MODULE_118__.XmlToSmo, - SmoToXml: _smo_mxml_smoToXml__WEBPACK_IMPORTED_MODULE_115__.SmoToXml, - MidiToSmo: _smo_midi_midiToSmo__WEBPACK_IMPORTED_MODULE_116__.MidiToSmo, - SmoToMidi: _smo_midi_smoToMidi__WEBPACK_IMPORTED_MODULE_117__.SmoToMidi, - SmoMusic: _smo_data_music__WEBPACK_IMPORTED_MODULE_107__.SmoMusic, - SmoAudioPitch: _smo_data_music__WEBPACK_IMPORTED_MODULE_107__.SmoAudioPitch, - SmoMeasure: _smo_data_measure__WEBPACK_IMPORTED_MODULE_106__.SmoMeasure, - SmoSystemStaff: _smo_data_systemStaff__WEBPACK_IMPORTED_MODULE_110__.SmoSystemStaff, - SmoNote: _smo_data_note__WEBPACK_IMPORTED_MODULE_102__.SmoNote, + SmoScore: _smo_data_score__WEBPACK_IMPORTED_MODULE_111__.SmoScore, + SmoScorePreferences: _smo_data_scoreModifiers__WEBPACK_IMPORTED_MODULE_121__.SmoScorePreferences, + engravingFontTypes: _smo_data_score__WEBPACK_IMPORTED_MODULE_111__.engravingFontTypes, isEngravingFont: _smo_data_score__WEBPACK_IMPORTED_MODULE_111__.isEngravingFont, + XmlToSmo: _smo_mxml_xmlToSmo__WEBPACK_IMPORTED_MODULE_128__.XmlToSmo, + SmoToXml: _smo_mxml_smoToXml__WEBPACK_IMPORTED_MODULE_125__.SmoToXml, + MidiToSmo: _smo_midi_midiToSmo__WEBPACK_IMPORTED_MODULE_126__.MidiToSmo, + SmoToMidi: _smo_midi_smoToMidi__WEBPACK_IMPORTED_MODULE_127__.SmoToMidi, + SmoMusic: _smo_data_music__WEBPACK_IMPORTED_MODULE_117__.SmoMusic, + SmoAudioPitch: _smo_data_music__WEBPACK_IMPORTED_MODULE_117__.SmoAudioPitch, + SmoMeasure: _smo_data_measure__WEBPACK_IMPORTED_MODULE_116__.SmoMeasure, + SmoSystemStaff: _smo_data_systemStaff__WEBPACK_IMPORTED_MODULE_120__.SmoSystemStaff, + SmoNote: _smo_data_note__WEBPACK_IMPORTED_MODULE_113__.SmoNote, // staff modifier - SmoStaffHairpin: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_105__.SmoStaffHairpin, StaffModifierBase: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_105__.StaffModifierBase, - SmoStaffTextBracket: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_105__.SmoStaffTextBracket, - SmoInstrument: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_105__.SmoInstrument, SmoSlur: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_105__.SmoSlur, SmoTie: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_105__.SmoTie, SmoTabStave: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_105__.SmoTabStave, + SmoStaffHairpin: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_115__.SmoStaffHairpin, StaffModifierBase: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_115__.StaffModifierBase, + SmoStaffTextBracket: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_115__.SmoStaffTextBracket, + SmoInstrument: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_115__.SmoInstrument, SmoSlur: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_115__.SmoSlur, SmoPedalMarking: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_115__.SmoPedalMarking, SmoTie: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_115__.SmoTie, SmoTabStave: _smo_data_staffModifiers__WEBPACK_IMPORTED_MODULE_115__.SmoTabStave, // score modifiers - SmoSystemGroup: _smo_data_scoreModifiers__WEBPACK_IMPORTED_MODULE_111__.SmoSystemGroup, SmoAudioPlayerSettings: _smo_data_scoreModifiers__WEBPACK_IMPORTED_MODULE_111__.SmoAudioPlayerSettings, SmoTextGroup: _smo_data_scoreText__WEBPACK_IMPORTED_MODULE_112__.SmoTextGroup, + SmoSystemGroup: _smo_data_scoreModifiers__WEBPACK_IMPORTED_MODULE_121__.SmoSystemGroup, SmoAudioPlayerSettings: _smo_data_scoreModifiers__WEBPACK_IMPORTED_MODULE_121__.SmoAudioPlayerSettings, SmoTextGroup: _smo_data_scoreText__WEBPACK_IMPORTED_MODULE_122__.SmoTextGroup, // measure modifiers - SmoRehearsalMark: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_114__.SmoRehearsalMark, SmoMeasureFormat: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_114__.SmoMeasureFormat, SmoBarline: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_114__.SmoBarline, SmoRepeatSymbol: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_114__.SmoRepeatSymbol, - SmoVolta: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_114__.SmoVolta, SmoMeasureText: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_114__.SmoMeasureText, SmoTempoText: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_114__.SmoTempoText, TimeSignature: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_114__.TimeSignature, + SmoRehearsalMark: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_124__.SmoRehearsalMark, SmoMeasureFormat: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_124__.SmoMeasureFormat, SmoBarline: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_124__.SmoBarline, SmoRepeatSymbol: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_124__.SmoRepeatSymbol, + SmoVolta: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_124__.SmoVolta, SmoMeasureText: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_124__.SmoMeasureText, SmoTempoText: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_124__.SmoTempoText, TimeSignature: _smo_data_measureModifiers__WEBPACK_IMPORTED_MODULE_124__.TimeSignature, // note modifiers - SmoOrnament: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_109__.SmoOrnament, - SmoArticulation: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_109__.SmoArticulation, SmoDynamicText: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_109__.SmoDynamicText, SmoGraceNote: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_109__.SmoGraceNote, SmoMicrotone: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_109__.SmoMicrotone, SmoLyric: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_109__.SmoLyric, SmoArpeggio: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_109__.SmoArpeggio, SmoClefChange: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_109__.SmoClefChange, + SmoOrnament: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_119__.SmoOrnament, + SmoArticulation: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_119__.SmoArticulation, SmoDynamicText: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_119__.SmoDynamicText, SmoGraceNote: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_119__.SmoGraceNote, SmoMicrotone: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_119__.SmoMicrotone, SmoLyric: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_119__.SmoLyric, SmoArpeggio: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_119__.SmoArpeggio, SmoClefChange: _smo_data_noteModifiers__WEBPACK_IMPORTED_MODULE_119__.SmoClefChange, // Smo Transformers - SmoSelection: _smo_xform_selections__WEBPACK_IMPORTED_MODULE_108__.SmoSelection, SmoSelector: _smo_xform_selections__WEBPACK_IMPORTED_MODULE_108__.SmoSelector, SmoDuration: _smo_xform_tickDuration__WEBPACK_IMPORTED_MODULE_103__.SmoDuration, UndoBuffer: _smo_xform_undo__WEBPACK_IMPORTED_MODULE_101__.UndoBuffer, SmoToVex: _render_vex_toVex__WEBPACK_IMPORTED_MODULE_119__.SmoToVex, SmoOperation: _smo_xform_operations__WEBPACK_IMPORTED_MODULE_113__.SmoOperation, + SmoSelection: _smo_xform_selections__WEBPACK_IMPORTED_MODULE_118__.SmoSelection, SmoSelector: _smo_xform_selections__WEBPACK_IMPORTED_MODULE_118__.SmoSelector, /*SmoDuration,*/ UndoBuffer: _smo_xform_undo__WEBPACK_IMPORTED_MODULE_112__.UndoBuffer, SmoToVex: _render_vex_toVex__WEBPACK_IMPORTED_MODULE_129__.SmoToVex, SmoOperation: _smo_xform_operations__WEBPACK_IMPORTED_MODULE_123__.SmoOperation, // new score bootstrap // help strings - cardKeysHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardKeysHtmlEn, cardNotesLetterHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardNotesChordsHtmlEn, - cardNotesRestsHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardNotesRestsHtmlEn, cardDurationNotesHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardDurationTupletsHtmlEn, - cardSelectionsNotesHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardSelectionsSlashHtmlEn, - cardBeamsAndStemsDirectionHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardBeamsAndStemsGroupingHtmlEn, - cardMeasuresAddDeleteHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_28__.cardPartAddDeleteHtmlEn, + cardKeysHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardKeysHtmlEn, cardNotesLetterHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardNotesChordsHtmlEn, + cardNotesRestsHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardNotesRestsHtmlEn, cardDurationNotesHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardDurationTupletsHtmlEn, + cardSelectionsNotesHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardSelectionsSlashHtmlEn, + cardBeamsAndStemsDirectionHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardBeamsAndStemsGroupingHtmlEn, + cardMeasuresAddDeleteHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn: _ui_i18n_language_en__WEBPACK_IMPORTED_MODULE_27__.cardPartAddDeleteHtmlEn, getClass, - createLoadTests: _tests_file_load__WEBPACK_IMPORTED_MODULE_104__.createLoadTests, + createLoadTests: _tests_file_load__WEBPACK_IMPORTED_MODULE_114__.createLoadTests, // utilities - buildDom: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_120__.buildDom, addFileLink: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_120__.addFileLink, InputTrapper: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_120__.InputTrapper, draggable: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_120__.draggable, closeDialogPromise: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_120__.closeDialogPromise, getDomContainer: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_120__.getDomContainer, createTopDomContainer: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_120__.createTopDomContainer, - renderVexTests: _generateVexTests__WEBPACK_IMPORTED_MODULE_121__.renderVexTests + buildDom: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_130__.buildDom, addFileLink: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_130__.addFileLink, InputTrapper: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_130__.InputTrapper, draggable: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_130__.draggable, closeDialogPromise: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_130__.closeDialogPromise, getDomContainer: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_130__.getDomContainer, createTopDomContainer: _common_htmlHelpers__WEBPACK_IMPORTED_MODULE_130__.createTopDomContainer, + renderVexTests: _generateVexTests__WEBPACK_IMPORTED_MODULE_131__.renderVexTests }; /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Smo); diff --git a/release/smoosic.js.map b/release/smoosic.js.map index 66a0e8dc..60547bd6 100644 --- a/release/smoosic.js.map +++ b/release/smoosic.js.map @@ -1 +1 @@ -{"version":3,"file":"smoosic.js","mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAm+CjC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACn+CI,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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AmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,+BAAmB;AACrF,+DAA+D,+BAAmB;AAClF,kEAAkE,+BAAmB;AACrF,+DAA+D,+BAAmB;AAClF,gEAAgE,+BAAmB;AACnF,mEAAmE,+BAAmB;AACtF,8DAA8D,+BAAmB;AACjF;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAiD;AAChF;AACA;AACA,+BAA+B,sCAAsC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wCAAwC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH,KAAK;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yIAAyI;AACzI,0IAA0I;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,KAAK;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8EAA8E,qCAAqC,IAAI;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,iEAAiE,gCAAmB;AACpF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,uEAAuE,gCAAmB;AAC1F,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kEAAkE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,gCAAmB;AAClF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA,oHAAoH,gBAAgB;AACpI;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,EAAE,OAAO,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,gCAAmB;AACjF,sEAAsE,gCAAmB;AACzF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA,sBAAsB;AACtB,iEAAiE,gCAAmB;AACpF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,gEAAgE,gCAAmB;AACnF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wBAAwB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD,oDAAoD,IAAI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC,oDAAoD,IAAI;AACjH;AACA;AACA;AACA,0BAA0B;AAC1B,kCAAkC;AAClC;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAqD,8CAA8C,IAAI;AACvH;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,2EAA2E;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAgC;AAC7D;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;;;AAIjC,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,uEAAuE,iCAAmB;AAC1F,8DAA8D,iCAAmB;AACjF,6DAA6D,iCAAmB;AAChF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,+DAA+D,iCAAmB;AAClF,kEAAkE,iCAAmB;AACrF,gEAAgE,iCAAmB;AACnF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AACrE;AACA;AACA;AACA;AACA,CAAC,gEAAgE;AACjE;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mBAAmB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA,sCAAsC,qCAAqC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,yBAAyB;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iEAAiE,iBAAiB,kBAAkB;AACpG;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,iCAAmB;AAClF,uEAAuE,iCAAmB;AAC1F,gEAAgE,iCAAmB;AACnF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2HAA2H,UAAU;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,UAAU,eAAe,WAAW,GAAG,UAAU;AACzG,2DAA2D,UAAU,eAAe,WAAW,GAAG,UAAU;AAC5G,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,+DAA+D,iCAAmB;AAClF,8DAA8D,iCAAmB;AACjF,mEAAmE,iCAAmB;AACtF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA,kKAAkK,UAAU;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kKAAkK,UAAU;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,qEAAqE,iCAAmB;AACxF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,iCAAmB;AACpF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA,sBAAsB;AACtB,sEAAsE,iCAAmB;AACzF,6DAA6D,iCAAmB;AAChF,wEAAwE,iCAAmB;AAC3F,+DAA+D,iCAAmB;AAClF,gEAAgE,iCAAmB;AACnF,8DAA8D,iCAAmB;AACjF,8DAA8D,iCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA,iFAAiF,UAAU,WAAW,EAAE;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2CAA2C;AAC3C;AACA;AACA,kCAAkC,gBAAgB;AAClD,kCAAkC,6CAA6C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,UAAU;AAClC,2EAA2E,WAAW;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,qDAAqD,uMAAuM,cAAc;AAC1Q,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA,4BAA4B;AAC5B,kCAAkC,oDAAoD;AACtF;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA,kCAAkC,kBAAkB,EAAE,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,kCAAkC;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,8DAA8D,iCAAmB;AACjF,qEAAqE,iCAAmB;AACxF,kEAAkE,iCAAmB;AACrF,+DAA+D,iCAAmB;AAClF,mEAAmE,iCAAmB;AACtF,iEAAiE,iCAAmB;AACpF,oEAAoE,iCAAmB;AACvF,yEAAyE,iCAAmB;AAC5F,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,yEAAyE,iCAAmB;AAC5F,qEAAqE,iCAAmB;AACxF,0EAA0E,iCAAmB;AAC7F,2EAA2E,iCAAmB;AAC9F,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,qEAAqE,iCAAmB;AACxF,gEAAgE,iCAAmB;AACnF,yEAAyE,iCAAmB;AAC5F,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,mEAAmE,iCAAmB;AACtF,uEAAuE,iCAAmB;AAC1F,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,+DAA+D,iCAAmB;AAClF,yEAAyE,iCAAmB;AAC5F,gEAAgE,iCAAmB;AACnF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA,6BAA6B,YAAY,4BAA4B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY,6CAA6C,EAAE;AAC7G;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uLAAuL;AACzN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uEAAuE;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C;AAC9E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY,6CAA6C;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,WAAW;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;;;;AAIpC,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,8DAA8D,iCAAmB;AACjF,8DAA8D,iCAAmB;AACjF,qEAAqE,iCAAmB;AACxF,gFAAgF,iCAAmB;AACnG,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,+DAA+D,iCAAmB;AAClF,mEAAmE,iCAAmB;AACtF,oEAAoE,iCAAmB;AACvF,gEAAgE,iCAAmB;AACnF,8DAA8D,iCAAmB;AACjF,oEAAoE,iCAAmB;AACvF,kEAAkE,iCAAmB;AACrF,kEAAkE,iCAAmB;AACrF,+DAA+D,iCAAmB;AAClF,oEAAoE,iCAAmB;AACvF,mEAAmE,iCAAmB;AACtF,yEAAyE,iCAAmB;AAC5F,oEAAoE,iCAAmB;AACvF,gEAAgE,iCAAmB;AACnF,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,yEAAyE,iCAAmB;AAC5F,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,mEAAmE,iCAAmB;AACtF,0EAA0E,iCAAmB;AAC7F,2EAA2E,iCAAmB;AAC9F,gEAAgE,iCAAmB;AACnF,+DAA+D,iCAAmB;AAClF,mEAAmE,iCAAmB;AACtF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,wEAAwE,iCAAmB;AAC3F,mEAAmE,iCAAmB;AACtF,qEAAqE,iCAAmB;AACxF,gEAAgE,iCAAmB;AACnF,uEAAuE,iCAAmB;AAC1F,yEAAyE,iCAAmB;AAC5F,uEAAuE,iCAAmB;AAC1F,oEAAoE,iCAAmB;AACvF,wEAAwE,iCAAmB;AAC3F,oEAAoE,iCAAmB;AACvF,0EAA0E,iCAAmB;AAC7F,qEAAqE,iCAAmB;AACxF,oEAAoE,iCAAmB;AACvF,mEAAmE,iCAAmB;AACtF,qEAAqE,iCAAmB;AACxF,+DAA+D,iCAAmB;AAClF,uEAAuE,iCAAmB;AAC1F,kEAAkE,iCAAmB;AACrF,qEAAqE,iCAAmB;AACxF,iEAAiE,iCAAmB;AACpF,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,mEAAmE,iCAAmB;AACtF,iEAAiE,iCAAmB;AACpF,sEAAsE,iCAAmB;AACzF,uEAAuE,iCAAmB;AAC1F,wEAAwE,iCAAmB;AAC3F,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,wEAAwE,iCAAmB;AAC3F,sEAAsE,iCAAmB;AACzF,kEAAkE,iCAAmB;AACrF,iEAAiE,iCAAmB;AACpF,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,kEAAkE,iCAAmB;AACrF,yEAAyE,iCAAmB;AAC5F,gEAAgE,iCAAmB;AACnF,iBAAiB,MAAgC;AACjD,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,iBAAiB,MAAgC;AACjD,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,sBAAsB,oBAAoB,EAAE,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,wBAAwB;AACxB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,4BAA4B;AAC5B,0BAA0B;AAC1B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,4BAA4B;AAC5B,iCAAiC;AACjC;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,oBAAoB;AACpB;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,sEAAsE,iCAAmB;AACzF,qEAAqE,iCAAmB;AACxF,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,uEAAuE,iCAAmB;AAC1F;AACA;AACA;AACA;;;;;;AAMA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,wEAAwE,iCAAmB;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,uEAAuE,iCAAmB;AAC1F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,yEAAyE,iCAAmB;AAC5F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,uEAAuE,iCAAmB;AAC1F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,yEAAyE,iCAAmB;AAC5F;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,+EAA+E,kCAAmB;AAClG,2EAA2E,kCAAmB;AAC9F,gFAAgF,kCAAmB;AACnG,2EAA2E,kCAAmB;AAC9F,4EAA4E,kCAAmB;AAC/F;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,yEAAyE,kCAAmB;AAC5F,+DAA+D,kCAAmB;AAClF,wEAAwE,kCAAmB;AAC3F,gEAAgE,kCAAmB;AACnF,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF;AACA;;;;;;;;;;;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAA0B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB,IAAI;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,4GAA4G;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,uCAAuC,SAAS,wCAAwC,OAAO,6BAA6B;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,+EAA+E,kBAAkB;AACjG;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E,6CAA6C,yCAAyC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,+BAA+B;AAC3E;AACA,2DAA2D,+BAA+B;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gDAAgD,mHAAmH;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gBAAgB,8CAA8C;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yCAAyC;AAClF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAA6B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yGAAyG,EAAE,IAAI,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe,GAAG,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,oBAAoB,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa,IAAI;AAC5C;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uFAAuF;AACvF;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,gFAAgF,kCAAmB;AACnG,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,KAAK,GAAG,SAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,SAAS,EAAE,KAAK,EAAE,IAAI;AAC7D,wCAAwC,SAAS,EAAE,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,SAAS,GAAG,KAAK,GAAG,IAAI;AACxE;AACA,sDAAsD,MAAM;AAC5D,gDAAgD,SAAS,GAAG,IAAI;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,yBAAyB;AACzB;AACA,uFAAuF,MAAM;AAC7F;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA,2FAA2F,MAAM;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,WAAW;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8IAA8I;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA,2BAA2B,mDAAmD,GAAG;AACjF;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,sEAAsE,kCAAmB;AACzF,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,qEAAqE,kCAAmB;AACxF,gFAAgF,kCAAmB;AACnG,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,oEAAoE,kCAAmB;AACvF,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF,oEAAoE,kCAAmB;AACvF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,+DAA+D,kCAAmB;AAClF,+DAA+D,kCAAmB;AAClF,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,yEAAyE,kCAAmB;AAC5F,oEAAoE,kCAAmB;AACvF,gEAAgE,kCAAmB;AACnF,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,yEAAyE,kCAAmB;AAC5F,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,0EAA0E,kCAAmB;AAC7F,2EAA2E,kCAAmB;AAC9F,gEAAgE,kCAAmB;AACnF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,sEAAsE,kCAAmB;AACzF,iEAAiE,kCAAmB;AACpF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,wEAAwE,kCAAmB;AAC3F,mEAAmE,kCAAmB;AACtF,qEAAqE,kCAAmB;AACxF,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,yEAAyE,kCAAmB;AAC5F,uEAAuE,kCAAmB;AAC1F,oEAAoE,kCAAmB;AACvF,wEAAwE,kCAAmB;AAC3F,oEAAoE,kCAAmB;AACvF,0EAA0E,kCAAmB;AAC7F,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,wEAAwE,kCAAmB;AAC3F,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,mEAAmE,kCAAmB;AACtF,iEAAiE,kCAAmB;AACpF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,wEAAwE,kCAAmB;AAC3F,mEAAmE,kCAAmB;AACtF,mEAAmE,kCAAmB;AACtF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,wEAAwE,kCAAmB;AAC3F,sEAAsE,kCAAmB;AACzF,kEAAkE,kCAAmB;AACrF,iEAAiE,kCAAmB;AACpF,iEAAiE,kCAAmB;AACpF,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,yEAAyE,kCAAmB;AAC5F,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;;;;;;;;;;;;;;AAqBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;AAQA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,SAAS;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAA4D;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,sEAAsE,kCAAmB;AACzF,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,UAAU;AACtG,iGAAiG,UAAU;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,SAAS;AACT;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,sEAAsE,kCAAmB;AACzF,8DAA8D,kCAAmB;AACjF,qEAAqE,kCAAmB;AACxF,6DAA6D,kCAAmB;AAChF,wEAAwE,kCAAmB;AAC3F,wEAAwE,kCAAmB;AAC3F,sEAAsE,kCAAmB;AACzF,kEAAkE,kCAAmB;AACrF,sEAAsE,kCAAmB;AACzF,oEAAoE,kCAAmB;AACvF,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA,+EAA+E,+BAA+B;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,4fAA4f;AAC1iB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,wBAAwB;AAC1C,oBAAoB,yBAAyB;AAC7C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,4BAA4B;AAC/C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,4BAA4B;AAChD,qBAAqB,4BAA4B;AACjD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,4BAA4B;AAC7C,kBAAkB,4BAA4B;AAC9C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG,UAAU;AAChH;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,WAAW;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,eAAe;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,UAAU;AACvH;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,cAAc;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,UAAU;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,KAAK,IAAI,UAAU;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,KAAK,IAAI,UAAU;AAC/H;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,UAAU;AACtH;AACA;AACA,wGAAwG,MAAM,IAAI,MAAM;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,2BAA2B;AACxJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,sCAAsC;AACtC,uCAAuC;AACvC,0BAA0B;AAC1B,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,8HAA8H;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,MAAM,8EAA8E;AACtI;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,eAAe;AACrD,aAAa;AACb;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,+DAA+D,kCAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,6CAA6C;AAC7C;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU;AACzH;AACA;AACA;AACA;AACA,kCAAkC,mBAAmB;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,cAAc;AACnE,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,0BAA0B;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H,mCAAmC;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H,mCAAmC;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yEAAyE;AACpG;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,6DAA6D,kCAAmB;AAChF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,aAAa;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,0BAA0B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAuH,QAAQ;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,qCAAqC,+CAA+C;AACpF;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,sEAAsE,kCAAmB;AACzF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,yEAAyE,kCAAmB;AAC5F,sEAAsE,kCAAmB;AACzF,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,wEAAwE,kCAAmB;AAC3F,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF;AACA;;;;;;;;;;;;;;;;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uCAAuC,4SAA4S;AACnV,wBAAwB;AACxB,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wJAAwJ;AACvL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,qCAAqC,wBAAwB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8HAA8H,UAAU;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,uBAAuB;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,8HAA8H,IAAI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,kBAAkB,QAAQ;AAC1B;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,cAAc;AAChC;AACA,kBAAkB,cAAc;AAChC,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B,WAAW,IAAI;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iKAAiK;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAmB;AACxF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8OAA8O,kBAAkB;AAChQ;AACA;AACA;AACA;AACA,gPAAgP,mBAAmB;AACnQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kGAAkG,kBAAkB;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oBAAoB,mCAAmC;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,uCAAuC,6GAA6G;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC;;;;AAIrC,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA,4HAA4H,UAAU;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,UAAU;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,qBAAqB;AAC9I;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,4BAA4B;AAC5B,qFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA,yBAAyB;AACzB;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,yBAAyB;AACzB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,4GAA4G,WAAW;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,WAAW;AAC9C;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,gCAAgC,WAAW,GAAG,MAAM;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,wBAAwB;AAC7E;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,sBAAsB;AAC3D,0CAA0C,iFAAiF;AAC3H;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA,wDAAwD,qBAAqB;AAC7E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,IAAI;AAC9E,6BAA6B,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,GAAG;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAe,KAAK,SAAS;AACvE;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,4DAA4D;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,qDAAqD,iLAAiL,cAAc,yBAAyB,YAAY,mDAAmD,0BAA0B;AACtW;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAyD,EAAE;AACpF;AACA;AACA;AACA,yBAAyB;AACzB,yDAAyD,WAAW;AACpE,iDAAiD,aAAa;AAC9D,UAAU,EAAE;AACZ;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D,gGAAgG,wFAAwF;AACxL,gDAAgD,+EAA+E,aAAa,uBAAuB;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+CAA+C;AACnF;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,mJAAmJ,QAAQ;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,QAAQ;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH,KAAK;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,SAAS;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,0BAA0B,6CAA6C;AACvI;AACA;AACA;AACA;AACA;AACA,2DAA2D,kBAAkB,oBAAoB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6CAA6C,KAAK,mDAAmD,GAAG;AAC7H;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC,WAAW,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA,wFAAwF,0BAA0B;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF;;;AAGA;AACA;AACA;AACA;AACA;AACA,4CAA4C,kEAAkE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8EAA8E;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B,kFAAkF;AACxK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,sBAAsB;AACvH;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uJAAuJ,sBAAsB;AAC7K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF,iCAAiC;AACjC;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,mCAAmC;AACnC;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB,0BAA0B;AAC1B,6BAA6B;AAC7B,oCAAoC;AACpC;AACA,yBAAyB;AACzB,0BAA0B;AAC1B,sCAAsC;AACtC,uCAAuC;AACvC,4BAA4B;AAC5B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uHAAuH;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,sEAAsE,kCAAmB;AACzF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA,4GAA4G,SAAS;AACrH;AACA;AACA;AACA;AACA,gHAAgH,SAAS;AACzH;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yBAAyB;AAC7D;AACA,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA,2CAA2C,SAAS;AACpD;AACA,0DAA0D,SAAS;AACnE,uCAAuC,SAAS,cAAc,6EAA6E;AAC3I,wBAAwB,cAAc;AACtC,qGAAqG,0CAA0C;AAC/I;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,aAAa;AAC7H;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,yBAAyB,GAAG,UAAU;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0HAA0H,QAAQ;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iEAAiE,GAAG,OAAO;AAC7F;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4BAA4B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;;AAG7B,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kCAAmB;AAClC,eAAe,kCAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,MAAM,6BAA6B,MAAM;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iGAAiG;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,kCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,kCAAmB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA,gBAAgB,kCAAmB,wBAAwB,kCAAmB;AAC9E,oDAAoD,wCAAwC;AAC5F;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,YAAY;AACZ,WAAW;AACX;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA,kEAAkE,iBAAiB;AACnF;AACA,2DAA2D,aAAa;AACxE;AACA,WAAW;AACX;AACA;AACA,IAAI,0BAAmB;AACvB;AACA;AACA;AACA;AACA;AACA,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,4EAA4E,kCAAmB;AAC/F,6EAA6E,kCAAmB;AAChG,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;;AAEA;;;AAGA,CAAC;;AAED,0BAAmB,GAAG,0BAAmB;AACzC,iBAAiB,0BAAmB;AACpC,UAAU;AACV;AACA,CAAC;AACD;;;;;;UCznnCA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA,+FAA+F;AAC/F,0CAA0C;AAC1C,4BAA4B;AAC5B,oBAAoB;AACoC;AAChB;AACO;AACE;AACM;AACjB;AACS;AAChB;AACM;AAC4B;AAChB;AACE;AACuC;AAClC;AACC;AACF;AACI;AACE;AACZ;AACI;AACF;AACF;AACE;AACiB;AACjB;AACE;AACwB;AACZ;AACjE,mBAAmB;AAMa;AAEhC,uBAAuB;AACvB,UAAU;AAC2C;AACY;AACgC;AAClC;AACF;AACE;AACM;AAChB;AACgB;AACC;AACP;AACE;AACR;AACU;AACN;AAAyD;AACrD;AACZ;AACmB;AACN;AACL;AACF;AACG;AACK;AACJ;AACJ;AACI;AACJ;AAIgB;AACvE,oBAAoB;A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","sources":["webpack://Smo/webpack/universalModuleDefinition","webpack://Smo/./src/application/application.ts","webpack://Smo/./src/application/common.ts","webpack://Smo/./src/application/configuration.ts","webpack://Smo/./src/application/dom.ts","webpack://Smo/./src/application/eventHandler.ts","webpack://Smo/./src/application/generateVexTests.ts","webpack://Smo/./src/application/keyCommands.ts","webpack://Smo/./src/common/htmlHelpers.ts","webpack://Smo/./src/common/midiWriter.js","webpack://Smo/./src/common/promiseHelpers.ts","webpack://Smo/./src/common/serializationHelpers.js","webpack://Smo/./src/common/textformatter.ts","webpack://Smo/./src/common/vex.ts","webpack://Smo/./src/render/audio/musicCursor.ts","webpack://Smo/./src/render/audio/oscillator.ts","webpack://Smo/./src/render/audio/player.ts","webpack://Smo/./src/render/audio/samples.ts","webpack://Smo/./src/render/sui/formatter.ts","webpack://Smo/./src/render/sui/layoutDebug.ts","webpack://Smo/./src/render/sui/mapper.ts","webpack://Smo/./src/render/sui/piano.ts","webpack://Smo/./src/render/sui/renderState.ts","webpack://Smo/./src/render/sui/scoreRender.ts","webpack://Smo/./src/render/sui/scoreView.ts","webpack://Smo/./src/render/sui/scoreViewOperations.ts","webpack://Smo/./src/render/sui/scroller.ts","webpack://Smo/./src/render/sui/svgHelpers.ts","webpack://Smo/./src/render/sui/svgPageMap.ts","webpack://Smo/./src/render/sui/textEdit.ts","webpack://Smo/./src/render/sui/textRender.ts","webpack://Smo/./src/render/sui/tracker.ts","webpack://Smo/./src/render/vex/glyphDimensions.ts","webpack://Smo/./src/render/vex/smoAdapter.ts","webpack://Smo/./src/render/vex/toVex.ts","webpack://Smo/./src/render/vex/vxMeasure.ts","webpack://Smo/./src/render/vex/vxNote.ts","webpack://Smo/./src/render/vex/vxSystem.ts","webpack://Smo/./src/smo/data/common.ts","webpack://Smo/./src/smo/data/measure.ts","webpack://Smo/./src/smo/data/measureModifiers.ts","webpack://Smo/./src/smo/data/music.ts","webpack://Smo/./src/smo/data/note.ts","webpack://Smo/./src/smo/data/noteModifiers.ts","webpack://Smo/./src/smo/data/partInfo.ts","webpack://Smo/./src/smo/data/score.ts","webpack://Smo/./src/smo/data/scoreModifiers.ts","webpack://Smo/./src/smo/data/scoreText.ts","webpack://Smo/./src/smo/data/staffModifiers.ts","webpack://Smo/./src/smo/data/systemStaff.ts","webpack://Smo/./src/smo/data/tuplet.ts","webpack://Smo/./src/smo/midi/midiToSmo.ts","webpack://Smo/./src/smo/midi/smoToMidi.ts","webpack://Smo/./src/smo/mxml/smoToXml.ts","webpack://Smo/./src/smo/mxml/xmlHelpers.ts","webpack://Smo/./src/smo/mxml/xmlState.ts","webpack://Smo/./src/smo/mxml/xmlToSmo.ts","webpack://Smo/./src/smo/xform/audioTrack.ts","webpack://Smo/./src/smo/xform/beamers.ts","webpack://Smo/./src/smo/xform/copypaste.ts","webpack://Smo/./src/smo/xform/operations.ts","webpack://Smo/./src/smo/xform/selections.ts","webpack://Smo/./src/smo/xform/tickDuration.ts","webpack://Smo/./src/smo/xform/tickMap.ts","webpack://Smo/./src/smo/xform/undo.ts","webpack://Smo/./src/styles/font_metrics/Commissioner-Medium-Metrics.js","webpack://Smo/./src/styles/font_metrics/ConcertOne-Regular.js","webpack://Smo/./src/styles/font_metrics/Merriweather-Regular.js","webpack://Smo/./src/styles/font_metrics/arial_metrics.js","webpack://Smo/./src/styles/font_metrics/ssp-sans-metrics.js","webpack://Smo/./src/styles/font_metrics/ssp-serif-metrics.js","webpack://Smo/./src/styles/font_metrics/times_metrics.js","webpack://Smo/./src/ui/buttons/articulation.ts","webpack://Smo/./src/ui/buttons/beam.ts","webpack://Smo/./src/ui/buttons/button.ts","webpack://Smo/./src/ui/buttons/chord.ts","webpack://Smo/./src/ui/buttons/collapsable.ts","webpack://Smo/./src/ui/buttons/display.ts","webpack://Smo/./src/ui/buttons/duration.ts","webpack://Smo/./src/ui/buttons/measure.ts","webpack://Smo/./src/ui/buttons/microtone.ts","webpack://Smo/./src/ui/buttons/navigation.ts","webpack://Smo/./src/ui/buttons/note.ts","webpack://Smo/./src/ui/buttons/player.ts","webpack://Smo/./src/ui/buttons/ribbon.ts","webpack://Smo/./src/ui/buttons/stave.ts","webpack://Smo/./src/ui/buttons/text.ts","webpack://Smo/./src/ui/buttons/voice.ts","webpack://Smo/./src/ui/dialogs/adapter.ts","webpack://Smo/./src/ui/dialogs/addMeasure.ts","webpack://Smo/./src/ui/dialogs/arpeggio.ts","webpack://Smo/./src/ui/dialogs/audioSettings.ts","webpack://Smo/./src/ui/dialogs/chordChange.ts","webpack://Smo/./src/ui/dialogs/clefChange.ts","webpack://Smo/./src/ui/dialogs/components/baseComponent.ts","webpack://Smo/./src/ui/dialogs/components/button.ts","webpack://Smo/./src/ui/dialogs/components/checkdrop.ts","webpack://Smo/./src/ui/dialogs/components/dragText.ts","webpack://Smo/./src/ui/dialogs/components/dropdown.ts","webpack://Smo/./src/ui/dialogs/components/fileDownload.ts","webpack://Smo/./src/ui/dialogs/components/fontComponent.ts","webpack://Smo/./src/ui/dialogs/components/noteText.ts","webpack://Smo/./src/ui/dialogs/components/pitch.ts","webpack://Smo/./src/ui/dialogs/components/rocker.ts","webpack://Smo/./src/ui/dialogs/components/staffComponents.ts","webpack://Smo/./src/ui/dialogs/components/textCheck.ts","webpack://Smo/./src/ui/dialogs/components/textInPlace.ts","webpack://Smo/./src/ui/dialogs/components/textInput.ts","webpack://Smo/./src/ui/dialogs/components/tie.ts","webpack://Smo/./src/ui/dialogs/components/toggle.ts","webpack://Smo/./src/ui/dialogs/components/tree.ts","webpack://Smo/./src/ui/dialogs/dialog.ts","webpack://Smo/./src/ui/dialogs/dynamics.ts","webpack://Smo/./src/ui/dialogs/factory.ts","webpack://Smo/./src/ui/dialogs/fileDialogs.ts","webpack://Smo/./src/ui/dialogs/fonts.ts","webpack://Smo/./src/ui/dialogs/globalLayout.ts","webpack://Smo/./src/ui/dialogs/hairpin.ts","webpack://Smo/./src/ui/dialogs/instrument.ts","webpack://Smo/./src/ui/dialogs/library.ts","webpack://Smo/./src/ui/dialogs/lyric.ts","webpack://Smo/./src/ui/dialogs/measureFormat.ts","webpack://Smo/./src/ui/dialogs/newPart.ts","webpack://Smo/./src/ui/dialogs/pageLayout.ts","webpack://Smo/./src/ui/dialogs/partInfo.ts","webpack://Smo/./src/ui/dialogs/preferences.ts","webpack://Smo/./src/ui/dialogs/scoreId.ts","webpack://Smo/./src/ui/dialogs/scoreView.ts","webpack://Smo/./src/ui/dialogs/slur.ts","webpack://Smo/./src/ui/dialogs/staffGroup.ts","webpack://Smo/./src/ui/dialogs/tabStave.ts","webpack://Smo/./src/ui/dialogs/tempo.ts","webpack://Smo/./src/ui/dialogs/textBlock.ts","webpack://Smo/./src/ui/dialogs/textBracket.ts","webpack://Smo/./src/ui/dialogs/tie.ts","webpack://Smo/./src/ui/dialogs/timeSignature.ts","webpack://Smo/./src/ui/dialogs/transposeScore.ts","webpack://Smo/./src/ui/dialogs/volta.ts","webpack://Smo/./src/ui/eventSource.ts","webpack://Smo/./src/ui/exceptions.ts","webpack://Smo/./src/ui/fileio/fileInput.ts","webpack://Smo/./src/ui/fileio/library.ts","webpack://Smo/./src/ui/fileio/xhrLoader.ts","webpack://Smo/./src/ui/help.ts","webpack://Smo/./src/ui/i18n/language.ts","webpack://Smo/./src/ui/i18n/language_ar.js","webpack://Smo/./src/ui/i18n/language_de.js","webpack://Smo/./src/ui/i18n/language_en.js","webpack://Smo/./src/ui/i18n/translationEditor.ts","webpack://Smo/./src/ui/keyBindings/default/editorKeys.ts","webpack://Smo/./src/ui/keyBindings/default/trackerKeys.ts","webpack://Smo/./src/ui/menus/dynamics.ts","webpack://Smo/./src/ui/menus/file.ts","webpack://Smo/./src/ui/menus/keySignature.ts","webpack://Smo/./src/ui/menus/language.ts","webpack://Smo/./src/ui/menus/manager.ts","webpack://Smo/./src/ui/menus/measure.ts","webpack://Smo/./src/ui/menus/menu.ts","webpack://Smo/./src/ui/menus/note.ts","webpack://Smo/./src/ui/menus/partSelection.ts","webpack://Smo/./src/ui/menus/parts.ts","webpack://Smo/./src/ui/menus/score.ts","webpack://Smo/./src/ui/menus/staffModifier.ts","webpack://Smo/./src/ui/menus/timeSignature.ts","webpack://Smo/./src/ui/qwerty.ts","webpack://Smo/./src/ui/ribbonLayout/default/defaultRibbon.ts","webpack://Smo/./src/ui/ribbonLayout/default/tabletRibbon.ts","webpack://Smo/./tests/file-load.ts","webpack://Smo/./node_modules/vexflow_smoosic/build/cjs/vexflow-debug.js","webpack://Smo/webpack/bootstrap","webpack://Smo/webpack/runtime/compat get default export","webpack://Smo/webpack/runtime/define property getters","webpack://Smo/webpack/runtime/hasOwnProperty shorthand","webpack://Smo/webpack/runtime/make namespace object","webpack://Smo/./src/application/exports.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Smo\"] = factory();\n\telse\n\t\troot[\"Smo\"] = factory();\n})(this, () => {\nreturn ","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../common/serializationHelpers';\r\nimport { _MidiWriter } from '../common/midiWriter';\r\n\r\nimport { SmoConfiguration, SmoConfigurationParams } from './configuration';\r\nimport { SmoScore } from '../smo/data/score';\r\nimport { UndoBuffer } from '../smo/xform/undo';\r\nimport { XmlToSmo } from '../smo/mxml/xmlToSmo';\r\nimport { SuiRenderState } from '../render/sui/renderState';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { SuiOscillator } from '../render/audio/oscillator';\r\nimport { SuiSampleMedia } from '../render/audio/samples';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\n\r\nimport { ArialFont } from '../styles/font_metrics/arial_metrics';\r\nimport { TimesFont } from '../styles/font_metrics/times_metrics';\r\nimport { Commissioner_MediumFont } from '../styles/font_metrics/Commissioner-Medium-Metrics';\r\nimport { Concert_OneFont } from '../styles/font_metrics/ConcertOne-Regular';\r\nimport { MerriweatherFont } from '../styles/font_metrics/Merriweather-Regular';\r\nimport { SourceSansProFont } from '../styles/font_metrics/ssp-sans-metrics';\r\nimport { SourceSerifProFont } from '../styles/font_metrics/ssp-serif-metrics';\r\n\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { SuiMenuManager } from '../ui/menus/manager';\r\nimport { BrowserEventSource } from '../ui/eventSource';\r\nimport { SmoTranslationEditor } from '../ui/i18n/translationEditor';\r\nimport { SmoTranslator } from '../ui/i18n/language';\r\nimport { RibbonButtons } from '../ui/buttons/ribbon';\r\nimport { PromiseHelpers } from '../common/promiseHelpers';\r\nimport { SuiDom } from './dom';\r\nimport { SuiKeyCommands } from './keyCommands';\r\nimport { SuiEventHandler } from './eventHandler';\r\nimport { KeyBinding, ModalEventHandlerProxy } from './common';\r\nimport { SmoMeasure } from '../smo/data/measure';\r\nimport { getDomContainer } from '../common/htmlHelpers';\r\nimport { SuiHelp } from '../ui/help';\r\nimport { VexFlow } from '../common/vex';\r\nimport { TextFormatter } from '../common/textformatter';\r\n\r\ndeclare var $: any;\r\n\r\nexport interface pairType { [key: string]: string }\r\n\r\n/**\r\n * Score renderer instance\r\n * @internal\r\n */\r\nexport interface SuiRendererInstance {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n renderer: SuiRenderState;\r\n}\r\n/**\r\n * Global instance for debugging\r\n */\r\nexport interface SuiInstance {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n tracker: SuiTracker;\r\n keyCommands: SuiKeyCommands;\r\n menus: SuiMenuManager;\r\n eventHandler: SuiEventHandler;\r\n ribbon: RibbonButtons\r\n}\r\nconst VF = VexFlow;\r\n\r\n/**\r\n * Parse query string for application\r\n * @category AppUtil\r\n */\r\nexport class QueryParser {\r\n pairs: pairType[] = [];\r\n queryPair(str: string): pairType {\r\n var i = 0;\r\n const ar = str.split('=');\r\n const rv: pairType = {};\r\n for (i = 0; i < ar.length - 1; i += 2) {\r\n const name = decodeURIComponent(ar[i]);\r\n rv[name] = decodeURIComponent(ar[i + 1]);\r\n }\r\n return rv;\r\n }\r\n constructor() {\r\n let i: number = 0;\r\n if (window.location.search) {\r\n const cmd = window.location.search.substring(1, window.location.search.length);\r\n const cmds = cmd.split('&');\r\n for (i = 0; i < cmds.length; ++i) {\r\n const cmd = cmds[i];\r\n this.pairs.push(this.queryPair(cmd));\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** SuiApplication\r\n * main entry point of application. Based on the configuration,\r\n * either start the default UI, or initialize library mode and\r\n * await further instructions.\r\n * @category SuiApplication\r\n */\r\nexport class SuiApplication {\r\n scoreLibrary: any;\r\n instance: SuiInstance | null = null;\r\n config: SmoConfiguration;\r\n score: SmoScore | null = null;\r\n view: SuiScoreViewOperations | null = null;\r\n domElement: HTMLElement;\r\n static async configure(params: Partial): Promise {\r\n const config: SmoConfiguration = new SmoConfiguration(params);\r\n (window as any).SmoConfig = config;\r\n const application = new SuiApplication(config);\r\n SuiApplication.registerFonts();\r\n return application.initialize();\r\n }\r\n constructor(config: SmoConfiguration) {\r\n this.config = config;\r\n this.domElement = this._getDomContainer();\r\n }\r\n _getDomContainer(): HTMLElement {\r\n const el = getDomContainer(this.config.scoreDomContainer);\r\n if (typeof(el) === 'undefined') {\r\n throw 'scoreDomContainer is a required config parameter';\r\n }\r\n return el;\r\n }\r\n static instance: SuiInstance;\r\n /** \r\n // Different applications can create their own key bindings, these are the defaults.\r\n // Many editor commands can be reached by a single keystroke. For more advanced things there\r\n // are menus.\r\n */\r\n static get keyBindingDefaults(): KeyBinding[] {\r\n var editorKeys = SuiEventHandler.editorKeyBindingDefaults;\r\n editorKeys.forEach((key) => {\r\n key.module = 'keyCommands'\r\n });\r\n var trackerKeys = SuiEventHandler.trackerKeyBindingDefaults;\r\n trackerKeys.forEach((key) => {\r\n key.module = 'tracker'\r\n });\r\n return trackerKeys.concat(editorKeys);\r\n }\r\n /**\r\n * Initialize the library according to instruction in config object:\r\n * 1. Try to load a new score\r\n * 2. If in application mode, start the UI. If in translation mode, start translation\r\n * @returns \r\n */\r\n initialize(): Promise {\r\n const samplePromise: Promise = SuiSampleMedia.samplePromise(SuiOscillator.audio);\r\n\r\n const self = this; \r\n // Hide header at the top of some applications\r\n $('#link-hdr button').off('click').on('click', () => {\r\n $('#link-hdr').addClass('hide');\r\n });\r\n\r\n const createScore = (): Promise => {\r\n return self.createScore();\r\n }\r\n const startApplication = () => {\r\n if (self.config.mode === 'translate') {\r\n self._startApplication();\r\n }\r\n else if (self.config.mode === 'application') {\r\n self._startApplication();\r\n } else { // library mode.\r\n self.createView(self.score!);\r\n }\r\n }\r\n const render = () => {\r\n return self.view?.renderer.renderPromise();\r\n }\r\n const rv = new Promise((resolve: any) => {\r\n samplePromise.then(createScore).then(startApplication).then(render)\r\n .then(\r\n () => {\r\n resolve(self);\r\n });\r\n });\r\n return rv;\r\n }\r\n /**\r\n * Create the initial score we use to populate the UI etc:\r\n * 0. if translation mode, return empty promise, it won't be used anyway\r\n * 1. if remoteScore is set in config, try to load from remote\r\n * 2. if initialScore is set, use that\r\n * 3. if a score is saved locally with quick save (browser local cache), use that\r\n * 4. if all else fails, return an 'empty' score.\r\n * @returns promise for a remote load. If a local load, will resolve immediately\r\n */\r\n async createScore(): Promise {\r\n if (this.config.mode === 'translate') {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n if (this.config.remoteScore) {\r\n const loader = new SuiXhrLoader(this.config.remoteScore);\r\n const file = await loader.loadAsync();\r\n this.score = this._tryParse(file as string);\r\n return this.score;\r\n } else if (this.config.initialScore) {\r\n if (typeof(this.config.initialScore) === 'string') {\r\n this.score = this._tryParse(this.config.initialScore);\r\n return (this.score);\r\n } else {\r\n this.score = this.config.initialScore;\r\n return null;\r\n }\r\n } else {\r\n const localScore = localStorage.getItem(smoSerialize.localScore);\r\n if (localScore) {\r\n this.score = this._tryParse(localScore);\r\n } else {\r\n this.score = SmoScore.getDefaultScore(SmoScore.defaults, null);\r\n if (this.config.mode === 'application') {\r\n SuiHelp.displayHelp();\r\n }\r\n }\r\n }\r\n return this.score;\r\n }\r\n _tryParse(scoreJson: string) {\r\n try {\r\n if (scoreJson[0] === '<') {\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(scoreJson, 'text/xml');\r\n return XmlToSmo.convert(xml);\r\n }\r\n return SmoScore.deserialize(scoreJson);\r\n } catch (exp) {\r\n console.warn('could not parse score');\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n }\r\n _startApplication() {\r\n // Initialize the midi writer library\r\n _MidiWriter();\r\n const queryString = new QueryParser();\r\n const languageSelect = queryString.pairs.find((x) => x['language']) ?? {'language': 'en'}\r\n if (this.config.mode === 'translate') {\r\n this._deferCreateTranslator();\r\n return;\r\n }\r\n if (languageSelect) {\r\n SuiApplication._deferLanguageSelection(languageSelect.language);\r\n }\r\n this.createUi();\r\n }\r\n createView(score: SmoScore): SuiRendererInstance | null {\r\n let sdc: HTMLElement = this.domElement;\r\n const svgContainer = document.createElement('div');\r\n $(svgContainer).attr('id', 'boo').addClass('musicContainer');\r\n $(sdc).append(svgContainer);\r\n const undoBuffer = new UndoBuffer();\r\n const view = new SuiScoreViewOperations(this.config, svgContainer, score, sdc as HTMLElement, undoBuffer);\r\n const eventSource = new BrowserEventSource();\r\n eventSource.setRenderElement(svgContainer);\r\n this.view = view;\r\n view.startRenderingEngine();\r\n return {\r\n view, eventSource, undoBuffer, renderer: view.renderer\r\n };\r\n }\r\n /**\r\n * Convenience constructor, take the score and render it in the\r\n * configured rendering space.\r\n */\r\n createUi() {\r\n const viewObj: SuiRendererInstance | null = this.createView(this.score!);\r\n if (!viewObj) {\r\n return;\r\n }\r\n const view = this.view!;\r\n const tracker = view.tracker;\r\n const eventSource = new BrowserEventSource(); // events come from the browser UI.\r\n const undoBuffer = viewObj.undoBuffer;\r\n const completeNotifier = new ModalEventHandlerProxy(eventSource);\r\n const menus = new SuiMenuManager({\r\n view, eventSource, completeNotifier, undoBuffer\r\n });\r\n const ribbon = new RibbonButtons({\r\n config: this.config,\r\n ribbons: this.config.ribbonLayout,\r\n ribbonButtons: this.config.buttonDefinition,\r\n menus: menus,\r\n completeNotifier,\r\n view: view,\r\n eventSource: eventSource,\r\n tracker: view.tracker\r\n });\r\n const keyCommands = new SuiKeyCommands ({\r\n view, slashMode: true, completeNotifier, tracker, eventSource\r\n });\r\n const eventHandler = new SuiEventHandler({\r\n view, eventSource, tracker, keyCommands, menus, completeNotifier,\r\n keyBindings: SuiApplication.keyBindingDefaults, config: this.config\r\n });\r\n this.instance = {\r\n view, eventSource, eventHandler, undoBuffer,\r\n tracker, ribbon, keyCommands, menus\r\n }\r\n SuiApplication.instance = this.instance;\r\n completeNotifier.handler = eventHandler;\r\n eventSource.setRenderElement(view.renderer.elementId);\r\n // eslint-disable-next-line\r\n SuiApplication.instance = this.instance;\r\n ribbon.display();\r\n SuiDom.splash(this.config);\r\n }\r\n static async loadMusicFont(face: string, url: string) {\r\n const new_font = new FontFace('Bravura', `url(${url})`);\r\n const loadedFace = await new_font.load();\r\n document.fonts.add(loadedFace); \r\n }\r\n static async registerFonts() {\r\n TextFormatter.registerInfo({\r\n name: ArialFont.name,\r\n resolution: ArialFont.resolution,\r\n glyphs: ArialFont.glyphs,\r\n family: ArialFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: true,\r\n bold: true,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Built-in sans font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: TimesFont.name,\r\n resolution: TimesFont.resolution,\r\n glyphs: TimesFont.glyphs,\r\n family: TimesFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: true,\r\n bold: true,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Built-in serif font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: Commissioner_MediumFont.name,\r\n resolution: Commissioner_MediumFont.resolution,\r\n glyphs: Commissioner_MediumFont.glyphs,\r\n family: Commissioner_MediumFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Low-contrast sans-serif text font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: Concert_OneFont.name,\r\n resolution: Concert_OneFont.resolution,\r\n glyphs: Concert_OneFont.glyphs,\r\n family: Concert_OneFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Rounded grotesque typeface inspired by 19th century 3D l',\r\n });\r\n TextFormatter.registerInfo({\r\n name: MerriweatherFont.name,\r\n resolution: MerriweatherFont.resolution,\r\n glyphs: MerriweatherFont.glyphs,\r\n family: MerriweatherFont.fontFamily,\r\n serifs: true,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Serif screen font from Sorkin Type',\r\n });\r\n TextFormatter.registerInfo({\r\n name: SourceSansProFont.name,\r\n resolution: SourceSansProFont.resolution,\r\n glyphs: SourceSansProFont.glyphs,\r\n family: SourceSansProFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Open source Sans screen font from Adobe',\r\n });\r\n TextFormatter.registerInfo({\r\n name: SourceSerifProFont.name,\r\n resolution: SourceSerifProFont.resolution,\r\n glyphs: SourceSerifProFont.glyphs,\r\n family: SourceSerifProFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Open source Serif screen font from Adobe',\r\n });\r\n await SuiApplication.loadMusicFont('Bravura', '../styles/fonts/Bravura_1.392.woff');\r\n // await SuiApplication.loadMusicFont('Bravura', '../styles/fonts/Bravura_1.392.woff');\r\n }\r\n _deferCreateTranslator() {\r\n SuiDom.createUiDom(this.config.scoreDomContainer);\r\n setTimeout(() => {\r\n SmoTranslationEditor.startEditor(this.config.language);\r\n }, 1);\r\n }\r\n\r\n static _deferLanguageSelection(lang: string) {\r\n setTimeout(() => {\r\n SmoTranslator.setLanguage(lang);\r\n }, 1);\r\n }\r\n}\r\n","import { SuiScoreViewOperations } from \"../render/sui/scoreViewOperations\";\r\nimport { SuiTracker } from \"../render/sui/tracker\";\r\nimport { CompleteNotifier } from \"../ui/common\";\r\nimport { ModalComponent } from \"../ui/common\";\r\nimport { BrowserEventSource, EventHandler } from \"../ui/eventSource\";\r\n\r\n/**\r\n * A binding of a key to some action performed by a module\r\n */\r\nexport interface KeyBinding {\r\n event: string,\r\n key: string,\r\n ctrlKey: boolean,\r\n altKey: boolean,\r\n shiftKey: boolean,\r\n action: string,\r\n module?: string\r\n}\r\n\r\n/**\r\n * parameters for the key handlers\r\n * @param view\r\n * @param slashMode indicates that the dreaded 'slash' menus are up\r\n * @param completeNotifier notified when modals close\r\n * @param tracker\r\n * @param eventSource register for event handlers\r\n * @category SuiApplication\r\n */\r\nexport interface KeyCommandParams {\r\n view: SuiScoreViewOperations;\r\n slashMode: boolean;\r\n completeNotifier: CompleteNotifier;\r\n tracker: SuiTracker;\r\n eventSource: BrowserEventSource;\r\n}\r\n\r\n/**\r\n * Shared interface for menus, dialogs, etc that can \r\n * accept UI events\r\n * @category SuiUiBase\r\n */\r\nexport abstract class ModalEventHandler {\r\n abstract mouseMove(ev: any): void;\r\n abstract mouseClick(ev: any): void;\r\n abstract evKey(evdata: any): void;\r\n}\r\nexport type handler = (ev: any) => void;\r\nexport class SimpleEventHandler extends ModalEventHandler {\r\n mouseMoveHandler: handler;;\r\n mouseClickHandler: handler;\r\n evKeyHandler: handler;\r\n constructor(mouseMove: handler, mouseClick: handler, keyHandler: handler) {\r\n super();\r\n this.mouseMoveHandler = mouseMove;\r\n this.mouseClickHandler = mouseClick;\r\n this.evKeyHandler = keyHandler;\r\n }\r\n mouseMove(ev: any) {\r\n this.mouseMove(ev);\r\n }\r\n mouseClick(ev: any) {\r\n this.mouseClick(ev);\r\n }\r\n evKey(ev: any) {\r\n this.evKeyHandler(ev);\r\n }\r\n}\r\n\r\n/**\r\n * Dependency injection, sends events to a proxy object, gets around some \r\n * cyclic dependencies when bootstrapping the application.\r\n * @category AppUtil\r\n */\r\nexport class ModalEventHandlerProxy {\r\n _handler: ModalEventHandler | null = null;\r\n eventSource: BrowserEventSource;\r\n unbound: boolean = true;\r\n keydownHandler: EventHandler | null = null;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n constructor(evSource: BrowserEventSource) {\r\n this.eventSource = evSource;\r\n this.bindEvents();\r\n }\r\n set handler(value: ModalEventHandler) {\r\n this._handler = value;\r\n this.unbound = false;\r\n }\r\n evKey(ev: any) {\r\n if (this._handler) {\r\n this._handler.evKey(ev);\r\n }\r\n }\r\n mouseMove(ev: any) {\r\n if (this._handler) {\r\n this._handler.mouseMove(ev);\r\n }\r\n }\r\n mouseClick(ev: any) {\r\n if (this._handler) {\r\n this._handler.mouseClick(ev);\r\n }\r\n }\r\n bindEvents() {\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n }\r\n\r\n unbindKeyboardForModal(dialog: ModalComponent) {\r\n if (this.unbound) {\r\n console.log('received duplicate bind event');\r\n return;\r\n }\r\n if (!this.keydownHandler || !this.mouseMoveHandler || !this.mouseClickHandler) {\r\n console.log('received bind with no handlers');\r\n return;\r\n }\r\n this.unbound = true;\r\n const rebind = () => {\r\n this.unbound = false;\r\n this.bindEvents();\r\n }\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler!);\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler!);\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler!);\r\n dialog.closeModalPromise.then(rebind);\r\n }\r\n}","// application/configuration.ts\r\n/**\r\n * Superset of configuration required to initialize Smoosic, either the appliation or library.\r\n * @module configuration\r\n */\r\nimport { SmoRenderConfiguration } from \"../render/sui/configuration\";\r\nimport { SmoScore } from \"../smo/data/score\";\r\nimport { ModalEventHandler } from \"./common\";\r\nimport { KeyBindingConfiguration, SmoUiConfiguration } from \"../ui/configuration\";\r\nimport { defaultEditorKeys } from \"../ui/keyBindings/default/editorKeys\";\r\nimport { defaultTrackerKeys } from \"../ui/keyBindings/default/trackerKeys\";\r\nimport { RibbonLayout } from \"../ui/common\";\r\nimport { ButtonDefinition } from \"../ui/buttons/button\";\r\nimport { defaultRibbonLayout } from '../ui/ribbonLayout/default/defaultRibbon';\r\nimport { SuiAudioAnimationParams, defaultAudioAnimationHandler, defaultClearAudioAnimationHandler, AudioAnimationHandler, ClearAudioAnimationHandler } \r\n from \"../render/audio/musicCursor\";\r\n\r\nexport type SmoMode = 'library' | 'application' | 'translate';\r\nexport type ConfigurationStringOption = 'language' | 'libraryUrl' | 'remoteScore';\r\n\r\nexport type ConfigurationNumberOption = 'demonPollTime' | 'idleRedrawTime';\r\n\r\nexport var ConfigurationStringOptions: ConfigurationStringOption[] = ['language', 'libraryUrl', 'remoteScore'];\r\n\r\nexport var ConfigurationNumberOptions: ConfigurationNumberOption[] = ['demonPollTime', 'idleRedrawTime'];\r\n\r\n/**\r\n * Application configuration parameters, can be referenced by the running application or changed\r\n * @category SuiApplication\r\n */\r\nexport interface SmoConfigurationParams {\r\n mode: SmoMode;\r\n smoPath?: string;\r\n language: string;\r\n initialScore?: string | SmoScore;\r\n remoteScore?: string;\r\n scoreDomContainer: string | HTMLElement;\r\n leftControls?: string | HTMLElement;\r\n topControls?: string | HTMLElement;\r\n libraryUrl?: string;\r\n demonPollTime: number; // how often we poll the score to see if it changed\r\n idleRedrawTime: number;\r\n ribbonLayout?: RibbonLayout;\r\n buttonDefinition?: ButtonDefinition[];\r\n audioAnimation: SuiAudioAnimationParams;\r\n}\r\n\r\n/**\r\n * Configures smoosic library or application. It is a union of UI, rendering and application configuration parameters\r\n * @param mode - score mode `'library' | 'application' | 'translate'`\r\n * Library mode starts the view but not the UI. application mode starts the UI and expects UI parameters.\r\n * translation mode is the translation editor, for creating translations for dialog/menu components\r\n * @param language - startup language\r\n * @param initialScore? - the library score JSON, if you are loading from a JSON string, or a SmoScore object\r\n * @param remoteScore? - path to a remote score, if loading from an URL\r\n * @param scoreDomContainer - the parent of the svg container (required)\r\n * @param leftControls - the location of the vertical button control, applies if mode is 'application'\r\n * @param topControls - the location of the horizontal button control, applies if mode is 'application'\r\n * @param libraryUrl - loader URL for Smo libraries, applies if application mode\r\n * @param demonPollTime - how often we poll the score to see if it's changed\r\n * @param idleRedrawTime - how often the entire score re-renders\r\n * @category SuiApplication\r\n */\r\n export class SmoConfiguration implements SmoRenderConfiguration, SmoUiConfiguration {\r\n mode: SmoMode;\r\n language: string = '';\r\n initialScore?: string | SmoScore;\r\n remoteScore?: string;\r\n leftControls?: string | HTMLElement;\r\n topControls?: string | HTMLElement;\r\n scoreDomContainer: string | HTMLElement;\r\n libraryUrl?: string;\r\n demonPollTime: number = 0; // how often we poll the score to see if it changed\r\n idleRedrawTime: number = 0;\r\n keys?: KeyBindingConfiguration;\r\n eventHandler?: ModalEventHandler;\r\n ribbonLayout: RibbonLayout;\r\n audioAnimation: SuiAudioAnimationParams;\r\n buttonDefinition: ButtonDefinition[];\r\n\r\n static get defaults(): SmoConfiguration {\r\n return {\r\n mode: 'application',\r\n language: 'en',\r\n scoreDomContainer: 'boo',\r\n libraryUrl: 'https://aarondavidnewman.github.io/Smoosic/release/library/links/smoLibrary.json',\r\n demonPollTime: 50, // how often we poll the score to see if it changed\r\n idleRedrawTime: 1000, // maximum time between score modification and render\r\n ribbonLayout: defaultRibbonLayout.ribbons,\r\n buttonDefinition: defaultRibbonLayout.ribbonButtons,\r\n audioAnimation: {\r\n audioAnimationHandler: defaultAudioAnimationHandler,\r\n clearAudioAnimationHandler: defaultClearAudioAnimationHandler\r\n }\r\n };\r\n }\r\n static get keyBindingDefaults(): KeyBindingConfiguration {\r\n const editorKeys = defaultEditorKeys.keys;\r\n const trackerKeys = defaultTrackerKeys.keys;\r\n editorKeys.forEach((key) => {\r\n key.module = 'keyCommands'\r\n });\r\n trackerKeys.forEach((key) => {\r\n key.module = 'tracker'\r\n });\r\n return { editorKeys, trackerKeys };\r\n }\r\n constructor(params: Partial) {\r\n const defs = SmoConfiguration.defaults;\r\n ConfigurationStringOptions.forEach((param) => {\r\n const sp: string | undefined = params[param] ?? defs[param];\r\n this[param] = sp ?? '';\r\n });\r\n this.scoreDomContainer = params.scoreDomContainer ?? defs.scoreDomContainer;\r\n this.initialScore = params.initialScore ?? undefined;\r\n ConfigurationNumberOptions.forEach((param) => {\r\n this[param] = params[param] ?? defs[param];\r\n });\r\n this.mode = params.mode ?? defs.mode;\r\n if (this.mode === 'application') {\r\n this.leftControls = params.leftControls;\r\n this.topControls = params.topControls;\r\n }\r\n this.ribbonLayout = params.ribbonLayout ? params.ribbonLayout: defaultRibbonLayout.ribbons;\r\n this.buttonDefinition = params.buttonDefinition ? params.buttonDefinition : defaultRibbonLayout.ribbonButtons;\r\n if (!params.ribbonLayout) {\r\n this.ribbonLayout = defaultRibbonLayout.ribbons;\r\n }\r\n if (!params.buttonDefinition) {\r\n this.buttonDefinition = defaultRibbonLayout.ribbonButtons;\r\n }\r\n if (!params.audioAnimation) {\r\n this.audioAnimation = SmoConfiguration.defaults.audioAnimation;\r\n } else {\r\n this.audioAnimation = params.audioAnimation;\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom } from '../common/htmlHelpers';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\nimport { SmoConfiguration } from './configuration';\r\nimport { SuiPiano } from '../render/sui/piano';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiDom {\r\n static splash(config: SmoConfiguration) {\r\n var b: any = buildDom;\r\n var logoPath = '../styles/images/logo.png';\r\n var r = b('div').classes('bug-modal').append(\r\n b('img').attr('src', logoPath).classes('splash-logo').attr('width', '300px').attr('height', '300px'))\r\n .append(b('button').classes('icon icon-cross bug-dismiss-button'))\r\n .append(b('div').classes('splash-div')\r\n .append(b('span').classes('splash-title').text('Sm'))\r\n .append(b('span').classes('splash-shine').text('ooooooooo'))\r\n .append(b('span').classes('splash-title').text('sic')));\r\n $('body').append(r.dom());\r\n $('body').addClass('splashScreen modal');\r\n setTimeout(function () {\r\n $('body').removeClass('splashScreen modal');\r\n }, 1000);\r\n }\r\n static get scrollRegionId() {\r\n return 'smo-scroll-region';\r\n }\r\n static createUiDom(uiDomContainer: HTMLElement | string | undefined) {\r\n if (!uiDomContainer) {\r\n return;\r\n }\r\n if (typeof(uiDomContainer) === 'string') {\r\n uiDomContainer = document.getElementById(uiDomContainer) ?? undefined;\r\n }\r\n if (!uiDomContainer) {\r\n return;\r\n }\r\n var b = buildDom;\r\n var r = b('div').classes('dom-container')\r\n .append(b('div').classes('workspace language-dir').attr('dir', 'ltr') \r\n .append(b('div').classes('control-bar')\r\n .append(b('div').classes('titleText').text('Smoosic'))\r\n .append(b('div').classes('piano-container')\r\n .append(b('div').classes('key-left-ctrl'))\r\n .append(b('div').classes('piano-keys'))\r\n .append(b('div').classes('key-right-ctrl')))\r\n .append(b('div').classes('controls-top').attr('id','controls-top')))\r\n .append(b('div').classes('media')\r\n .append(b('div').classes('controls-left').attr('id','controls-left'))\r\n ));\r\n \r\n uiDomContainer.append(r.dom()[0]);\r\n const scrollRegion = document.createElement('div');\r\n $(scrollRegion).attr('id', SuiDom.scrollRegionId).addClass('musicRelief');\r\n $('.dom-container .media').append(scrollRegion);\r\n var pianoDom = $('.piano-keys')[0];\r\n var svg = document.createElementNS(SvgHelpers.namespace, 'svg');\r\n svg.id = 'piano-svg';\r\n svg.setAttributeNS('', 'width', '' + SuiPiano.owidth * SuiPiano.dimensions.octaves);\r\n svg.setAttributeNS('', 'height', '' + SuiPiano.dimensions.wheight);\r\n svg.setAttributeNS('', 'viewBox', '0 0 ' + SuiPiano.owidth * SuiPiano.dimensions.octaves + ' ' + SuiPiano.dimensions.wheight);\r\n pianoDom.appendChild(svg);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { KeyEvent } from '../smo/data/common';\r\nimport { SuiExceptionHandler } from '../ui/exceptions';\r\nimport { Qwerty } from '../ui/qwerty';\r\nimport { SuiModifierDialogFactory } from '../ui/dialogs/factory';\r\nimport { SuiPiano } from '../render/sui/piano'\r\nimport { SuiHelp } from '../ui/help';\r\nimport { CompleteNotifier, ModalComponent } from '../ui/common';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\nimport { defaultEditorKeys } from '../ui/keyBindings/default/editorKeys';\r\nimport { defaultTrackerKeys } from '../ui/keyBindings/default/trackerKeys';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource, EventHandler } from '../ui/eventSource';\r\nimport { SuiKeyCommands } from './keyCommands';\r\nimport { KeyBinding, ModalEventHandler } from './common';\r\nimport { ModifierTab } from '../smo/xform/selections';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\nimport { SuiMenuManager } from '../ui/menus/manager';\r\nimport { SmoConfiguration } from './configuration';\r\nimport { SuiDom } from './dom';\r\ndeclare var $: any;\r\n\r\n/**\r\n * Handle keyboard/mouse events, and pass them to the renderer and other UI elements.\r\n */\r\nexport interface EventHandlerParams {\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n tracker: SuiTracker,\r\n keyCommands: SuiKeyCommands,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier,\r\n keyBindings: KeyBinding[],\r\n config: SmoConfiguration\r\n}\r\n/**\r\n * this is the default keyboard/mouse handler for smoosic in application mode.\r\n * It diverts key events to tracker or key commmands as appropriate, and mouse events to \r\n * tracker. Modal elements take this control away temporarily.\r\n * \r\n * It also handles some global events such as window resize and scroll of the music region.\r\n * @category SuiApplication\r\n*/\r\nexport class SuiEventHandler implements ModalEventHandler {\r\n static reentry: boolean = false;\r\n static keyboardUi: Qwerty;\r\n static showQwerty() {\r\n SuiEventHandler.keyboardUi = Qwerty;\r\n Qwerty.displayKb();\r\n }\r\n static instance: SuiEventHandler;\r\n static debugMask: number = 0;\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n tracker: SuiTracker;\r\n keyBind: KeyBinding[];\r\n completeNotifier: CompleteNotifier;\r\n keyCommands: SuiKeyCommands;\r\n resizing: boolean = false;\r\n undoStatus: number = 0;\r\n trackScrolling: boolean = false;\r\n config: SmoConfiguration;\r\n keyHandlerObj: any = null;\r\n menus: SuiMenuManager;\r\n piano: SuiPiano | null = null;\r\n exhandler: SuiExceptionHandler; \r\n constructor(params: EventHandlerParams) {\r\n SuiEventHandler.instance = this;\r\n\r\n this.view = params.view;\r\n this.config = params.config;\r\n this.menus = params.menus;\r\n this.completeNotifier = params.completeNotifier;\r\n this.eventSource = params.eventSource;\r\n this.tracker = params.tracker; // needed for key event handling\r\n this.keyBind = params.keyBindings;\r\n this.keyCommands = params.keyCommands;\r\n this.keyCommands.view = this.view;\r\n this.resizing = false;\r\n this.undoStatus = 0;\r\n this.trackScrolling = false;\r\n this.keyHandlerObj = null;\r\n // create global exception instance\r\n this.exhandler = new SuiExceptionHandler(this);\r\n this.bindEvents();\r\n this.bindResize();\r\n this.createPiano();\r\n }\r\n\r\n static get scrollable() {\r\n return '.musicRelief';\r\n }\r\n\r\n private static handleScrollEventDefer(handler: SuiEventHandler) {\r\n if (handler.trackScrolling) {\r\n return;\r\n }\r\n const scrollRegion: HTMLElement | null = document.getElementById(SuiDom.scrollRegionId);\r\n setTimeout(() => {\r\n handler.trackScrolling = false;\r\n if (scrollRegion) {\r\n const scrollLeft = scrollRegion.scrollLeft;\r\n const scrollTop = scrollRegion.scrollTop;\r\n handler.view.handleScrollEvent(scrollLeft, scrollTop);\r\n }\r\n }, 500);\r\n }\r\n handleScrollEvent() {\r\n SuiEventHandler.handleScrollEventDefer(this);\r\n }\r\n\r\n createPiano() {\r\n this.piano = new SuiPiano(this.view);\r\n }\r\n resizeEvent() {\r\n var self = this;\r\n if (this.resizing) {\r\n return;\r\n }\r\n if (!this.piano) {\r\n return;\r\n }\r\n if ($('body').hasClass('printing')) {\r\n return;\r\n }\r\n this.resizing = true;\r\n setTimeout(function () {\r\n if (SuiEventHandler.debugMask) {\r\n console.log('resizing');\r\n }\r\n self.resizing = false;\r\n self.piano!.handleResize();\r\n self.view.refreshViewport();\r\n }, 1);\r\n }\r\n\r\n createModifierDialog(modifierSelection: ModifierTab) {\r\n var parameters = {\r\n modifier: modifierSelection.modifier,\r\n view: this.view, eventSource: this.eventSource,\r\n completeNotifier: this.completeNotifier, keyCommands: this.keyCommands, \r\n ctor: '', // filled in by the factory\r\n tracker: this.tracker,\r\n startPromise: null,\r\n id: 'modifier-dialog',\r\n config: this.config\r\n }\r\n return SuiModifierDialogFactory.createModifierDialog(modifierSelection.modifier, parameters);\r\n }\r\n\r\n // If the user has selected a modifier via the mouse/touch, bring up mod dialog\r\n // for that modifier\r\n trackerModifierSelect(ev: KeyEvent) {\r\n var modSelection = this.view.tracker.getSelectedModifier();\r\n if (modSelection) {\r\n var dialog = this.createModifierDialog(modSelection);\r\n if (dialog) {\r\n // this.view.tracker.selectSuggestion(ev);\r\n return;\r\n // this.unbindKeyboardForModal(dialog);\r\n } else {\r\n this.view.tracker.advanceModifierSelection(this.view.score, ev);\r\n }\r\n } else {\r\n this.view.tracker.selectSuggestion(this.view.score, ev);\r\n }\r\n return;\r\n }\r\n\r\n // ### bindResize\r\n // This handles both resizing of the music area (scrolling) and resizing of the window.\r\n // The latter results in a redraw, the former just resets the client/logical map of elements\r\n // in the tracker.\r\n bindResize() {\r\n const self = this;\r\n const el: HTMLElement = $(SuiEventHandler.scrollable)[0];\r\n // unit test programs don't have resize html\r\n if (!el) {\r\n return;\r\n }\r\n window.addEventListener('resize', function () {\r\n self.resizeEvent();\r\n });\r\n\r\n let scrollCallback = () => {\r\n self.handleScrollEvent();\r\n };\r\n el.onscroll = scrollCallback;\r\n }\r\n\r\n\r\n // ### renderElement\r\n // return render element that is the DOM parent of the svg\r\n get renderElement() {\r\n return this.view.renderer.renderElement;\r\n }\r\n\r\n // ## editorKeyBindingDefaults\r\n // ## Description:\r\n // execute a simple command on the editor, based on a keystroke.\r\n static get editorKeyBindingDefaults() {\r\n return defaultEditorKeys.keys;\r\n }\r\n\r\n // ## trackerKeyBindingDefaults\r\n // ### Description:\r\n // Key bindings for the tracker. The tracker is the 'cursor' in the music\r\n // that lets you select and edit notes.\r\n static get trackerKeyBindingDefaults() {\r\n return defaultTrackerKeys.keys;\r\n }\r\n helpControls() {\r\n var self = this;\r\n var rebind = function () {\r\n self.bindEvents();\r\n }\r\n }\r\n menuHelp() {\r\n SuiHelp.displayHelp();\r\n }\r\n\r\n evKey(evdata: any) {\r\n if ($('body').hasClass('translation-mode')) {\r\n return;\r\n }\r\n\r\n if (SuiEventHandler.debugMask) {\r\n console.log(\"KeyboardEvent: key='\" + evdata.key + \"' | code='\" +\r\n evdata.code + \"'\"\r\n + \" shift='\" + evdata.shiftKey + \"' control='\" + evdata.ctrlKey + \"'\" + \" alt='\" + evdata.altKey + \"'\");\r\n }\r\n evdata.preventDefault();\r\n\r\n if (SuiEventHandler.keyboardUi) {\r\n Qwerty.handleKeyEvent(evdata);\r\n }\r\n const dataCopy = SuiTracker.serializeEvent(evdata);\r\n this.view.renderer.updatePromise().then(() => {\r\n if (dataCopy.key == '?') {\r\n SuiHelp.displayHelp();\r\n }\r\n\r\n if (dataCopy.key == '/') {\r\n // set up menu DOM.\r\n this.menus.slashMenuMode(this.completeNotifier);\r\n }\r\n\r\n if (dataCopy.key == 'Enter') {\r\n this.trackerModifierSelect(dataCopy);\r\n }\r\n\r\n var binding: KeyBinding | undefined = this.keyBind.find((ev: KeyBinding) =>\r\n ev.event === 'keydown' && ev.key === dataCopy.key &&\r\n ev.ctrlKey === dataCopy.ctrlKey &&\r\n ev.altKey === dataCopy.altKey && dataCopy.shiftKey === ev.shiftKey);\r\n\r\n if (binding) {\r\n try {\r\n if (binding.module === 'tracker') {\r\n (this.tracker as any)[binding.action](this.view.score, dataCopy);\r\n } else {\r\n (this.keyCommands as any)[binding.action](dataCopy);\r\n }\r\n } catch (e) {\r\n if (typeof (e) === 'string') {\r\n console.error(e);\r\n }\r\n this.exhandler.exceptionHandler(e);\r\n }\r\n }\r\n });\r\n }\r\n\r\n mouseMove(ev: any) {\r\n this.view.tracker.intersectingArtifact(SvgHelpers.smoBox({\r\n x: ev.clientX,\r\n y: ev.clientY\r\n }));\r\n }\r\n\r\n mouseClick(ev: any) {\r\n const dataCopy = SuiTracker.serializeEvent(ev);\r\n this.view.renderer.updatePromise().then(() => {\r\n this.view.tracker.selectSuggestion(this.view.score, dataCopy);\r\n var modifier = this.view.tracker.getSelectedModifier();\r\n if (modifier) {\r\n this.createModifierDialog(modifier);\r\n }\r\n });\r\n }\r\n bindEvents() {\r\n const self = this;\r\n const tracker = this.view.tracker;\r\n $('body').off('forceScrollEvent').on('forceScrollEvent', function () {\r\n self.handleScrollEvent();\r\n });\r\n $('body').off('forceResizeEvent').on('forceResizeEvent', function () {\r\n self.resizeEvent();\r\n });\r\n this.helpControls();\r\n }\r\n}\r\n","import { SuiApplication } from \"./application\";\r\nimport { SmoConfigurationParams } from \"./configuration\";\r\nimport { SmoToVex } from '../render/vex/toVex';\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { SmoScore } from '../smo/data/score';\r\nexport interface ScoreToRender {\r\n title: string, path: string, pages: number[]\r\n}\r\nconst filesToRender: Record = {\r\n 'PreciousLord': { \r\n title: 'PreciousLord', \r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/hymns/Precious Lord.json',\r\n pages: [0]\r\n }, 'BachWTC': {\r\n title: 'BachWTC',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/BachWTC-3.json',\r\n pages: [0, 1, 2]\r\n }, 'BachInvention': {\r\n title: 'BachInv1',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/BachInvention.json',\r\n pages: [1]\r\n }, 'Gnossienne3': {\r\n title: 'Gnossienne3',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/Gnossienne3-3.json',\r\n pages: [0, 1]\r\n }, 'GFWMessiah-I-2': {\r\n title: 'GFWMessiah-I-2',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/messiah/Messiah-I-2.json',\r\n pages: [0, 1]\r\n }, 'Joplin': {\r\n title: 'Joplin',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/Joplin-Entertainer.json',\r\n pages: [0, 1, 2]\r\n }, 'Plena': {\r\n title: 'Plena',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/bigband/Plena.json',\r\n pages: [2]\r\n }, 'Postillionlied': {\r\n title: 'Postillion Lied',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/soprano/Postillionlied.json',\r\n pages: [0, 1, 2]\r\n }, 'Solovey': {\r\n title: 'Solovey',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/soprano/Solovey.json',\r\n pages: [0, 1]\r\n }, 'Bilongo': {\r\n title: 'Bilongo',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/bigband/Bilongo-Mandinga.json',\r\n pages: [7]\r\n }, 'Yama': {\r\n title: 'Yama',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/Yama2.json',\r\n pages: [1]\r\n }\r\n};\r\ndeclare var $: any;\r\ndeclare var JSZip: any;\r\nconst addFileLink = (filename: string, txt: any, parent: any, mimeType: string = 'application/octet-stream') => {\r\n var anchor = $('');\r\n var url = URL.createObjectURL(new Blob([txt], { type: mimeType }));\r\n $(anchor).attr('href', url);\r\n $(anchor).attr('download', filename);\r\n $(anchor).text('save');\r\n $(parent).html('');\r\n $(parent).append(anchor);\r\n}\r\nexport async function renderVexTests(config: Partial) {\r\n const zipName = 'output.zip';\r\n const zipFile = new JSZip();\r\n const application = await SuiApplication.configure(config);\r\n const view = application.view;\r\n if (!view) {\r\n return;\r\n }\r\n const fileKeys = Object.keys(filesToRender);\r\n for (var i = 0; i < fileKeys.length; ++i) {\r\n const fileInfo = filesToRender[fileKeys[i]];\r\n const path = fileInfo.path;\r\n const loader = new SuiXhrLoader(path);\r\n const scoreJson = await loader.loadAsync();\r\n const score = SmoScore.deserialize(scoreJson as string); \r\n await view.changeScore(score);\r\n fileInfo.pages.forEach((page) => {\r\n const vexText = SmoToVex.convert(view.score, { div: 'smoo', page })\r\n const fileName = `${fileInfo.title}-${page}.js`;\r\n zipFile.file(fileName, vexText); \r\n });\r\n }\r\n const blob = await zipFile.generateAsync({ type: 'blob' });\r\n const element = document.getElementById('remoteLink');\r\n addFileLink(zipName, blob, element);\r\n $('#remoteLink a')[0].click();\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiTempoDialog } from '../ui/dialogs/tempo';\r\nimport { createAndDisplayDialog } from '../ui/dialogs/dialog';\r\nimport { SuiAudioPlayer } from '../render/audio/player';\r\nimport { SmoArticulation } from '../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../ui/eventSource';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\nimport { KeyCommandParams } from './common';\r\nimport { CompleteNotifier } from '../ui/common';\r\nimport { PitchLetter, IsPitchLetter, KeyEvent } from '../smo/data/common';\r\n\r\n/**\r\n * KeyCommands object handles key events and converts them into commands, updating the score and\r\n * display\r\n * @category SuiApplication\r\n * */\r\nexport class SuiKeyCommands {\r\n view: SuiScoreViewOperations;\r\n slashMode: boolean = false;\r\n completeNotifier: CompleteNotifier;\r\n tracker: SuiTracker;\r\n eventSource: BrowserEventSource;\r\n constructor(params: KeyCommandParams) {\r\n this.slashMode = false;\r\n this.view = params.view;\r\n this.tracker = params.view.tracker;\r\n this.completeNotifier = params.completeNotifier;\r\n this.eventSource = params.eventSource;\r\n }\r\n\r\n tempoDialog() {\r\n const tempo = this.tracker.selections[0].measure.getTempo();\r\n createAndDisplayDialog(SuiTempoDialog,\r\n {\r\n id: 'tempoDialog',\r\n ctor: 'SuiTempoDialog',\r\n completeNotifier: this.completeNotifier,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n startPromise: null,\r\n modifier: tempo\r\n }\r\n );\r\n }\r\n\r\n get score() {\r\n return this.view.score;\r\n }\r\n\r\n undo() {\r\n this.view.undo();\r\n }\r\n\r\n async copy() {\r\n await this.view.copy();\r\n }\r\n async paste() {\r\n await this.view.paste();\r\n }\r\n async toggleBeamGroup() {\r\n await this.view.toggleBeamGroup();\r\n }\r\n\r\n async beamSelections() {\r\n await this.view.beamSelections();\r\n }\r\n async toggleBeamDirection() {\r\n await this.view.toggleBeamDirection();\r\n }\r\n\r\n async collapseChord() {\r\n await this.view.collapseChord();\r\n }\r\n\r\n togglePlayer() {\r\n if (SuiAudioPlayer.playing) {\r\n this.stopPlayer();\r\n } else {\r\n this.playScore();\r\n }\r\n }\r\n playScore() {\r\n this.view.playFromSelection();\r\n }\r\n\r\n stopPlayer() {\r\n this.view.stopPlayer();\r\n }\r\n pausePlayer() {\r\n SuiAudioPlayer.pausePlayer();\r\n }\r\n\r\n async intervalAdd(interval: number, direction: number) {\r\n await this.view.setInterval(direction * interval);\r\n }\r\n\r\n async interval(keyEvent: KeyEvent) {\r\n // code='Digit3'\r\n var interval = parseInt(keyEvent.keyCode, 10) - 49; // 48 === '0', 0 indexed\r\n if (isNaN(interval) || interval < 1 || interval > 7) {\r\n return;\r\n }\r\n await this.intervalAdd(interval, keyEvent.shiftKey ? -1 : 1);\r\n }\r\n\r\n async transpose(offset: number) {\r\n await this.view.transposeSelections(offset);\r\n }\r\n async transposeDown() {\r\n await this.transpose(-1);\r\n }\r\n async transposeUp() {\r\n await this.transpose(1);\r\n }\r\n async upOctave() {\r\n await this.transpose(12);\r\n }\r\n async downOctave() {\r\n await this.transpose(-12);\r\n }\r\n async makeRest() {\r\n await this.view.makeRest();\r\n }\r\n\r\n async setPitchCommand(letter: PitchLetter) {\r\n await this.view.setPitch(letter);\r\n }\r\n\r\n async setPitch(keyEvent: KeyEvent) {\r\n const letter = keyEvent.key.toLowerCase();\r\n if (IsPitchLetter(letter)) {\r\n await this.setPitchCommand(letter);\r\n }\r\n }\r\n\r\n async dotDuration() {\r\n await this.view.batchDurationOperation('dotDuration');\r\n }\r\n\r\n async undotDuration() {\r\n await this.view.batchDurationOperation('undotDuration');\r\n }\r\n\r\n async doubleDuration() {\r\n await this.view.batchDurationOperation('doubleDuration');\r\n }\r\n\r\n async halveDuration() {\r\n await this.view.batchDurationOperation('halveDuration');\r\n }\r\n\r\n async addMeasure(keyEvent: KeyEvent) {\r\n await this.view.addMeasure(keyEvent.shiftKey);\r\n }\r\n async deleteNote() {\r\n await this.view.deleteNote();\r\n }\r\n\r\n async toggleCourtesyAccidental() {\r\n await this.view.toggleCourtesyAccidentals();\r\n }\r\n async toggleEnharmonic() {\r\n await this.view.toggleEnharmonic();\r\n }\r\n\r\n async makeTupletCommand(numNotes: number) {\r\n await this.view.makeTuplet(numNotes);\r\n }\r\n async makeTuplet(keyEvent: KeyEvent) {\r\n const numNotes = parseInt(keyEvent.key, 10);\r\n await this.makeTupletCommand(numNotes);\r\n }\r\n\r\n async unmakeTuplet() {\r\n await this.view.unmakeTuplet();\r\n }\r\n async setNoteHead() {\r\n await this.view.setNoteHead('x2');\r\n }\r\n async removeGraceNote() {\r\n await this.view.removeGraceNote();\r\n }\r\n async addGraceNote() {\r\n await this.view.addGraceNote();\r\n }\r\n async slashGraceNotes() {\r\n await this.view.slashGraceNotes();\r\n }\r\n\r\n async toggleArticulationCommand(articulation: string, ctor: string) {\r\n await this.view.toggleArticulation(articulation, ctor);\r\n }\r\n async addRemoveAccent() {\r\n await this.toggleArticulationCommand(SmoArticulation.articulations.accent, 'SmoArticulation');\r\n }\r\n async addRemoveTenuto() {\r\n await this.toggleArticulationCommand(SmoArticulation.articulations.tenuto, 'SmoArticulation');\r\n }\r\n async addRemoveStaccato() {\r\n await this.toggleArticulationCommand(SmoArticulation.articulations.staccato, 'SmoArticulation');\r\n }\r\n async addRemoveMarcato() {\r\n await this.toggleArticulationCommand(SmoArticulation.articulations.marcato, 'SmoArticulation');\r\n }\r\n async addRemovePizzicato() {\r\n await this.toggleArticulationCommand(SmoArticulation.articulations.pizzicato, 'SmoArticulation');\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\ndeclare var $: any;\r\n/**\r\n* returns an object that lets you build a DOM in a somewhat readable way.\r\n* \r\n* ## Usage\r\n* ``` javascript\r\n* var b = buildDom;\r\n* var r =\r\n* b('tr').classes('jsSharingMember').data('entitykey', key).data('name', name).data('entitytype', entityType).append(\r\n* b('td').classes('noSideBorderRight').append(\r\n* ...\r\n* $(parent).append(r.dom());\r\n* ``` \r\n* Don't forget the '.dom()' ! That is the actual jquery element object\r\n* @returns \r\n**/\r\nexport class DomBuilder {\r\n e: any;\r\n constructor(el: any) {\r\n this.e = $('<' + el + '/>');\r\n }\r\n classes(cl: any) {\r\n $(this.e).addClass(cl);\r\n return this;\r\n }\r\n html(value: any) {\r\n $(this.e).html(value);\r\n return this;\r\n }\r\n data(name: string, value: string) {\r\n $(this.e).attr('data-' + name, value);\r\n return this;\r\n }\r\n attr(name: string, value: string) {\r\n $(this.e).attr(name, value);\r\n return this;\r\n }\r\n prop(name: string, value: boolean) {\r\n $(this.e).prop(name, value);\r\n return this;\r\n }\r\n css(name: string, value: string) {\r\n $(this.e).css(name, value);\r\n return this;\r\n }\r\n append(el: any) {\r\n $(this.e).append(el.e);\r\n return this;\r\n }\r\n text(tx: any) {\r\n $(this.e).append(document.createTextNode(tx));\r\n return this;\r\n }\r\n dom() {\r\n return this.e;\r\n }\r\n}\r\n\r\nexport function buildDom(e: any) {\r\n return new DomBuilder(e);\r\n}\r\n\r\nexport function focusableElements(): string[] {\r\n return ['a', 'input', 'select', 'textarea', 'button', 'li[tabindex]', 'div[tabindex]'];\r\n}\r\n\r\nexport function addFileLink(filename: string, txt: any, parent: any, mimeType: string = 'application/octet-stream') {\r\n var anchor = $('');\r\n var url = URL.createObjectURL(new Blob([txt], { type: mimeType }));\r\n $(anchor).attr('href', url);\r\n $(anchor).attr('download', filename);\r\n $(anchor).text('save');\r\n $(parent).html('');\r\n $(parent).append(anchor);\r\n}\r\n\r\nexport class InputTrapper {\r\n selector: any;\r\n parent: any;\r\n id: any;\r\n parentId: any;\r\n modalInputs: any[];\r\n disabledInputs: any[];\r\n siblingInputs: any[];\r\n constructor(selector: any) {\r\n this.selector = selector;\r\n this.modalInputs = [];\r\n this.disabledInputs = [];\r\n this.siblingInputs = [];\r\n this.parent = $(this.selector);\r\n this.id = $(this.parent).attr('id');\r\n this.parentId = $(this.parent).parent().attr('id');\r\n var idstr = Math.round(Math.random() * (999999 - 1) + 1);\r\n if (!this.id) {\r\n $(this.parent).attr('id', idstr + '-element');\r\n this.id = $(this.parent).attr('id');\r\n }\r\n if (!this.parentId) {\r\n $(this.parent).parent().attr('id', idstr + '-parent');\r\n this.parentId = $(this.parent).parent().attr('id');\r\n }\r\n\r\n }\r\n trap(this: any) {\r\n // aria-hide peers of dialog and peers of parent that are not the parent.\r\n var peers = $(this.parent).parent().children().toArray();\r\n\r\n peers.forEach((node: any) => {\r\n var ptag: any = $(node)[0].tagName;\r\n if (ptag === 'SCRIPT' || ptag === 'LINK' || ptag === 'STYLE') {\r\n ;\r\n } else if ($(node).attr('id') === this.parentId ||\r\n $(node).attr('id') === this.id || \r\n $(node).hasClass('helpDialog')) { // help dialog can be shown with modal dialog\r\n ;\r\n } else {\r\n var hidden = $(node).attr('aria-hidden');\r\n if (!hidden || hidden != 'true') {\r\n $(node).attr('aria-hidden', 'true');\r\n this.siblingInputs.push(node);\r\n }\r\n }\r\n });\r\n focusableElements().forEach((etype) => {\r\n var elements = $(etype).toArray();\r\n\r\n elements.forEach((element: any) => {\r\n var tagName = $(element)[0].tagName;\r\n if ($(element).attr('id') === this.id) {\r\n ;\r\n } else if ($(element).closest('.helpDialog').length) {\r\n ;\r\n } else if ($(element).prop('disabled')) {\r\n ;\r\n } else if ($(element).hasClass('hide')) {\r\n ;\r\n } else if ($(element).closest(this.selector).length) {\r\n // inside\r\n this.modalInputs.push(element);\r\n } else if ((tagName === 'A' || tagName === 'DIV' || tagName === 'LI') && $(element).attr('tabIndex') === '-1') {\r\n ;\r\n } else {\r\n this.disabledInputs.push(element);\r\n if (tagName === 'A' || tagName === 'DIV' || tagName === 'LI') {\r\n $(element).attr('tabIndex', '-1');\r\n } else {\r\n $(element).prop('disabled', true);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n close() {\r\n this.disabledInputs.forEach(function (element: any) {\r\n var tagName = $(element)[0].tagName;\r\n if (tagName === 'A' || tagName === 'DIV' || tagName === 'LI') {\r\n $(element).attr('tabIndex', '0');\r\n } else {\r\n $(element).prop('disabled', false);\r\n }\r\n });\r\n this.siblingInputs.forEach((el: any) => {\r\n $(el).removeAttr('aria-hidden');\r\n });\r\n } \r\n}\r\nexport function closeDialogPromise(): Promise {\r\n return new Promise((resolve) => {\r\n $('body').off('dialogDismiss').on('dialogDismiss', function () {\r\n resolve();\r\n });\r\n });\r\n}\r\n/**\r\n * Extract an HTMLElement from a Jquery id, DOM element ID, or HTMLELement. If\r\n * an HTMLElement can't be created, return null\r\n * @param selector\r\n * @returns HTMLElement\r\n */\r\nexport function getDomContainer(selector: HTMLElement | string): HTMLElement | undefined {\r\n if (typeof(selector) === 'string') {\r\n if (selector[0] === '#') {\r\n const el: any = $(selector)[0];\r\n if (!(el instanceof HTMLElement)) {\r\n return undefined;\r\n }\r\n return el;\r\n } else {\r\n const el = document.getElementById(selector);\r\n if (!el) {\r\n return undefined;\r\n }\r\n return el;\r\n }\r\n } else if (selector instanceof HTMLElement) {\r\n return selector;\r\n } else { \r\n return undefined;\r\n }\r\n}\r\n/**\r\n * Create a top-level HTML element for modal containers - dialogs etc.\r\n * from a jquery selector, or just return same if it exists\r\n * @param selector \r\n * @returns \r\n */\r\nexport function createTopDomContainer(selector: string | HTMLElement, elementType?: string): HTMLElement {\r\n const container = $(selector);\r\n if (!elementType) {\r\n elementType = 'div';\r\n }\r\n if (container.length > 0) {\r\n return container[0] as HTMLElement;\r\n } else {\r\n const ndiv = document.createElement(elementType);\r\n if (typeof(selector) === 'string') {\r\n const cl = (selector[0] === '.' || selector[0] === '#') ? selector.substring(1) : selector;\r\n $(ndiv).addClass(cl);\r\n if (selector[0] === '#') {\r\n $(ndiv).attr('id', selector.substring(1));\r\n }\r\n }\r\n $('body').append(ndiv);\r\n return $(ndiv)[0] as HTMLElement;\r\n }\r\n}\r\n/**\r\n * \r\n * @param parameters \r\n * @returns \r\n */\r\nexport function draggable(parameters: any) {\r\n return new Draggable(parameters);\r\n}\r\n\r\nexport class Draggable {\r\n parent: any;\r\n handle: any;\r\n animeClass: any;\r\n dragParent: any;\r\n domOffset: any;\r\n svg: any;\r\n width: number;\r\n height: number;\r\n lastX: number;\r\n lastY: number;\r\n cb: any;\r\n moveParent: boolean;\r\n dragging: boolean = false;\r\n\r\n constructor(parameters: any) {\r\n this.parent = parameters.parent;\r\n this.handle = parameters.handle;\r\n this.animeClass = parameters.animateDiv;\r\n this.dragParent = parameters.dragParent;\r\n\r\n // TODO: make '.dom-container' a part of the configuration\r\n this.domOffset = $('.dom-container').offset();\r\n\r\n this.svg = parameters['svg'];\r\n this.width = $(this.parent).outerWidth();\r\n this.height = $(this.parent).outerHeight();\r\n this.lastX = $(this.handle).offset().left - this.domOffset.left;\r\n this.lastY = $(this.handle).offset().top - this.domOffset.top;\r\n this.cb = parameters.cb;\r\n this.moveParent = parameters.moveParent;\r\n\r\n var self = this;\r\n\r\n // $('.itemMenu input[name=\"itemTitle\"]').css('width','60%');\r\n $(this.handle)\r\n .off('mousedown').on('mousedown',\r\n function (e: any) {\r\n self.mousedown(e);\r\n });\r\n $(document)\r\n .on('mousemove',\r\n function (e: any) {\r\n self.mousemove(e);\r\n\r\n })\r\n .on('mouseup',\r\n function (e: any) {\r\n self.mouseup(e);\r\n });\r\n }\r\n _animate(e: any) {\r\n this.lastX = e.clientX;\r\n this.lastY = e.clientY;\r\n $(this.animeClass).css('left', this.lastX - this.domOffset.left);\r\n $(this.animeClass).css('top', this.lastY - this.domOffset.top);\r\n\r\n if (this.dragParent) {\r\n $(this.parent).css('left', this.lastX + 'px');\r\n $(this.parent).css('top', this.lastY + 'px');\r\n }\r\n }\r\n mousedown(e: any) {\r\n if (!this.dragging) {\r\n $(this.animeClass).removeClass('hide');\r\n\r\n $(this.animeClass).css('width', this.width);\r\n $(this.animeClass).css('height', this.height);\r\n }\r\n\r\n this.dragging = true;\r\n this._animate(e);\r\n }\r\n enddrag() {\r\n this.lastX = Math.max(this.lastX - this.domOffset.left, 0);\r\n this.lastY = Math.max(this.lastY - this.domOffset.top, 0);\r\n if (this.moveParent) {\r\n $(this.parent).css('left', this.lastX + 'px');\r\n $(this.parent).css('top', this.lastY + 'px');\r\n }\r\n $(this.animeClass).addClass('hide');\r\n this.cb(this.lastX, this.lastY);\r\n }\r\n\r\n mouseup(e: any) {\r\n // stop resizing\r\n if (this.dragging) {\r\n this.dragging = false;\r\n this.lastX = e.clientX;\r\n this.lastY = e.clientY;\r\n\r\n this.enddrag();\r\n }\r\n }\r\n mousemove(e: any) {\r\n // we don't want to do anything if we aren't resizing.\r\n if (!this.dragging)\r\n return;\r\n this._animate(e);\r\n }\r\n}\r\n","// Credit for Midi functionality goes to:\r\n// https://github.com/grimmdude/MidiWriterJS\r\nimport { SmoMusic } from '../smo/data/music';\r\nexport var _MidiWriter = function() {\r\n/**\r\n * MIDI file format constants.\r\n * @return {Constants}\r\n */\r\nvar Constants = {\r\n VERSION: 1,\r\n HEADER_CHUNK_TYPE: [0x4d, 0x54, 0x68, 0x64],\r\n // Mthd\r\n HEADER_CHUNK_LENGTH: [0x00, 0x00, 0x00, 0x06],\r\n // Header size for SMF\r\n HEADER_CHUNK_FORMAT0: [0x00, 0x00],\r\n // Midi Type 0 id\r\n HEADER_CHUNK_FORMAT1: [0x00, 0x01],\r\n // Midi Type 1 id\r\n HEADER_CHUNK_DIVISION: [0x00, 0x80],\r\n // Defaults to 128 ticks per beat\r\n TRACK_CHUNK_TYPE: [0x4d, 0x54, 0x72, 0x6b],\r\n // MTrk,\r\n META_EVENT_ID: 0xFF,\r\n META_TEXT_ID: 0x01,\r\n META_COPYRIGHT_ID: 0x02,\r\n META_TRACK_NAME_ID: 0x03,\r\n META_INSTRUMENT_NAME_ID: 0x04,\r\n META_LYRIC_ID: 0x05,\r\n META_MARKER_ID: 0x06,\r\n META_CUE_POINT: 0x07,\r\n META_TEMPO_ID: 0x51,\r\n META_SMTPE_OFFSET: 0x54,\r\n META_TIME_SIGNATURE_ID: 0x58,\r\n META_KEY_SIGNATURE_ID: 0x59,\r\n META_END_OF_TRACK_ID: [0x2F, 0x00],\r\n CONTROLLER_CHANGE_STATUS: 0xB0,\r\n // includes channel number (0)\r\n PROGRAM_CHANGE_STATUS: 0xC0,\r\n // includes channel number (0)\r\n PITCH_BEND_STATUS: 0xE0 // includes channel number (0)\r\n};\r\n\r\nfunction _typeof(obj) {\r\n \"@babel/helpers - typeof\";\r\n\r\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\r\n _typeof = function (obj) {\r\n return typeof obj;\r\n };\r\n } else {\r\n _typeof = function (obj) {\r\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n };\r\n }\r\n\r\n return _typeof(obj);\r\n}\r\n\r\nfunction _classCallCheck(instance, Constructor) {\r\n if (!(instance instanceof Constructor)) {\r\n throw new TypeError(\"Cannot call a class as a function\");\r\n }\r\n}\r\n\r\nfunction _defineProperties(target, props) {\r\n for (var i = 0; i < props.length; i++) {\r\n var descriptor = props[i];\r\n descriptor.enumerable = descriptor.enumerable || false;\r\n descriptor.configurable = true;\r\n if (\"value\" in descriptor) descriptor.writable = true;\r\n Object.defineProperty(target, descriptor.key, descriptor);\r\n }\r\n}\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) {\r\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\r\n if (staticProps) _defineProperties(Constructor, staticProps);\r\n return Constructor;\r\n}\r\n\r\nfunction _inherits(subClass, superClass) {\r\n if (typeof superClass !== \"function\" && superClass !== null) {\r\n throw new TypeError(\"Super expression must either be null or a function\");\r\n }\r\n\r\n subClass.prototype = Object.create(superClass && superClass.prototype, {\r\n constructor: {\r\n value: subClass,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n if (superClass) _setPrototypeOf(subClass, superClass);\r\n}\r\n\r\nfunction _getPrototypeOf(o) {\r\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\r\n return o.__proto__ || Object.getPrototypeOf(o);\r\n };\r\n return _getPrototypeOf(o);\r\n}\r\n\r\nfunction _setPrototypeOf(o, p) {\r\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\r\n o.__proto__ = p;\r\n return o;\r\n };\r\n\r\n return _setPrototypeOf(o, p);\r\n}\r\n\r\nfunction _isNativeReflectConstruct() {\r\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\r\n if (Reflect.construct.sham) return false;\r\n if (typeof Proxy === \"function\") return true;\r\n\r\n try {\r\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\nfunction _construct(Parent, args, Class) {\r\n if (_isNativeReflectConstruct()) {\r\n _construct = Reflect.construct;\r\n } else {\r\n _construct = function _construct(Parent, args, Class) {\r\n var a = [null];\r\n a.push.apply(a, args);\r\n var Constructor = Function.bind.apply(Parent, a);\r\n var instance = new Constructor();\r\n if (Class) _setPrototypeOf(instance, Class.prototype);\r\n return instance;\r\n };\r\n }\r\n\r\n return _construct.apply(null, arguments);\r\n}\r\n\r\nfunction _isNativeFunction(fn) {\r\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\r\n}\r\n\r\nfunction _wrapNativeSuper(Class) {\r\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\r\n\r\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\r\n if (Class === null || !_isNativeFunction(Class)) return Class;\r\n\r\n if (typeof Class !== \"function\") {\r\n throw new TypeError(\"Super expression must either be null or a function\");\r\n }\r\n\r\n if (typeof _cache !== \"undefined\") {\r\n if (_cache.has(Class)) return _cache.get(Class);\r\n\r\n _cache.set(Class, Wrapper);\r\n }\r\n\r\n function Wrapper() {\r\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\r\n }\r\n\r\n Wrapper.prototype = Object.create(Class.prototype, {\r\n constructor: {\r\n value: Wrapper,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n return _setPrototypeOf(Wrapper, Class);\r\n };\r\n\r\n return _wrapNativeSuper(Class);\r\n}\r\n\r\nfunction _wrapRegExp(re, groups) {\r\n _wrapRegExp = function (re, groups) {\r\n return new BabelRegExp(re, undefined, groups);\r\n };\r\n\r\n var _RegExp = _wrapNativeSuper(RegExp);\r\n\r\n var _super = RegExp.prototype;\r\n\r\n var _groups = new WeakMap();\r\n\r\n function BabelRegExp(re, flags, groups) {\r\n var _this = _RegExp.call(this, re, flags);\r\n\r\n _groups.set(_this, groups || _groups.get(re));\r\n\r\n return _this;\r\n }\r\n\r\n _inherits(BabelRegExp, _RegExp);\r\n\r\n BabelRegExp.prototype.exec = function (str) {\r\n var result = _super.exec.call(this, str);\r\n\r\n if (result) result.groups = buildGroups(result, this);\r\n return result;\r\n };\r\n\r\n BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {\r\n if (typeof substitution === \"string\") {\r\n var groups = _groups.get(this);\r\n\r\n return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) {\r\n return \"$\" + groups[name];\r\n }));\r\n } else if (typeof substitution === \"function\") {\r\n var _this = this;\r\n\r\n return _super[Symbol.replace].call(this, str, function () {\r\n var args = [];\r\n args.push.apply(args, arguments);\r\n\r\n if (typeof args[args.length - 1] !== \"object\") {\r\n args.push(buildGroups(args, _this));\r\n }\r\n\r\n return substitution.apply(this, args);\r\n });\r\n } else {\r\n return _super[Symbol.replace].call(this, str, substitution);\r\n }\r\n };\r\n\r\n function buildGroups(result, re) {\r\n var g = _groups.get(re);\r\n\r\n return Object.keys(g).reduce(function (groups, name) {\r\n groups[name] = result[g[name]];\r\n return groups;\r\n }, Object.create(null));\r\n }\r\n\r\n return _wrapRegExp.apply(this, arguments);\r\n}\r\n\r\n/**\r\n * Static utility functions used throughout the library.\r\n */\r\n\r\nvar Utils = /*#__PURE__*/function () {\r\n function Utils() {\r\n _classCallCheck(this, Utils);\r\n }\r\n\r\n _createClass(Utils, null, [{\r\n key: \"version\",\r\n value:\r\n /**\r\n * Gets MidiWriterJS version number.\r\n * @return {string}\r\n */\r\n function version() {\r\n return Constants.VERSION;\r\n }\r\n /**\r\n * Convert a string to an array of bytes\r\n * @param {string} string\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"stringToBytes\",\r\n value: function stringToBytes(string) {\r\n return string.split('').map(function (_char) {\r\n return _char.charCodeAt();\r\n });\r\n }\r\n /**\r\n * Checks if argument is a valid number.\r\n * @param {*} n - Value to check\r\n * @return {boolean}\r\n */\r\n\r\n }, {\r\n key: \"isNumeric\",\r\n value: function isNumeric(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n }\r\n /**\r\n * Returns the correct MIDI number for the specified pitch.\r\n * Uses Tonal Midi - https://github.com/danigb/tonal/tree/master/packages/midi\r\n * @param {(string|number)} pitch - 'C#4' or midi note code\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getPitch\",\r\n value: function getPitch(pitch) {\r\n return SmoMusic.midiPitchToMidiNumber(pitch);\r\n }\r\n /**\r\n * Translates number of ticks to MIDI timestamp format, returning an array of\r\n * hex strings with the time values. Midi has a very particular time to express time,\r\n * take a good look at the spec before ever touching this function.\r\n * Thanks to https://github.com/sergi/jsmidi\r\n *\r\n * @param {number} ticks - Number of ticks to be translated\r\n * @return {array} - Bytes that form the MIDI time value\r\n */\r\n\r\n }, {\r\n key: \"numberToVariableLength\",\r\n value: function numberToVariableLength(ticks) {\r\n ticks = Math.round(ticks);\r\n var buffer = ticks & 0x7F;\r\n\r\n while (ticks = ticks >> 7) {\r\n buffer <<= 8;\r\n buffer |= ticks & 0x7F | 0x80;\r\n }\r\n\r\n var bList = [];\r\n\r\n while (true) {\r\n bList.push(buffer & 0xff);\r\n if (buffer & 0x80) buffer >>= 8;else {\r\n break;\r\n }\r\n }\r\n\r\n return bList;\r\n }\r\n /**\r\n * Counts number of bytes in string\r\n * @param {string} s\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"stringByteCount\",\r\n value: function stringByteCount(s) {\r\n return encodeURI(s).split(/%..|./).length - 1;\r\n }\r\n /**\r\n * Get an int from an array of bytes.\r\n * @param {array} bytes\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"numberFromBytes\",\r\n value: function numberFromBytes(bytes) {\r\n var hex = '';\r\n var stringResult;\r\n bytes.forEach(function (_byte) {\r\n stringResult = _byte.toString(16); // ensure string is 2 chars\r\n\r\n if (stringResult.length == 1) stringResult = \"0\" + stringResult;\r\n hex += stringResult;\r\n });\r\n return parseInt(hex, 16);\r\n }\r\n /**\r\n * Takes a number and splits it up into an array of bytes. Can be padded by passing a number to bytesNeeded\r\n * @param {number} number\r\n * @param {number} bytesNeeded\r\n * @return {array} - Array of bytes\r\n */\r\n\r\n }, {\r\n key: \"numberToBytes\",\r\n value: function numberToBytes(number, bytesNeeded) {\r\n bytesNeeded = bytesNeeded || 1;\r\n var hexString = number.toString(16);\r\n\r\n if (hexString.length & 1) {\r\n // Make sure hex string is even number of chars\r\n hexString = '0' + hexString;\r\n } // Split hex string into an array of two char elements\r\n\r\n\r\n var hexArray = hexString.match(/.{2}/g); // Now parse them out as integers\r\n\r\n hexArray = hexArray.map(function (item) {\r\n return parseInt(item, 16);\r\n }); // Prepend empty bytes if we don't have enough\r\n\r\n if (hexArray.length < bytesNeeded) {\r\n while (bytesNeeded - hexArray.length > 0) {\r\n hexArray.unshift(0);\r\n }\r\n }\r\n\r\n return hexArray;\r\n }\r\n /**\r\n * Converts value to array if needed.\r\n * @param {string} value\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"toArray\",\r\n value: function toArray(value) {\r\n if (Array.isArray(value)) return value;\r\n return [value];\r\n }\r\n /**\r\n * Converts velocity to value 0-127\r\n * @param {number} velocity - Velocity value 1-100\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"convertVelocity\",\r\n value: function convertVelocity(velocity) {\r\n // Max passed value limited to 100\r\n velocity = velocity > 100 ? 100 : velocity;\r\n return Math.round(velocity / 100 * 127);\r\n }\r\n /**\r\n * Gets the total number of ticks of a specified duration.\r\n * Note: type=='note' defaults to quarter note, type==='rest' defaults to 0\r\n * @param {(string|array)} duration\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getTickDuration\",\r\n value: function getTickDuration(duration) {\r\n if (Array.isArray(duration)) {\r\n // Recursively execute this method for each item in the array and return the sum of tick durations.\r\n return duration.map(function (value) {\r\n return Utils.getTickDuration(value);\r\n }).reduce(function (a, b) {\r\n return a + b;\r\n }, 0);\r\n }\r\n\r\n duration = duration.toString();\r\n\r\n if (duration.toLowerCase().charAt(0) === 't') {\r\n // If duration starts with 't' then the number that follows is an explicit tick count\r\n return parseInt(duration.substring(1));\r\n } // Need to apply duration here. Quarter note == Constants.HEADER_CHUNK_DIVISION\r\n\r\n\r\n var quarterTicks = Utils.numberFromBytes(Constants.HEADER_CHUNK_DIVISION);\r\n var tickDuration = quarterTicks * Utils.getDurationMultiplier(duration);\r\n return Utils.getRoundedIfClose(tickDuration);\r\n }\r\n /**\r\n * Due to rounding errors in JavaScript engines,\r\n * it's safe to round when we're very close to the actual tick number\r\n *\r\n * @static\r\n * @param {number} tick\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getRoundedIfClose\",\r\n value: function getRoundedIfClose(tick) {\r\n var roundedTick = Math.round(tick);\r\n return Math.abs(roundedTick - tick) < 0.000001 ? roundedTick : tick;\r\n }\r\n /**\r\n * Due to low precision of MIDI,\r\n * we need to keep track of rounding errors in deltas.\r\n * This function will calculate the rounding error for a given duration.\r\n *\r\n * @static\r\n * @param {number} tick\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getPrecisionLoss\",\r\n value: function getPrecisionLoss(tick) {\r\n var roundedTick = Math.round(tick);\r\n return roundedTick - tick;\r\n }\r\n /**\r\n * Gets what to multiple ticks/quarter note by to get the specified duration.\r\n * Note: type=='note' defaults to quarter note, type==='rest' defaults to 0\r\n * @param {string} duration\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getDurationMultiplier\",\r\n value: function getDurationMultiplier(duration) {\r\n // Need to apply duration here.\r\n // Quarter note == Constants.HEADER_CHUNK_DIVISION ticks.\r\n if (duration === '0') return 0;\r\n var match = duration.match( /*#__PURE__*/_wrapRegExp(/^(d+)?([0-9]+)(?:t([0-9]*))?/, {\r\n dotted: 1,\r\n base: 2,\r\n tuplet: 3\r\n }));\r\n\r\n if (match) {\r\n var base = Number(match.groups.base); // 1 or any power of two:\r\n\r\n var isValidBase = base === 1 || (base & base - 1) === 0;\r\n\r\n if (isValidBase) {\r\n // how much faster or slower is this note compared to a quarter?\r\n var ratio = base / 4;\r\n var durationInQuarters = 1 / ratio;\r\n var _match$groups = match.groups,\r\n dotted = _match$groups.dotted,\r\n tuplet = _match$groups.tuplet;\r\n\r\n if (dotted) {\r\n var thisManyDots = dotted.length;\r\n var divisor = Math.pow(2, thisManyDots);\r\n durationInQuarters = durationInQuarters + durationInQuarters * ((divisor - 1) / divisor);\r\n }\r\n\r\n if (typeof tuplet === 'string') {\r\n var fitInto = durationInQuarters * 2; // default to triplet:\r\n\r\n var thisManyNotes = Number(tuplet || '3');\r\n durationInQuarters = fitInto / thisManyNotes;\r\n }\r\n\r\n return durationInQuarters;\r\n }\r\n }\r\n\r\n throw new Error(duration + ' is not a valid duration.');\r\n }\r\n }]);\r\n\r\n return Utils;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"note on\" MIDI event\r\n * @param {object} fields {data: []}\r\n * @return {NoteOnEvent}\r\n */\r\n\r\nvar NoteOnEvent = /*#__PURE__*/function () {\r\n function NoteOnEvent(fields) {\r\n _classCallCheck(this, NoteOnEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n startTick: null,\r\n velocity: 50,\r\n wait: 0\r\n }, fields);\r\n this.type = 'note-on';\r\n this.channel = fields.channel;\r\n this.pitch = fields.pitch;\r\n this.wait = fields.wait;\r\n this.velocity = fields.velocity;\r\n this.startTick = fields.startTick;\r\n this.midiNumber = Utils.getPitch(this.pitch);\r\n this.tick = null;\r\n this.delta = null;\r\n this.data = fields.data;\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @param {Track} track - parent track\r\n * @return {NoteOnEvent}\r\n */\r\n\r\n\r\n _createClass(NoteOnEvent, [{\r\n key: \"buildData\",\r\n value: function buildData(track, precisionDelta) {\r\n this.data = []; // Explicitly defined startTick event\r\n\r\n if (this.startTick) {\r\n this.tick = Utils.getRoundedIfClose(this.startTick); // If this is the first event in the track then use event's starting tick as delta.\r\n\r\n if (track.tickPointer == 0) {\r\n this.delta = this.tick;\r\n }\r\n } else {\r\n this.delta = Utils.getTickDuration(this.wait);\r\n this.tick = Utils.getRoundedIfClose(track.tickPointer + this.delta);\r\n }\r\n\r\n this.deltaWithPrecisionCorrection = Utils.getRoundedIfClose(this.delta - precisionDelta);\r\n this.data = Utils.numberToVariableLength(this.deltaWithPrecisionCorrection).concat(this.getStatusByte(), this.midiNumber, Utils.convertVelocity(this.velocity));\r\n return this;\r\n }\r\n /**\r\n * Gets the note on status code based on the selected channel. 0x9{0-F}\r\n * Note on at channel 0 is 0x90 (144)\r\n * 0 = Ch 1\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getStatusByte\",\r\n value: function getStatusByte() {\r\n return 144 + this.channel - 1;\r\n }\r\n }]);\r\n\r\n return NoteOnEvent;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"note off\" MIDI event\r\n * @param {object} fields {data: []}\r\n * @return {NoteOffEvent}\r\n */\r\n\r\nvar NoteOffEvent = /*#__PURE__*/function () {\r\n function NoteOffEvent(fields) {\r\n _classCallCheck(this, NoteOffEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n velocity: 50,\r\n tick: null\r\n }, fields);\r\n this.type = 'note-off';\r\n this.channel = fields.channel;\r\n this.pitch = fields.pitch;\r\n this.duration = fields.duration;\r\n this.velocity = fields.velocity;\r\n this.midiNumber = Utils.getPitch(this.pitch);\r\n this.tick = fields.tick;\r\n this.delta = Utils.getTickDuration(this.duration);\r\n this.data = fields.data;\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @param {Track} track - parent track\r\n * @return {NoteOffEvent}\r\n */\r\n\r\n\r\n _createClass(NoteOffEvent, [{\r\n key: \"buildData\",\r\n value: function buildData(track, precisionDelta) {\r\n if (this.tick === null) {\r\n this.tick = Utils.getRoundedIfClose(this.delta + track.tickPointer);\r\n }\r\n\r\n this.deltaWithPrecisionCorrection = Utils.getRoundedIfClose(this.delta - precisionDelta);\r\n this.data = Utils.numberToVariableLength(this.deltaWithPrecisionCorrection).concat(this.getStatusByte(), this.midiNumber, Utils.convertVelocity(this.velocity));\r\n return this;\r\n }\r\n /**\r\n * Gets the note off status code based on the selected channel. 0x8{0-F}\r\n * Note off at channel 0 is 0x80 (128)\r\n * 0 = Ch 1\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getStatusByte\",\r\n value: function getStatusByte() {\r\n return 128 + this.channel - 1;\r\n }\r\n }]);\r\n\r\n return NoteOffEvent;\r\n}();\r\n\r\n/**\r\n * Wrapper for noteOnEvent/noteOffEvent objects that builds both events.\r\n * @param {object} fields - {pitch: '[C4]', duration: '4', wait: '4', velocity: 1-100}\r\n * @return {NoteEvent}\r\n */\r\n\r\nvar NoteEvent = /*#__PURE__*/function () {\r\n function NoteEvent(fields) {\r\n _classCallCheck(this, NoteEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n repeat: 1,\r\n sequential: false,\r\n startTick: null,\r\n velocity: 50,\r\n wait: 0\r\n }, fields);\r\n this.data = [];\r\n this.type = 'note';\r\n this.pitch = Utils.toArray(fields.pitch);\r\n this.channel = fields.channel;\r\n this.duration = fields.duration;\r\n this.grace = fields.grace;\r\n this.repeat = fields.repeat;\r\n this.sequential = fields.sequential;\r\n this.startTick = fields.startTick;\r\n this.velocity = fields.velocity;\r\n this.wait = fields.wait;\r\n this.tickDuration = Utils.getTickDuration(this.duration);\r\n this.restDuration = Utils.getTickDuration(this.wait);\r\n this.events = []; // Hold actual NoteOn/NoteOff events\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @return {NoteEvent}\r\n */\r\n\r\n\r\n _createClass(NoteEvent, [{\r\n key: \"buildData\",\r\n value: function buildData() {\r\n var _this = this;\r\n\r\n // Reset data array\r\n this.data = [];\r\n this.tickDuration;\r\n this.restDuration; // Apply grace note(s) and subtract ticks (currently 1 tick per grace note) from tickDuration so net value is the same\r\n\r\n if (this.grace) {\r\n var graceDuration = 1;\r\n this.grace = Utils.toArray(this.grace);\r\n this.grace.forEach(function (pitch) {\r\n var noteEvent = new NoteEvent({\r\n pitch: _this.grace,\r\n duration: 'T' + graceDuration\r\n });\r\n _this.data = _this.data.concat(noteEvent.data);\r\n });\r\n } // fields.pitch could be an array of pitches.\r\n // If this.sequential === true then it's a sequential string of notes that requires separate NoteOnEvents.\r\n\r\n if (!this.sequential) {\r\n // Handle repeat\r\n for (var j = 0; j < this.repeat; j++) {\r\n // Note on\r\n this.pitch.forEach(function (p, i) {\r\n if (i == 0) {\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: _this.wait,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n } else {\r\n // Running status (can ommit the note on status)\r\n //noteOn = new NoteOnEvent({data: [0, Utils.getPitch(p), Utils.convertVelocity(this.velocity)]});\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: 0,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n }\r\n\r\n _this.events.push(noteOnNew);\r\n }); // Note off\r\n\r\n this.pitch.forEach(function (p, i) {\r\n if (i == 0) {\r\n //noteOff = new NoteOffEvent({data: Utils.numberToVariableLength(tickDuration).concat(this.getNoteOffStatus(), Utils.getPitch(p), Utils.convertVelocity(this.velocity))});\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: _this.duration,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n tick: _this.startTick !== null ? Utils.getTickDuration(_this.duration) - _this.startTick : null\r\n });\r\n } else {\r\n // Running status (can ommit the note off status)\r\n //noteOff = new NoteOffEvent({data: [0, Utils.getPitch(p), Utils.convertVelocity(this.velocity)]});\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: 0,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n tick: _this.startTick !== null ? Utils.getTickDuration(_this.duration) - _this.startTick : null\r\n });\r\n }\r\n\r\n _this.events.push(noteOffNew);\r\n });\r\n }\r\n } else {\r\n // Handle repeat\r\n for (var j = 0; j < this.repeat; j++) {\r\n this.pitch.forEach(function (p, i) {\r\n\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: i > 0 ? 0 : _this.wait,\r\n // wait only applies to first note in repetition\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: _this.duration,\r\n velocity: _this.velocity,\r\n pitch: p\r\n });\r\n\r\n _this.events.push(noteOnNew, noteOffNew);\r\n });\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n }]);\r\n\r\n return NoteEvent;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"Pitch Bend\" MIDI event\r\n * [ -1.0, 0, 1.0 ] -> [ 0, 8192, 16383]\r\n * @param {object} fields { bend : float, channel : int }\r\n * @return {PitchBendEvent}\r\n */\r\n\r\nvar scale14bits = function scale14bits(zeroOne) {\r\n if (zeroOne <= 0) {\r\n return Math.floor(16384 * (zeroOne + 1) / 2);\r\n }\r\n\r\n return Math.floor(16383 * (zeroOne + 1) / 2);\r\n};\r\n\r\nvar PitchBendEvent = function PitchBendEvent(fields) {\r\n _classCallCheck(this, PitchBendEvent);\r\n\r\n this.type = 'pitch-bend';\r\n var bend14 = scale14bits(fields.bend);\r\n var channel = fields.channel || 0;\r\n var lsbValue = bend14 & 0x7f;\r\n var msbValue = bend14 >> 7 & 0x7f;\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.PITCH_BEND_STATUS | channel, lsbValue, msbValue);\r\n};\r\n\r\n/**\r\n * Holds all data for a \"program change\" MIDI event\r\n * @param {object} fields {instrument: integer}\r\n * @return {ProgramChangeEvent}\r\n */\r\n\r\nvar ProgramChangeEvent = function ProgramChangeEvent(fields) {\r\n _classCallCheck(this, ProgramChangeEvent);\r\n\r\n this.type = 'program'; // delta time defaults to 0.\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.PROGRAM_CHANGE_STATUS, fields.instrument);\r\n};\r\n\r\n/**\r\n * Holds all data for a \"controller change\" MIDI event\r\n * @param {object} fields {controllerNumber: integer, controllerValue: integer}\r\n * @return {ControllerChangeEvent}\r\n */\r\n\r\nvar ControllerChangeEvent = function ControllerChangeEvent(fields) {\r\n _classCallCheck(this, ControllerChangeEvent);\r\n\r\n this.type = 'controller'; // delta time defaults to 0.\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.CONTROLLER_CHANGE_STATUS, fields.controllerNumber, fields.controllerValue);\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {string} text - Copyright text\r\n * @return {CopyrightEvent}\r\n */\r\n\r\nvar CopyrightEvent = function CopyrightEvent(text) {\r\n _classCallCheck(this, CopyrightEvent);\r\n\r\n this.type = 'copyright';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_COPYRIGHT_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a cue point meta event.\r\n * @param {string} text - Cue point text\r\n * @return {CuePointEvent}\r\n */\r\n\r\nvar CuePointEvent = function CuePointEvent(text) {\r\n _classCallCheck(this, CuePointEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_CUE_POINT, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a end track meta event.\r\n * @return {EndTrackEvent}\r\n */\r\n\r\nvar EndTrackEvent = function EndTrackEvent() {\r\n _classCallCheck(this, EndTrackEvent);\r\n\r\n this.type = 'end-track'; // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_END_OF_TRACK_ID);\r\n};\r\n\r\n/**\r\n * Object representation of an instrument name meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {InstrumentNameEvent}\r\n */\r\n\r\nvar InstrumentNameEvent = function InstrumentNameEvent(text) {\r\n _classCallCheck(this, InstrumentNameEvent);\r\n\r\n this.type = 'instrument-name';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_INSTRUMENT_NAME_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Instrument name\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a key signature meta event.\r\n * @return {KeySignatureEvent}\r\n */\r\n\r\nvar KeySignatureEvent = function KeySignatureEvent(sf, mi) {\r\n _classCallCheck(this, KeySignatureEvent);\r\n\r\n this.type = 'key-signature';\r\n var mode = mi || 0;\r\n sf = sf || 0; //\tFunction called with string notation\r\n\r\n if (typeof mi === 'undefined') {\r\n var fifths = [['Cb', 'Gb', 'Db', 'Ab', 'Eb', 'Bb', 'F', 'C', 'G', 'D', 'A', 'E', 'B', 'F#', 'C#'], ['ab', 'eb', 'bb', 'f', 'c', 'g', 'd', 'a', 'e', 'b', 'f#', 'c#', 'g#', 'd#', 'a#']];\r\n var _sflen = sf.length;\r\n var note = sf || 'C';\r\n if (sf[0] === sf[0].toLowerCase()) mode = 1;\r\n\r\n if (_sflen > 1) {\r\n switch (sf.charAt(_sflen - 1)) {\r\n case 'm':\r\n mode = 1;\r\n note = sf.charAt(0).toLowerCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case '-':\r\n mode = 1;\r\n note = sf.charAt(0).toLowerCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case 'M':\r\n mode = 0;\r\n note = sf.charAt(0).toUpperCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case '+':\r\n mode = 0;\r\n note = sf.charAt(0).toUpperCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n }\r\n }\r\n\r\n var fifthindex = fifths[mode].indexOf(note);\r\n sf = fifthindex === -1 ? 0 : fifthindex - 7;\r\n } // Start with zero time delta\r\n\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_KEY_SIGNATURE_ID, [0x02], // Size\r\n Utils.numberToBytes(sf, 1), // Number of sharp or flats ( < 0 flat; > 0 sharp)\r\n Utils.numberToBytes(mode, 1) // Mode: 0 major, 1 minor\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a lyric meta event.\r\n * @param {string} text - Lyric text\r\n * @return {LyricEvent}\r\n */\r\n\r\nvar LyricEvent = function LyricEvent(text) {\r\n _classCallCheck(this, LyricEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_LYRIC_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a marker meta event.\r\n * @param {string} text - Marker text\r\n * @return {MarkerEvent}\r\n */\r\n\r\nvar MarkerEvent = function MarkerEvent(text) {\r\n _classCallCheck(this, MarkerEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_MARKER_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TempoEvent}\r\n */\r\n\r\nvar TempoEvent = function TempoEvent(bpm) {\r\n _classCallCheck(this, TempoEvent);\r\n\r\n this.type = 'tempo';\r\n var tempo = Math.round(60000000 / bpm); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TEMPO_ID, [0x03], // Size\r\n Utils.numberToBytes(tempo, 3) // Tempo, 3 bytes\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TextEvent}\r\n */\r\n\r\nvar TextEvent = function TextEvent(text) {\r\n _classCallCheck(this, TextEvent);\r\n\r\n this.type = 'text';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TEXT_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a time signature meta event.\r\n * @return {TimeSignatureEvent}\r\n */\r\n\r\nvar TimeSignatureEvent = function TimeSignatureEvent(numerator, denominator, midiclockspertick, notespermidiclock) {\r\n _classCallCheck(this, TimeSignatureEvent);\r\n\r\n this.type = 'time-signature'; // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TIME_SIGNATURE_ID, [0x04], // Size\r\n Utils.numberToBytes(numerator, 1), // Numerator, 1 bytes\r\n Utils.numberToBytes(Math.log2(denominator), 1), // Denominator is expressed as pow of 2, 1 bytes\r\n Utils.numberToBytes(midiclockspertick || 24, 1), // MIDI Clocks per tick, 1 bytes\r\n Utils.numberToBytes(notespermidiclock || 8, 1) // Number of 1/32 notes per MIDI clocks, 1 bytes\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TrackNameEvent}\r\n */\r\n\r\nvar TrackNameEvent = function TrackNameEvent(text) {\r\n _classCallCheck(this, TrackNameEvent);\r\n\r\n this.type = 'track-name';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TRACK_NAME_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Holds all data for a track.\r\n * @param {object} fields {type: number, data: array, size: array, events: array}\r\n * @return {Track}\r\n */\r\n\r\nvar Track = /*#__PURE__*/function () {\r\n function Track() {\r\n _classCallCheck(this, Track);\r\n\r\n this.type = Constants.TRACK_CHUNK_TYPE;\r\n this.data = [];\r\n this.size = [];\r\n this.events = [];\r\n this.explicitTickEvents = []; // If there are any events with an explicit tick defined then we will create a \"sub\" track for those\r\n // and merge them in and the end.\r\n\r\n this.tickPointer = 0; // Each time an event is added this will increase\r\n }\r\n /**\r\n * Adds any event type to the track.\r\n * Events without a specific startTick property are assumed to be added in order of how they should output.\r\n * Events with a specific startTick property are set aside for now will be merged in during build process.\r\n * @param {(NoteEvent|ProgramChangeEvent)} events - Event object or array of Event objects.\r\n * @param {function} mapFunction - Callback which can be used to apply specific properties to all events.\r\n * @return {Track}\r\n */\r\n\r\n\r\n _createClass(Track, [{\r\n key: \"addEvent\",\r\n value: function addEvent(events, mapFunction) {\r\n var _this = this;\r\n\r\n Utils.toArray(events).forEach(function (event, i) {\r\n if (event instanceof NoteEvent) {\r\n // Handle map function if provided\r\n if (typeof mapFunction === 'function') {\r\n var properties = mapFunction(i, event);\r\n\r\n if (_typeof(properties) === 'object') {\r\n for (var j in properties) {\r\n switch (j) {\r\n case 'channel':\r\n event.channel = properties[j];\r\n break;\r\n\r\n case 'duration':\r\n event.duration = properties[j];\r\n break;\r\n\r\n case 'sequential':\r\n event.sequential = properties[j];\r\n break;\r\n\r\n case 'velocity':\r\n event.velocity = Utils.convertVelocity(properties[j]);\r\n break;\r\n }\r\n }\r\n }\r\n } // If this note event has an explicit startTick then we need to set aside for now\r\n\r\n\r\n if (event.startTick !== null) {\r\n _this.explicitTickEvents.push(event);\r\n } else {\r\n // Push each on/off event to track's event stack\r\n event.buildData().events.forEach(function (e) {\r\n return _this.events.push(e);\r\n });\r\n }\r\n } else {\r\n _this.events.push(event);\r\n }\r\n });\r\n return this;\r\n }\r\n /**\r\n * Builds int array of all events.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"buildData\",\r\n value: function buildData() {\r\n var _this2 = this;\r\n\r\n // Remove existing end track event and add one.\r\n // This makes sure it's at the very end of the event list.\r\n this.removeEventsByType('end-track').addEvent(new EndTrackEvent()); // Reset\r\n\r\n this.data = [];\r\n this.size = [];\r\n this.tickPointer = 0;\r\n var precisionLoss = 0;\r\n this.events.forEach(function (event, eventIndex) {\r\n // Build event & add to total tick duration\r\n if (event instanceof NoteOnEvent || event instanceof NoteOffEvent) {\r\n var built = event.buildData(_this2, precisionLoss);\r\n precisionLoss = Utils.getPrecisionLoss(event.deltaWithPrecisionCorrection || 0);\r\n _this2.data = _this2.data.concat(built.data);\r\n _this2.tickPointer = Utils.getRoundedIfClose(event.tick);\r\n } else {\r\n _this2.data = _this2.data.concat(event.data);\r\n }\r\n });\r\n this.mergeExplicitTickEvents();\r\n this.size = Utils.numberToBytes(this.data.length, 4); // 4 bytes long\r\n\r\n return this;\r\n }\r\n }, {\r\n key: \"mergeExplicitTickEvents\",\r\n value: function mergeExplicitTickEvents() {\r\n var _this3 = this;\r\n\r\n if (!this.explicitTickEvents.length) return; // First sort asc list of events by startTick\r\n\r\n this.explicitTickEvents.sort(function (a, b) {\r\n return a.startTick - b.startTick;\r\n }); // Now this.explicitTickEvents is in correct order, and so is this.events naturally.\r\n // For each explicit tick event, splice it into the main list of events and\r\n // adjust the delta on the following events so they still play normally.\r\n\r\n this.explicitTickEvents.forEach(function (noteEvent) {\r\n // Convert NoteEvent to it's respective NoteOn/NoteOff events\r\n // Note that as we splice in events the delta for the NoteOff ones will\r\n // Need to change based on what comes before them after the splice.\r\n noteEvent.buildData().events.forEach(function (e) {\r\n return e.buildData(_this3);\r\n }); // Merge each event indivually into this track's event list.\r\n\r\n noteEvent.events.forEach(function (event) {\r\n return _this3.mergeSingleEvent(event);\r\n });\r\n }); // Hacky way to rebuild track with newly spliced events. Need better solution.\r\n\r\n this.explicitTickEvents = [];\r\n this.buildData();\r\n }\r\n /**\r\n * Merges another track's events with this track.\r\n * @param {Track} track\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"mergeTrack\",\r\n value: function mergeTrack(track) {\r\n var _this4 = this;\r\n\r\n // First build this track to populate each event's tick property\r\n this.buildData(); // Then build track to be merged so that tick property is populated on all events & merge each event.\r\n\r\n track.buildData().events.forEach(function (event) {\r\n return _this4.mergeSingleEvent(event);\r\n });\r\n }\r\n /**\r\n * Merges a single event into this track's list of events based on event.tick property.\r\n * @param {NoteOnEvent|NoteOffEvent} - event\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"mergeSingleEvent\",\r\n value: function mergeSingleEvent(event) {\r\n // Find index of existing event we need to follow with\r\n var lastEventIndex = 0;\r\n\r\n for (var i = 0; i < this.events.length; i++) {\r\n if (this.events[i].tick > event.tick) break;\r\n lastEventIndex = i;\r\n }\r\n\r\n var splicedEventIndex = lastEventIndex + 1; // Need to adjust the delta of this event to ensure it falls on the correct tick.\r\n\r\n event.delta = event.tick - this.events[lastEventIndex].tick; // Splice this event at lastEventIndex + 1\r\n\r\n this.events.splice(splicedEventIndex, 0, event); // Now adjust delta of all following events\r\n\r\n for (var i = splicedEventIndex + 1; i < this.events.length; i++) {\r\n // Since each existing event should have a tick value at this point we just need to\r\n // adjust delta to that the event still falls on the correct tick.\r\n this.events[i].delta = this.events[i].tick - this.events[i - 1].tick;\r\n }\r\n }\r\n /**\r\n * Removes all events matching specified type.\r\n * @param {string} eventType - Event type\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"removeEventsByType\",\r\n value: function removeEventsByType(eventType) {\r\n var _this5 = this;\r\n\r\n this.events.forEach(function (event, index) {\r\n if (event.type === eventType) {\r\n _this5.events.splice(index, 1);\r\n }\r\n });\r\n return this;\r\n }\r\n /**\r\n * Sets tempo of the MIDI file.\r\n * @param {number} bpm - Tempo in beats per minute.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setTempo\",\r\n value: function setTempo(bpm) {\r\n return this.addEvent(new TempoEvent(bpm));\r\n }\r\n /**\r\n * Sets time signature.\r\n * @param {number} numerator - Top number of the time signature.\r\n * @param {number} denominator - Bottom number of the time signature.\r\n * @param {number} midiclockspertick - Defaults to 24.\r\n * @param {number} notespermidiclock - Defaults to 8.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setTimeSignature\",\r\n value: function setTimeSignature(numerator, denominator, midiclockspertick, notespermidiclock) {\r\n return this.addEvent(new TimeSignatureEvent(numerator, denominator, midiclockspertick, notespermidiclock));\r\n }\r\n /**\r\n * Sets key signature.\r\n * @param {*} sf -\r\n * @param {*} mi -\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setKeySignature\",\r\n value: function setKeySignature(sf, mi) {\r\n return this.addEvent(new KeySignatureEvent(sf, mi));\r\n }\r\n /**\r\n * Adds text to MIDI file.\r\n * @param {string} text - Text to add.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addText\",\r\n value: function addText(text) {\r\n return this.addEvent(new TextEvent(text));\r\n }\r\n /**\r\n * Adds copyright to MIDI file.\r\n * @param {string} text - Text of copyright line.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addCopyright\",\r\n value: function addCopyright(text) {\r\n return this.addEvent(new CopyrightEvent(text));\r\n }\r\n /**\r\n * Adds Sequence/Track Name.\r\n * @param {string} text - Text of track name.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addTrackName\",\r\n value: function addTrackName(text) {\r\n return this.addEvent(new TrackNameEvent(text));\r\n }\r\n /**\r\n * Sets instrument name of track.\r\n * @param {string} text - Name of instrument.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addInstrumentName\",\r\n value: function addInstrumentName(text) {\r\n return this.addEvent(new InstrumentNameEvent(text));\r\n }\r\n /**\r\n * Adds marker to MIDI file.\r\n * @param {string} text - Marker text.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addMarker\",\r\n value: function addMarker(text) {\r\n return this.addEvent(new MarkerEvent(text));\r\n }\r\n /**\r\n * Adds cue point to MIDI file.\r\n * @param {string} text - Text of cue point.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addCuePoint\",\r\n value: function addCuePoint(text) {\r\n return this.addEvent(new CuePointEvent(text));\r\n }\r\n /**\r\n * Adds lyric to MIDI file.\r\n * @param {string} text - Lyric text to add.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addLyric\",\r\n value: function addLyric(text) {\r\n return this.addEvent(new LyricEvent(text));\r\n }\r\n /**\r\n * Channel mode messages\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"polyModeOn\",\r\n value: function polyModeOn() {\r\n var event = new NoteOnEvent({\r\n data: [0x00, 0xB0, 0x7E, 0x00]\r\n });\r\n return this.addEvent(event);\r\n }\r\n /**\r\n * Sets a pitch bend.\r\n * @param {float} bend - Bend value ranging [-1,1], zero meaning no bend.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setPitchBend\",\r\n value: function setPitchBend(bend) {\r\n return this.addEvent(new PitchBendEvent({\r\n bend: bend\r\n }));\r\n }\r\n /**\r\n * Adds a controller change event\r\n * @param {number} number - Control number.\r\n * @param {number} value - Control value.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"controllerChange\",\r\n value: function controllerChange(number, value) {\r\n return this.addEvent(new ControllerChangeEvent({\r\n controllerNumber: number,\r\n controllerValue: value\r\n }));\r\n }\r\n }]);\r\n\r\n return Track;\r\n}();\r\n\r\nvar VexFlow = /*#__PURE__*/function () {\r\n function VexFlow() {\r\n _classCallCheck(this, VexFlow);\r\n }\r\n\r\n _createClass(VexFlow, [{\r\n key: \"trackFromVoice\",\r\n value:\r\n /**\r\n * Support for converting VexFlow voice into MidiWriterJS track\r\n * @return MidiWriter.Track object\r\n */\r\n function trackFromVoice(voice) {\r\n var _this = this;\r\n\r\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\r\n addRenderedAccidentals: false\r\n };\r\n var track = new Track();\r\n var wait = [];\r\n voice.tickables.forEach(function (tickable) {\r\n if (tickable.noteType === 'n') {\r\n track.addEvent(new NoteEvent({\r\n pitch: tickable.keys.map(function (pitch, index) {\r\n return _this.convertPitch(pitch, index, tickable, options.addRenderedAccidentals);\r\n }),\r\n duration: _this.convertDuration(tickable),\r\n wait: wait\r\n })); // reset wait\r\n\r\n wait = [];\r\n } else if (tickable.noteType === 'r') {\r\n // move on to the next tickable and add this to the stack\r\n // of the `wait` property for the next note event\r\n wait.push(_this.convertDuration(tickable));\r\n return;\r\n }\r\n }); // There may be outstanding rests at the end of the track,\r\n // pad with a ghost note (zero duration and velocity), just to capture the wait.\r\n\r\n if (wait.length > 0) {\r\n track.addEvent(new NoteEvent({\r\n pitch: '[c4]',\r\n duration: '0',\r\n wait: wait,\r\n velocity: '0'\r\n }));\r\n }\r\n\r\n return track;\r\n }\r\n /**\r\n * Converts VexFlow pitch syntax to MidiWriterJS syntax\r\n * @param pitch string\r\n * @param index pitch index\r\n * @param note struct from Vexflow\r\n * @param addRenderedAccidentals adds Vexflow rendered accidentals\r\n */\r\n\r\n }, {\r\n key: \"convertPitch\",\r\n value: function convertPitch(pitch, index, note) {\r\n var addRenderedAccidentals = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n // Splits note name from octave\r\n var pitchParts = pitch.split('/'); // Retrieves accidentals from pitch\r\n // Removes natural accidentals since they are not accepted in Tonal Midi\r\n\r\n var accidentals = pitchParts[0].substring(1).replace('n', '');\r\n\r\n if (addRenderedAccidentals) {\r\n var _note$getAccidentals;\r\n\r\n (_note$getAccidentals = note.getAccidentals()) === null || _note$getAccidentals === void 0 ? void 0 : _note$getAccidentals.forEach(function (accidental) {\r\n if (accidental.index === index) {\r\n if (accidental.type === 'n') {\r\n accidentals = '';\r\n } else {\r\n accidentals += accidental.type;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return pitchParts[0][0] + accidentals + pitchParts[1];\r\n }\r\n /**\r\n * Converts VexFlow duration syntax to MidiWriterJS syntax\r\n * @param note struct from VexFlow\r\n */\r\n\r\n }, {\r\n key: \"convertDuration\",\r\n value: function convertDuration(note) {\r\n return 'd'.repeat(note.dots) + this.convertBaseDuration(note.duration) + (note.tuplet ? 't' + note.tuplet.num_notes : '');\r\n }\r\n /**\r\n * Converts VexFlow base duration syntax to MidiWriterJS syntax\r\n * @param duration Vexflow duration\r\n * @returns MidiWriterJS duration\r\n */\r\n\r\n }, {\r\n key: \"convertBaseDuration\",\r\n value: function convertBaseDuration(duration) {\r\n switch (duration) {\r\n case 'w':\r\n return '1';\r\n\r\n case 'h':\r\n return '2';\r\n\r\n case 'q':\r\n return '4';\r\n\r\n default:\r\n return duration;\r\n }\r\n }\r\n }]);\r\n\r\n return VexFlow;\r\n}();\r\n\r\n/**\r\n * Object representation of a header chunk section of a MIDI file.\r\n * @param {number} numberOfTracks - Number of tracks\r\n * @return {HeaderChunk}\r\n */\r\n\r\nvar HeaderChunk = function HeaderChunk(numberOfTracks) {\r\n _classCallCheck(this, HeaderChunk);\r\n\r\n this.type = Constants.HEADER_CHUNK_TYPE;\r\n var trackType = numberOfTracks > 1 ? Constants.HEADER_CHUNK_FORMAT1 : Constants.HEADER_CHUNK_FORMAT0;\r\n this.data = trackType.concat(Utils.numberToBytes(numberOfTracks, 2), // two bytes long,\r\n Constants.HEADER_CHUNK_DIVISION);\r\n this.size = [0, 0, 0, this.data.length];\r\n};\r\n\r\n/**\r\n * Object that puts together tracks and provides methods for file output.\r\n * @param {array|Track} tracks - A single {Track} object or an array of {Track} objects.\r\n * @return {Writer}\r\n */\r\n\r\nvar Writer = /*#__PURE__*/function () {\r\n function Writer(tracks) {\r\n var _this = this;\r\n\r\n _classCallCheck(this, Writer);\r\n\r\n // Ensure track is an array\r\n tracks = Utils.toArray(tracks);\r\n this.data = [];\r\n this.data.push(new HeaderChunk(tracks.length)); // For each track add final end of track event and build data\r\n\r\n tracks.forEach(function (track, i) {\r\n _this.data.push(track.buildData());\r\n });\r\n }\r\n /**\r\n * Builds the file into a Uint8Array\r\n * @return {Uint8Array}\r\n */\r\n\r\n\r\n _createClass(Writer, [{\r\n key: \"buildFile\",\r\n value: function buildFile() {\r\n var build = []; // Data consists of chunks which consists of data\r\n\r\n this.data.forEach(function (d) {\r\n return build = build.concat(d.type, d.size, d.data);\r\n });\r\n return new Uint8Array(build);\r\n }\r\n /**\r\n * Convert file buffer to a base64 string. Different methods depending on if browser or node.\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"base64\",\r\n value: function base64() {\r\n if (typeof btoa === 'function') return btoa(String.fromCharCode.apply(null, this.buildFile()));\r\n return Buffer.from(this.buildFile()).toString('base64');\r\n }\r\n /**\r\n * Get the data URI.\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"dataUri\",\r\n value: function dataUri() {\r\n return 'data:audio/midi;base64,' + this.base64();\r\n }\r\n /**\r\n * Output to stdout\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"stdout\",\r\n value: function stdout() {\r\n return process.stdout.write(new Buffer(this.buildFile()));\r\n }\r\n /**\r\n * Save to MIDI file\r\n * @param {string} filename\r\n */\r\n\r\n }, /* {\r\n key: \"saveMIDI\",\r\n value: function saveMIDI(filename) {\r\n var fs = require('fs');\r\n\r\n var buffer = new Buffer.from(this.buildFile());\r\n fs.writeFile(filename + '.mid', buffer, function (err) {\r\n if (err) throw err;\r\n });\r\n } \r\n } */ \r\n]); \r\n\r\n return Writer;\r\n}();\r\n\r\nvar main = {\r\n Constants: Constants,\r\n NoteOnEvent: NoteOnEvent,\r\n NoteOffEvent: NoteOffEvent,\r\n NoteEvent: NoteEvent,\r\n PitchBendEvent: PitchBendEvent,\r\n ProgramChangeEvent: ProgramChangeEvent,\r\n Track: Track,\r\n Utils: Utils,\r\n VexFlow: VexFlow,\r\n Writer: Writer\r\n};\r\nwindow.MidiWriter = main;\r\n};\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiRenderState } from \"../render/sui/renderState\";\r\n\r\nexport type promiseFunction = () => void;\r\nexport type promiseCondition = () => boolean;\r\nexport type promiseInstance = () => Promise;\r\nexport interface PromiseParameters {\r\n endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number\r\n}\r\n\r\nexport function TEmptyPromise(obj: T): Promise {\r\n return new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve(obj);\r\n }, 1);\r\n });\r\n}\r\nexport class PromiseHelpers {\r\n // ### makePromise\r\n // poll on endCondition at a rate of pollTime. Resolve the promise\r\n // when endCondition is met, calling preResolveMethod first. On\r\n // polls where the end condition is not met, call pollMethod\r\n // Resolve method and pollMethod are optional\r\n static makePromise(endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number): Promise {\r\n return new Promise((resolve: any) => {\r\n const checkit = () => {\r\n setTimeout(() => {\r\n if (endCondition()) {\r\n if (preResolveMethod) {\r\n preResolveMethod();\r\n }\r\n resolve();\r\n }\r\n else {\r\n if (pollMethod) {\r\n pollMethod();\r\n }\r\n checkit();\r\n }\r\n }, pollTime);\r\n }\r\n checkit();\r\n });\r\n }\r\n\r\n static makePromiseObj(endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number) {\r\n return {\r\n endCondition,\r\n preResolveMethod,\r\n pollMethod,\r\n pollTime\r\n };\r\n }\r\n // ### promiseChainThen\r\n // Call a chain of promises in array order, with parameters of makePromise\r\n static async promiseChainThen(params: PromiseParameters[]) {\r\n const promiseArray: promiseInstance[] = [];\r\n params.forEach((param) => {\r\n promiseArray.push(\r\n async () => {\r\n return PromiseHelpers.makePromise(\r\n param.endCondition,\r\n param.preResolveMethod,\r\n param.pollMethod,\r\n param.pollTime\r\n );\r\n });\r\n });\r\n let result: Promise;\r\n for (const f of promiseArray) {\r\n result = await f();\r\n }\r\n\r\n\t\treturn result!;\r\n }\r\n static emptyPromise(): Promise {\r\n return new Promise((resolve: any) => {\r\n setTimeout(() => {\r\n resolve();\r\n }, 1);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n// ## smoSerialize\r\n// Helper functions that perform serialized merges, general JSON\r\n// types of routines.\r\n// ---\r\nexport class smoSerialize {\r\n static vexMerge(dest, src) {\r\n if (typeof (src) === 'undefined') {\r\n return;\r\n }\r\n const keys = Object.keys(src);\r\n keys.forEach((key) => {\r\n dest[key] = src[key];\r\n }); \r\n }\r\n static tryParseUnicode(text) {\r\n let rv = text;\r\n try {\r\n eval('rv=\"' + text + '\"');\r\n } catch (ex) {\r\n console.log('bad unicode');\r\n }\r\n return rv;\r\n }\r\n\r\n // ### filteredMerge\r\n // Like vexMerge, but only for specific attributes.\r\n static filteredMerge(attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) != 'undefined') {\r\n dest[attr] = src[attr];\r\n }\r\n });\r\n }\r\n\r\n static get localScore() {\r\n return '_smoosicScore';\r\n }\r\n\r\n static loadRemoteFile(path) {\r\n const req = new XMLHttpRequest();\r\n req.addEventListener('load', () => {\r\n callback(req.responseText);\r\n });\r\n req.open('GET', path);\r\n req.send();\r\n }\r\n\r\n // This is the token map we use to reduce the size of\r\n // serialized data.\r\n static get tokenMap() {\r\n var _tm = `{\r\n \"a\": \"score\",\r\n \"b\": \"layout\",\r\n \"c\": \"leftMargin\",\r\n \"d\": \"rightMargin\",\r\n \"e\": \"topMargin\",\r\n \"f\": \"bottomMargin\",\r\n \"g\": \"pageWidth\",\r\n \"h\": \"pageHeight\",\r\n \"i\": \"orientation\",\r\n \"j\": \"interGap\",\r\n \"k\": \"intraGap\",\r\n \"l\": \"svgScale\",\r\n \"m\": \"zoomScale\",\r\n \"n\": \"zoomMode\",\r\n \"o\": \"pages\",\r\n \"p\": \"pageSize\",\r\n \"q\": \"startIndex\",\r\n \"r\": \"renumberingMap\",\r\n \"s\": \"staves\",\r\n \"t\": \"staffId\",\r\n \"u\": \"staffX\",\r\n \"v\": \"staffY\",\r\n \"w\": \"adjY\",\r\n \"x\": \"staffWidth\",\r\n \"y\": \"staffHeight\",\r\n \"z\": \"keySignatureMap\",\r\n \"aa\": \"instrumentInfo\",\r\n \"ba\": \"instrumentName\",\r\n \"ca\": \"keyOffset\",\r\n \"da\": \"clef\",\r\n \"ea\": \"modifiers\",\r\n \"fa\": \"startSelector\",\r\n \"ga\": \"staff\",\r\n \"ha\": \"measure\",\r\n \"ia\": \"voice\",\r\n \"ja\": \"tick\",\r\n \"ka\": \"pitches\",\r\n \"la\": \"endSelector\",\r\n \"ma\": \"xOffset\",\r\n \"na\": \"cp1y\",\r\n \"oa\": \"cp2y\",\r\n \"pa\": \"attrs\",\r\n \"qa\": \"id\",\r\n \"ra\": \"type\",\r\n \"sa\": \"ctor\",\r\n \"ta\": \"yOffset\",\r\n \"ua\": \"position\",\r\n \"va\": \"measures\",\r\n \"wa\": \"timeSignature\",\r\n \"xa\": \"keySignature\",\r\n \"ya\": \"measureNumber\",\r\n \"za\": \"measureIndex\",\r\n \"ab\": \"systemIndex\",\r\n \"bb\": \"adjX\",\r\n \"cb\": \"tuplets\",\r\n \"db\": \"voices\",\r\n \"eb\": \"notes\",\r\n \"fb\": \"ticks\",\r\n \"gb\": \"numerator\",\r\n \"hb\": \"denominator\",\r\n \"ib\": \"remainder\",\r\n \"jb\": \"letter\",\r\n \"kb\": \"octave\",\r\n \"lb\": \"accidental\",\r\n \"mb\": \"symbol\",\r\n \"nb\": \"bpm\",\r\n \"ob\": \"display\",\r\n \"pb\": \"beatDuration\",\r\n \"qb\": \"beamBeats\",\r\n \"rb\": \"endBeam\",\r\n \"sb\": \"textModifiers\",\r\n \"tb\": \"text\",\r\n \"ub\": \"endChar\",\r\n \"vb\": \"fontInfo\",\r\n \"wb\": \"size\",\r\n \"xb\": \"family\",\r\n \"yb\": \"style\",\r\n \"zb\": \"weight\",\r\n \"ac\": \"classes\",\r\n \"bc\": \"verse\",\r\n \"cc\": \"fill\",\r\n \"dc\": \"scaleX\",\r\n \"ec\": \"scaleY\",\r\n \"fc\": \"translateX\",\r\n \"gc\": \"translateY\",\r\n \"hc\": \"selector\",\r\n \"ic\": \"renderedBox\",\r\n \"jc\": \"x\",\r\n \"kc\": \"y\",\r\n \"lc\": \"width\",\r\n \"mc\": \"height\",\r\n \"nc\": \"logicalBox\",\r\n \"oc\": \"noteType\",\r\n \"pc\": \"cautionary\",\r\n \"qc\": \"articulations\",\r\n \"rc\": \"articulation\",\r\n \"sc\": \"activeVoice\",\r\n \"tc\": \"flagState\",\r\n \"uc\": \"invert\",\r\n \"vc\": \"fontSize\",\r\n \"wc\": \"yOffsetLine\",\r\n \"xc\": \"yOffsetPixels\",\r\n \"yc\": \"scoreText\",\r\n \"zc\": \"backup\",\r\n \"ad\": \"edited\",\r\n \"bd\": \"pagination\",\r\n \"cd\": \"boxModel\",\r\n \"dd\": \"justification\",\r\n \"ed\": \"autoLayout\",\r\n \"fd\": \"ornaments\",\r\n \"gd\": \"offset\",\r\n \"hd\": \"ornament\",\r\n \"id\": \"tempoMode\",\r\n \"jd\": \"tempoText\",\r\n \"kd\": \"barline\",\r\n \"ld\": \"systemBreak\",\r\n \"md\": \"graceNotes\",\r\n \"nd\": \"tones\",\r\n \"od\": \"tuplet\",\r\n \"pd\": \"beam_group\",\r\n \"qd\": \"renderId\",\r\n \"rd\": \"numNotes\",\r\n \"sd\": \"totalTicks\",\r\n \"td\": \"stemTicks\",\r\n \"ud\": \"durationMap\",\r\n \"vd\": \"bracketed\",\r\n \"wd\": \"ratioed\",\r\n \"xd\": \"location\",\r\n \"yd\": \"systemGroups\",\r\n \"zd\": \"leftConnector\",\r\n \"ae\": \"padLeft\",\r\n \"be\": \"customStretch\",\r\n \"ce\": \"engravingFont\",\r\n \"de\": \"customProportion\",\r\n \"ee\": \"columnAttributeMap\",\r\n \"fe\": \"tempo\",\r\n \"ge\": \"textGroups\",\r\n \"he\": \"textBlocks\",\r\n \"ie\": \"backupBlocks\",\r\n \"je\": \"blocks\",\r\n \"ke\": \"_text\",\r\n \"le\": \"parser\",\r\n \"me\": \"fonts\",\r\n \"ne\": \"name\",\r\n \"oe\": \"purpose\",\r\n \"pe\": \"custom\",\r\n \"qe\": \"transposeIndex\",\r\n \"re\": \"noteHead\",\r\n \"se\": \"slash\",\r\n \"te\": \"pointSize\",\r\n \"ue\": \"spacing\",\r\n \"ve\": \"relativePosition\",\r\n \"we\": \"activeText\",\r\n \"xe\": \"attachToSelector\",\r\n \"ye\": \"musicXOffset\",\r\n \"ze\": \"musicYOffset\",\r\n \"af\": \"formattingIterations\",\r\n \"bf\": \"startBar\",\r\n \"cf\": \"endBar\",\r\n \"df\": \"endingId\",\r\n \"ef\": \"autoJustify\",\r\n \"ff\": \"thickness\",\r\n \"gf\": \"number\",\r\n \"hf\": \"preferences\",\r\n \"if\": \"autoPlay\",\r\n \"jf\": \"autoAdvance\",\r\n \"kf\": \"defaultDupleDuration\",\r\n \"lf\": \"defaultTripleDuration\",\r\n \"mf\": \"scoreInfo\",\r\n \"nf\": \"version\",\r\n \"of\": \"title\",\r\n \"pf\": \"subTitle\",\r\n \"qf\": \"composer\",\r\n \"rf\": \"copyright\",\r\n \"sf\": \"localIndex\",\r\n \"tf\": \"hairpinType\",\r\n \"uf\": \"customText\",\r\n \"vf\": \"noteSpacing\",\r\n \"wf\": \"lines\",\r\n \"xf\": \"from\",\r\n \"yf\": \"layoutManager\",\r\n \"zf\": \"pageLayouts\",\r\n \"ag\": \"fillStyle\",\r\n \"bg\": \"hidden\",\r\n \"cg\": \"adjustNoteWidthLyric\",\r\n \"dg\": \"xOffsetStart\",\r\n \"eg\": \"xOffsetEnd\",\r\n \"fg\": \"measureFormats\",\r\n \"gg\": \"format\",\r\n \"hg\": \"pageBreak\",\r\n \"ig\": \"xOffsetLeft\",\r\n \"jg\": \"xOffsetRight\",\r\n \"kg\": \"padAllInSystem\",\r\n \"lg\": \"rotate\",\r\n \"mg\": \"actualBeats\",\r\n \"ng\": \"useSymbol\",\r\n \"og\": \"showPiano\",\r\n \"pg\": \"globalLayout\",\r\n \"qg\": \"measureInstrumentMap\",\r\n \"rg\": \"partInfo\",\r\n \"sg\": \"partName\",\r\n \"tg\": \"partAbbreviation\",\r\n \"ug\": \"stavesAfter\",\r\n \"vg\": \"stavesBefore\",\r\n \"wg\": \"measureFormatting\",\r\n \"xg\": \"preserveTextGroups\",\r\n \"yg\": \"cueInScore\",\r\n \"zg\": \"tie_spacing\",\r\n \"ah\": \"position_end\",\r\n \"bh\": \"transposingScore\",\r\n \"ch\": \"proportionality\",\r\n \"dh\": \"maxMeasureSystem\",\r\n \"eh\": \"cp2x\",\r\n \"fh\": \"restBreak\",\r\n \"gh\": \"expandMultimeasureRests\",\r\n \"hh\": \"midiInstrument\",\r\n \"ih\": \"channel\",\r\n \"jh\": \"program\",\r\n \"kh\": \"volume\",\r\n \"lh\": \"pan\",\r\n \"mh\": \"midiDevice\",\r\n \"nh\": \"audioSettings\",\r\n \"oh\": \"skipMeasureCount\",\r\n \"ph\": \"forceRest\",\r\n \"qh\": \"instrument\",\r\n \"rh\": \"shortText\",\r\n \"sh\": \"hideEmptyLines\",\r\n \"th\": \"tabStaves\",\r\n \"uh\": \"noteId\",\r\n \"vh\": \"tupletId\",\r\n \"wh\": \"metadata\" }`;\r\n return JSON.parse(_tm);\r\n }\r\n\r\n static get valueTokens() {\r\n var vm = `{\"@sn\",\"SmoNote\"}`;\r\n return JSON.parse(vm);\r\n }\r\n\r\n static reverseMap(map) {\r\n const rv = {};\r\n const keys = Object.keys(map);\r\n keys.forEach((key) => {\r\n rv[map[key]] = key;\r\n });\r\n return rv;\r\n }\r\n\r\n static get tokenValues() {\r\n return smoSerialize.reverseMap(smoSerialize.tokenMap);\r\n }\r\n static prettifyXml(xmlDoc) {\r\n var xsltDoc = new DOMParser().parseFromString([\r\n // describes how we want to modify the XML - indent everything\r\n '',\r\n ' ',\r\n ' ', // change to just text() to strip space in text nodes\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n '',\r\n ].join('\\n'), 'application/xml');\r\n\r\n var xsltProcessor = new XSLTProcessor(); \r\n xsltProcessor.importStylesheet(xsltDoc);\r\n var resultDoc = xsltProcessor.transformToDocument(xmlDoc);\r\n return resultDoc;\r\n };\r\n // ## detokenize\r\n // If we are saving, replace token values with keys, since the keys are smaller.\r\n // if we are loading, replace the token keys with values so the score can\r\n // deserialize it\r\n static detokenize(json, dictionary) {\r\n const rv = {};\r\n const smoKey = (key) => {\r\n return typeof (dictionary[key]) !== 'undefined' ? dictionary[key] : key;\r\n }\r\n const _tokenRecurse = (input, output) => {\r\n if (input === null) {\r\n return;\r\n }\r\n const keys = Object.keys(input);\r\n keys.forEach((key) => {\r\n const val = input[key];\r\n const dkey = smoKey(key);\r\n if (typeof (val) == 'string' || typeof (val) == 'number' || typeof (val) == 'boolean') {\r\n output[dkey] = val;\r\n // console.log('240: output[' + dkey + '] = ' + val);\r\n }\r\n if (typeof (val) == 'object' && key != 'dictionary') {\r\n if (Array.isArray(val)) {\r\n output[dkey] = [];\r\n // console.log('245: processing array ' + dkey);\r\n val.forEach((arobj) => {\r\n if (typeof (arobj) === 'string' || typeof (arobj) === 'number' || typeof (arobj) === 'boolean') {\r\n output[dkey].push(arobj);\r\n // console.log('249: ar element ' + arobj);\r\n }\r\n else if (arobj && typeof (arobj) === 'object') {\r\n const nobj = {};\r\n _tokenRecurse(arobj, nobj);\r\n output[dkey].push(nobj);\r\n }\r\n });\r\n } else {\r\n const nobj = {};\r\n // console.log('259: processing child object of ' + dkey);\r\n _tokenRecurse(val, nobj);\r\n output[dkey] = nobj;\r\n }\r\n }\r\n });\r\n }\r\n _tokenRecurse(json, rv);\r\n // console.log(JSON.stringify(rv,null,' '));\r\n return rv;\r\n }\r\n\r\n static incrementIdentifier(label) {\r\n const increcurse = (ar, ix) => {\r\n const n1 = (ar[ix].charCodeAt(0) - 97) + 1;\r\n if (n1 > 25) {\r\n ar[ix] = 'a';\r\n if (ar.length <= ix + 1) {\r\n ar.push('a');\r\n } else {\r\n increcurse(ar, ix + 1);\r\n }\r\n } else {\r\n ar[ix] = String.fromCharCode(97 + n1);\r\n }\r\n }\r\n if (!label) {\r\n label = 'a';\r\n }\r\n const ar = label.split('');\r\n increcurse(ar, 0);\r\n label = ar.join('');\r\n return label;\r\n }\r\n\r\n // used to generate a tokenization scheme that I will use to make\r\n // saved files smaller\r\n static jsonTokens(json) {\r\n const map = {};\r\n const valmap = {};\r\n const startKeys = Object.keys(smoSerialize.tokenMap);\r\n let keyLabel = startKeys[startKeys.length - 1];\r\n keyLabel = smoSerialize.incrementIdentifier(keyLabel);\r\n\r\n const exist = smoSerialize.tokenValues;\r\n const addMap = (key) => {\r\n if (!exist[key] && !map[key] && key.length > keyLabel.length) {\r\n map[key] = keyLabel;\r\n keyLabel = smoSerialize.incrementIdentifier(keyLabel);\r\n }\r\n };\r\n const _tokenRecurse = (obj) => {\r\n if (!obj) {\r\n console.warn('failure to parse');\r\n return;\r\n }\r\n const keys = Object.keys(obj);\r\n keys.forEach((key) => {\r\n const val = obj[key];\r\n if (val !== null) {\r\n if (typeof (val) === 'string' || typeof (val) === 'number'\r\n || typeof (val) === 'boolean') {\r\n addMap(key);\r\n }\r\n if (typeof (val) == 'object') {\r\n if (Array.isArray(val)) {\r\n addMap(key);\r\n val.forEach((arobj) => {\r\n if (arobj && typeof (arobj) === 'object') {\r\n _tokenRecurse(arobj);\r\n }\r\n });\r\n } else {\r\n addMap(key);\r\n _tokenRecurse(val);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n _tokenRecurse(json);\r\n const mkar = Object.keys(map);\r\n const m2 = {};\r\n mkar.forEach((mk) => {\r\n m2[map[mk]] = mk;\r\n });\r\n if (Object.keys(m2).length) {\r\n console.log(JSON.stringify(m2, null, ' '));\r\n }\r\n }\r\n\r\n // ### serializedMerge\r\n // serialization-friendly, so merged, copied objects are deep-copied\r\n static serializedMerge(attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) !== 'undefined') {\r\n // copy the number 0\r\n if (typeof (src[attr]) === 'number' ||\r\n typeof (src[attr]) === 'boolean' ||\r\n typeof (src[attr]) === 'string') {\r\n dest[attr] = src[attr];\r\n // copy the empty array\r\n } else if (Array.isArray(src[attr])) {\r\n dest[attr] = JSON.parse(JSON.stringify(src[attr]));\r\n } else {\r\n // but don't copy empty/null objects\r\n if (src[attr]) {\r\n if (typeof (src[attr]) == 'object') {\r\n dest[attr] = JSON.parse(JSON.stringify(src[attr]));\r\n } else {\r\n dest[attr] = src[attr];\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Only serialize non-default values.\r\n * @param {*} defaults - the class-defined defaults\r\n * @param {*} attrs - the list of attributes (untyped)\r\n * @param {*} src - the object we're serializing\r\n * @param {*} dest - the output json\r\n */\r\n static serializedMergeNonDefault(defaults, attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) != 'undefined') {\r\n // copy the number 0\r\n if (typeof (src[attr]) === 'number' ||\r\n typeof (src[attr]) === 'boolean' ||\r\n typeof (src[attr]) === 'string') {\r\n // always persist object type so it can be deserialized\r\n if (src[attr] !== defaults[attr] || attr === 'ctor') {\r\n dest[attr] = src[attr];\r\n }\r\n // copy the empty array\r\n } else if (Array.isArray(src[attr])) {\r\n const defval = JSON.stringify(defaults[attr]);\r\n const srcval = JSON.stringify(src[attr]);\r\n if (defval != srcval) {\r\n dest[attr] = JSON.parse(srcval);\r\n }\r\n } else {\r\n // but don't copy empty/null objects\r\n if (src[attr]) {\r\n if (typeof (src[attr]) == 'object') {\r\n const defval = JSON.stringify(defaults[attr]);\r\n const srcval = JSON.stringify(src[attr]);\r\n if (defval != srcval) {\r\n dest[attr] = JSON.parse(srcval);\r\n }\r\n } else {\r\n if (src[attr] != defaults[attr]) {\r\n dest[attr] = src[attr];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n static stringifyAttrs(attrs, obj) {\r\n let rv = '';\r\n attrs.forEach((attr) => {\r\n if (obj[attr]) {\r\n rv += attr + ':' + obj[attr] + ', ';\r\n } else {\r\n rv += attr + ': null,';\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n // ### printXlate\r\n // print json with string labels to use as a translation file seed.\r\n static printTranslate(_class) {\r\n const xxx = Smo.getClass(_class + '.printTranslate');\r\n if (typeof (xxx) === 'function') {\r\n xxx();\r\n }\r\n }\r\n}\r\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\r\n// MIT License\r\n\r\nimport { FontInfo, VexFlow } from '../common/vex';\r\nconst VF = VexFlow;\r\nexport interface FontGlyph {\r\n xMin: number,\r\n xMax: number,\r\n yMin: number,\r\n yMax: number,\r\n ha: number,\r\n leftSideBearing: number,\r\n advanceWidth: number\r\n}\r\nexport interface TextFormatterInfo extends Record {\r\n family: string;\r\n resolution?: number;\r\n glyphs?: Record;\r\n serifs: boolean;\r\n monospaced: boolean;\r\n italic: boolean;\r\n bold: boolean;\r\n maxSizeGlyph?: string;\r\n superscriptOffset?: number;\r\n subscriptOffset?: number;\r\n description: string;\r\n}\r\n\r\n/**\r\n * Y information, 0 is baseline, yMin is lowest point.\r\n */\r\nexport interface yExtent {\r\n yMin: number;\r\n yMax: number;\r\n height: number;\r\n}\r\n\r\n/**\r\n * Text widths are stored in a cache, so we don't have to recompute widths\r\n * for the same font + string combination.\r\n *\r\n * The cache is first keyed by the font information. The key is of the form:\r\n * `${family}-${size}-${weight}-${style}`\r\n * The second level key is the specific text to be measured.\r\n *\r\n * The stored value is the measured width in `em` units.\r\n * textWidth == textWidthCache[cacheKey][textToMeasure]\r\n */\r\nconst textWidthCache: Record | undefined> = {};\r\nconst textHeightCache: Record | undefined> = {};\r\n/**\r\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\r\n * The metrics for those fonts will be made available to the application.\r\n */\r\nconst registry: Record = {};\r\n\r\nexport class TextFormatter {\r\n\r\n /**\r\n * Return all registered font families.\r\n */\r\n static getFontFamilies(): TextFormatterInfo[] {\r\n const registeredFonts: TextFormatterInfo[] = [];\r\n for (const fontFamily in registry) {\r\n const formatterInfo = registry[fontFamily];\r\n registeredFonts.push({ ...formatterInfo });\r\n }\r\n return registeredFonts;\r\n }\r\n\r\n /**\r\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\r\n *\r\n * This method creates a formatter for the font that most closely matches the requested font.\r\n * We compare font family, bold, and italic attributes.\r\n * This method will return a fallback formatter if there are no matches.\r\n */\r\n static create(requestedFont: FontInfo = {}): TextFormatter {\r\n if (!requestedFont.family) {\r\n requestedFont.family = 'Sans Serif';\r\n }\r\n\r\n // TODO: One potential (small) optimization is to cache the TextFormatter object\r\n // returned for each font info. We would probably want to clear the cache if\r\n // the registry is ever updated.\r\n\r\n const candidates: TextFormatterInfo[] = [];\r\n // The incoming font family is a string of comma-separated font family names.\r\n // (e.g., `PetalumaScript, Arial, sans-serif`).\r\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\r\n for (const requestedFamily of requestedFamilies) {\r\n for (const fontFamily in registry) {\r\n // Support cases where the registry contains 'Roboto Slab Medium',\r\n // but the requestedFont.family is 'Roboto Slab'.\r\n if (fontFamily.startsWith(requestedFamily)) {\r\n candidates.push(registry[fontFamily]);\r\n }\r\n }\r\n if (candidates.length > 0) {\r\n break;\r\n }\r\n }\r\n\r\n let formatter;\r\n if (candidates.length === 0) {\r\n // No match, so return a fallback text formatter.\r\n formatter = new TextFormatter(Object.values(registry)[0]);\r\n } else if (candidates.length === 1) {\r\n formatter = new TextFormatter(candidates[0]);\r\n } else {\r\n const bold = VF.Font.isBold(requestedFont.weight);\r\n const italic = VF.Font.isItalic(requestedFont.style);\r\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\r\n if (perfectMatch) {\r\n formatter = new TextFormatter(perfectMatch);\r\n } else {\r\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\r\n if (partialMatch) {\r\n formatter = new TextFormatter(partialMatch);\r\n } else {\r\n formatter = new TextFormatter(candidates[0]);\r\n }\r\n }\r\n }\r\n\r\n const fontSize = requestedFont.size;\r\n if (typeof fontSize !== 'undefined') {\r\n const fontSizeInPt = VF.Font.convertSizeToPointValue(fontSize);\r\n formatter.setFontSize(fontSizeInPt);\r\n }\r\n return formatter;\r\n }\r\n\r\n /**\r\n * @param fontFamily used as a key to the font registry.\r\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\r\n */\r\n static getInfo(fontFamily: string): TextFormatterInfo | undefined {\r\n return registry[fontFamily];\r\n }\r\n\r\n /**\r\n * Apps may register their own fonts and metrics, and those metrics\r\n * will be available to the app for formatting.\r\n *\r\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\r\n * @param info\r\n * @param overwrite\r\n */\r\n static registerInfo(info: TextFormatterInfo, overwrite: boolean = false): void {\r\n const fontFamily = info.family;\r\n const currFontInfo = registry[fontFamily];\r\n if (currFontInfo === undefined || overwrite) {\r\n registry[fontFamily] = info;\r\n }\r\n }\r\n\r\n /** Font family. */\r\n protected family: string = '';\r\n\r\n /** Specified in `pt` units. */\r\n protected size: number = 14;\r\n\r\n /** Font metrics are extracted at 1000 upem (units per em). */\r\n protected resolution: number = 1000;\r\n\r\n /**\r\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\r\n * bounding box metrics such as:\r\n * ```\r\n * {\r\n * x_min: 48,\r\n * x_max: 235,\r\n * y_min: -17,\r\n * y_max: 734,\r\n * ha: 751,\r\n * leftSideBearing: 48,\r\n * advanceWidth: 286,\r\n * }\r\n * ```\r\n */\r\n protected glyphs: Record = {};\r\n protected description?: string;\r\n protected serifs: boolean = false;\r\n protected monospaced: boolean = false;\r\n protected italic: boolean = false;\r\n protected bold: boolean = false;\r\n protected superscriptOffset: number = 0;\r\n protected subscriptOffset: number = 0;\r\n protected maxSizeGlyph: string = '@';\r\n\r\n // This is an internal key used to index the `textWidthCache`.\r\n protected cacheKey: string = '';\r\n\r\n /**\r\n * Use `TextFormatter.create(...)` to build an instance from information previously\r\n * registered via `TextFormatter.registerInfo(info)`.\r\n */\r\n private constructor(formatterInfo: TextFormatterInfo) {\r\n this.updateParams(formatterInfo);\r\n }\r\n get localHeightCache(): Record {\r\n if (textHeightCache[this.cacheKey] === undefined) {\r\n textHeightCache[this.cacheKey] = {};\r\n }\r\n return textHeightCache[this.cacheKey] ?? {};\r\n }\r\n updateParams(params: TextFormatterInfo): void {\r\n if (params.family) this.family = params.family;\r\n if (params.resolution) this.resolution = params.resolution;\r\n if (params.glyphs) this.glyphs = params.glyphs;\r\n if (params.serifs) this.serifs = params.serifs;\r\n if (params.monospaced) this.monospaced = params.monospaced;\r\n if (params.italic) this.italic = params.italic;\r\n if (params.bold) this.bold = params.bold;\r\n if (params.maxSizeGlyph) this.maxSizeGlyph = params.maxSizeGlyph;\r\n if (params.superscriptOffset) this.superscriptOffset = params.superscriptOffset;\r\n if (params.subscriptOffset) this.subscriptOffset = params.subscriptOffset;\r\n this.updateCacheKey();\r\n }\r\n\r\n /** Create a hash with the current font data, so we can cache computed widths. */\r\n updateCacheKey(): void {\r\n const family = this.family.replace(/\\s+/g, '_');\r\n const size = this.size;\r\n const weight = this.bold ? VF.FontWeight.BOLD : VF.FontWeight.NORMAL;\r\n const style = this.italic ? VF.FontStyle.ITALIC : VF.FontStyle.NORMAL;\r\n // Use the same key format as SVGContext.\r\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\r\n }\r\n\r\n /**\r\n * The glyphs table is indexed by the character (e.g., 'C', '@').\r\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\r\n */\r\n getGlyphMetrics(character: string): FontGlyph {\r\n if (this.glyphs[character]) {\r\n return this.glyphs[character];\r\n } else {\r\n return this.glyphs[this.maxSizeGlyph];\r\n }\r\n }\r\n\r\n get maxHeight(): number {\r\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\r\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\r\n }\r\n\r\n /**\r\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\r\n * For the space character ' ' as defined in the:\r\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\r\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\r\n */\r\n getWidthForCharacterInEm(c: string): number {\r\n const metrics = this.getGlyphMetrics(c);\r\n if (!metrics) {\r\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\r\n return 0.65;\r\n } else {\r\n const advanceWidth = metrics.advanceWidth ?? 0;\r\n return advanceWidth / this.resolution;\r\n }\r\n }\r\n /**\r\n * Retrieve the character's y bounds (ymin, ymax) and height.\r\n */\r\n getYForCharacterInPx(c: string): yExtent {\r\n const metrics = this.getGlyphMetrics(c);\r\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\r\n if (!metrics) {\r\n return rv;\r\n } else {\r\n if (typeof metrics.yMin === 'number') {\r\n rv.yMin = (metrics.yMin / this.resolution) * this.fontSizeInPixels;\r\n }\r\n if (typeof metrics.yMax === 'number') {\r\n rv.yMax = (metrics.yMax / this.resolution) * this.fontSizeInPixels;\r\n }\r\n rv.height = rv.yMax - rv.yMin;\r\n return rv;\r\n }\r\n }\r\n getYForStringInPx(str: string): yExtent {\r\n const entry = this.localHeightCache;\r\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\r\n const cache = entry[str];\r\n if (cache !== undefined) {\r\n return cache;\r\n }\r\n for (let i = 0; i < str.length; ++i) {\r\n const curY = this.getYForCharacterInPx(str[i]);\r\n extent.yMin = Math.min(extent.yMin, curY.yMin);\r\n extent.yMax = Math.max(extent.yMax, curY.yMax);\r\n extent.height = extent.yMax - extent.yMin;\r\n }\r\n entry[str] = extent;\r\n return extent;\r\n }\r\n /**\r\n * Retrieve the total width of `text` in `em` units.\r\n */\r\n getWidthForTextInEm(text: string): number {\r\n const key = this.cacheKey;\r\n // Get the cache for this specific font family, size, weight, style combination.\r\n // The cache contains previously computed widths for different `text` strings.\r\n let cachedWidths = textWidthCache[key];\r\n if (cachedWidths === undefined) {\r\n cachedWidths = {};\r\n textWidthCache[key] = cachedWidths;\r\n }\r\n\r\n let width = cachedWidths[text];\r\n if (width === undefined) {\r\n width = 0;\r\n for (let i = 0; i < text.length; ++i) {\r\n width += this.getWidthForCharacterInEm(text[i]);\r\n }\r\n cachedWidths[text] = width;\r\n }\r\n return width;\r\n }\r\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\r\n getWidthForTextInPx(text: string): number {\r\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\r\n }\r\n\r\n /**\r\n * @param size in pt.\r\n */\r\n setFontSize(size: number): this {\r\n this.size = size;\r\n // The width cache key depends on the current font size.\r\n this.updateCacheKey();\r\n return this;\r\n }\r\n\r\n /** `this.size` is specified in points. Convert to pixels. */\r\n get fontSizeInPixels(): number {\r\n return this.size * VF.Font.scaleToPxFrom.pt;\r\n }\r\n\r\n getResolution(): number {\r\n return this.resolution;\r\n }\r\n}\r\n","import { Vex as SmoVex, Note as VexNote, StaveNote as VexStaveNote, StemmableNote as VexStemmableNote, Beam as VexBeam, Tuplet as VexTuplet, \r\n Voice as VexVoice, Formatter as VexFormatter, Accidental as VexAccidental, \r\n Annotation as VexAnnotation, StaveNoteStruct as VexStaveNoteStruct, \r\n StaveText as VexStaveText, StaveModifier as VexStaveModifier,\r\n TextNote as VexTextNote,\r\nStave as VexStave, StaveModifierPosition as VexStaveModifierPosition,\r\nFont as VexFont, FontInfo as VexFontInfo, FontStyle as VexFontStyle, FontWeight as VexFontWeight,\r\nTupletOptions as VexTupletOptions, Curve as VexCurve, StaveTie as VexStaveTie,\r\nClefNote as VexClefNote,\r\n Music as VexMusic, ChordSymbol as VexChordSymbol, ChordSymbolBlock as VexChordSymbolBlock,\r\nTabStave as VexTabStave, TabNote as VexTabNote, TabSlide as VexTabSlide, TabNotePosition as VexTabNotePosition, \r\nTabNoteStruct as VexTabNoteStruct\r\n } from \"vexflow_smoosic\";\r\n\r\n /**\r\n * Module vex.ts. This handles vexflow calls and structures that have changed \r\n * between v4 and v5. There will be a custom version of this file for each.\r\n * Most of the differences are trivial - e.g. different naming conventions for variables.\r\n */\r\nimport { smoSerialize } from \"./serializationHelpers\";\r\nimport { SvgBox } from \"../smo/data/common\";\r\n// export type Vex = SmoVex;\r\nexport const VexFlow = SmoVex.Flow;\r\nconst VF = VexFlow;\r\nexport type Music = VexMusic;\r\nexport type Note = VexNote;\r\nexport type StaveNote = VexStaveNote;\r\nexport type StemmableNote = VexStemmableNote;\r\nexport type Beam = VexBeam;\r\nexport type Tuplet = VexTuplet;\r\nexport type TupletOptions = VexTupletOptions;\r\nexport type Voice = VexVoice;\r\nexport type Accidental = VexAccidental;\r\nexport type Font = VexFont;\r\nexport type FontInfo = VexFontInfo;\r\nexport type FontStyle = VexFontStyle;\r\nexport type FontWeight = VexFontWeight;\r\nexport type Formatter = VexFormatter;\r\nexport type Annotation = VexAnnotation;\r\nexport type TextNote = VexTextNote;\r\nexport type StaveNoteStruct = VexStaveNoteStruct;\r\nexport type StaveModifier = VexStaveModifier;\r\nexport type StaveText = VexStaveText;\r\nexport type Stave = VexStave;\r\nexport type Curve = VexCurve;\r\nexport type StaveTie = VexStaveTie;\r\nexport type ClefNote = VexClefNote;\r\nexport type StaveModifierPosition = VexStaveModifierPosition;\r\nexport type TabStave = VexTabStave;\r\nexport type TabNote = VexTabNote;\r\nexport type TabSlide = VexTabSlide;\r\nexport type TabNotePosition = VexTabNotePosition;\r\nexport type TabNoteStruct = VexTabNoteStruct;\r\n\r\nexport interface GlyphInfo {\r\n width: number,\r\n height: number,\r\n yTop: number,\r\n yBottom: number,\r\n spacingRight: number,\r\n vexGlyph: string | null\r\n}\r\n\r\n// DI interfaces to create vexflow objects\r\nexport interface CreateVexNoteParams {\r\n isTuplet: boolean, measureIndex: number, clef: string,\r\n closestTicks: string, exactTicks: string, keys: string[],\r\n noteType: string\r\n}; \r\n\r\n export interface SmoVexTupletParams {\r\n vexNotes: Note[],\r\n numNotes: number,\r\n notesOccupied: number,\r\n location: number\r\n};\r\n\r\nexport function chordSubscriptOffset() {\r\n return VF.ChordSymbol.subscriptOffset;\r\n}\r\nexport function chordSuperscriptOffset() {\r\n return VF.ChordSymbol.superscriptOffset;\r\n}\r\nexport interface SmoVexVoiceParams {\r\n actualBeats: number,\r\n beatDuration: number,\r\n notes: Note[]\r\n}\r\nexport function createVoice(params: SmoVexVoiceParams) {\r\n const voice = new VF.Voice({\r\n num_beats: params.actualBeats,\r\n beat_value: params.beatDuration\r\n }).setMode(VF.Voice.Mode.SOFT);\r\n voice.addTickables(params.notes);\r\n return voice;\r\n}\r\nexport interface SmoVexStaveParams {\r\n x: number,\r\n y: number,\r\n padLeft: number,\r\n id: string,\r\n staffX: number,\r\n staffY: number,\r\n staffWidth: number,\r\n forceClef: boolean,\r\n clef: string,\r\n forceKey: boolean,\r\n key: string,\r\n canceledKey: string | null,\r\n startX: number,\r\n adjX: number,\r\n context: any\r\n}\r\nexport function createTabStave(box: SvgBox, spacing: number, numLines: number): TabStave {\r\n return new VF.TabStave(box.x, box.y, box.width, {\r\n spacing_between_lines_px: spacing,\r\n num_lines: numLines\r\n });\r\n}\r\n/**\r\n * Vex4 and Vex5 handle width differently. Vex5, width comes directly from the \r\n * font glyph, vex4 the glyph is a path so it comes from the stored information about \r\n * the path.\r\n * \r\n * @param smoGlyph \r\n * @returns \r\n */\r\nexport function getGlyphWidth(smoGlyph: GlyphInfo) {\r\n if (smoGlyph.vexGlyph) {\r\n /* const vexGlyph = (VF.Glyphs as Record)[smoGlyph.vexGlyph];\r\n if (vexGlyph) {\r\n return VF.Element.measureWidth(vexGlyph);\r\n }\r\n return VF.Element.measureWidth(smoGlyph.vexGlyph); */\r\n const vf = VF.Glyph.MUSIC_FONT_STACK[0].getGlyphs()[smoGlyph.vexGlyph];\r\n return (vf.x_max - vf.x_min) * glyphPixels();\r\n } \r\n return smoGlyph.width;\r\n}\r\n/**\r\n * V4 uses the glyph name, V5 uses the unicode value\r\n * @returns \r\n */\r\nexport function getSlashGlyph() {\r\n // vexNote = new VF.GlyphNote('\\uE504', { duration });\r\n return new VF.GlyphNote(new VF.Glyph('repeat1Bar', 38), { duration: 'w' }, { line: 2 });\r\n}\r\nexport function getRepeatBar() {\r\n return new VF.GlyphNote(new VF.Glyph('repeat1Bar', 38), { duration: 'w' }, { line: 2 });\r\n}\r\nexport function getMultimeasureRest(multimeasureLength: number) {\r\n return new VF.MultiMeasureRest(multimeasureLength,\r\n // { numberOfMeasures: this.smoMeasure.svg.multimeasureLength });\r\n { number_of_measures: multimeasureLength });\r\n}\r\nexport function pitchToLedgerLine(vexPitch: string, clef: string) {\r\n return -1.0 * (VF.keyProperties(vexPitch).line - 4.5)\r\n - VF.clefProperties(clef).line_shift;\r\n}\r\nexport function vexCanonicalNotes(): any {\r\n // return VF.Music.canonicalNotes[SmoMusic.noteValues[vexKey].int_val];\r\n return VF.Music.canonical_notes;\r\n}\r\nexport function createStave(params: SmoVexStaveParams) {\r\n const stave = new VF.Stave(params.x, params.y, params.staffWidth - params.padLeft);\r\n stave.setAttribute('id', params.id);\r\n // If there is padLeft, draw an invisible box so the padding is included in the measure box\r\n if (params.padLeft) {\r\n params.context.rect(params.staffX, params.y, params.padLeft, 50, {\r\n fill: 'none', 'stroke-width': 1, stroke: 'white'\r\n });\r\n }\r\n // stave.options.spaceAboveStaffLn = 0; // don't let vex place the staff, we want to.\r\n stave.options.space_above_staff_ln = 0; // don't let vex place the staff, we want to.\r\n // Add a clef and time signature.\r\n if (params.forceClef) {\r\n stave.addClef(params.clef);\r\n }\r\n if (params.forceKey) {\r\n const sig = new VF.KeySignature(params.key);\r\n if (params.canceledKey) {\r\n sig.cancelKey(params.canceledKey);\r\n }\r\n sig.addToStave(stave);\r\n }\r\n // const curX = stave.getNoteStartX();\r\n // stave.setNoteStartX(curX + (params.startX - params.adjX)); \r\n\r\n return stave;\r\n}\r\n\r\nexport function getVexTuplets(params: SmoVexTupletParams) {\r\n const vexTuplet = new VF.Tuplet(params.vexNotes, {\r\n num_notes: params.numNotes,\r\n notes_occupied: params.notesOccupied,\r\n ratioed: false,\r\n bracketed: true,\r\n location: params.location\r\n });\r\n return vexTuplet;\r\n}\r\nexport function getVexNoteParameters(params: CreateVexNoteParams): { noteParams: StaveNoteStruct, duration: string } {\r\n // If this is a tuplet, we only get the duration so the appropriate stem\r\n // can be rendered. Vex calculates the actual ticks later when the tuplet is made\r\n var duration =\r\n params.isTuplet ?\r\n params.closestTicks :\r\n params.exactTicks;\r\n if (typeof (duration) === 'undefined') {\r\n console.warn('bad duration in measure ' + params.measureIndex);\r\n duration = '8';\r\n } \r\n // transpose for instrument-specific keys\r\n const noteParams: StaveNoteStruct = {\r\n clef: params.clef,\r\n keys: params.keys,\r\n duration: duration + params.noteType\r\n };\r\n return { noteParams, duration };\r\n}\r\nexport interface SmoVexStemParams {\r\n voiceCount: number,\r\n voiceIx: number,\r\n isAuto: boolean,\r\n isUp: boolean\r\n}\r\nexport function applyStemDirection(params: SmoVexStemParams, vxParams: StaveNoteStruct) {\r\n if (params.voiceCount === 1 && params.isAuto) {\r\n vxParams.auto_stem = true;\r\n } else if (!params.isAuto) {\r\n vxParams.stem_direction = params.isUp ? 1 : -1;\r\n } else if (params.voiceIx % 2) {\r\n vxParams.stem_direction = -1;\r\n } else {\r\n vxParams.stem_direction = 1;\r\n }\r\n}\r\nconst setSameIfNull = (a: any, b: any) => {\r\n if (typeof (a) === 'undefined' || a === null) {\r\n return b;\r\n }\r\n return a;\r\n};\r\nexport function createStaveText(text: string, position: number, options: any) {\r\n return new VexStaveText(text, position, options);\r\n}\r\nexport interface SmoVexHairpinParams {\r\n vxStart: Note | null,\r\n vxEnd: Note | null,\r\n hairpinType: number,\r\n height: number,\r\n yOffset: number,\r\n leftShiftPx: number,\r\n rightShiftPx: number\r\n}\r\nexport function createHairpin(params: SmoVexHairpinParams) {\r\n const vexParams: Record = {};\r\n if (params.vxStart) {\r\n vexParams.first_note = params.vxStart;\r\n }\r\n if (params.vxEnd) {\r\n vexParams.last_note = params.vxEnd;\r\n }\r\n const hairpin = new VF.StaveHairpin(\r\n vexParams, params.hairpinType);\r\n hairpin.setRenderOptions({\r\n height: params.height,\r\n y_shift: params.yOffset,\r\n left_shift_px: params.leftShiftPx,\r\n right_shift_px: params.rightShiftPx\r\n });\r\n return hairpin;\r\n}\r\nexport interface SmoVexSlurParameters {\r\n vxStart: Note | null,\r\n vxEnd: Note | null,\r\n thickness: number,\r\n xShift: number,\r\n yShift: number,\r\n cps: DOMPoint[],\r\n invert: boolean,\r\n position: number,\r\n positionEnd: number\r\n}\r\nexport const defaultMeasurePadding = VF.Stave.defaultPadding;\r\nexport function createSlur(params: SmoVexSlurParameters): Curve {\r\n if (params.vxStart === null && params.vxEnd === null) {\r\n throw(' slur with no points');\r\n }\r\n const vxStart = setSameIfNull(params.vxStart, params.vxEnd);\r\n const vxEnd = setSameIfNull(params.vxEnd, params.vxStart);\r\n const curve = new VF.Curve(vxStart!, vxEnd!,\r\n {\r\n thickness: params.thickness,\r\n x_shift: params.xShift,\r\n y_shift: params.yShift,\r\n cps: params.cps,\r\n invert: params.invert,\r\n position: params.position,\r\n position_end: params.positionEnd\r\n });\r\n return curve;\r\n}\r\nexport interface SmoVexTieParams {\r\n fromLines: number[],\r\n toLines: number[],\r\n firstNote: Note | null,\r\n lastNote: Note | null,\r\n vexOptions: any\r\n}\r\nexport function createTie(params: SmoVexTieParams): StaveTie {\r\n const fromLines = params.fromLines;\r\n const toLines = params.toLines;\r\n const tie = new VF.StaveTie({\r\n first_note: params.firstNote,\r\n last_note: params.lastNote,\r\n first_indices: fromLines,\r\n last_indices: toLines\r\n });\r\n smoSerialize.vexMerge(tie.render_options, params.vexOptions);\r\n return tie;\r\n}\r\nexport const defaultNoteScale: number = 30;\r\nexport const defaultCueScale: number = 19.8;\r\n\r\nexport function glyphPixels() {\r\n return 96 * (defaultNoteScale / (VF.Glyph.MUSIC_FONT_STACK[0].getResolution() * 72));\r\n // return defaultNoteScale;\r\n}\r\n\r\nexport function setFontStack(font: string) {\r\n const fs: Record void> = {\r\n /* Bravura: () => { VexFlow.setFonts('Bravura', 'Gonville', 'Custom'); },\r\n Gonville: () => { VexFlow.setFonts('Gonville', 'Bravura', 'Custom'); },\r\n Petaluma: () => { VexFlow.setFonts('Petaluma', 'Bravura', 'Gonville', 'Custom'); },\r\n Leland: () => { VexFlow.setFonts('Leland', 'Bravura', 'Gonville', 'Custom'); } */\r\n Bravura: () => { VexFlow.setMusicFont('Bravura', 'Gonville', 'Custom'); },\r\n Gonville: () => { VexFlow.setMusicFont('Gonville', 'Bravura', 'Custom'); },\r\n Petaluma: () => { VexFlow.setMusicFont('Petaluma', 'Bravura', 'Gonville', 'Custom'); },\r\n Leland: () => { VexFlow.setMusicFont('Leland', 'Bravura', 'Gonville', 'Custom'); }\r\n };\r\n fs[font]();\r\n}\r\n/**\r\n * Render a dynamics glyph. Return the height of width/height of the glyph\r\n * @param context \r\n * @param text \r\n * @param fontSize \r\n * @param x \r\n * @param y \r\n * @returns \r\n */\r\nexport function renderDynamics(context: any, text: string, fontSize: number, x: number, y: number) {\r\n /* const glyph = new VF.Element();\r\n glyph.setText(text);\r\n glyph.setFontSize(fontSize);\r\n glyph.renderText(context, x, y);\r\n return { width: glyph.getWidth(), height: glyph.getHeight() };*/\r\n const glyph = new VF.Glyph(text, fontSize);\r\n glyph.render(context, x, y);\r\n // vex 5 incompatibility.\r\n // x += VF.TextDynamics.GLYPHS[text].width;\r\n const metrics = glyph.getMetrics();\r\n return { width: metrics.width, height: metrics.height }; \r\n}\r\nexport function getOrnamentGlyph(glyph: string) {\r\n return glyph;\r\n // return vexOrnaments[glyph];\r\n}\r\n\r\nexport function addChordGlyph(cs: VexChordSymbol, symbol: string) {\r\n cs.addGlyph(symbol);\r\n}\r\n/**\r\n * get a glyph code to render\r\n * @param code \r\n * @returns \r\n */\r\nexport function getVexGlyphFromChordCode(code: string) {\r\n if (code === 'csymDiminished' || code === 'csymHalfDiminished' || code === 'csymAugmented' || code === 'csymMajorSeventh') {\r\n return code;\r\n }\r\n return ChordSymbolGlyphs[code].code;\r\n}\r\nexport function createTextNote(code: string) {\r\n return new VexTextNote({ glyph: code, duration: '8' }).setLine(2);\r\n}\r\n/**\r\n * Get the chord symbol glyph from the vex glyph\r\n * @export\r\n * @param {string} code\r\n * @return {*} \r\n */\r\nexport function getChordSymbolGlyphFromCode(code: string) {\r\n const keys = Object.keys(ChordSymbolGlyphs);\r\n const rv = keys.find((key) => ChordSymbolGlyphs[key].code === code);\r\n if (typeof(rv) === 'string') {\r\n return rv;\r\n }\r\n return code;\r\n}\r\nexport function getChordSymbolMetricsForGlyph(code: string) {\r\n if (code === 'b') {\r\n code = 'accidentalFlat';\r\n }\r\n if (code === '#') {\r\n code = 'accidentalSharp';\r\n }\r\n const glyphMetrics = VexChordSymbol.metrics.glyphs;\r\n return glyphMetrics[code];\r\n}\r\n/**\r\n * Vex 5 compatibility. yShift\r\n */\r\nexport function blockMetricsYShift(metrics: any) {\r\n return metrics.y_shift;\r\n}\r\n// Glyph data. Note Vex4 and Vex5 have different requirements. Vex5 expects the unicode identifier (16-bit number)\r\n// where vex4 expects a string glyph\r\nexport const ChordSymbolGlyphs: Record = {\r\n diminished: {\r\n code: 'csymDiminished',\r\n },\r\n dim: {\r\n code: 'csymDiminished',\r\n },\r\n halfDiminished: {\r\n code: 'csymHalfDiminished',\r\n },\r\n '+': {\r\n code: 'csymAugmented',\r\n },\r\n augmented: {\r\n code: 'csymAugmented',\r\n },\r\n majorSeventh: {\r\n code: 'csymMajorSeventh',\r\n },\r\n csymMinor: {\r\n code: 'minor',\r\n },\r\n minor: {\r\n code: 'minor',\r\n },\r\n '-': {\r\n code: 'minor',\r\n },\r\n '(': {\r\n code: 'csymParensLeftTall',\r\n }, \r\n leftParen: {\r\n code: 'csymParensLeftTall',\r\n },\r\n ')': {\r\n code: 'csymParensRightTall',\r\n },\r\n rightParen: {\r\n code: 'csymParensRightTall',\r\n },\r\n leftBracket: {\r\n code: 'csymBracketLeftTall',\r\n },\r\n rightBracket: {\r\n code: 'csymBracketRightTall',\r\n }, \r\n leftParenTall: {\r\n code: 'csymParensLeftVeryTall',\r\n }, rightParenTall: {\r\n code: 'csymParensRightVeryTall',\r\n },\r\n '/': {\r\n code: 'csymDiagonalArrangementSlash',\r\n },\r\n over: {\r\n code: 'csymDiagonalArrangementSlash',\r\n },\r\n '#': {\r\n code: 'accidentalSharp',\r\n },\r\n b: {\r\n code: 'accidentalFlat',\r\n },\r\n};\r\nexport const vexOrnaments: Record = {\r\n mordent: '\\ue56c' /*ornamentShortTrill*/,\r\n mordent_inverted: '\\ue56d' /*ornamentMordent*/,\r\n turn: '\\ue567' /*ornamentTurn*/,\r\n turn_inverted: '\\ue569' /*ornamentTurnSlash*/,\r\n tr: '\\ue566' /*ornamentTrill*/,\r\n upprall: '\\ue5b5' /*ornamentPrecompSlideTrillDAnglebert*/,\r\n downprall: '\\ue5c3' /*ornamentPrecompDoubleCadenceUpperPrefix*/,\r\n prallup: '\\ue5bb' /*ornamentPrecompTrillSuffixDandrieu*/,\r\n pralldown: '\\ue5c8' /*ornamentPrecompTrillLowerSuffix*/,\r\n upmordent: '\\ue5b8' /*ornamentPrecompSlideTrillBach*/,\r\n downmordent: '\\ue5c4' /*ornamentPrecompDoubleCadenceUpperPrefixTurn*/,\r\n lineprall: '\\ue5b2' /*ornamentPrecompAppoggTrill*/,\r\n prallprall: '\\ue56e' /*ornamentTremblement*/,\r\n scoop: '\\ue5d0' /*brassScoop*/,\r\n doit: '\\ue5d5' /*brassDoitMedium*/,\r\n fall: '\\ue5d7' /*brassFallLipShort*/,\r\n doitLong: '\\ue5d2' /*brassLiftMedium*/,\r\n fallLong: '\\ue5de' /*brassFallRoughMedium*/,\r\n bend: '\\ue5e3' /*brassBend*/,\r\n plungerClosed: '\\ue5e5' /*brassMuteClosed*/,\r\n plungerOpen: '\\ue5e7' /*brassMuteOpen*/,\r\n flip: '\\ue5e1' /*brassFlip*/,\r\n jazzTurn: '\\ue5e4' /*brassJazzTurn*/,\r\n smear: '\\ue5e2' /*brassSmear*/,\r\n}","import { SmoSelector, SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiScoreView } from '../sui/scoreView';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { layoutDebug } from '../sui/layoutDebug';\r\n\r\n/**\r\n * A generic function that can be sent used to animate playback\r\n */\r\nexport type AudioAnimationHandler = (view: SuiScoreView, selector: SmoSelector, offsetPct: number, durationPct: number) => void;\r\n/**\r\n * A generic function that can be sent used to clean up playback animation\r\n */\r\nexport type ClearAudioAnimationHandler = (delay: number) => void;\r\n\r\n/**\r\n * Allow users to specify their own music playback animations.\r\n * @category SuiAudio\r\n*/\r\nexport interface SuiAudioAnimationParams {\r\n audioAnimationHandler: AudioAnimationHandler,\r\n clearAudioAnimationHandler: ClearAudioAnimationHandler\r\n}\r\nexport const defaultClearAudioAnimationHandler = (delay: number) => {\r\n if (delay < 1) {\r\n const ell = document.getElementById('vf-music-cursor');\r\n if (ell) {\r\n ell.remove();\r\n }\r\n } else {\r\n setTimeout(() => {\r\n defaultClearAudioAnimationHandler(0);\r\n }, delay);\r\n }\r\n}\r\n /**\r\n * default implementation of playback animation.\r\n * @param selector \r\n * @returns \r\n */\r\n export const defaultAudioAnimationHandler = (view: SuiScoreView, selector: SmoSelector, offsetPct: number, durationPct: number) => {\r\n const score = view.renderer.score;\r\n \r\n if (!score) {\r\n return;\r\n }\r\n const scroller = view.scroller;\r\n const renderer = view.renderer;\r\n // Get note from 0th staff if we can\r\n const measureSel = SmoSelection.measureSelection(score,\r\n score.staves.length - 1, selector.measure);\r\n const zmeasureSel = SmoSelection.measureSelection(score,\r\n 0, selector.measure);\r\n const measure = measureSel?.measure as SmoMeasure;\r\n if (measure.svg.logicalBox && zmeasureSel?.measure?.svg?.logicalBox) {\r\n const context = renderer.pageMap.getRenderer(measure.svg.logicalBox);\r\n const topBox = SvgHelpers.smoBox(zmeasureSel.measure.svg.logicalBox);\r\n topBox.y -= context.box.y;\r\n const botBox = SvgHelpers.smoBox(measure.svg.logicalBox);\r\n botBox.y -= context.box.y;\r\n const height = (botBox.y + botBox.height) - topBox.y;\r\n const measureWidth = botBox.width - measure.svg.adjX;\r\n const nhWidth = 10 / score.layoutManager!.getGlobalLayout().svgScale;\r\n let width = measureWidth * durationPct - 10 / score.layoutManager!.getGlobalLayout().svgScale;\r\n width = Math.max(nhWidth, width);\r\n const y = topBox.y;\r\n let x = topBox.x + measure.svg.adjX + offsetPct * measureWidth;\r\n const noteBox = score.staves[selector.staff].measures[selector.measure].voices[selector.voice].notes[selector.tick];\r\n if (noteBox && noteBox.logicalBox) {\r\n x = noteBox.logicalBox.x;\r\n }\r\n const screenBox = SvgHelpers.boxPoints(x, y, width, height);\r\n const fillParams: Record = {};\r\n fillParams['fill-opacity'] = '0.5';\r\n fillParams['fill'] = '#4444ff';\r\n const ctx = context.getContext();\r\n defaultClearAudioAnimationHandler(0);\r\n ctx.save();\r\n ctx.openGroup('music-cursor', 'music-cursor');\r\n ctx.rect(x, screenBox.y, width, screenBox.height, fillParams);\r\n ctx.closeGroup();\r\n ctx.restore();\r\n layoutDebug.updatePlayDebug(selector, measure.svg.logicalBox);\r\n scroller.scrollVisibleBox(zmeasureSel.measure.svg.logicalBox); \r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { SmoMicrotone } from '../../smo/data/noteModifiers';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoOscillatorInfo } from '../../smo/data/staffModifiers';\r\nimport { SuiSampleMedia, AudioSample } from './samples';\r\n\r\n/**\r\n * Create audio reverb node.\r\n * @category SuiAudio\r\n */\r\nexport class SuiReverb {\r\n static get defaults() {\r\n return { length: 0.2, decay: 2 };\r\n }\r\n static impulse: AudioBuffer | null;\r\n\r\n connect(destination: AudioNode) {\r\n this.output.connect(destination);\r\n }\r\n\r\n disconnect() {\r\n this.output.disconnect();\r\n this.input.disconnect();\r\n }\r\n\r\n // credit: https://github.com/nick-thompson\r\n _buildImpulse() {\r\n let n = 0;\r\n let i = 0;\r\n if (SuiReverb.impulse) {\r\n this.input.buffer = SuiReverb.impulse;\r\n return;\r\n }\r\n\r\n const rate = this._context.sampleRate;\r\n const length = rate * this.length;\r\n const decay = this.decay;\r\n const impulse = this._context.createBuffer(2, length, rate);\r\n const impulseL = impulse.getChannelData(0);\r\n const impulseR = impulse.getChannelData(1);\r\n\r\n for (i = 0; i < length; i++) {\r\n n = this.reverse ? length - i : i;\r\n impulseL[i] = (Math.random() * 2 - 1) * Math.pow(1 - n / length, decay) * this.damp;\r\n impulseR[i] = (Math.random() * 2 - 1) * Math.pow(1 - n / length, decay) * this.damp;\r\n }\r\n SuiReverb.impulse = impulse;\r\n\r\n this.input.buffer = impulse;\r\n }\r\n output: ConvolverNode;\r\n input: ConvolverNode;\r\n length: number;\r\n decay: number;\r\n damp: number = 1.0;\r\n reverse: boolean = false;\r\n _context: AudioContext;\r\n constructor(context: AudioContext) {\r\n this.input = this.output = context.createConvolver();\r\n this.length = SuiReverb.defaults.length;\r\n this.decay = SuiReverb.defaults.decay;\r\n this._context = context;\r\n this._buildImpulse();\r\n }\r\n}\r\n\r\n/**\r\n * Audio custom osc node. Not used much.\r\n */\r\nexport interface WaveTable {\r\n real: number[],\r\n imaginary: number[]\r\n}\r\n/**\r\n * Parameters to create an oscillator for a single note of music\r\n * @category SuiAudio\r\n */\r\nexport interface SuiOscillatorParams {\r\n duration: number,\r\n frequency: number,\r\n attackEnv: number,\r\n decayEnv: number,\r\n sustainEnv: number,\r\n releaseEnv: number,\r\n sustainLevel: number,\r\n releaseLevel: number,\r\n waveform: OscillatorType,\r\n gain: number,\r\n wavetable?: WaveTable,\r\n useReverb: boolean,\r\n instrument: string\r\n}\r\n\r\nexport const SynthWavetable: WaveTable = {\r\n real: [0,\r\n 0.3, 0.3, 0, 0, 0,\r\n 0.1, 0, 0, 0, 0,\r\n 0.05, 0, 0, 0, 0,\r\n 0.01, 0, 0, 0, 0,\r\n 0.01, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0],\r\n imaginary: [0,\r\n 0, 0.05, 0, 0, 0,\r\n 0, 0.01, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0]\r\n};\r\n/**\r\n * Simple waveform synthesizer thing that plays notes. Oscillator works in either\r\n * analog synthisizer or sampler mode.\r\n * @category SuiAudio\r\n */\r\nexport abstract class SuiOscillator {\r\n static audio: AudioContext = new AudioContext();\r\n static created: number = 0;\r\n static get defaults(): SuiOscillatorParams {\r\n const wavetable: WaveTable = {\r\n real: [], imaginary: []\r\n };\r\n const obj = {\r\n duration: 1000,\r\n frequency: 440,\r\n attackEnv: 0.05,\r\n decayEnv: 0.4,\r\n sustainEnv: 0.8,\r\n releaseEnv: 0.25,\r\n sustainLevel: 0.5,\r\n releaseLevel: 0.1,\r\n waveform: 'custom',\r\n gain: 0.2,\r\n wavetable,\r\n useReverb: false,\r\n instrument: 'piano'\r\n };\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n\r\n static sampleFiles: string[] = ['bb4', 'cn4'];\r\n static samples: AudioSample[] = [];\r\n static playSelectionNow(selection: SmoSelection, score: SmoScore, gain: number) {\r\n // In the midst of re-rendering...\r\n if (!selection.note) {\r\n return;\r\n }\r\n if (selection.note.isRest() || selection.note.isSlash() || selection.note.isHidden()) {\r\n return;\r\n }\r\n const soundInfo = selection.staff.getStaffInstrument(selection.selector.measure);\r\n const oscInfo = SuiSampleMedia.getSmoOscillatorInfo(soundInfo.instrument);\r\n setTimeout(() => {\r\n const ar = SuiOscillator.fromNote(selection.measure, selection.note!, score, oscInfo[0], gain);\r\n ar.forEach((osc) => {\r\n osc.play();\r\n });\r\n }, 1);\r\n }\r\n\r\n static get attackTime() {\r\n return 25;\r\n }\r\n static get decayTime() {\r\n return 15;\r\n }\r\n // ### fromNote\r\n // Create an areray of oscillators for each pitch in a note\r\n static fromNote(measure: SmoMeasure, note: SmoNote, score: SmoScore, soundInfo: SmoOscillatorInfo, gain: number): SuiOscillator[] {\r\n let frequency = 0;\r\n let duration = 0;\r\n const tempo = measure.getTempo();\r\n const bpm = tempo.bpm;\r\n const beats = note.tickCount / 4096;\r\n duration = (beats / bpm) * 60000;\r\n\r\n // adjust if bpm is over something other than 1/4 note\r\n duration = duration * (4096 / tempo.beatDuration);\r\n if (soundInfo.waveform === 'sample') {\r\n duration = 250;\r\n }\r\n\r\n const ar: SuiOscillator[] = [];\r\n gain = isNaN(gain) ? 0.2 : gain;\r\n gain = gain / note.pitches.length;\r\n if (note.noteType === 'r') {\r\n gain = 0.001;\r\n }\r\n note.pitches.forEach((pitch, pitchIx) => {\r\n const mtone: SmoMicrotone | null = note.getMicrotone(pitchIx) ?? null;\r\n frequency = SmoAudioPitch.smoPitchToFrequency(pitch, -1 * measure.transposeIndex, mtone);\r\n const def = SuiOscillator.defaults;\r\n def.instrument = soundInfo.instrument;\r\n def.frequency = frequency;\r\n def.duration = duration;\r\n def.gain = gain;\r\n if (soundInfo.waveform !== 'sample') {\r\n def.waveform = soundInfo.waveform;\r\n if (def.waveform === 'custom') {\r\n def.wavetable = SynthWavetable;\r\n }\r\n const osc = new SuiWavetable(def);\r\n ar.push(osc);\r\n } else {\r\n const osc = new SuiSampler(def);\r\n ar.push(osc);\r\n }\r\n });\r\n\r\n return ar;\r\n }\r\n\r\n static get attributes() {\r\n return ['duration', 'frequency', 'pitch', 'attackEnv', 'sustainEnv', 'decayEnv',\r\n 'releaseEnv', 'sustainLevel', 'releaseLevel', 'waveform', 'wavetable', 'gain'];\r\n }\r\n \r\n static resolveAfter(time: number) {\r\n return new Promise((resolve) => {\r\n const timerFunc = () => {\r\n resolve();\r\n }\r\n setTimeout(() => {\r\n timerFunc();\r\n }, time);\r\n });\r\n }\r\n _playPromise(duration: number, gain: GainNode) {\r\n const audio = SuiOscillator.audio;\r\n const promise = new Promise((resolve) => {\r\n if (this.osc) {\r\n this.osc.start(0);\r\n }\r\n setTimeout(() => {\r\n resolve();\r\n }, duration);\r\n\r\n setTimeout(() => {\r\n if (this.osc) {\r\n this.osc.stop(0);\r\n }\r\n this.disconnect();\r\n }, duration + 500);\r\n });\r\n return promise;\r\n }\r\n\r\n static toFloatArray(ar: number[]): Float32Array {\r\n const rv = new Float32Array(ar.length);\r\n let i = 0;\r\n for (i = 0; i < ar.length; ++i) {\r\n rv[i] = ar[i];\r\n }\r\n return rv;\r\n }\r\n reverb: SuiReverb | null;\r\n attack: number;\r\n decay: number;\r\n sustain: number;\r\n release: number;\r\n waveform: OscillatorType;\r\n attackEnv: number = -1;\r\n duration: number = -1;\r\n decayEnv: number = -1;\r\n sustainEnv: number = -1;\r\n releaseEnv: number = -1;\r\n gain: number = 1.0;\r\n sustainLevel: number = 0;\r\n releaseLevel: number = 0;\r\n frequency: number = -1;\r\n wavetable: WaveTable | null = null;\r\n useReverb: boolean;\r\n gainNode: GainNode | undefined;\r\n delayNode: DelayNode | undefined;\r\n instrument: string;\r\n osc: AudioScheduledSourceNode | undefined;\r\n constructor(parameters: SuiOscillatorParams) {\r\n smoSerialize.serializedMerge(SuiOscillator.attributes, parameters, this);\r\n this.reverb = null;\r\n // this.reverb = null;\r\n this.attack = this.attackEnv * SuiOscillator.attackTime;\r\n this.decay = this.decayEnv * SuiOscillator.decayTime;\r\n this.sustain = this.sustainEnv * this.duration;\r\n this.release = this.releaseEnv * this.duration;\r\n this.instrument = parameters.instrument;\r\n if (parameters.wavetable) {\r\n this.wavetable = parameters.wavetable;\r\n }\r\n this.useReverb = parameters.useReverb;\r\n // this.frequency = this.frequency / 2; // Overtones below partial\r\n this.waveform = parameters.waveform;\r\n if (!parameters.wavetable && this.waveform === 'custom') {\r\n this.waveform = 'sine';\r\n }\r\n }\r\n abstract play(): Promise;\r\n abstract createAudioNode(): AudioScheduledSourceNode;\r\n\r\n disconnect() {\r\n if (this.osc) {\r\n this.osc.disconnect();\r\n }\r\n if (this.gainNode) {\r\n this.gainNode.disconnect();\r\n }\r\n if (this.delayNode) {\r\n this.delayNode.disconnect();\r\n }\r\n if (this.reverb) {\r\n this.reverb.disconnect();\r\n }\r\n SuiOscillator.created -= 1;\r\n }\r\n\r\n /**\r\n * Connect the audio sound source to the output, combining other\r\n * nodes in the mix such as convolver (reverb), delay, and gain.\r\n * Also set up the envelope\r\n * @returns - a promise that tis resolved when `duration` time has expired\r\n */\r\n async createAudioGraph(): Promise {\r\n if (this.frequency === 0) {\r\n return SuiSampler.resolveAfter(this.duration);\r\n }\r\n const audio = SuiOscillator.audio;\r\n const attack = this.attack / 1000;\r\n const decay = this.decay / 1000;\r\n const sustain = this.sustain / 1000;\r\n const release = this.release / 1000;\r\n this.gainNode = audio.createGain();\r\n this.osc = this.createAudioNode();\r\n const gp1 = this.gain;\r\n\r\n if (this.useReverb) {\r\n this.reverb = new SuiReverb(SuiOscillator.audio);\r\n }\r\n\r\n if (this.useReverb && this.reverb) {\r\n this.delayNode = audio.createDelay(this.reverb.length);\r\n }\r\n this.gainNode.gain.exponentialRampToValueAtTime(gp1, audio.currentTime + attack);\r\n this.gainNode.gain.exponentialRampToValueAtTime(this.sustainLevel * gp1, audio.currentTime + attack + decay);\r\n this.gainNode.gain.exponentialRampToValueAtTime(this.releaseLevel * gp1, audio.currentTime + attack + decay + sustain);\r\n this.gainNode.gain.exponentialRampToValueAtTime(0.001, audio.currentTime + attack + decay + sustain + release);\r\n\r\n // osc.connect(gain1);\r\n if (this.useReverb && this.reverb && this.osc) {\r\n this.osc.connect(this.reverb.input);\r\n }\r\n this.osc.connect(this.gainNode);\r\n if (this.delayNode && this.reverb) {\r\n this.reverb.connect(this.delayNode);\r\n this.delayNode.connect(audio.destination);\r\n }\r\n this.gainNode.connect(audio.destination);\r\n SuiOscillator.created += 1;\r\n return this.playPromise(this.duration);\r\n }\r\n playPromise(duration: number): Promise {\r\n const promise = new Promise((resolve) => {\r\n if (this.osc) {\r\n this.osc.start(0);\r\n }\r\n setTimeout(() => {\r\n resolve();\r\n }, duration);\r\n setTimeout(() => {\r\n if (this.osc) {\r\n this.osc.stop(0);\r\n }\r\n this.disconnect();\r\n }, Math.round(duration * 1.05));\r\n });\r\n return promise;\r\n }\r\n}\r\n/**\r\n * An audio output that uses browser audio api OscillatorNode as a sound source\r\n * @category SuiAudio\r\n */\r\nexport class SuiWavetable extends SuiOscillator {\r\n createAudioNode(): AudioScheduledSourceNode {\r\n const node = SuiOscillator.audio.createOscillator();\r\n if (this.wavetable && this.wavetable.imaginary.length > 0 && this.wavetable.real.length > 0 && this.waveform === 'custom') {\r\n const wave = SuiOscillator.audio.createPeriodicWave(SuiOscillator.toFloatArray(this.wavetable.real),\r\n SuiOscillator.toFloatArray(this.wavetable.imaginary),\r\n { disableNormalization: false });\r\n node.setPeriodicWave(wave);\r\n } else {\r\n node.type = this.waveform;\r\n }\r\n node.frequency.value = this.frequency;\r\n return node;\r\n }\r\n // play the audio oscillator for the specified duration. Return a promise that\r\n // resolves after the duration. Also dispose of the audio resources after the play is complete.\r\n async play() {\r\n return this.createAudioGraph();\r\n }\r\n}\r\n\r\n/**\r\n * An audio output primitive that uses frequency-adjusted sampled sounds\r\n */\r\nexport class SuiSampler extends SuiOscillator {\r\n constructor(params: SuiOscillatorParams) {\r\n super(params);\r\n if (SuiSampleMedia.sampleOscMap[this.instrument]) {\r\n const sampleInfo = SuiSampleMedia.sampleOscMap[this.instrument];\r\n if (sampleInfo.length) {\r\n if (sampleInfo[0].sustain === 'sustained') {\r\n this.attack = 0.1 * this.duration;\r\n }\r\n }\r\n }\r\n }\r\n // Note: samplePromise must be complete before you call this \r\n createAudioNode(): AudioScheduledSourceNode {\r\n const node = SuiOscillator.audio.createBufferSource();\r\n const chooserParams = {\r\n instrument: this.instrument,\r\n frequency: this.frequency,\r\n duration: this.duration,\r\n gain: this.gain\r\n }\r\n const sample = SuiSampleMedia.matchedSample(chooserParams);\r\n if (!sample) {\r\n return node;\r\n }\r\n \r\n const cents = 1200 * (Math.log(this.frequency / sample!.frequency))\r\n / Math.log(2);\r\n this.gain = this.gain * sample.gain;\r\n node.buffer = sample!.sample;\r\n node.detune.value = cents; \r\n return node;\r\n }\r\n async play() {\r\n const self = this;\r\n return SuiSampleMedia.samplePromise(SuiOscillator.audio).then(() => {\r\n self.createAudioGraph();\r\n });\r\n }\r\n\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiOscillator, SuiSampler, SuiWavetable, SynthWavetable } from './oscillator';\r\nimport { SmoAudioScore } from '../../smo/xform/audioTrack';\r\nimport { SuiScoreView } from '../sui/scoreView';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SmoTie } from '../../smo/data/staffModifiers';\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { SuiAudioAnimationParams } from './musicCursor';\r\n\r\n/**\r\n * Create audio player for the score from the start point\r\n * @category SuiAudio\r\n */\r\nexport interface SuiAudioPlayerParams {\r\n startIndex: number,\r\n view: SuiScoreView,\r\n score: SmoScore,\r\n audioAnimation: SuiAudioAnimationParams\r\n}\r\n/**\r\n * Parameters used to create just-in-time oscillators\r\n * @category SuiAudio\r\n */\r\nexport interface SoundParams {\r\n frequencies: number[],\r\n duration: number,\r\n offsetPct: number,\r\n durationPct: number,\r\n volume: number,\r\n noteType: string,\r\n instrument: string,\r\n selector: SmoSelector\r\n}\r\n/**\r\n * A list of sound parameters for just-in-time oscillator creation\r\n * @category SuiAudio\r\n */\r\n export interface SoundParamMeasureLink {\r\n soundParams: Record,\r\n endTicks: number,\r\n next: SoundParamMeasureLink | null\r\n}\r\n/**\r\n * A set of oscillators to be played at a certain time.\r\n * @category SuiAudio\r\n */\r\nexport interface CuedAudioContext {\r\n oscs: SuiOscillator[],\r\n playMeasureIndex: number,\r\n playTickIndex: number,\r\n waitTime: number,\r\n offsetPct: number,\r\n durationPct: number,\r\n selector: SmoSelector\r\n}\r\n/**\r\n * A list of oscillators. We keep them in a list until played so we \r\n * can GC them if playing is cancelled\r\n * @category SuiAudio\r\n */\r\nexport interface CuedAudioLink {\r\n sound: CuedAudioContext;\r\n next: CuedAudioLink | null;\r\n}\r\n/**\r\n * Maintain a list of buffers ready to play, since this is a \r\n * system resource.\r\n * @category SuiAudio\r\n */\r\nexport class CuedAudioContexts {\r\n soundHead: CuedAudioLink | null = null;\r\n soundTail: CuedAudioLink | null = null;\r\n paramLinkHead: SoundParamMeasureLink | null = null;\r\n paramLinkTail: SoundParamMeasureLink | null = null;\r\n soundListLength = 0;\r\n playWaitTimer = 0; \r\n playMeasureIndex: number = 0; // index of the measure we are playing\r\n cueMeasureIndex: number = 0; // measure index we are populating\r\n complete: boolean = false;\r\n addToTail(cuedSound: CuedAudioContext) {\r\n const tail = { sound: cuedSound, next: null };\r\n if (this.soundTail === null) {\r\n this.soundTail = tail;\r\n this.soundHead = tail;\r\n } else {\r\n this.soundTail.next = { sound: cuedSound, next: null };\r\n this.soundTail = this.soundTail.next;\r\n }\r\n this.soundListLength += cuedSound.oscs.length;\r\n }\r\n advanceHead(): CuedAudioContext | null {\r\n if (this.soundHead === null) {\r\n return null;\r\n }\r\n const cuedSound = this.soundHead.sound;\r\n this.soundHead = this.soundHead.next;\r\n this.soundListLength -= cuedSound.oscs.length;\r\n return cuedSound;\r\n }\r\n get soundCount() {\r\n return this.soundListLength;\r\n }\r\n reset() {\r\n this.soundHead = null;\r\n this.soundTail = null;\r\n this.paramLinkHead = null;\r\n this.paramLinkTail = null;\r\n this.soundListLength = 0;\r\n this.playWaitTimer = 0;\r\n this.playMeasureIndex = 0;\r\n this.cueMeasureIndex = 0;\r\n this.complete = false;\r\n }\r\n}\r\n/**\r\n * Play the music, ja!\r\n * @category SuiAudio\r\n */\r\nexport class SuiAudioPlayer {\r\n static _playing: boolean = false;\r\n static instanceId: number = 0;\r\n static duplicatePitchThresh = 4;\r\n static voiceThresh = 16;\r\n static _playingInstance: SuiAudioPlayer | null = null;\r\n static set playing(val) {\r\n SuiAudioPlayer._playing = val;\r\n }\r\n static get audioBufferSize() {\r\n return 512;\r\n }\r\n static incrementInstanceId() {\r\n const id = SuiAudioPlayer.instanceId + 1;\r\n SuiAudioPlayer.instanceId = id;\r\n return id;\r\n }\r\n static get playing() {\r\n if (typeof (SuiAudioPlayer._playing) === 'undefined') {\r\n SuiAudioPlayer._playing = false;\r\n }\r\n return SuiAudioPlayer._playing;\r\n }\r\n\r\n static pausePlayer() {\r\n if (SuiAudioPlayer._playingInstance) {\r\n const a = SuiAudioPlayer._playingInstance;\r\n a.paused = true;\r\n a.audioAnimation.clearAudioAnimationHandler(0);\r\n }\r\n SuiAudioPlayer.playing = false;\r\n\r\n }\r\n instanceId: number;\r\n paused: boolean;\r\n view: SuiScoreView;\r\n score: SmoScore;\r\n cuedSounds: CuedAudioContexts;\r\n audioDefaults = SuiOscillator.defaults;\r\n openTies: Record = {};\r\n audioAnimation: SuiAudioAnimationParams;\r\n constructor(parameters: SuiAudioPlayerParams) {\r\n this.instanceId = SuiAudioPlayer.incrementInstanceId();\r\n this.paused = false;\r\n this.view = parameters.view;\r\n this.score = parameters.score;\r\n // Assume tempo is same for all measures\r\n this.cuedSounds = new CuedAudioContexts();\r\n this.audioAnimation = parameters.audioAnimation;\r\n }\r\n\r\n getNoteSoundData(measureIndex: number) {\r\n const measureNotes: Record = {};\r\n let measureTicks = this.score.staves[0].measures[measureIndex].getMaxTicksVoice();\r\n const freqDuplicates: Record> = {};\r\n const voiceCount: Record = {};\r\n this.score.staves.forEach((staff, staffIx) => {\r\n const measure = staff.measures[measureIndex];\r\n measure.voices.forEach((voice, voiceIx) => {\r\n let curTick = 0;\r\n const instrument = staff.getStaffInstrument(measure.measureNumber.measureIndex);\r\n voice.notes.forEach((smoNote, tickIx) => {\r\n const frequencies: number[] = [];\r\n const xpose = -1 * measure.transposeIndex;\r\n const selector: SmoSelector = SmoSelector.default;\r\n selector.measure = measureIndex;\r\n selector.staff = staffIx;\r\n selector.voice = voiceIx;\r\n selector.tick = tickIx;\r\n let ties: SmoTie[] = [];\r\n const tieIx = '' + staffIx + '-' + measureIndex + '-' + voiceIx;\r\n const prevMeasureIx = '' + staffIx + '-' + (measureIndex - 1) + '-' + voiceIx;\r\n if (smoNote.noteType === 'n' && !smoNote.isHidden()) {\r\n ties = staff.getTiesStartingAt(selector);\r\n smoNote.pitches.forEach((pitch, pitchIx) => {\r\n const freq = SmoAudioPitch.smoPitchToFrequency(pitch, xpose, smoNote.getMicrotone(pitchIx) ?? null);\r\n const freqRound = Math.round(freq);\r\n if (!freqDuplicates[curTick]) {\r\n freqDuplicates[curTick] = {};\r\n voiceCount[curTick] = 0;\r\n }\r\n const freqBeat = freqDuplicates[curTick];\r\n if (!freqBeat[freqRound]) {\r\n freqBeat[freqRound] = 0;\r\n }\r\n if (freqBeat[freqRound] < SuiAudioPlayer.duplicatePitchThresh && voiceCount[curTick] < SuiAudioPlayer.voiceThresh) {\r\n frequencies.push(freq);\r\n freqBeat[freqRound] += 1;\r\n voiceCount[curTick] += 1;\r\n }\r\n });\r\n const duration = smoNote.tickCount;\r\n const volume = SmoAudioScore.volumeFromNote(smoNote, SmoAudioScore.dynamicVolumeMap.mf);\r\n const soundData: SoundParams = {\r\n frequencies,\r\n volume,\r\n offsetPct: curTick / measureTicks,\r\n durationPct: duration / measureTicks,\r\n noteType: smoNote.noteType,\r\n duration,\r\n instrument: instrument.instrument,\r\n selector\r\n };\r\n const pushTickArray = (curTick: number, soundData: SoundParams) => {\r\n if (typeof(measureNotes[curTick]) === 'undefined') {\r\n measureNotes[curTick] = [];\r\n }\r\n measureNotes[curTick].push(soundData);\r\n }\r\n // If this is continuation of tied note, just change duration\r\n if (this.openTies[prevMeasureIx]) {\r\n this.openTies[prevMeasureIx]!.duration += duration;\r\n if (ties.length === 0) {\r\n this.openTies[prevMeasureIx] = null;\r\n }\r\n }\r\n else if (this.openTies[tieIx]) {\r\n this.openTies[tieIx]!.duration += duration;\r\n if (ties.length === 0) {\r\n this.openTies[tieIx] = null;\r\n }\r\n } else if (ties.length) {\r\n // If start of tied note, record the tie note, the next note in this voice\r\n // will adjust duration\r\n this.openTies[tieIx] = soundData;\r\n pushTickArray(curTick, soundData);\r\n } else {\r\n pushTickArray(curTick, soundData);\r\n }\r\n }\r\n curTick += Math.round(smoNote.tickCount);\r\n });\r\n });\r\n });\r\n const keys = Object.keys(measureNotes).map((x) => parseInt(x, 10));\r\n if (keys.length) {\r\n measureTicks -= keys.reduce((a, b) => a > b ? a : b);\r\n }\r\n return { endTicks: measureTicks, measureNotes };\r\n }\r\n \r\n createCuedSound(measureIndex: number) {\r\n let i = 0;\r\n let j = 0;\r\n let measureBeat = 0;\r\n if (!SuiAudioPlayer.playing || this.cuedSounds.paramLinkHead === null) {\r\n return;\r\n }\r\n // TODO base on the selection start.\r\n const { endTicks, measureNotes } = { endTicks: this.cuedSounds.paramLinkHead.endTicks, measureNotes: this.cuedSounds.paramLinkHead.soundParams };\r\n this.cuedSounds.paramLinkHead = this.cuedSounds.paramLinkHead.next;\r\n const maxMeasures = this.score.staves[0].measures.length;\r\n const smoTemp = this.score.staves[0].measures[measureIndex].getTempo();\r\n const tempo = smoTemp.bpm * (smoTemp.beatDuration / 4096);\r\n const keys: number[] = [];\r\n Object.keys(measureNotes).forEach((key) => {\r\n keys.push(parseInt(key, 10));\r\n }); \r\n // There is a key for each note in the measure. The value is the number of ticks before that note is played\r\n for (j = 0; j < keys.length; ++j) {\r\n const beatTime = keys[j];\r\n const soundData = measureNotes[beatTime];\r\n let durationPct = 0;\r\n let offsetPct = 0;\r\n if (soundData.length === 0) {\r\n console.log('empty sound measure');\r\n continue;\r\n }\r\n soundData.forEach((ss) => {\r\n if (durationPct === 0) {\r\n durationPct = ss.durationPct;\r\n offsetPct = ss.offsetPct;\r\n }\r\n durationPct = Math.min(durationPct, ss.durationPct);\r\n offsetPct = Math.min(offsetPct, ss.offsetPct);\r\n });\r\n const cuedSound: CuedAudioContext = { oscs: [], waitTime: 0, playMeasureIndex: measureIndex, playTickIndex: j,\r\n offsetPct, durationPct, selector: soundData[0].selector };\r\n const timeRatio = 60000 / (tempo * 4096);\r\n // If there is complete silence here, put a silent beat\r\n if (beatTime > measureBeat) {\r\n const params = this.audioDefaults;\r\n params.frequency = 0;\r\n params.duration = (beatTime - measureBeat) * timeRatio;\r\n params.gain = 0;\r\n params.useReverb = false;\r\n const silence: CuedAudioContext = { oscs: [], waitTime: params.duration, playMeasureIndex: measureIndex, playTickIndex: j,\r\n offsetPct, durationPct, selector: soundData[0].selector };\r\n silence.oscs.push(new SuiSampler(params));\r\n this.cuedSounds.addToTail(silence);\r\n measureBeat = beatTime;\r\n }\r\n this.cuedSounds.addToTail(cuedSound);\r\n soundData.forEach((sound) => {\r\n const adjDuration = Math.round(sound.duration * timeRatio) + 150;\r\n for (i = 0; i < sound.frequencies.length && sound.noteType === 'n'; ++i) {\r\n const freq = sound.frequencies[i];\r\n const params = this.audioDefaults;\r\n params.frequency = freq;\r\n params.duration = adjDuration;\r\n params.gain = sound.volume;\r\n params.instrument = sound.instrument;\r\n params.useReverb = this.score.audioSettings.reverbEnable;\r\n if (this.score.audioSettings.playerType === 'synthesizer') {\r\n params.wavetable = SynthWavetable;\r\n params.waveform = this.score.audioSettings.waveform;\r\n cuedSound.oscs.push(new SuiWavetable(params));\r\n } else {\r\n cuedSound.oscs.push(new SuiSampler(params));\r\n }\r\n }\r\n });\r\n if (j + 1 < keys.length) {\r\n const diff = (keys[j + 1] - keys[j]);\r\n cuedSound.waitTime = diff * timeRatio;\r\n measureBeat += diff;\r\n } else if (measureIndex + 1 < maxMeasures) {\r\n // If the next measure, calculate the frequencies for the next track.\r\n this.cuedSounds.cueMeasureIndex += 1;\r\n cuedSound.waitTime = endTicks * timeRatio;\r\n } else {\r\n this.cuedSounds.complete = true;\r\n }\r\n // }, 1);\r\n }\r\n }\r\n populateSounds(measureIndex: number) {\r\n if (!SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n const interval = 20;\r\n let draining = false;\r\n const buffer = SuiAudioPlayer.audioBufferSize;\r\n const timer = setInterval(() => {\r\n if (this.cuedSounds.complete || SuiAudioPlayer.playing === false) {\r\n clearInterval(timer);\r\n return;\r\n }\r\n if (this.cuedSounds.paramLinkHead === null) {\r\n this.cuedSounds.complete = true;\r\n return;\r\n }\r\n if (draining && this.cuedSounds.soundCount > buffer / 4) {\r\n return;\r\n }\r\n if (this.cuedSounds.soundCount > buffer) {\r\n draining = true;\r\n return;\r\n }\r\n draining = false;\r\n this.createCuedSound(measureIndex);\r\n measureIndex += 1;\r\n }, interval);\r\n }\r\n playSounds() {\r\n this.cuedSounds.playMeasureIndex = 0;\r\n this.cuedSounds.playWaitTimer = 0;\r\n let previousDuration = 0;\r\n const timer = () => {\r\n setTimeout(() => {\r\n const cuedSound = this.cuedSounds.advanceHead();\r\n if (cuedSound === null) {\r\n SuiAudioPlayer._playing = false;\r\n this.audioAnimation.clearAudioAnimationHandler(previousDuration);\r\n return;\r\n }\r\n if (SuiAudioPlayer._playing === false) {\r\n this.audioAnimation.clearAudioAnimationHandler(previousDuration);\r\n return;\r\n }\r\n if (cuedSound.oscs.length === 0) {\r\n this.cuedSounds.playMeasureIndex += 1;\r\n this.cuedSounds.playWaitTimer = cuedSound.waitTime;\r\n console.warn('empty oscs in playback');\r\n timer(); \r\n return;\r\n }\r\n previousDuration = cuedSound.oscs[0].duration;\r\n SuiAudioPlayer._playChord(cuedSound.oscs);\r\n this.audioAnimation.audioAnimationHandler(this.view, cuedSound.selector,\r\n cuedSound.offsetPct, cuedSound.durationPct);\r\n this.cuedSounds.playMeasureIndex += 1;\r\n this.cuedSounds.playWaitTimer = cuedSound.waitTime;\r\n timer();\r\n }, this.cuedSounds.playWaitTimer);\r\n }\r\n timer();\r\n }\r\n playAfter(milliseconds: number, oscs: SuiOscillator[]) {\r\n setTimeout(() => {\r\n SuiAudioPlayer._playChord(oscs);\r\n }, milliseconds)\r\n }\r\n startPlayer(measureIndex: number) {\r\n this.openTies = {};\r\n this.cuedSounds.reset();\r\n this.cuedSounds.cueMeasureIndex = measureIndex;\r\n this.cuedSounds.playMeasureIndex = this.cuedSounds.cueMeasureIndex;\r\n this.cuedSounds.paramLinkHead = null;\r\n this.cuedSounds.paramLinkTail = null;\r\n const endMeasure = this.score.staves[0].measures.length;\r\n let i = 0;\r\n for (i = this.cuedSounds.cueMeasureIndex; i < endMeasure; ++i) {\r\n const { endTicks, measureNotes } = this.getNoteSoundData(i);\r\n const node = {\r\n soundParams: measureNotes,\r\n endTicks,\r\n next: null\r\n };\r\n if (this.cuedSounds.paramLinkHead === null) {\r\n this.cuedSounds.paramLinkHead = node;\r\n this.cuedSounds.paramLinkTail = node;\r\n } else {\r\n this.cuedSounds.paramLinkTail!.next = node;\r\n this.cuedSounds.paramLinkTail = this.cuedSounds.paramLinkTail!.next;\r\n }\r\n }\r\n setTimeout(() => {\r\n this.populateSounds(measureIndex);\r\n }, 1);\r\n const bufferThenPlay = () => {\r\n setTimeout(() => {\r\n if (this.cuedSounds.soundListLength >= SuiAudioPlayer.audioBufferSize || this.cuedSounds.complete) {\r\n this.playSounds();\r\n } else {\r\n bufferThenPlay();\r\n }\r\n }, 50);\r\n }\r\n bufferThenPlay();\r\n }\r\n\r\n static stopPlayer() {\r\n if (SuiAudioPlayer._playingInstance) {\r\n const a = SuiAudioPlayer._playingInstance;\r\n a.audioAnimation.clearAudioAnimationHandler(0);\r\n a.paused = false;\r\n a.cuedSounds.reset();\r\n }\r\n SuiAudioPlayer.playing = false;\r\n }\r\n\r\n static get playingInstance() {\r\n if (!SuiAudioPlayer._playingInstance) {\r\n return null;\r\n }\r\n return SuiAudioPlayer._playingInstance;\r\n }\r\n\r\n // the oscAr contains an oscillator for each pitch in the chord.\r\n // each inner oscillator is a promise, the combined promise is resolved when all\r\n // the beats have completed.\r\n static _playChord(oscAr: SuiOscillator[]) {\r\n var par: Promise[] = [];\r\n oscAr.forEach((osc) => {\r\n par.push(osc.play());\r\n });\r\n return Promise.all(par);\r\n }\r\n\r\n // Starts the player.\r\n play() {\r\n let i = 0;\r\n if (SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n SuiAudioPlayer._playingInstance = this;\r\n SuiAudioPlayer.playing = true;\r\n const startIndex = this.view.tracker.getFirstMeasureOfSelection()?.measureNumber.measureIndex ?? 0;\r\n //for (i = this.startIndex; i < this.score.staves[0].measures.length; ++i) {\r\n // this.tracks.push(SuiAudioPlayer.getTrackSounds(this.audio.tracks, i));\r\n // }\r\n // const sounds = SuiAudioPlayer.getTrackSounds(this.audio.tracks, this.startIndex);\r\n // this.playSoundsAtOffset(sounds, 0);\r\n this.startPlayer(startIndex);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoOscillatorInfo, SmoInstrument, SmoOscillatorInfoAllTypes,\r\n SmoOscillatorInfoNumberType, SmoOscillatorInfoNumberArType, SmoOscillatorInfoStringType, SmoOscillatorInfoStringNullType,\r\n SmoOscillatorInfoWaveformType, SmoOscillatorInfoSustainType, SmoOscillatorInfoOptionsType } from '../../smo/data/staffModifiers';\r\n/**\r\n * A set of parameters from the instrument interface used to create audio from samples.\r\n * @category SuiAudio\r\n */\r\n export interface SampleChooserParams {\r\n family?: string,\r\n instrument: string,\r\n frequency: number,\r\n duration: number,\r\n gain: number,\r\n articulation?: string\r\n}\r\n/**\r\n * A function prototype that chooses from among samples to return the correct one for that note\r\n */\r\nexport type SampleChooser = (params: SampleChooserParams, samples: SmoOscillatorInfo[]) => AudioSample | null;\r\n/**\r\n * A specific audio sample that can be converted into an audio node\r\n * @category SuiAudio\r\n */\r\nexport interface AudioSample {\r\n sample: AudioBuffer,\r\n frequency: number,\r\n patch: string,\r\n gain: number\r\n}\r\n/**\r\n * Interface for a chooser function and a set of samples\r\n * @category SuiAudio\r\n */\r\nexport interface InstrumentSampleChooser {\r\n instrument: string,\r\n sampleChooser: SampleChooser,\r\n samples: SmoOscillatorInfo[]\r\n}\r\n\r\nexport const sampleForPercussion = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n const longSamples = samples.filter((ss) => ss.instrument === 'percussion');\r\n let sample: AudioSample | null = null;\r\n if (longSamples.length) {\r\n sample = sampleFromFrequency(params, longSamples);\r\n if (sample) {\r\n return sample;\r\n }\r\n }\r\n return sampleFromFrequency(params, samples);\r\n}\r\n/**\r\n * For instruments like violin that require different samples depending on note duration\r\n * @param params \r\n * @param samples \r\n * @returns \r\n * @category SuiAudio\r\n */\r\nexport const sampleFromMinDuration = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n const longSamples = samples.filter((ss) => ss.minDuration < params.duration && ss.minDuration > 0);\r\n if (longSamples.length) {\r\n return sampleFromFrequency(params, longSamples);\r\n }\r\n return sampleFromFrequency(params, samples.filter((ss) => ss.minDuration === 0));\r\n}\r\n\r\n/**\r\n * Give a set of samples, return the one that closest matches the frequency\r\n * @param params \r\n * @param samples \r\n * @returns \r\n * @category SuiAudio\r\n*/\r\nexport const sampleFromFrequency = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n let min = 9999;\r\n let rv: AudioSample | null = null;\r\n let i = 0;\r\n const f = params.frequency;\r\n for (i = 0; i < samples.length; ++i) {\r\n const oscInfo = samples[i];\r\n if (!oscInfo.sample || !SuiSampleMedia.sampleBufferMap[oscInfo.sample]) {\r\n continue;\r\n }\r\n const gain = oscInfo.dynamic / 100;\r\n const buffer = SuiSampleMedia.sampleBufferMap[oscInfo.sample];\r\n if (Math.abs(f - oscInfo.nativeFrequency) < min) {\r\n min = Math.abs(f - oscInfo.nativeFrequency);\r\n rv = {\r\n sample: buffer,\r\n frequency: oscInfo.nativeFrequency,\r\n patch: oscInfo.sample,\r\n gain\r\n };\r\n } \r\n }\r\n return rv;\r\n}\r\n/**\r\n * Logic to create audio nodes out of HTML5 media elements\r\n * @category SuiAudio\r\n */\r\nexport class SuiSampleMedia {\r\n static sampleFiles: SmoOscillatorInfo[] = [];\r\n static sampleBufferMap: Record = {};\r\n static sampleOscMap: Record = {};\r\n static instrumentChooser: Record = {};\r\n static receivedBuffer: boolean = false;\r\n static getFamilyForInstrument(instKey: string): string {\r\n const sound = SuiSampleMedia.instrumentChooser[instKey];\r\n if (sound && sound.samples.length) {\r\n return sound.samples[0].family;\r\n }\r\n return 'keyboard';\r\n }\r\n static insertIntoMap(sample: Partial) {\r\n const oscInfo = SmoInstrument.defaultOscillatorParam;\r\n const populatePartial = (partial: Partial, full: SmoOscillatorInfo, \r\n param: SmoOscillatorInfoNumberType | SmoOscillatorInfoNumberArType | SmoOscillatorInfoStringType | SmoOscillatorInfoStringNullType\r\n | SmoOscillatorInfoOptionsType | SmoOscillatorInfoSustainType | SmoOscillatorInfoWaveformType) => {\r\n (full[param] as any) = typeof(partial[param]) === 'undefined' ? full[param] : partial[param];\r\n }\r\n SmoOscillatorInfoAllTypes.forEach((paramType) => {\r\n populatePartial(sample, oscInfo, paramType as any);\r\n });\r\n if (!this.sampleOscMap[oscInfo.instrument]) {\r\n this.sampleOscMap[oscInfo.instrument] = [];\r\n }\r\n this.sampleOscMap[oscInfo.instrument].push(oscInfo);\r\n SuiSampleMedia.sampleFiles.push(oscInfo);\r\n }\r\n static populateSampleMap() {\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'samplecn4',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'samplebb4',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'b', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'sample-piano-a2',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n dynamic: 35,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'sample-piano-fs2',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n dynamic: 35,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'f', accidental: '#', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'basspizz-c2-sso',\r\n family: 'strings',\r\n instrument: 'jazzBass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: '#', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'basspizz-c3-sso',\r\n family: 'strings',\r\n instrument: 'jazzBass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: '#', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'eguitar-e3',\r\n family: 'strings',\r\n instrument: 'eGuitar',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'eguitar-d4',\r\n family: 'strings',\r\n instrument: 'eGuitar',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'd', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-bass-a1',\r\n family: 'strings',\r\n instrument: 'bass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 1 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-bass-a3',\r\n family: 'strings',\r\n instrument: 'bass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-c4',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-b5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-e5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e6',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e4',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-cello-bb3',\r\n family: 'strings',\r\n instrument: 'cello',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-cello-c4',\r\n family: 'strings',\r\n instrument: 'cello',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trumpet-g5-sso',\r\n family: 'brass',\r\n instrument: 'trumpet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trumpet-e4-sso',\r\n family: 'brass',\r\n instrument: 'trumpet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-horn-e4',\r\n family: 'brass',\r\n instrument: 'horn',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-horn-g3',\r\n family: 'brass',\r\n instrument: 'horn',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trombone-g3-sso',\r\n family: 'brass',\r\n instrument: 'trombone',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trombone-g4-sso',\r\n family: 'brass',\r\n instrument: 'trombone',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-tuba-c2',\r\n family: 'brass',\r\n instrument: 'tuba',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-tuba-c3',\r\n family: 'brass',\r\n instrument: 'tuba',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-flute-c5',\r\n family: 'wind',\r\n instrument: 'flute',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-flute-c6',\r\n family: 'wind',\r\n instrument: 'flute',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-clarinet-c4',\r\n family: 'wind',\r\n instrument: 'clarinet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-clarinet-c5',\r\n family: 'wind',\r\n instrument: 'clarinet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-a3',\r\n family: 'wind',\r\n instrument: 'altoSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-c4',\r\n family: 'wind',\r\n instrument: 'altoSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-a3',\r\n family: 'wind',\r\n instrument: 'tenorSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 24, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-c4',\r\n family: 'wind',\r\n instrument: 'tenorSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 24, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'barisax-d2-nz10',\r\n family: 'wind',\r\n instrument: 'bariSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'd', accidental: 'n', octave: 2 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'barisax-c3-nz10',\r\n family: 'wind',\r\n instrument: 'bariSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 12, null) - 5,\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'pad-c4-vita',\r\n family: 'synth',\r\n instrument: 'pad',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'pad-c5-vita',\r\n family: 'synth',\r\n instrument: 'pad',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-hh-closed',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 5 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-snare',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'f', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-tom1',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-tom2',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 5 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-kick',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n const instrumentMap = Object.keys(SuiSampleMedia.sampleOscMap);\r\n instrumentMap.forEach((instrumentKey) => {\r\n SuiSampleMedia.instrumentChooser[instrumentKey] = {\r\n instrument: instrumentKey,\r\n samples: SuiSampleMedia.sampleOscMap[instrumentKey],\r\n sampleChooser: sampleFromFrequency\r\n }\r\n });\r\n SuiSampleMedia.instrumentChooser['violin'].sampleChooser = sampleFromMinDuration;\r\n SuiSampleMedia.instrumentChooser['percussion'].sampleChooser = sampleForPercussion;\r\n }\r\n static getSmoOscillatorInfo(instrument: string) {\r\n if (!SuiSampleMedia.sampleOscMap[instrument]) {\r\n return SuiSampleMedia.sampleOscMap['piano'];\r\n }\r\n return SuiSampleMedia.sampleOscMap[instrument];\r\n }\r\n /**\r\n * Load samples so we can play the music\r\n * @returns - promise, resolved when loaded\r\n */\r\n static samplePromise(audio: AudioContext): Promise {\r\n const mediaElements: HTMLMediaElement[] = [];\r\n let i = 0;\r\n if (SuiSampleMedia.receivedBuffer) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n SuiSampleMedia.populateSampleMap();\r\n const loadedSamples: Record = {};\r\n for (i = 0; i < SuiSampleMedia.sampleFiles.length; ++i) {\r\n const file = SuiSampleMedia.sampleFiles[i];\r\n if (!file.sample) {\r\n continue;\r\n }\r\n const sampleName = file.sample;\r\n const audioElement: HTMLMediaElement | null = document.getElementById(file.sample) as HTMLMediaElement;\r\n if (!loadedSamples[file.sample] && audioElement) {\r\n loadedSamples[file.sample] = true;\r\n const media = audio.createMediaElementSource(audioElement);\r\n mediaElements.push(audioElement);\r\n const req = new XMLHttpRequest();\r\n req.open('GET', media.mediaElement.src, true);\r\n req.responseType = 'arraybuffer';\r\n req.send();\r\n req.onload = () => {\r\n const audioData = req.response;\r\n audio.decodeAudioData(audioData, (decoded) => {\r\n SuiSampleMedia.sampleBufferMap[sampleName] = decoded;\r\n SuiSampleMedia.receivedBuffer = true;\r\n });\r\n };\r\n }\r\n if (mediaElements.length < 1) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n }\r\n const rv = new Promise((resolve: any) => {\r\n const checkSample = () => {\r\n setTimeout(() => {\r\n if (!SuiSampleMedia.receivedBuffer) {\r\n checkSample();\r\n } else {\r\n resolve();\r\n }\r\n }, 100);\r\n };\r\n checkSample();\r\n });\r\n return rv;\r\n }\r\n\r\n static sampleForFrequency(f: number, oscs: SmoOscillatorInfo[]): AudioSample | null {\r\n let min = 9999;\r\n let rv: AudioSample | null = null;\r\n let i = 0;\r\n for (i = 0; i < oscs.length; ++i) {\r\n const oscInfo = oscs[i];\r\n if (!oscInfo.sample || !SuiSampleMedia.sampleBufferMap[oscInfo.sample]) {\r\n continue;\r\n }\r\n const buffer = SuiSampleMedia.sampleBufferMap[oscInfo.sample];\r\n const gain = oscInfo.dynamic / 100;\r\n if (Math.abs(f - oscInfo.nativeFrequency) < min) {\r\n min = Math.abs(f - oscInfo.nativeFrequency);\r\n rv = {\r\n sample: buffer,\r\n frequency: oscInfo.nativeFrequency,\r\n patch: oscInfo.sample,\r\n gain\r\n };\r\n } \r\n }\r\n return rv;\r\n }\r\n static matchedSample(params: SampleChooserParams): AudioSample | null {\r\n let instrumentKey = params.instrument;\r\n if (!SuiSampleMedia.instrumentChooser[instrumentKey]) {\r\n instrumentKey = 'piano';\r\n }\r\n if (!SuiSampleMedia.instrumentChooser[instrumentKey]) {\r\n const keys = Object.keys(SuiSampleMedia.sampleOscMap);\r\n if (keys.length === 0) {\r\n return null;\r\n }\r\n instrumentKey = keys[0];\r\n }\r\n return SuiSampleMedia.instrumentChooser[instrumentKey].sampleChooser(params, SuiSampleMedia.instrumentChooser[instrumentKey].samples);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Utilities for formatting the music by estimating the geometry of the music.\r\n * @module /render/sui/formatter\r\n */\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { vexGlyph } from '../vex/glyphDimensions';\r\nimport { SmoDynamicText, SmoLyric, SmoArticulation, SmoOrnament } from '../../smo/data/noteModifiers';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoBeamer } from '../../smo/xform/beamers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoStaffHairpin, SmoStaffTextBracket, SmoTabStave } from '../../smo/data/staffModifiers';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { ScaledPageLayout, SmoLayoutManager, SmoPageLayout } from '../../smo/data/scoreModifiers';\r\nimport { SmoMeasure, ISmoBeamGroup } from '../../smo/data/measure';\r\nimport { TimeSignature, SmoTempoText } from '../../smo/data//measureModifiers';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { VexFlow, defaultMeasurePadding } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\nconst VF = VexFlow;\r\n\r\nexport interface SuiTickContext {\r\n widths: number[],\r\n tickCounts: number[]\r\n}\r\n/**\r\n * Estimated x, y position of the measure\r\n * @category SuiRender\r\n */\r\nexport interface MeasureEstimate {\r\n measures: SmoMeasure[], x: number, y: number\r\n}\r\nexport interface LineRender {\r\n systems: Record\r\n}\r\n\r\n/**\r\n * Keep track of start/end measures on a page. If the page\r\n * content doesn't change, and the measures don't change, we don't\r\n * need to re-render the content\r\n * @catgegory SuiRender\r\n */\r\nexport interface RenderedPage {\r\n startMeasure: number,\r\n endMeasure: number\r\n}\r\n/**\r\n * Utilities for estimating measure/system/page width and height\r\n * @category SuiRender\r\n */\r\nexport class SuiLayoutFormatter {\r\n score: SmoScore;\r\n systems: Record = {};\r\n columnMeasureMap: Record;\r\n currentPage: number = 0;\r\n svg: SvgPageMap;\r\n renderedPages: Record;\r\n lines: number[] = [];\r\n constructor(score: SmoScore, svg: SvgPageMap, renderedPages: Record) {\r\n this.score = score;\r\n this.svg = svg;\r\n this.columnMeasureMap = {};\r\n this.renderedPages = renderedPages;\r\n this.score.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n if (!this.columnMeasureMap[measure.measureNumber.measureIndex]) {\r\n this.columnMeasureMap[measure.measureNumber.measureIndex] = [];\r\n }\r\n this.columnMeasureMap[measure.measureNumber.measureIndex].push(measure);\r\n });\r\n });\r\n }\r\n \r\n /**\r\n * Once we know which line a measure is going on, make a map for it for easy\r\n * looking during rendering\r\n * @param measures \r\n * @param lineIndex \r\n * @param systemIndex \r\n */\r\n updateSystemMap(measures: SmoMeasure[], lineIndex: number, systemIndex: number) {\r\n if (!this.systems[lineIndex]) {\r\n const nextLr: LineRender = {\r\n systems: {}\r\n };\r\n this.systems[lineIndex] = nextLr;\r\n }\r\n const systemRender = this.systems[lineIndex];\r\n if (!systemRender.systems[systemIndex]) {\r\n systemRender.systems[systemIndex] = measures;\r\n }\r\n }\r\n trimPages(startPageCount: number): boolean {\r\n let pl: SmoPageLayout[] | undefined = this.score?.layoutManager?.pageLayouts;\r\n if (pl) {\r\n if (this.currentPage < pl.length - 1) {\r\n this.score!.layoutManager!.trimPages(this.currentPage);\r\n pl = this.score?.layoutManager?.pageLayouts;\r\n }\r\n if (pl && pl.length !== startPageCount) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * see if page breaks this boundary. If it does, bump the current page and move the system down\r\n * to the new page\r\n * @param scoreLayout \r\n * @param currentLine \r\n * @param bottomMeasure \r\n * @returns \r\n */\r\n checkPageBreak(scoreLayout: ScaledPageLayout, currentLine: SmoMeasure[], bottomMeasure: SmoMeasure): ScaledPageLayout {\r\n let pageAdj = 0;\r\n const lm: SmoLayoutManager = this.score!.layoutManager!;\r\n // See if this measure breaks a page.\r\n const maxY = bottomMeasure.lowestY;\r\n if (maxY > ((this.currentPage + 1) * scoreLayout.pageHeight) - scoreLayout.bottomMargin) {\r\n this.currentPage += 1;\r\n // If this is a new page, make sure there is a layout for it.\r\n lm.addToPageLayouts(this.currentPage);\r\n scoreLayout = lm.getScaledPageLayout(this.currentPage);\r\n\r\n // When adjusting the page, make it so the top staff of the system\r\n // clears the bottom of the page.\r\n const topMeasure = currentLine.reduce((a, b) =>\r\n a.svg.logicalBox.y < b.svg.logicalBox.y ? a : b\r\n );\r\n const minMaxY = topMeasure.svg.logicalBox.y;\r\n pageAdj = (this.currentPage * scoreLayout.pageHeight) - minMaxY;\r\n pageAdj = pageAdj + scoreLayout.topMargin;\r\n\r\n // For each measure on the current line, move it down past the page break;\r\n currentLine.forEach((measure) => {\r\n measure.adjustY(pageAdj);\r\n measure.setY(measure.staffY + pageAdj, '_checkPageBreak');\r\n measure.svg.pageIndex = this.currentPage;\r\n });\r\n }\r\n return scoreLayout;\r\n }\r\n measureToLeft(measure: SmoMeasure) {\r\n const j = measure.measureNumber.staffId;\r\n const i = measure.measureNumber.measureIndex;\r\n return (i > 0 ? this.score!.staves[j].measures[i - 1] : measure);\r\n }\r\n measureAbove(measure: SmoMeasure) {\r\n const j = measure.measureNumber.staffId;\r\n const i = measure.measureNumber.measureIndex;\r\n return (j > 0 ? this.score!.staves[j - 1].measures[i] : measure);\r\n }\r\n // {measures,y,x} the x and y at the left/bottom of the render\r\n /**\r\n * Estimate the dimensions of a column when it's rendered.\r\n * @param scoreLayout \r\n * @param measureIx \r\n * @param systemIndex \r\n * @param lineIndex \r\n * @param x \r\n * @param y \r\n * @returns { MeasureEstimate } - the measures in the column and the x, y location\r\n */\r\n estimateColumn(scoreLayout: ScaledPageLayout, measureIx: number, systemIndex: number, lineIndex: number, x: number, y: number): MeasureEstimate {\r\n const s: any = {};\r\n const measures = this.columnMeasureMap[measureIx];\r\n let rowInSystem = 0;\r\n let voiceCount = 0;\r\n let unalignedCtxCount = 0;\r\n let wsum = 0;\r\n let dsum = 0;\r\n let maxCfgWidth = 0;\r\n let isPickup = false;\r\n // Keep running tab of accidental widths for justification\r\n const contextMap: Record = {};\r\n let measureToSkip = false;\r\n let maxColumnStartX = 0;\r\n measures.forEach((measure) => {\r\n // use measure to left to figure out whether I need to render key signature, etc.\r\n // If I am the first measure, just use self and we always render them on the first measure.\r\n const measureToLeft = this.measureToLeft(measure);\r\n const measureAbove = this.measureAbove(measure);\r\n s.measureKeySig = SmoMusic.vexKeySignatureTranspose(measure.keySignature, 0);\r\n s.keySigLast = SmoMusic.vexKeySignatureTranspose(measureToLeft.keySignature, 0);\r\n s.tempoLast = measureToLeft.getTempo();\r\n if (measure.measureNumber.staffId > 0) {\r\n s.tempoLast = measureAbove.getTempo();\r\n }\r\n s.timeSigLast = measureToLeft.timeSignature;\r\n s.clefLast = measureToLeft.getLastClef();\r\n this.calculateBeginningSymbols(systemIndex, measure, s.clefLast, s.keySigLast, s.timeSigLast, s.tempoLast);\r\n const startX = SuiLayoutFormatter.estimateStartSymbolWidth(measure);\r\n measure.svg.adjX = startX;\r\n maxColumnStartX = Math.max(maxColumnStartX, startX);\r\n });\r\n measures.forEach((measure) => {\r\n let tabHeight = 0;\r\n measure.svg.maxColumnStartX = maxColumnStartX;\r\n SmoBeamer.applyBeams(measure);\r\n voiceCount += measure.voices.length;\r\n if (measure.isPickup()) {\r\n isPickup = true;\r\n }\r\n if (measure.format.skipMeasureCount) {\r\n measureToSkip = true;\r\n }\r\n measure.measureNumber.systemIndex = systemIndex;\r\n measure.svg.rowInSystem = rowInSystem;\r\n measure.svg.lineIndex = lineIndex;\r\n measure.svg.pageIndex = this.currentPage;\r\n\r\n // calculate vertical offsets from the baseline\r\n const stave = this.score.staves[measure.measureNumber.staffId];\r\n const tabStave = stave.getTabStaveForMeasure({ staff: measure.measureNumber.staffId, measure: measure.measureNumber.measureIndex, \r\n voice: 0, tick: 0, pitches: [] });\r\n const offsets = this.estimateMeasureHeight(measure);\r\n\r\n measure.setYTop(offsets.aboveBaseline, 'render:estimateColumn');\r\n measure.setY(y - measure.yTop, 'estimateColumns height');\r\n measure.setX(x, 'render:estimateColumn');\r\n\r\n // Add custom width to measure:\r\n measure.setBox(SvgHelpers.boxPoints(measure.staffX, y, measure.staffWidth, offsets.belowBaseline - offsets.aboveBaseline), 'render: estimateColumn');\r\n this.estimateMeasureWidth(measure, scoreLayout, contextMap);\r\n // account for the extra stave for tablature in the height, also set the dimensions of the stave tab\r\n if (tabStave) {\r\n const stemHeight = tabStave.showStems ? vexGlyph.dimensions['stem'].height : 0;\r\n tabHeight = stemHeight + tabStave.numLines * tabStave.spacing;\r\n measure.svg.tabStaveBox = { x, y: measure.svg.logicalBox.y + measure.svg.logicalBox.height,\r\n width: measure.svg.logicalBox.width, height: tabHeight };\r\n offsets.belowBaseline += measure.svg.tabStaveBox.height;\r\n }\r\n y = y + measure.svg.logicalBox.height + scoreLayout.intraGap + tabHeight;\r\n maxCfgWidth = Math.max(maxCfgWidth, measure.staffWidth);\r\n rowInSystem += 1;\r\n });\r\n // justify this column to the maximum width.\r\n const startX = measures[0].staffX;\r\n const adjX = measures[0].svg.maxColumnStartX;\r\n const contexts = Object.keys(contextMap);\r\n const widths: number[] = [];\r\n const durations: number[] = [];\r\n let minTotalWidth = 0;\r\n contexts.forEach((strIx) => {\r\n const ix = parseInt(strIx);\r\n let tickWidth = 0;\r\n const context = contextMap[ix];\r\n if (context.tickCounts.length < voiceCount) {\r\n unalignedCtxCount += 1;\r\n }\r\n context.widths.forEach((w, ix) => {\r\n wsum += w;\r\n dsum += context.tickCounts[ix];\r\n widths.push(w);\r\n durations.push(context.tickCounts[ix]);\r\n tickWidth = Math.max(tickWidth, w);\r\n });\r\n minTotalWidth += tickWidth;\r\n });\r\n // Vex formatter adjusts location of ticks based to keep the justified music aligned. It does this\r\n // by moving notes to the right. We try to add padding to each tick context based on the 'entropy' of the \r\n // music. 4 quarter notes with no accidentals in all voices will have 0 entropy. All the notes need the same\r\n // amount of space, so they don't need additional space to align.\r\n // wvar - the std deviation in the widths or 'width entropy'\r\n // dvar - the std deviation in the duration between voices or 'duration entropy'\r\n const sumArray = (arr: number[]) => arr.reduce((a, b) => a + b, 0);\r\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\r\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\r\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\r\n\r\n const davg = dsum / durations.length;\r\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\r\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\r\n const unalignedPadding = 2;\r\n\r\n const padmax = Math.max(dpads, wpads) * contexts.length * unalignedPadding;\r\n const unalignedPad = unalignedPadding * unalignedCtxCount;\r\n let maxWidth = Math.max(adjX + minTotalWidth + Math.max(unalignedPad, padmax), maxCfgWidth);\r\n if (scoreLayout.maxMeasureSystem > 0 && !isPickup && !measureToSkip) {\r\n // Add 1 because there is some overhead in each measure, \r\n // so there can never be (width/max) measures in the system\r\n const defaultWidth = (scoreLayout.pageWidth / (scoreLayout.maxMeasureSystem + 1));\r\n maxWidth = Math.max(maxWidth, defaultWidth);\r\n }\r\n const maxX = startX + maxWidth;\r\n measures.forEach((measure) => {\r\n measure.setWidth(maxWidth, 'render:estimateColumn');\r\n // measure.svg.adjX = adjX;\r\n });\r\n const rv = { measures, y, x: maxX };\r\n return rv;\r\n }\r\n /**\r\n * return true if this is the last measure, taking into account multimeasure rest\r\n * @param measureIx \r\n * @returns \r\n */\r\n isLastVisibleMeasure(measureIx: number) {\r\n if (measureIx >= this.score.staves[0].measures.length) {\r\n return true;\r\n }\r\n if (this.score.staves[0].partInfo.expandMultimeasureRests) {\r\n return false;\r\n }\r\n let i = 0;\r\n for (i = measureIx; i < this.score.staves[0].measures.length; ++i) {\r\n const mm = this.score.staves[0].measures[i];\r\n if (!mm.svg.hideMultimeasure) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Calculate the geometry for the entire score, based on estimated measure width and height.\r\n * @returns \r\n */\r\n layout() {\r\n let measureIx = 0;\r\n let systemIndex = 0;\r\n if (!this.score.layoutManager) {\r\n return;\r\n }\r\n let scoreLayout = this.score.layoutManager.getScaledPageLayout(0);\r\n let y = 0;\r\n let x = 0;\r\n let lineIndex = 0;\r\n this.lines = [];\r\n let pageCheck = 0;\r\n // let firstMeasureOnPage = 0;\r\n this.lines.push(lineIndex);\r\n let currentLine: SmoMeasure[] = []; // the system we are esimating\r\n let measureEstimate: MeasureEstimate | null = null;\r\n\r\n layoutDebug.clearDebugBoxes(layoutDebug.values.pre);\r\n layoutDebug.clearDebugBoxes(layoutDebug.values.system);\r\n const timestamp = new Date().valueOf();\r\n\r\n y = scoreLayout.topMargin;\r\n x = scoreLayout.leftMargin;\r\n\r\n while (measureIx < this.score.staves[0].measures.length) {\r\n if (this.score.isPartExposed()) {\r\n if (this.score.staves[0].measures[measureIx].svg.hideMultimeasure) {\r\n measureIx += 1;\r\n continue;\r\n }\r\n }\r\n measureEstimate = this.estimateColumn(scoreLayout, measureIx, systemIndex, lineIndex, x, y);\r\n x = measureEstimate.x;\r\n if (systemIndex > 0 &&\r\n (measureEstimate.measures[0].format.systemBreak || measureEstimate.x > (scoreLayout.pageWidth - scoreLayout.leftMargin))) {\r\n this.justifyY(scoreLayout, measureEstimate.measures.length, currentLine, false);\r\n // find the measure with the lowest y extend (greatest y value), not necessarily one with lowest\r\n // start of staff.\r\n const bottomMeasure: SmoMeasure = currentLine.reduce((a, b) =>\r\n a.lowestY > b.lowestY ? a : b\r\n );\r\n this.checkPageBreak(scoreLayout, currentLine, bottomMeasure);\r\n const renderedPage: RenderedPage | null = this.renderedPages[pageCheck];\r\n if (renderedPage) {\r\n if (pageCheck !== this.currentPage) {\r\n // The last measure in the last system of the previous page\r\n const previousSystem = currentLine[0].measureNumber.measureIndex - 1;\r\n if (renderedPage.endMeasure !== previousSystem) {\r\n this.renderedPages[pageCheck] = null;\r\n } \r\n const nextPage = this.renderedPages[this.currentPage];\r\n if (nextPage && nextPage.startMeasure !== previousSystem + 1) {\r\n this.renderedPages[this.currentPage] = null;\r\n } \r\n }\r\n }\r\n pageCheck = this.currentPage;\r\n\r\n const ld = layoutDebug;\r\n const sh = SvgHelpers;\r\n if (layoutDebug.mask & layoutDebug.values.system) {\r\n currentLine.forEach((measure) => {\r\n if (measure.svg.logicalBox) {\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n ld.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.system);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Now start rendering on the next system.\r\n y = bottomMeasure.lowestY + scoreLayout.interGap;\r\n \r\n currentLine = [];\r\n systemIndex = 0;\r\n x = scoreLayout.leftMargin;\r\n lineIndex += 1;\r\n this.lines.push(lineIndex);\r\n measureEstimate = this.estimateColumn(scoreLayout, measureIx, systemIndex, lineIndex, x, y);\r\n x = measureEstimate.x;\r\n }\r\n measureEstimate?.measures.forEach((measure) => {\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n layoutDebug.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.pre);\r\n }\r\n });\r\n this.updateSystemMap(measureEstimate.measures, lineIndex, systemIndex);\r\n currentLine = currentLine.concat(measureEstimate.measures);\r\n measureIx += 1; \r\n systemIndex += 1;\r\n // If this is the last measure but we have not filled the x extent,\r\n // still justify the vertical staves and check for page break.\r\n if (this.isLastVisibleMeasure(measureIx) && measureEstimate !== null) {\r\n this.justifyY(scoreLayout, measureEstimate.measures.length, currentLine, true);\r\n const bottomMeasure = currentLine.reduce((a, b) =>\r\n a.svg.logicalBox.y + a.svg.logicalBox.height > b.svg.logicalBox.y + b.svg.logicalBox.height ? a : b\r\n );\r\n scoreLayout = this.checkPageBreak(scoreLayout, currentLine, bottomMeasure);\r\n }\r\n }\r\n // If a measure was added to the last page, make sure we re-render the page\r\n const renderedPage: RenderedPage | null = this.renderedPages[this.currentPage];\r\n if (renderedPage) {\r\n if (renderedPage.endMeasure !== currentLine[0].measureNumber.measureIndex) {\r\n this.renderedPages[this.currentPage] = null;\r\n }\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.COMPUTE, new Date().valueOf() - timestamp);\r\n }\r\n \r\n static estimateMusicWidth(smoMeasure: SmoMeasure, tickContexts: Record): number {\r\n const widths: number[] = [];\r\n // Add up the widths of the music glyphs for each voice, including accidentals etc. We save the widths in a hash by duration\r\n // and later consider overlapping/colliding ticks in each voice\r\n const tmObj = smoMeasure.createMeasureTickmaps();\r\n smoMeasure.voices.forEach((voice) => {\r\n let width = 0;\r\n let duration = 0;\r\n const noteCount = voice.notes.length;\r\n voice.notes.forEach((note) => {\r\n let noteWidth = 0;\r\n const dots: number = (note.dots ? note.dots : 0);\r\n let headWidth: number = vexGlyph.width(vexGlyph.dimensions.noteHead);\r\n // Maybe not the best place for this...ideally we'd get the note head glyph from\r\n // the ntoe.\r\n if (note.tickCount >= 4096 * 4 && note.noteType === 'n') {\r\n headWidth *= 2;\r\n }\r\n const dotWidth: number = vexGlyph.width(vexGlyph.dimensions.dot);\r\n noteWidth += headWidth +\r\n vexGlyph.dimensions.noteHead.spacingRight;\r\n // TODO: Consider engraving font and adjust grace note size?\r\n noteWidth += (headWidth + vexGlyph.dimensions.noteHead.spacingRight) * note.graceNotes.length;\r\n noteWidth += dotWidth * dots + vexGlyph.dimensions.dot.spacingRight * dots;\r\n note.pitches.forEach((pitch) => {\r\n const keyAccidental = SmoMusic.getAccidentalForKeySignature(pitch, smoMeasure.keySignature);\r\n const accidentals = tmObj.accidentalArray.filter((ar) =>\r\n (ar.duration as number) < duration && ar.pitches[pitch.letter]);\r\n const acLen = accidentals.length;\r\n const declared = acLen > 0 ?\r\n accidentals[acLen - 1].pitches[pitch.letter].pitch.accidental : keyAccidental;\r\n if (declared !== pitch.accidental || pitch.cautionary) {\r\n noteWidth += vexGlyph.accidentalWidth(pitch.accidental);\r\n }\r\n });\r\n\r\n let verse = 0;\r\n let lyricBase = note.getLyricForVerse(verse, SmoLyric.parsers.lyric);\r\n while (lyricBase.length) {\r\n let lyric = lyricBase[0] as SmoLyric;\r\n let lyricWidth = 0;\r\n let i = 0;\r\n // TODO: kerning and all that...\r\n if (!lyric.text.length) {\r\n break;\r\n }\r\n // why did I make this return an array?\r\n // oh...because of voices\r\n const textFont =\r\n TextFormatter.create({ family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size, weight: 'normal' });\r\n const lyricText = lyric.getText();\r\n for (i = 0; i < lyricText.length; ++i) {\r\n lyricWidth += textFont.getWidthForTextInPx(lyricText[i])\r\n }\r\n if (lyric.isHyphenated()) {\r\n lyricWidth += 2 * textFont.getWidthForTextInPx('-');\r\n } else {\r\n lyricWidth += 2 * textFont.getWidthForTextInPx('H');\r\n }\r\n noteWidth = Math.max(lyricWidth, noteWidth);\r\n verse += 1;\r\n lyricBase = note.getLyricForVerse(verse, SmoLyric.parsers.lyric);\r\n }\r\n if (!tickContexts[duration]) {\r\n tickContexts[duration] = {\r\n widths: [],\r\n tickCounts: [] \r\n }\r\n }\r\n if (smoMeasure.repeatSymbol) {\r\n noteWidth = vexGlyph.repeatSymbolWidth() / noteCount; \r\n }\r\n tickContexts[duration].widths.push(noteWidth);\r\n tickContexts[duration].tickCounts.push(note.tickCount);\r\n duration += Math.round(note.tickCount);\r\n width += noteWidth;\r\n });\r\n widths.push(width);\r\n });\r\n widths.sort((a, b) => a > b ? -1 : 1);\r\n return widths[0];\r\n }\r\n\r\n static estimateStartSymbolWidth(smoMeasure: SmoMeasure): number {\r\n let width = 0;\r\n // the variables starts and digits used to be in the if statements. I moved them here to fix the resulting error\r\n var starts = smoMeasure.getStartBarline();\r\n var digits = smoMeasure.timeSignature.timeSignature.split('/')[0].length;\r\n if (smoMeasure.svg.forceKeySignature) {\r\n if (smoMeasure.canceledKeySignature) {\r\n width += vexGlyph.keySignatureLength(smoMeasure.canceledKeySignature);\r\n }\r\n width += vexGlyph.keySignatureLength(smoMeasure.keySignature);\r\n }\r\n if (smoMeasure.svg.forceClef) {\r\n const clefGlyph = vexGlyph.clef(smoMeasure.clef);\r\n width += clefGlyph.width + clefGlyph.spacingRight;\r\n }\r\n if (smoMeasure.svg.forceTimeSignature) {\r\n width += vexGlyph.width(vexGlyph.dimensions.timeSignature) * digits + vexGlyph.dimensions.timeSignature.spacingRight;\r\n }\r\n if (starts) {\r\n width += vexGlyph.barWidth(starts);\r\n }\r\n return width;\r\n }\r\n static estimateEndSymbolWidth(smoMeasure: SmoMeasure) {\r\n var width = 0;\r\n var ends = smoMeasure.getEndBarline();\r\n if (ends) {\r\n width += vexGlyph.barWidth(ends);\r\n }\r\n return width;\r\n }\r\n\r\n estimateMeasureWidth(measure: SmoMeasure, scoreLayout: ScaledPageLayout, tickContexts: Record) {\r\n // Calculate the existing staff width, based on the notes and what we expect to be rendered.\r\n let measureWidth = SuiLayoutFormatter.estimateMusicWidth(measure, tickContexts) + defaultMeasurePadding;\r\n // measure.svg.adjX already set based on max column adjX\r\n measure.svg.adjRight = SuiLayoutFormatter.estimateEndSymbolWidth(measure);\r\n measureWidth += measure.svg.adjX + measure.svg.adjRight + measure.format.customStretch + measure.format.padLeft;\r\n const y = measure.svg.logicalBox.y;\r\n // For systems that start with padding, add width for the padding\r\n measure.setWidth(measureWidth, 'estimateMeasureWidth adjX adjRight');\r\n // Calculate the space for left/right text which displaces the measure.\r\n // measure.setX(measure.staffX + textOffsetBox.x,'estimateMeasureWidth');\r\n measure.setBox(SvgHelpers.boxPoints(measure.staffX, y, measure.staffWidth, measure.svg.logicalBox.height),\r\n 'estimate measure width');\r\n }\r\n static _beamGroupForNote(measure: SmoMeasure, note: SmoNote): ISmoBeamGroup | null {\r\n let rv: ISmoBeamGroup | null = null;\r\n if (!note.beam_group) {\r\n return null;\r\n }\r\n measure.beamGroups.forEach((bg) => {\r\n if (!rv) {\r\n if (bg.notes.findIndex((note) => note.beam_group && note.beam_group.id === bg.attrs.id) >= 0) {\r\n rv = bg;\r\n }\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * A system has gone beyond the page width. Lop the last measure off the end and move it to the first measure of the\r\n * next system. Then seal the last system by justifying the measures vertically and horinzontally\r\n * @param scoreLayout \r\n * @param measureEstimate \r\n * @param currentLine \r\n * @param columnCount \r\n * @param lastSystem \r\n */\r\n justifyY(scoreLayout: ScaledPageLayout, rowCount: number, currentLine: SmoMeasure[], lastSystem: boolean) {\r\n let i = 0;\r\n const sh = SvgHelpers;\r\n // If there are fewer measures in the system than the max, don't justify.\r\n // We estimate the staves at the same absolute y value.\r\n // Now, move them down so the top of the staves align for all measures in a row.\r\n const measuresToHide: SmoMeasure[] = [];\r\n let anyNotes = false;\r\n for (i = 0; i < rowCount; ++i) {\r\n // lowest staff has greatest staffY value.\r\n const rowAdj = currentLine.filter((mm) => mm.svg.rowInSystem === i);\r\n \r\n let lowestTabStaff = rowAdj.reduce((a, b) => \r\n a.svg.tabStaveBox && b.svg.tabStaveBox && \r\n a.svg.tabStaveBox.y + a.svg.tabStaveBox.height > b.svg.tabStaveBox.y + b.svg.tabStaveBox.height ?\r\n a : b\r\n );\r\n const lowestStaff = rowAdj.reduce((a, b) =>\r\n a.staffY > b.staffY ? a : b\r\n );\r\n const hasNotes = rowAdj.findIndex((x) => x.isRest() === false) >= 0;\r\n if (hasNotes) {\r\n anyNotes = true;\r\n }\r\n rowAdj.forEach((measure) => {\r\n measure.svg.hideEmptyMeasure = false;\r\n if (this.score.preferences.hideEmptyLines && !hasNotes && !this.score.isPartExposed()) {\r\n measuresToHide.push(measure);\r\n }\r\n const adj = lowestStaff.staffY - measure.staffY;\r\n measure.setY(measure.staffY + adj, 'justifyY');\r\n measure.setBox(sh.boxPoints(measure.svg.logicalBox.x, measure.svg.logicalBox.y + adj, measure.svg.logicalBox.width, measure.svg.logicalBox.height), 'justifyY');\r\n if (lowestTabStaff.svg.tabStaveBox && measure.svg.tabStaveBox) {\r\n measure.svg.tabStaveBox.y = measure.svg.tabStaveBox.y + lowestTabStaff.svg.tabStaveBox.y - measure.svg.tabStaveBox.y;\r\n }\r\n });\r\n const rightStaff = rowAdj.reduce((a, b) =>\r\n a.staffX + a.staffWidth > b.staffX + b.staffWidth ? a : b);\r\n\r\n const ld = layoutDebug;\r\n let justifyX = 0;\r\n let columnCount = rowAdj.length;\r\n // missing offset is for systems that have fewer measures than the default (due to section break or score ending)\r\n let missingOffset = 0;\r\n if (scoreLayout.maxMeasureSystem > 1 && \r\n columnCount < scoreLayout.maxMeasureSystem\r\n && lastSystem) {\r\n missingOffset = (scoreLayout.pageWidth / (scoreLayout.maxMeasureSystem + 1)) * (scoreLayout.maxMeasureSystem - columnCount);\r\n columnCount = scoreLayout.maxMeasureSystem;\r\n }\r\n if (scoreLayout.maxMeasureSystem > 1 || !lastSystem) {\r\n justifyX = Math.round((scoreLayout.pageWidth - (scoreLayout.leftMargin + scoreLayout.rightMargin + rightStaff.staffX + rightStaff.staffWidth + missingOffset))\r\n / columnCount);\r\n }\r\n let justOffset = 0;\r\n rowAdj.forEach((measure) => {\r\n measure.setWidth(measure.staffWidth + justifyX, '_estimateMeasureDimensions justify');\r\n measure.setX(measure.staffX + justOffset, 'justifyY');\r\n measure.setBox(sh.boxPoints(measure.svg.logicalBox.x + justOffset,\r\n measure.svg.logicalBox.y, measure.staffWidth, measure.svg.logicalBox.height), 'justifyY');\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n ld.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.adjust);\r\n }\r\n justOffset += justifyX;\r\n });\r\n }\r\n if (this.score.preferences.hideEmptyLines && anyNotes) {\r\n let adjY = 0;\r\n for (i = 0; i < rowCount; ++i) {\r\n const rowAdj = measuresToHide.filter((mm) => mm.svg.rowInSystem === i);\r\n if (rowAdj.length) {\r\n adjY += rowAdj[0].svg.logicalBox.height;\r\n rowAdj.forEach((mm) => {\r\n mm.svg.logicalBox.height = 0;\r\n mm.svg.hideEmptyMeasure = true;\r\n });\r\n } else {\r\n const rowAdj = currentLine.filter((mm) => mm.svg.rowInSystem === i);\r\n rowAdj.forEach((row) => {\r\n row.setY(row.svg.staffY - adjY, 'format-hide');\r\n });\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * highest value is actually the one lowest on the page\r\n * @param measure \r\n * @param note \r\n * @returns \r\n */\r\n static _highestLowestHead(measure: SmoMeasure, note: SmoNote) {\r\n // note...er warning: Notes always have at least 1 pitch, even a rest\r\n // or glyph has a pitch to indicate the placement\r\n const hilo = { hi: 0, lo: 99999999 }; \r\n note.pitches.forEach((pitch) => { \r\n const line = 5 - SmoMusic.pitchToStaffLine(measure.clef, pitch);\r\n // TODO: use actual note head/rest/glyph. 10 px is space between staff lines\r\n const noteHeight = 10;\r\n const px = (noteHeight * line);\r\n hilo.lo = Math.min(hilo.lo, px - noteHeight / 2);\r\n hilo.hi = Math.max(hilo.hi, px + noteHeight / 2);\r\n });\r\n return hilo;\r\n }\r\n static textFont(lyric: SmoLyric) {\r\n return TextFormatter.create(lyric.fontInfo);\r\n }\r\n\r\n /**\r\n * Calculate the dimensions of symbols based on where in a system we are, like whether we need to show\r\n * the key signature, clef etc.\r\n * @param systemIndex \r\n * @param measure \r\n * @param clefLast \r\n * @param keySigLast \r\n * @param timeSigLast \r\n * @param tempoLast \r\n * @param score \r\n */\r\n calculateBeginningSymbols(systemIndex: number, measure: SmoMeasure,\r\n clefLast: string, keySigLast: string, timeSigLast: TimeSignature, tempoLast: SmoTempoText) {\r\n // The key signature is set based on the transpose index already, i.e. an Eb part in concert C already has 3 sharps.\r\n const xposeScore = this.score?.preferences?.transposingScore && (this.score?.isPartExposed() === false);\r\n const xposeOffset = xposeScore ? measure.transposeIndex : 0;\r\n const measureKeySig = SmoMusic.vexKeySignatureTranspose(measure.keySignature, xposeOffset);\r\n measure.svg.forceClef = (systemIndex === 0 || measure.clef !== clefLast);\r\n measure.svg.forceTimeSignature = (measure.measureNumber.measureIndex === 0 || \r\n (!SmoMeasure.timeSigEqual(timeSigLast, measure.timeSignature)) || measure.timeSignature.displayString.length > 0);\r\n if (measure.timeSignature.display === false) {\r\n measure.svg.forceTimeSignature = false;\r\n }\r\n measure.svg.forceTempo = false;\r\n const tempo = measure.getTempo();\r\n // always print tempo for the first measure, if indicated\r\n if (tempo && measure.measureNumber.measureIndex === 0 && measure.measureNumber.staffId === 0) {\r\n measure.svg.forceTempo = tempo.display && measure.svg.rowInSystem === 0;\r\n } else if (tempo && tempoLast) {\r\n // otherwise get tempo from the measure prior. But only one tempo per system.\r\n if (!SmoTempoText.eq(tempo, tempoLast) && measure.svg.rowInSystem === 0) {\r\n measure.svg.forceTempo = tempo.display;\r\n }\r\n } else if (tempo) {\r\n measure.svg.forceTempo = tempo.display && measure.svg.rowInSystem === 0;\r\n }\r\n if (measureKeySig !== keySigLast && measure.measureNumber.measureIndex > 0) {\r\n measure.canceledKeySignature = SmoMusic.vexKeySigWithOffset(keySigLast, xposeOffset);\r\n measure.svg.forceKeySignature = true;\r\n } else if (systemIndex === 0 && measureKeySig !== 'C') {\r\n measure.svg.forceKeySignature = true;\r\n } else {\r\n measure.svg.forceKeySignature = false;\r\n }\r\n }\r\n\r\n /**\r\n * The baseline is the top line of the staff. aboveBaseline is a negative number\r\n * that indicates how high above the baseline the measure goes. belowBaseline\r\n * is a positive number that indicates how far below the baseline the measure goes.\r\n * the height of the measure is below-above. Vex always renders a staff such that\r\n * the y coordinate passed in for the stave is on the baseline.\r\n * \r\n * Note to past self: this was a really useful comment. Thank you.\r\n * **/\r\n estimateMeasureHeight(measure: SmoMeasure): { aboveBaseline: number, belowBaseline: number } {\r\n let yTop = 0; // highest point, smallest Y value\r\n let yBottom = measure.lines * 10; // lowest point, largest Y value.\r\n let flag: number = -1;\r\n let lyricOffset = 0;\r\n const measureIndex = measure.measureNumber.measureIndex;\r\n const staffIndex = measure.measureNumber.staffId;\r\n const stave = this.score.staves[staffIndex];\r\n stave.renderableModifiers.forEach((mm) => {\r\n if (mm.startSelector.staff === staffIndex && (mm.startSelector.measure <= measureIndex && mm.endSelector.measure >= measureIndex) ||\r\n mm.endSelector.staff === staffIndex && \r\n (mm.endSelector.measure <= measureIndex && mm.endSelector.measure >= measureIndex && mm.endSelector.measure !== mm.startSelector.measure)) {\r\n if (mm.ctor === 'SmoHairpin') {\r\n const hp = mm as SmoStaffHairpin;\r\n if (hp.position === SmoStaffHairpin.positions.ABOVE) {\r\n yTop = yTop - hp.height;\r\n } else {\r\n yBottom = yBottom + hp.height;\r\n }\r\n } else if (mm.ctor === 'SmoStaffTextBracket') {\r\n const tb = mm as SmoStaffTextBracket;\r\n const tbHeight = 14 + (10 * Math.abs(tb.line - 1)); // 14 default font size\r\n if (tb.position === SmoStaffTextBracket.positions.TOP) {\r\n yTop = yTop - tbHeight;\r\n } else {\r\n yBottom = yBottom + tbHeight;\r\n } \r\n }\r\n }\r\n });\r\n if (measure.svg.forceClef) {\r\n yBottom += vexGlyph.clef(measure.clef).yTop + vexGlyph.clef(measure.clef).yBottom;\r\n yTop = yTop - vexGlyph.clef(measure.clef).yTop;\r\n }\r\n\r\n if (measure.svg.forceTempo) {\r\n yTop = Math.min(-1 * vexGlyph.tempo.yTop, yTop);\r\n }\r\n let yBottomOffset = 0;\r\n let yBottomVoiceZero = 0;\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note) => {\r\n const bg = SuiLayoutFormatter._beamGroupForNote(measure, note);\r\n flag = SmoNote.flagStates.auto;\r\n if (bg && note.noteType === 'n') {\r\n flag = bg.notes[0].flagState;\r\n // an auto-flag note is up if the 1st note is middle line\r\n if (flag === SmoNote.flagStates.auto) {\r\n const pitch = bg.notes[0].pitches[0];\r\n flag = SmoMusic.pitchToStaffLine(measure.clef, pitch)\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n }\r\n } else {\r\n flag = note.flagState;\r\n // odd-numbered voices flip default up/down\r\n const voiceMod = voiceIx % 2;\r\n // an auto-flag note is up if the 1st note is middle line\r\n if (flag === SmoNote.flagStates.auto) {\r\n const pitch = note.pitches[0];\r\n flag = SmoMusic.pitchToStaffLine(measure.clef, pitch)\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n if (voiceMod === 1) {\r\n flag = (flag === SmoNote.flagStates.down) ? SmoNote.flagStates.up : SmoNote.flagStates.down;\r\n }\r\n }\r\n }\r\n const hiloHead = SuiLayoutFormatter._highestLowestHead(measure, note);\r\n if (flag === SmoNote.flagStates.down) {\r\n yTop = Math.min(hiloHead.lo, yTop);\r\n yBottom = Math.max(hiloHead.hi + vexGlyph.stem.height, yBottom);\r\n } else {\r\n yTop = Math.min(hiloHead.lo - vexGlyph.stem.height, yTop);\r\n yBottom = Math.max(hiloHead.hi, yBottom);\r\n }\r\n // Lyrics will be rendered below the lowest thing on the staff, so add to\r\n // belowBaseline value based on the max number of verses and font size\r\n // it will extend\r\n });\r\n // Vex won't adjust for music in voices > 0 when placing lyrics. \r\n // So we need to adjust here, if voices > 0 have music below lyrics. \r\n if (voiceIx > 0 && yBottomVoiceZero < yBottom) {\r\n yBottomOffset = yBottom - yBottomVoiceZero;\r\n } else {\r\n yBottomVoiceZero = yBottom;\r\n }\r\n });\r\n let lyricsToAdjust: SmoLyric[] = [];\r\n // get the lowest music part, then consider the lyrics\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note) => {\r\n const lyrics = note.getTrueLyrics();\r\n lyricsToAdjust = lyricsToAdjust.concat(lyrics);\r\n if (lyrics.length) {\r\n const maxLyric = lyrics.reduce((a, b) => a.verse > b.verse ? a : b);\r\n const fontInfo = SuiLayoutFormatter.textFont(maxLyric);\r\n lyricOffset = Math.max((maxLyric.verse + 2) * fontInfo.maxHeight, lyricOffset);\r\n }\r\n const dynamics = note.getModifiers('SmoDynamicText') as SmoDynamicText[];\r\n dynamics.forEach((dyn) => {\r\n yBottom = Math.max((10 * dyn.yOffsetLine - 50) + 11, yBottom);\r\n yTop = Math.min(10 * dyn.yOffsetLine - 50, yTop);\r\n });\r\n note.articulations.forEach((articulation) => {\r\n if (articulation.position === SmoArticulation.positions.above) {\r\n yTop -= 10;\r\n } else {\r\n yBottom += 10;\r\n }\r\n });\r\n note.ornaments.forEach((ornament) => {\r\n if (ornament.position === SmoOrnament.positions.above) {\r\n yTop -= 10;\r\n } else {\r\n yBottom += 10;\r\n }\r\n })\r\n });\r\n });\r\n yBottom += lyricOffset;\r\n if (lyricsToAdjust.length > 0) {\r\n lyricsToAdjust.forEach((lyric: SmoLyric) => {\r\n lyric.musicYOffset = yBottomOffset;\r\n });\r\n }\r\n const mmsel = SmoSelector.measureSelector(stave.staffId, measure.measureNumber.measureIndex);\r\n return { belowBaseline: yBottom, aboveBaseline: yTop };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\ndeclare var $: any;\r\n\r\nexport interface CodeRegion {\r\n time: number,\r\n percent: number\r\n}\r\nexport class layoutDebug {\r\n static get values(): Record {\r\n return {\r\n pre: 1,\r\n play: 2,\r\n adjust: 4,\r\n system: 8,\r\n scroll: 16,\r\n artifactMap: 32,\r\n mouseDebug: 64,\r\n dragDebug: 128,\r\n dialogEvents: 256,\r\n cursor: 512\r\n };\r\n }\r\n\r\n static get classes(): Record {\r\n return {\r\n 1: 'measure-place-dbg',\r\n 2: 'measure-play-dbg',\r\n 4: 'measure-adjust-dbg',\r\n 8: 'system-place-dbg',\r\n 16: 'scroll-box-debug',\r\n 32: 'measure-adjustHeight-dbg',\r\n 64: 'mouse-debug',\r\n 128: 'drag-debug',\r\n 256: '',\r\n 512: 'cursor-adj-dbg',\r\n };\r\n }\r\n static get codeRegions(): Record {\r\n return {\r\n COMPUTE: 0,\r\n PREFORMATA: 1,\r\n PREFORMATB: 2,\r\n PREFORMATC: 3,\r\n FORMAT: 4,\r\n RENDER: 5,\r\n UPDATE_MAP: 6,\r\n POST_RENDER: 7,\r\n MAP: 8,\r\n LAST: 8\r\n };\r\n }\r\n static get codeRegionStrings(): string[] {\r\n return ['COMPUTE', 'PREFORMATA', 'PREFORMATB', 'PREFORMATC', 'FORMAT', 'RENDER', 'UPDATE_MAP', 'POST_RENDER', 'MAP'];\r\n }\r\n static mask: number = 0;\r\n static _textDebug: number[] = [];\r\n static timestampHash: Record = {};\r\n static _dialogEvents: string[] = [];\r\n\r\n static clearTimestamps() {\r\n for (var i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n layoutDebug.timestampHash[i] = 0;\r\n }\r\n }\r\n\r\n static setTimestamp(region: number, millis: number) {\r\n layoutDebug.timestampHash[region] += millis;\r\n }\r\n static printTimeReport() {\r\n let total = 0;\r\n let report: Record = {};\r\n let i = 0;\r\n for (i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n total += layoutDebug.timestampHash[i];\r\n report[layoutDebug.codeRegionStrings[i]] = {\r\n time: layoutDebug.timestampHash[i], percent: 0\r\n };\r\n }\r\n report['total'] = { time: total, percent: 100 };\r\n for (i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n report[layoutDebug.codeRegionStrings[i]].percent =\r\n Math.round((report[layoutDebug.codeRegionStrings[i]].time * 100) / report.total.time);\r\n }\r\n console.log(JSON.stringify(report, null, ' '));\r\n }\r\n\r\n static flagSet(value: number) {\r\n return layoutDebug.mask & value;\r\n }\r\n\r\n static clearAll() {\r\n layoutDebug.mask = 0;\r\n }\r\n static setAll() {\r\n layoutDebug.mask = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256;\r\n }\r\n static setRenderFlags() {\r\n layoutDebug.mask = 1 + 2 + 4 + 8 + 16 + 32;\r\n }\r\n static clearDebugBoxes(value: number) {\r\n if (layoutDebug.flagSet(value)) {\r\n var selector = 'g.' + layoutDebug.classes[value];\r\n $(selector).remove();\r\n }\r\n }\r\n static debugBox(svg: SVGSVGElement, box: SvgBox | null, flag: number) {\r\n if (!box) {\r\n return;\r\n }\r\n if (!box.height) {\r\n box.height = 1;\r\n }\r\n if (layoutDebug.flagSet(flag)) {\r\n SvgHelpers.debugBox(svg, box, layoutDebug.classes[flag], 0);\r\n }\r\n }\r\n\r\n static setFlag(value: number) {\r\n var flag = layoutDebug.values[value];\r\n if (typeof (layoutDebug.mask) == 'undefined') {\r\n layoutDebug.mask = flag;\r\n return;\r\n }\r\n layoutDebug.mask |= flag;\r\n layoutDebug.setFlagDivs();\r\n }\r\n static setFlagDivs() {\r\n $('.scroll-box-debug').remove();\r\n $('.drag-debug').remove();\r\n $('.mouse-debug').remove();\r\n $('.play-debug').remove();\r\n if (layoutDebug.mask & layoutDebug.values.scroll) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.mouseDebug) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.dragDebug) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.play) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n }\r\n static updateScrollDebug(point: SvgPoint) {\r\n const displayString = 'X: ' + point.x + ' Y: ' + point.y;\r\n $('.scroll-box-debug').text(displayString);\r\n $('.scroll-box-debug').css('left', '2%').css('top', '20px');\r\n }\r\n static updateMouseDebug(client: SvgPoint, logical: SvgPoint, offset: SvgPoint) {\r\n const displayString = `clientX: ${client.x} clientY: ${client.y} svg: (${logical.x},${logical.y}) offset (${offset.x}, ${offset.y})`;\r\n $('.mouse-debug').text(displayString);\r\n $('.mouse-debug').css('left', '2%').css('top', '60px').css('position','absolute').css('font-size','11px');\r\n }\r\n static updateDragDebug(client: SvgPoint, logical: SvgPoint, state: string) {\r\n const displayString = `clientX: ${client.x} clientY: ${client.y} svg: (${logical.x},${logical.y}) state ${state})`;\r\n $('.drag-debug').text(displayString);\r\n $('.drag-debug').css('left', '2%').css('top', '80px').css('position','absolute').css('font-size','11px');\r\n }\r\n static updatePlayDebug(selector: SmoSelector, logical: SvgBox) {\r\n const displayString = `mm: ${selector.measure} tick: ${selector.tick} svg: (${logical.x},${logical.y}, ${logical.width}, ${logical.height})`;\r\n $('.play-debug').text(displayString);\r\n $('.play-debug').css('left', '2%').css('top', '100px').css('position','absolute').css('font-size','11px');\r\n }\r\n\r\n static addTextDebug(value: number) {\r\n layoutDebug._textDebug.push(value);\r\n //console.log(value);\r\n }\r\n\r\n static addDialogDebug(value: string) {\r\n layoutDebug._dialogEvents.push(value);\r\n // console.log(value);\r\n }\r\n\r\n static measureHistory(measure: SmoMeasure, oldVal: string, newVal: any, description: string) {\r\n if (layoutDebug.flagSet(layoutDebug.values.measureHistory)) {\r\n var oldExp = (typeof ((measure as any).svg[oldVal]) == 'object') ?\r\n JSON.stringify((measure as any).svg[oldVal]).replace(/\"/g, '') : (measure as any).svg[oldVal];\r\n var newExp = (typeof (newVal) == 'object') ? JSON.stringify(newVal).replace(/\"/g, '') : newVal;\r\n measure.svg.history.push(oldVal + ': ' + oldExp + '=> ' + newExp + ' ' + description);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoSelector, SmoSelection, ModifierTab } from '../../smo/xform/selections';\r\nimport { OutlineInfo, SvgHelpers } from './svgHelpers';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SuiScroller } from './scroller';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SmoNoteModifierBase, SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoScore, SmoModifier } from '../../smo/data/score';\r\nimport { SvgPageMap } from './svgPageMap';\r\n\r\n/**\r\n * DI information about renderer, so we can notify renderer and it can contain\r\n * a tracker object\r\n * @param pageMap {@link SvgPageMap}: SvgPageMap - container of SVG elements and vex renderers\r\n * @param score {@link SmoScore}\r\n * @param dirty lets the caller know the display needs update\r\n * @param passState state machine in rendering part/all of the score\r\n * @param renderPromise awaits on render all\r\n * @param addToReplaceQueue adds a measure to the quick update queue\r\n * @param renderElement a little redundant with svg\r\n * @category SuiRender\r\n */\r\nexport interface SuiRendererBase {\r\n pageMap: SvgPageMap,\r\n score: SmoScore | null,\r\n dirty: boolean,\r\n passState: number,\r\n renderPromise(): Promise,\r\n addToReplaceQueue(mm: SmoSelection[]): void,\r\n renderElement: Element\r\n}\r\n// used to perform highlights in the backgroundd\r\nexport interface HighlightQueue {\r\n selectionCount: number, deferred: boolean\r\n}\r\n/**\r\n * Map the notes in the svg so they can respond to events and interact\r\n * with the mouse/keyboard\r\n * @category SuiRender\r\n */\r\nexport abstract class SuiMapper {\r\n renderer: SuiRendererBase;\r\n scroller: SuiScroller;\r\n // measure to selector map\r\n measureNoteMap: Record = {};\r\n // notes currently selected. Something is always selected\r\n // modifiers (text etc.) that have been selected\r\n modifierSelections: ModifierTab[] = [];\r\n selections: SmoSelection[] = [];\r\n // The list of modifiers near the current selection\r\n localModifiers: ModifierTab[] = [];\r\n modifierIndex: number = -1;\r\n modifierSuggestion: ModifierTab | null = null;\r\n pitchIndex: number = -1;\r\n // By default, defer highlights for performance.\r\n deferHighlightMode: boolean = true;\r\n suggestion: SmoSelection | null = null;\r\n pasteBuffer: PasteBuffer;\r\n highlightQueue: HighlightQueue;\r\n mouseHintBox: OutlineInfo | null = null;\r\n selectionRects: Record = {};\r\n outlines: Record = {};\r\n mapping: boolean = false;\r\n constructor(renderer: SuiRendererBase, scroller: SuiScroller, pasteBuffer: PasteBuffer) {\r\n // renderer renders the music when it changes\r\n this.renderer = renderer;\r\n this.scroller = scroller;\r\n this.modifierIndex = -1;\r\n this.localModifiers = [];\r\n // index if a single pitch of a chord is selected\r\n this.pitchIndex = -1;\r\n // the current selection, which is also the copy/paste destination\r\n this.pasteBuffer = pasteBuffer;\r\n this.highlightQueue = { selectionCount: 0, deferred: false };\r\n }\r\n\r\n abstract highlightSelection(): void;\r\n abstract _growSelectionRight(hold?: boolean): number; \r\n abstract _setModifierAsSuggestion(sel: ModifierTab): void;\r\n abstract _setArtifactAsSuggestion(sel: SmoSelection): void;\r\n abstract getIdleTime(): number;\r\n updateHighlight() {\r\n const self = this;\r\n if (this.selections.length === 0) {\r\n this.highlightQueue.deferred = false;\r\n this.highlightQueue.selectionCount = 0;\r\n return;\r\n }\r\n if (this.highlightQueue.selectionCount === this.selections.length) {\r\n this.highlightSelection();\r\n this.highlightQueue.deferred = false;\r\n } else {\r\n this.highlightQueue.selectionCount = this.selections.length;\r\n setTimeout(() => {\r\n self.updateHighlight();\r\n }, 50);\r\n }\r\n }\r\n deferHighlight() {\r\n if (!this.deferHighlightMode) {\r\n this.highlightSelection();\r\n }\r\n const self = this;\r\n if (!this.highlightQueue.deferred) {\r\n this.highlightQueue.deferred = true;\r\n setTimeout(() => {\r\n self.updateHighlight();\r\n }, 50);\r\n }\r\n }\r\n _createLocalModifiersList() {\r\n this.localModifiers = [];\r\n let index = 0;\r\n this.selections.forEach((sel) => {\r\n sel.note?.getGraceNotes().forEach((gg) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: gg, box: gg.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.note?.getModifiers('SmoDynamicText').forEach((dyn) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: dyn, box: dyn.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.measure.getModifiersByType('SmoVolta').forEach((volta) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: volta, box: volta.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.measure.getModifiersByType('SmoTempoText').forEach((tempo) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: tempo, box: tempo.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.staff.renderableModifiers.forEach((mod) => {\r\n if (SmoSelector.gteq(sel.selector, mod.startSelector) &&\r\n SmoSelector.lteq(sel.selector, mod.endSelector) && mod.logicalBox) {\r\n const exists = this.localModifiers.find((mm) => mm.modifier.ctor === mod.ctor);\r\n if (!exists) {\r\n this.localModifiers.push({ index, selection: sel, modifier: mod, box: mod.logicalBox });\r\n index += 1;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * When a modifier is selected graphically, update the selection list\r\n * and create a local modifier list\r\n * @param modifierTabs \r\n */\r\n createLocalModifiersFromModifierTabs(modifierTabs: ModifierTab[]) {\r\n const selections: SmoSelection[] = [];\r\n const modMap: Record = {};\r\n modifierTabs.forEach((mt) => {\r\n if (mt.selection) {\r\n const key = SmoSelector.getNoteKey(mt.selection.selector);\r\n if (!modMap[key]) {\r\n selections.push(mt.selection);\r\n modMap[key] = true;\r\n }\r\n }\r\n });\r\n if (selections.length) {\r\n this.selections = selections;\r\n this._createLocalModifiersList();\r\n this.deferHighlight();\r\n }\r\n }\r\n // used by remove dialogs to clear removed thing\r\n clearModifierSelections() {\r\n this.modifierSelections = [];\r\n this._createLocalModifiersList();\r\n this.modifierIndex = -1;\r\n if (this.outlines['staffModifier'] && this.outlines['staffModifier'].element) {\r\n this.outlines['staffModifier'].element.remove();\r\n this.outlines['staffModifier'].element = undefined;\r\n }\r\n // this.eraseRect('staffModifier'); not sure where this should go\r\n }\r\n // ### loadScore\r\n // We are loading a new score. clear the maps so we can rebuild them after\r\n // rendering\r\n loadScore() {\r\n this.measureNoteMap = {};\r\n this.clearModifierSelections();\r\n this.selections = [];\r\n this.highlightQueue = { selectionCount: 0, deferred: false };\r\n }\r\n\r\n // ### _clearMeasureArtifacts\r\n // clear the measure from the measure and note maps so we can rebuild it.\r\n clearMeasureMap(measure: SmoMeasure) {\r\n const selector = { staff: measure.measureNumber.staffId, measure: measure.measureNumber.measureIndex, voice: 0, tick: 0, pitches: [] };\r\n\r\n // Unselect selections in this measure so we can reselect them when re-tracked\r\n const ar: SmoSelection[] = [];\r\n this.selections.forEach((selection) => {\r\n if (selection.selector.staff !== selector.staff || selection.selector.measure !== selector.measure) {\r\n ar.push(selection);\r\n }\r\n });\r\n this.selections = ar;\r\n }\r\n\r\n _copySelectionsByMeasure(staffIndex: number, measureIndex: number) {\r\n const rv = this.selections.filter((sel) => sel.selector.staff === staffIndex && sel.selector.measure === measureIndex);\r\n const ticks = rv.length < 1 ? 0 : rv.map((sel) => (sel.note as SmoNote).tickCount).reduce((a, b) => a + b);\r\n const selectors: SmoSelector[] = [];\r\n rv.forEach((sel) => {\r\n const nsel = JSON.parse(JSON.stringify(sel.selector));\r\n if (!nsel.pitches) {\r\n nsel.pitches = [];\r\n }\r\n selectors.push(nsel);\r\n });\r\n return { ticks, selectors };\r\n }\r\n deleteMeasure(selection: SmoSelection) {\r\n const selCopy = this._copySelectionsByMeasure(selection.selector.staff, selection.selector.measure)\r\n .selectors;\r\n this.clearMeasureMap(selection.measure);\r\n if (selCopy.length) {\r\n selCopy.forEach((selector) => {\r\n const nsel = JSON.parse(JSON.stringify(selector));\r\n if (selector.measure === 0) {\r\n nsel.measure += 1;\r\n } else {\r\n nsel.measure -= 1;\r\n }\r\n this.selections.push(this._getClosestTick(nsel));\r\n });\r\n }\r\n }\r\n _updateNoteModifier(selection: SmoSelection, modMap: Record, modifier: SmoNoteModifierBase, ix: number) {\r\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab(\r\n {\r\n modifier,\r\n selection,\r\n box: modifier.logicalBox,\r\n index: ix\r\n }\r\n );\r\n ix += 1;\r\n const context = this.renderer.pageMap.getRendererFromModifier(modifier);\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n return ix;\r\n }\r\n\r\n _updateModifiers() {\r\n let ix = 0;\r\n const modMap: Record = {};\r\n if (!this.renderer.score) {\r\n return;\r\n }\r\n this.renderer.score.textGroups.forEach((modifier) => {\r\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection: null,\r\n box: modifier.logicalBox,\r\n index: ix\r\n });\r\n ix += 1;\r\n }\r\n });\r\n const keys = Object.keys(this.measureNoteMap); \r\n keys.forEach((selKey) => {\r\n const selection = this.measureNoteMap[selKey];\r\n selection.staff.renderableModifiers.forEach((modifier) => {\r\n if (SmoSelector.contains(selection.selector, modifier.startSelector, modifier.endSelector)) {\r\n if (!modMap[modifier.attrs.id]) {\r\n if (modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection,\r\n box: modifier.logicalBox,\r\n index: ix\r\n });\r\n ix += 1;\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n }\r\n }\r\n });\r\n selection.measure.modifiers.forEach((modifier) => {\r\n if (modifier.attrs.id\r\n && !modMap[modifier.attrs.id]\r\n && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection,\r\n box: SvgHelpers.smoBox(modifier.logicalBox),\r\n index: ix\r\n });\r\n ix += 1;\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n });\r\n selection.note?.textModifiers.forEach((modifier) => {\r\n if (modifier.logicalBox) {\r\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\r\n }\r\n });\r\n\r\n selection.note?.graceNotes.forEach((modifier) => {\r\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\r\n });\r\n });\r\n }\r\n // ### _getClosestTick\r\n // given a musical selector, find the note artifact that is closest to it,\r\n // if an exact match is not available\r\n _getClosestTick(selector: SmoSelector): SmoSelection {\r\n let tickKey: string | undefined = '';\r\n const measureKey = Object.keys(this.measureNoteMap).find((k) =>\r\n SmoSelector.sameMeasure(this.measureNoteMap[k].selector, selector)\r\n && this.measureNoteMap[k].selector.tick === 0);\r\n tickKey = Object.keys(this.measureNoteMap).find((k) =>\r\n SmoSelector.sameNote(this.measureNoteMap[k].selector, selector));\r\n const firstObj = this.measureNoteMap[Object.keys(this.measureNoteMap)[0]];\r\n\r\n if (tickKey) {\r\n return this.measureNoteMap[tickKey];\r\n }\r\n if (measureKey) {\r\n return this.measureNoteMap[measureKey];\r\n }\r\n return firstObj;\r\n }\r\n\r\n // ### _setModifierBoxes\r\n // Create the DOM modifiers for the lyrics and other modifiers\r\n _setModifierBoxes(measure: SmoMeasure) {\r\n const context = this.renderer.pageMap.getRenderer(measure.svg.logicalBox);\r\n measure.voices.forEach((voice: SmoVoice) => {\r\n voice.notes.forEach((smoNote: SmoNote) => {\r\n if (context) {\r\n const el = context.svg.getElementById(smoNote.renderId as string);\r\n if (el) {\r\n SvgHelpers.updateArtifactBox(context, (el as any), smoNote);\r\n // TODO: fix this, only works on the first line.\r\n smoNote.getModifiers('SmoLyric').forEach((lyrict: SmoNoteModifierBase) => {\r\n const lyric: SmoLyric = lyrict as SmoLyric;\r\n if (lyric.getText().length || lyric.isHyphenated()) {\r\n const lyricElement = context.svg.getElementById('vf-' + lyric.attrs.id) as SVGSVGElement;\r\n if (lyricElement) {\r\n SvgHelpers.updateArtifactBox(context, lyricElement, lyric as any);\r\n }\r\n }\r\n });\r\n }\r\n smoNote.graceNotes.forEach((g) => {\r\n if (g.element) {\r\n }\r\n var gel = context.svg.getElementById('vf-' + g.renderId) as SVGSVGElement;\r\n SvgHelpers.updateArtifactBox(context, gel, g);\r\n });\r\n smoNote.textModifiers.forEach((modifier) => {\r\n if (modifier.logicalBox && modifier.element) {\r\n SvgHelpers.updateArtifactBox(context, modifier.element, modifier as any);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * returns true of the selections are adjacent\r\n * @param s1 a selections\r\n * @param s2 another election\r\n * @returns \r\n */\r\n isAdjacentSelection(s1: SmoSelection, s2: SmoSelection) {\r\n if (!this.renderer.score) {\r\n return false;\r\n }\r\n const nextSel = SmoSelection.advanceTicks(this.renderer.score, s1, 1);\r\n if (!nextSel) {\r\n return false;\r\n }\r\n return SmoSelector.eq(nextSel.selector, s2.selector);\r\n }\r\n areSelectionsAdjacent() {\r\n let selectionIx = 0;\r\n for (selectionIx = 0; this.selections.length > 1 && selectionIx < this.selections.length - 1; ++selectionIx) {\r\n if (!this.isAdjacentSelection(this.selections[selectionIx], this.selections[selectionIx + 1])) {\r\n return false;\r\n }\r\n }\r\n return true; \r\n }\r\n // ### updateMeasure\r\n // A measure has changed. Update the music geometry for it\r\n mapMeasure(staff: SmoSystemStaff, measure: SmoMeasure, printing: boolean) {\r\n let voiceIx = 0;\r\n let selectedTicks = 0;\r\n\r\n // We try to restore block selections. If all the selections in this block are not adjacent, only restore individual selections\r\n // if possible\r\n let adjacentSels = this.areSelectionsAdjacent();\r\n const lastResortSelection: SmoSelection[] = [];\r\n let selectionChanged = false;\r\n let vix = 0;\r\n let replacedSelectors = 0;\r\n if (!measure.svg.logicalBox) {\r\n return;\r\n }\r\n this._setModifierBoxes(measure);\r\n const timestamp = new Date().valueOf();\r\n // Keep track of any current selections in this measure, we will try to restore them.\r\n const sels = this._copySelectionsByMeasure(staff.staffId, measure.measureNumber.measureIndex);\r\n this.clearMeasureMap(measure);\r\n if (sels.selectors.length) {\r\n vix = sels.selectors[0].voice;\r\n }\r\n sels.selectors.forEach((sel) => {\r\n sel.voice = vix;\r\n });\r\n\r\n measure.voices.forEach((voice) => {\r\n let tick = 0;\r\n voice.notes.forEach((note) => {\r\n const selector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: voiceIx,\r\n tick,\r\n pitches: []\r\n };\r\n if (typeof(note.logicalBox) === 'undefined') {\r\n console.warn('note has no box');\r\n }\r\n // create a selection for the newly rendered note\r\n const selection = new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: [],\r\n box: SvgHelpers.smoBox(SvgHelpers.smoBox(note.logicalBox)),\r\n type: 'rendered'\r\n });\r\n // and add it to the map\r\n this._updateMeasureNoteMap(selection, printing);\r\n\r\n // If this note is the same location as something that was selected, reselect it\r\n if (replacedSelectors < sels.selectors.length && selection.selector.tick === sels.selectors[replacedSelectors].tick &&\r\n selection.selector.voice === vix) {\r\n this.selections.push(selection);\r\n // Reselect any pitches.\r\n if (sels.selectors[replacedSelectors].pitches.length > 0) {\r\n sels.selectors[replacedSelectors].pitches.forEach((pitchIx) => {\r\n if (selection.note && selection.note.pitches.length > pitchIx) {\r\n selection.selector.pitches.push(pitchIx);\r\n }\r\n });\r\n }\r\n const note = selection.note as SmoNote;\r\n selectedTicks += note.tickCount;\r\n replacedSelectors += 1;\r\n selectionChanged = true;\r\n } else if (adjacentSels && selectedTicks > 0 && selectedTicks < sels.ticks && selection.selector.voice === vix) {\r\n // try to select the same length of music as was previously selected. So a 1/4 to 2 1/8, both\r\n // are selected\r\n replacedSelectors += 1;\r\n this.selections.push(selection);\r\n selectedTicks += note.tickCount;\r\n } else if (this.selections.length === 0 && sels.selectors.length === 0 && lastResortSelection.length === 0) {\r\n lastResortSelection.push(selection);\r\n }\r\n tick += 1;\r\n });\r\n voiceIx += 1;\r\n });\r\n // We deleted all the notes that were selected, select something else\r\n if (this.selections.length === 0) {\r\n selectionChanged = true;\r\n this.selections = lastResortSelection;\r\n }\r\n // If there were selections on this measure, highlight them.\r\n if (selectionChanged) {\r\n this.deferHighlight();\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.MAP, new Date().valueOf() - timestamp);\r\n }\r\n\r\n _getTicksFromSelections(): number {\r\n let rv = 0;\r\n this.selections.forEach((sel) => {\r\n if (sel.note) {\r\n rv += sel.note.tickCount;\r\n }\r\n });\r\n return rv;\r\n }\r\n _copySelections(): SmoSelector[] {\r\n const rv: SmoSelector[] = [];\r\n this.selections.forEach((sel) => {\r\n rv.push(sel.selector);\r\n });\r\n return rv;\r\n }\r\n // ### getExtremeSelection\r\n // Get the rightmost (1) or leftmost (-1) selection\r\n getExtremeSelection(sign: number): SmoSelection {\r\n let i = 0;\r\n let rv = this.selections[0];\r\n for (i = 1; i < this.selections.length; ++i) {\r\n const sa = this.selections[i].selector;\r\n if (sa.measure * sign > rv.selector.measure * sign) {\r\n rv = this.selections[i];\r\n } else if (sa.measure === rv.selector.measure && sa.tick * sign > rv.selector.tick * sign) {\r\n rv = this.selections[i];\r\n }\r\n }\r\n return rv;\r\n }\r\n _selectClosest(selector: SmoSelector) {\r\n var artifact = this._getClosestTick(selector);\r\n if (!artifact) {\r\n return;\r\n }\r\n if (this.selections.find((sel) => JSON.stringify(sel.selector)\r\n === JSON.stringify(artifact.selector))) {\r\n return;\r\n }\r\n const note = artifact.note as SmoNote;\r\n if (selector.pitches && selector.pitches.length && selector.pitches.length <= note.pitches.length) {\r\n // If the old selection had only a single pitch, try to recreate that.\r\n artifact.selector.pitches = JSON.parse(JSON.stringify(selector.pitches));\r\n }\r\n this.selections.push(artifact);\r\n }\r\n // ### updateMap\r\n // This should be called after rendering the score. It updates the score to\r\n // graphics map and selects the first object.\r\n updateMap() {\r\n const ts = new Date().valueOf();\r\n this.mapping = true;\r\n let tickSelected = 0;\r\n const selCopy = this._copySelections();\r\n const ticksSelectedCopy = this._getTicksFromSelections();\r\n const firstSelection = this.getExtremeSelection(-1);\r\n this._updateModifiers();\r\n\r\n // Try to restore selection. If there were none, just select the fist\r\n // thing in the score\r\n const firstKey = SmoSelector.getNoteKey(SmoSelector.default);\r\n if (!selCopy.length && this.renderer.score) {\r\n // If there is nothing rendered, don't update tracker\r\n if (typeof(this.measureNoteMap[firstKey]) !== 'undefined' && !firstSelection)\r\n this.selections = [this.measureNoteMap[firstKey]];\r\n } else if (this.areSelectionsAdjacent() && this.selections.length > 1) {\r\n // If there are adjacent selections, restore selections to the ticks that are in the score now\r\n if (!firstSelection) {\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\r\n return;\r\n }\r\n this.selections = [];\r\n this._selectClosest(firstSelection.selector);\r\n const first = this.selections[0];\r\n tickSelected = (first.note as SmoNote).tickCount ?? 0;\r\n while (tickSelected < ticksSelectedCopy && first) {\r\n let delta: number = this._growSelectionRight(true);\r\n if (!delta) {\r\n break;\r\n }\r\n tickSelected += delta;\r\n }\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n this.mapping = false;\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\r\n }\r\n createMousePositionBox(logicalBox: SvgBox) {\r\n const pageMap = this.renderer.pageMap;\r\n const page = pageMap.getRendererFromPoint(logicalBox);\r\n if (page) {\r\n const cof = (pageMap.zoomScale * pageMap.renderScale); \r\n const debugBox = SvgHelpers.smoBox(logicalBox);\r\n debugBox.y -= (page.box.y + 5 / cof);\r\n debugBox.x -= (page.box.x + 5 / cof)\r\n debugBox.width = 10 / cof;\r\n debugBox.height = 10 / cof;\r\n if (!this.mouseHintBox) {\r\n this.mouseHintBox = {\r\n stroke: SvgPageMap.strokes['debug-mouse-box'],\r\n classes: 'hide-print',\r\n box: debugBox,\r\n scroll: { x: 0, y: 0 },\r\n context: page,\r\n timeOff: 1000\r\n };\r\n }\r\n this.mouseHintBox.context = page;\r\n this.mouseHintBox.box = debugBox;\r\n SvgHelpers.outlineRect(this.mouseHintBox);\r\n } \r\n }\r\n eraseMousePositionBox() {\r\n if (this.mouseHintBox && this.mouseHintBox.element) {\r\n this.mouseHintBox.element.remove();\r\n this.mouseHintBox.element = undefined;\r\n }\r\n }\r\n /**\r\n * Find any musical elements at the supplied screen coordinates and set them as the selection\r\n * @param bb \r\n * @returns \r\n */\r\n intersectingArtifact(bb: SvgBox) {\r\n const scrollState = this.scroller.scrollState;\r\n bb = SvgHelpers.boxPoints(bb.x + scrollState.x, bb.y + scrollState.y, bb.width ? bb.width : 1, bb.height ? bb.height : 1);\r\n const logicalBox = this.renderer.pageMap.clientToSvg(bb);\r\n const { selections, page } = this.renderer.pageMap.findArtifact(logicalBox);\r\n if (page) {\r\n const artifacts = selections;\r\n // const artifacts = SvgHelpers.findIntersectingArtifactFromMap(bb, this.measureNoteMap, SvgHelpers.smoBox(this.scroller.scrollState.scroll));\r\n // TODO: handle overlapping suggestions\r\n if (!artifacts.length) {\r\n const sel = this.renderer.pageMap.findModifierTabs(logicalBox);\r\n if (sel.length) {\r\n this._setModifierAsSuggestion(sel[0]);\r\n this.eraseMousePositionBox();\r\n } else {\r\n // no intersection, show mouse hint \r\n this.createMousePositionBox(logicalBox);\r\n }\r\n return;\r\n }\r\n const artifact = artifacts[0];\r\n this.eraseMousePositionBox();\r\n this._setArtifactAsSuggestion(artifact);\r\n }\r\n }\r\n _getRectangleChain(selection: SmoSelection) {\r\n const rv: number[] = [];\r\n if (!selection.note) {\r\n return rv;\r\n }\r\n rv.push(selection.measure.svg.pageIndex);\r\n rv.push(selection.measure.svg.lineIndex);\r\n rv.push(selection.measure.measureNumber.measureIndex);\r\n return rv;\r\n }\r\n _updateMeasureNoteMap(artifact: SmoSelection, printing: boolean) {\r\n const note = artifact.note as SmoNote;\r\n const noteKey = SmoSelector.getNoteKey(artifact.selector);\r\n const activeVoice = artifact.measure.getActiveVoice();\r\n // not has not been drawn yet.\r\n if ((!artifact.box) || (!artifact.measure.svg.logicalBox)) {\r\n return;\r\n }\r\n this.measureNoteMap[noteKey] = artifact;\r\n this.renderer.pageMap.addArtifact(artifact);\r\n artifact.scrollBox = { x: artifact.box.x,\r\n y: artifact.measure.svg.logicalBox.y };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers, SvgBuilder } from \"./svgHelpers\";\r\nimport { buildDom } from \"../../common/htmlHelpers\";\r\nimport { SuiScoreViewOperations } from \"./scoreViewOperations\";\r\nimport { SvgBox, Pitch, PitchLetter } from '../../smo/data/common';\r\ndeclare var $: any;\r\n\r\nexport interface PianoKey {\r\n box: SvgBox,\r\n keyElement: SVGSVGElement\r\n}\r\nexport class SuiPiano {\r\n renderElement: SVGSVGElement | null;\r\n view: SuiScoreViewOperations;\r\n octaveOffset: number = 0;\r\n chordPedal: boolean = false;\r\n objects: PianoKey[] = [];\r\n suggestFadeTimer: NodeJS.Timer | null = null;\r\n elementId: string = 'piano-svg';\r\n constructor(view: SuiScoreViewOperations) {\r\n this.renderElement = (document.getElementById(this.elementId) as any) as SVGSVGElement;\r\n this.view = view;\r\n this.render();\r\n }\r\n\r\n static get dimensions() {\r\n return {\r\n wwidth: 23,\r\n bwidth: 13,\r\n wheight: 120,\r\n bheight: 80,\r\n octaves: 1\r\n };\r\n }\r\n // 7 white keys per octave\r\n static get wkeysPerOctave() {\r\n return 7;\r\n }\r\n static get owidth() {\r\n return SuiPiano.dimensions.wwidth * SuiPiano.wkeysPerOctave;\r\n }\r\n static createAndDisplay() {\r\n // Called by ribbon button.\r\n $('body').trigger('show-piano-event');\r\n $('body').trigger('forceScrollEvent');\r\n }\r\n\r\n _mapKeys() {\r\n this.objects = [];\r\n var keys: SVGSVGElement[] = [].slice.call(this.renderElement!.getElementsByClassName('piano-key'));\r\n keys.forEach((key) => {\r\n var rect = SvgHelpers.smoBox(key.getBoundingClientRect());\r\n var id = key.getAttributeNS('', 'id');\r\n var artifact = {\r\n keyElement: key,\r\n box: rect,\r\n id: id\r\n };\r\n this.objects.push(artifact);\r\n });\r\n }\r\n _removeClass(classes: string) {\r\n Array.from(this.renderElement!.getElementsByClassName('piano-key')).forEach((el) => {\r\n $(el).removeClass(classes);\r\n });\r\n }\r\n _removeGlow() {\r\n this._removeClass('glow-key');\r\n }\r\n _fadeGlow(el: SVGSVGElement) {\r\n if (this.suggestFadeTimer) {\r\n clearTimeout(this.suggestFadeTimer as any);\r\n }\r\n // Make selection fade if there is a selection.\r\n this.suggestFadeTimer = setTimeout(() => {\r\n $(el).removeClass('glow-key');\r\n }, 1000);\r\n }\r\n bind() {\r\n // The menu option to toggle piano state\r\n $('body').off('show-piano-event').on('show-piano-event', () => {\r\n const isVisible = $('body').hasClass('show-piano');\r\n $('body').toggleClass('show-piano');\r\n this._mapKeys();\r\n });\r\n $('#piano-8va-button').off('click').on('click', (ev: any) => {\r\n $('#piano-8vb-button').removeClass('activated');\r\n if (this.octaveOffset === 0) {\r\n $(ev.currentTarget).addClass('activated');\r\n this.octaveOffset = 1;\r\n } else {\r\n $(ev.currentTarget).removeClass('activated');\r\n this.octaveOffset = 0;\r\n }\r\n });\r\n $('#piano-8vb-button').off('click').on('click', (ev: any) => {\r\n $('#piano-8va-button').removeClass('activated');\r\n if (this.octaveOffset === 0) {\r\n $(ev.currentTarget).addClass('activated');\r\n this.octaveOffset = -1;\r\n } else {\r\n $(ev.currentTarget).removeClass('activated');\r\n this.octaveOffset = 0;\r\n }\r\n });\r\n $('#piano-xpose-up').off('click').on('click', () => {\r\n this.view.transposeSelections(1);\r\n });\r\n $('#piano-xpose-down').off('click').on('click', () => {\r\n this.view.transposeSelections(-1);\r\n });\r\n $('#piano-enharmonic').off('click').on('click', () => {\r\n this.view.toggleEnharmonic();\r\n });\r\n $('button.jsLeft').off('click').on('click', () => {\r\n this.view.tracker.moveSelectionLeft();\r\n });\r\n $('button.jsRight').off('click').on('click', () => {\r\n this.view.tracker.moveSelectionRight(this.view.score, null, false);\r\n });\r\n $('button.jsGrowDuration').off('click').on('click', () => {\r\n this.view.batchDurationOperation('doubleDuration');\r\n });\r\n $('button.jsGrowDot').off('click').on('click', () => {\r\n this.view.batchDurationOperation('dotDuration');\r\n });\r\n $('button.jsShrinkDuration').off('click').on('click', () => {\r\n this.view.batchDurationOperation('halveDuration');\r\n });\r\n $('button.jsShrinkDot').off('click').on('click', () => {\r\n this.view.batchDurationOperation('undotDuration');\r\n });\r\n $('button.jsChord').off('click').on('click', (ev: any) => {\r\n $(ev.currentTarget).toggleClass('activated');\r\n this.chordPedal = !this.chordPedal;\r\n });\r\n $(this.renderElement).off('mousemove').on('mousemove', (ev: any) => {\r\n if (Math.abs(this.objects[0].box.x - this.objects[0].keyElement.getBoundingClientRect().x)\r\n > this.objects[0].box.width / 2) {\r\n console.log('remap piano');\r\n this._mapKeys();\r\n }\r\n if (!this.renderElement) {\r\n return;\r\n }\r\n const clientBox = SvgHelpers.smoBox(SvgHelpers.boxPoints(ev.clientX, ev.clientY, 1, 1)); // last param is scroll offset\r\n\r\n var keyPressed = SvgHelpers.findSmallestIntersection(\r\n clientBox, this.objects) as PianoKey;\r\n if (!keyPressed) {\r\n return;\r\n }\r\n const el: SVGSVGElement = this.renderElement!.getElementById(keyPressed.keyElement.id) as SVGSVGElement;\r\n if ($(el).hasClass('glow-key')) {\r\n return;\r\n }\r\n this._removeGlow();\r\n $(el).addClass('glow-key');\r\n this._fadeGlow(el);\r\n });\r\n $(this.renderElement).off('blur').on('blur', () => {\r\n this._removeGlow();\r\n });\r\n $(this.renderElement).off('click').on('click', (ev: any) => {\r\n this._updateSelections(ev);\r\n });\r\n // the close button on piano itself\r\n $('.close-piano').off('click').on('click', () => {\r\n this.view.score.preferences.showPiano = false;\r\n this.view.updateScorePreferences(this.view.score.preferences);\r\n });\r\n }\r\n static hidePiano() {\r\n if ($('body').hasClass('show-piano')) {\r\n $('body').removeClass('show-piano');\r\n }\r\n }\r\n static showPiano() {\r\n if ($('body').hasClass('show-piano') === false) {\r\n $('body').addClass('show-piano');\r\n // resize the work area.\r\n // $('body').trigger('forceResizeEvent');\r\n }\r\n }\r\n static get isShowing() {\r\n return $('body').hasClass('show-piano');\r\n }\r\n _updateSelections(ev: any) {\r\n // fake a scroller (piano scroller w/b cool tho...)\r\n if (!this.renderElement) {\r\n return;\r\n }\r\n const logicalBox = SvgHelpers.smoBox({ x: ev.clientX, y: ev.clientY });\r\n\r\n var keyPressed =\r\n SvgHelpers.findSmallestIntersection(logicalBox, this.objects) as PianoKey;\r\n if (!keyPressed) {\r\n return;\r\n }\r\n if (!ev.shiftKey && !this.chordPedal) {\r\n this._removeClass('glow-key pressed-key');\r\n } else {\r\n var el = this.renderElement!.getElementById(keyPressed.keyElement.id) as SVGSVGElement;\r\n $(el).addClass('pressed-key');\r\n }\r\n const key = keyPressed.keyElement.id.substr(6, keyPressed.keyElement.id.length - 6);\r\n const pitch: Pitch = {\r\n letter: key[0].toLowerCase() as PitchLetter,\r\n octave: this.octaveOffset,\r\n accidental: key.length > 1 ? key[1] : 'n'\r\n };\r\n\r\n this.view.setPitchPiano(pitch, this.chordPedal);\r\n }\r\n _renderControls() {\r\n var b = buildDom;\r\n var r = b('button').classes('icon icon-cross close close-piano');\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsGrowDuration').append(b('span').classes('icon icon-duration_grow'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsShrinkDuration').append(b('span').classes('icon icon-duration_less'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsGrowDot').append(b('span').classes('icon icon-duration_grow_dot'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsShrinkDot').append(b('span').classes('icon icon-duration_less_dot'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n\r\n r = b('button').classes('key-ctrl jsLeft').append(b('span').classes('icon icon-arrow-left'));\r\n $('.piano-container .piano-keys').prepend(r.dom());\r\n r = b('button').classes('key-ctrl jsRight').append(b('span').classes('icon icon-arrow-right'));\r\n $('.piano-container .piano-keys').append(r.dom());\r\n\r\n r = b('button').classes('piano-ctrl').attr('id', 'piano-8va-button').append(\r\n b('span').classes('bold-italic').text('8')).append(\r\n b('sup').classes('italic').text('va'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl ').attr('id', 'piano-8vb-button').append(\r\n b('span').classes('bold-italic').text('8')).append(\r\n b('sup').classes('italic').text('vb'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsXposeUp').attr('id', 'piano-xpose-up').append(\r\n b('span').classes('bold').text('+'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsXposeDown').attr('id', 'piano-xpose-down').append(\r\n b('span').classes('bold').text('-'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsEnharmonic').attr('id', 'piano-enharmonic').append(\r\n b('span').classes('bold icon icon-accident'));\r\n\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsChord')\r\n .append(b('span').classes('icon icon-chords'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n }\r\n handleResize() {\r\n this._mapKeys();\r\n }\r\n playNote() {\r\n }\r\n render() {\r\n $('body').addClass('show-piano');\r\n var b = SvgBuilder.b;\r\n var d = SuiPiano.dimensions;\r\n // https://www.mathpages.com/home/kmath043.htm\r\n\r\n // Width of white key at back for C,D,E\r\n var b1off = d.wwidth - (d.bwidth * 2 / 3);\r\n\r\n // Width of other white keys at the back.\r\n var b2off = d.wwidth - (d.bwidth * 3) / 4;\r\n\r\n var xwhite = [{\r\n note: 'C',\r\n x: 0\r\n }, {\r\n note: 'D',\r\n x: d.wwidth\r\n }, {\r\n note: 'E',\r\n x: 2 * d.wwidth\r\n }, {\r\n note: 'F',\r\n x: 3 * d.wwidth\r\n }, {\r\n note: 'G',\r\n x: 4 * d.wwidth\r\n }, {\r\n note: 'A',\r\n x: 5 * d.wwidth\r\n }, {\r\n note: 'B',\r\n x: 6 * d.wwidth\r\n }\r\n ];\r\n var xblack = [{\r\n note: 'Db',\r\n x: b1off\r\n }, {\r\n note: 'Eb',\r\n x: 2 * b1off + d.bwidth\r\n }, {\r\n note: 'Gb',\r\n x: 3 * d.wwidth + b2off\r\n }, {\r\n note: 'Ab',\r\n x: (3 * d.wwidth + b2off) + b2off + d.bwidth\r\n }, {\r\n note: 'Bb',\r\n x: SuiPiano.owidth - (b2off + d.bwidth)\r\n }\r\n ];\r\n var wwidth = d.wwidth;\r\n var bwidth = d.bwidth;\r\n var wheight = d.wheight;\r\n var bheight = d.bheight;\r\n var owidth = SuiPiano.wkeysPerOctave * wwidth;\r\n\r\n // Start on C2 to C6 to reduce space\r\n var octaveOff = 7 - d.octaves;\r\n\r\n var x = 0;\r\n var y = 0;\r\n var r = b('g');\r\n for (var i = 0; i < d.octaves; ++i) {\r\n x = i * owidth;\r\n xwhite.forEach((key) => {\r\n var nt = key.note;\r\n var classes = 'piano-key white-key';\r\n if (nt == 'C4') {\r\n classes += ' middle-c';\r\n }\r\n var rect = b('rect').attr('id', 'keyId-' + nt).rect(x + key.x, y, wwidth, wheight, classes);\r\n r.append(rect);\r\n\r\n var tt = b('text').text(x + key.x + (wwidth / 5), bheight + 16, 'note-text', nt);\r\n r.append(tt);\r\n });\r\n xblack.forEach((key) => {\r\n var nt = key.note;\r\n var classes = 'piano-key black-key';\r\n var rect = b('rect').attr('id', 'keyId-' + nt).attr('fill', 'url(#piano-grad)').rect(x + key.x, 0, bwidth, bheight, classes);\r\n r.append(rect);\r\n });\r\n }\r\n var el = (document.getElementById(this.elementId) as any) as SVGSVGElement;\r\n SvgHelpers.gradient(el, 'piano-grad', 'vertical', [{ color: '#000', offset: '0%', opacity: 1 },\r\n { color: '#777', offset: '50%', opacity: 1 }, { color: '#ddd', offset: '100%', opacity: 1 }]);\r\n el.appendChild(r.dom());\r\n this._renderControls();\r\n this._mapKeys();\r\n this.bind();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support the state machine associated with background music rendering.\r\n * @module renderState\r\n */\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { UndoBuffer, UndoEntry } from '../../smo/xform/undo';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { VxSystem } from '../vex/vxSystem';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SuiMapper } from './mapper';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SuiScoreRender, ScoreRenderParams } from './scoreRender';\r\nimport { SuiExceptionHandler } from '../../ui/exceptions';\r\nimport { VexFlow, setFontStack } from '../../common/vex';\r\ndeclare var $: any;\r\n\r\n\r\nexport var scoreChangeEvent = 'smoScoreChangeEvent';\r\n/**\r\n * Manage the state of the score rendering. The score can be rendered either completely,\r\n * or partially for editing. This class works with the RenderDemon to decide when to\r\n * render the score after it has been modified, and keeps track of what the current\r\n * render state is (dirty, etc.)\r\n * @category SuiRender\r\n * */\r\nexport class SuiRenderState {\r\n static debugMask: number = 0;\r\n dirty: boolean;\r\n replaceQ: SmoSelection[];\r\n stateRepCount: 0;\r\n viewportChanged: boolean;\r\n _resetViewport: boolean;\r\n measureMapper: SuiMapper | null;\r\n passState: number = SuiRenderState.passStates.initial;\r\n _score: SmoScore | null = null;\r\n _backupZoomScale: number = 0;\r\n renderer: SuiScoreRender;\r\n idleRedrawTime: number;\r\n idleLayoutTimer: number = 0; // how long the score has been idle\r\n demonPollTime: number;\r\n handlingRedraw: boolean = false;\r\n // signal to render demon that we have suspended background\r\n // rendering because we are recording or playing actions.\r\n suspendRendering: boolean = false;\r\n undoBuffer: UndoBuffer;\r\n undoStatus: number = 0;\r\n\r\n constructor(config: ScoreRenderParams) {\r\n this.dirty = true;\r\n this.replaceQ = [];\r\n this.stateRepCount = 0;\r\n this.setPassState(SuiRenderState.passStates.initial, 'ctor');\r\n this.viewportChanged = false;\r\n this._resetViewport = false;\r\n this.measureMapper = null;\r\n this.renderer = new SuiScoreRender(config);\r\n this.idleRedrawTime = config.config.idleRedrawTime;\r\n this.demonPollTime = config.config.demonPollTime;\r\n this.undoBuffer = config.undoBuffer;\r\n }\r\n get elementId() {\r\n return this.renderer.elementId;\r\n }\r\n get pageMap() {\r\n return this.renderer.vexContainers;\r\n }\r\n // ### setMeasureMapper\r\n // DI/notifier pattern. The measure mapper/tracker is updated when the score is rendered\r\n // so the UI stays in sync with the location of elements in the score.\r\n setMeasureMapper(mapper: SuiMapper) {\r\n this.measureMapper = mapper;\r\n this.renderer.measureMapper = mapper;\r\n }\r\n set stepMode(value: boolean) {\r\n this.suspendRendering = value;\r\n this.renderer.autoAdjustRenderTime = !value;\r\n if (this.measureMapper) {\r\n this.measureMapper.deferHighlightMode = !value;\r\n }\r\n }\r\n\r\n // ### createScoreRenderer\r\n // ### Description;\r\n // to get the score to appear, a div and a score object are required. The layout takes care of creating the\r\n // svg element in the dom and interacting with the vex library.\r\n static createScoreRenderer(config: SmoRenderConfiguration, renderElement: Element, score: SmoScore, undoBuffer: UndoBuffer): SuiRenderState {\r\n const ctorObj: ScoreRenderParams = {\r\n config,\r\n elementId: renderElement,\r\n score,\r\n undoBuffer\r\n };\r\n const renderer = new SuiRenderState(ctorObj);\r\n return renderer;\r\n }\r\n static get passStates(): Record {\r\n return { initial: 0, clean: 2, replace: 3 };\r\n }\r\n get renderElement(): Element {\r\n return this.elementId;\r\n }\r\n notifyFontChange() {\r\n setFontStack(this.score!.engravingFont);\r\n }\r\n addToReplaceQueue(selection: SmoSelection | SmoSelection[]) {\r\n if (this.passState === SuiRenderState.passStates.clean ||\r\n this.passState === SuiRenderState.passStates.replace) { \r\n if (Array.isArray(selection)) {\r\n this.replaceQ = this.replaceQ.concat(selection);\r\n } else {\r\n this.replaceQ.push(selection);\r\n }\r\n this.setDirty();\r\n }\r\n }\r\n\r\n setDirty() {\r\n if (!this.dirty) {\r\n this.dirty = true;\r\n if (this.passState === SuiRenderState.passStates.clean) {\r\n this.setPassState(SuiRenderState.passStates.replace, 'setDirty');\r\n }\r\n }\r\n }\r\n setRefresh() {\r\n this.dirty = true;\r\n this.setPassState(SuiRenderState.passStates.initial, 'setRefresh');\r\n }\r\n rerenderAll() {\r\n this.dirty = true;\r\n this.setPassState(SuiRenderState.passStates.initial, 'rerenderAll');\r\n this._resetViewport = true;\r\n }\r\n clearLine(measure: SmoMeasure) {\r\n const page = measure.svg.pageIndex;\r\n this.renderer.clearRenderedPage(page);\r\n }\r\n get renderStateClean() {\r\n return this.passState === SuiRenderState.passStates.clean && this.renderer.backgroundRender === false;\r\n }\r\n get renderStateRendered() {\r\n return (this.passState === SuiRenderState.passStates.clean && this.renderer.backgroundRender === false) ||\r\n (this.passState === SuiRenderState.passStates.replace && this.replaceQ.length === 0 && this.renderer.backgroundRender === false);\r\n }\r\n /**\r\n * Do a quick re-render of a measure that has changed, defer the whole score.\r\n * @returns \r\n */\r\n replaceMeasures() {\r\n const staffMap: Record = {};\r\n if (this.score === null || this.measureMapper === null) {\r\n return;\r\n }\r\n this.replaceQ.forEach((change) => {\r\n this.renderer.replaceSelection(staffMap, change);\r\n });\r\n Object.keys(staffMap).forEach((key) => {\r\n const obj = staffMap[key];\r\n this.renderer.renderModifiers(obj.staff, obj.system);\r\n obj.system.renderEndings(this.measureMapper!.scroller);\r\n obj.system.updateLyricOffsets();\r\n });\r\n this.replaceQ = [];\r\n }\r\n async preserveScroll() {\r\n const scrollState = this.measureMapper!.scroller.scrollState;\r\n await this.renderPromise();\r\n this.measureMapper!.scroller.restoreScrollState(scrollState);\r\n }\r\n\r\n _renderStatePromise(condition: () => boolean): Promise {\r\n const oldSuspend = this.suspendRendering;\r\n this.suspendRendering = false;\r\n const self = this;\r\n const endAction = () => {\r\n self.suspendRendering = oldSuspend;\r\n };\r\n return PromiseHelpers.makePromise(condition, endAction, null, this.demonPollTime);\r\n }\r\n // ### renderPromise\r\n // return a promise that resolves when the score is in a fully rendered state.\r\n renderPromise(): Promise {\r\n return this._renderStatePromise(() => this.renderStateClean);\r\n }\r\n\r\n // ### renderPromise\r\n // return a promise that resolves when the score is in a fully rendered state.\r\n updatePromise() {\r\n this.replaceMeasures();\r\n return this._renderStatePromise(() => this.renderStateRendered);\r\n }\r\n async handleRedrawTimer() {\r\n if (this.handlingRedraw) {\r\n return;\r\n }\r\n if (this.suspendRendering) {\r\n return;\r\n }\r\n this.handlingRedraw = true;\r\n const redrawTime = Math.max(this.renderer.renderTime, this.idleRedrawTime);\r\n // If there has been a change, redraw the score\r\n if (this.passState === SuiRenderState.passStates.initial) {\r\n this.dirty = true;\r\n this.undoStatus = this.undoBuffer.opCount;\r\n this.idleLayoutTimer = Date.now();\r\n\r\n // indicate the display is 'dirty' and we will be refreshing it.\r\n $('body').addClass('refresh-1');\r\n try {\r\n // Sort of a hack. If the viewport changed, the scroll state is already reset\r\n // so we can't preserver the scroll state.\r\n if (!this.renderer.viewportChanged) {\r\n this.preserveScroll();\r\n }\r\n await this.render();\r\n } catch (ex) {\r\n console.error(ex);\r\n SuiExceptionHandler.instance.exceptionHandler(ex);\r\n this.handlingRedraw = false;\r\n }\r\n } else if (this.passState === SuiRenderState.passStates.replace && this.undoStatus === this.undoBuffer.opCount) {\r\n // Consider navigation as activity when deciding to refresh\r\n this.idleLayoutTimer = Math.max(this.idleLayoutTimer, this.measureMapper!.getIdleTime());\r\n $('body').addClass('refresh-1');\r\n // Do we need to refresh the score?\r\n if (this.renderer.backgroundRender === false && Date.now() - this.idleLayoutTimer > redrawTime) {\r\n this.passState = SuiRenderState.passStates.initial;\r\n if (!this.renderer.viewportChanged) {\r\n this.preserveScroll();\r\n }\r\n this.render();\r\n }\r\n } else {\r\n this.idleLayoutTimer = Date.now();\r\n this.undoStatus = this.undoBuffer.opCount;\r\n if (this.replaceQ.length > 0) {\r\n this.render();\r\n }\r\n }\r\n this.handlingRedraw = false;\r\n }\r\n pollRedraw() {\r\n setTimeout(async () => {\r\n await this.handleRedrawTimer();\r\n this.pollRedraw();\r\n }, this.demonPollTime);\r\n }\r\n\r\n startDemon() {\r\n this.pollRedraw();\r\n }\r\n renderTextGroup(gg: SmoTextGroup) {\r\n this.renderer.renderTextGroup(gg);\r\n }\r\n /**\r\n * Set the SVG viewport\r\n * @param reset whether to re-render the entire SVG DOM\r\n * @returns \r\n */\r\n setViewport() {\r\n if (!this.score || !this.renderer) {\r\n return;\r\n }\r\n this.renderer.setViewport();\r\n this.score!.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n if (measure.svg.logicalBox) {\r\n measure.svg.history = ['reset'];\r\n }\r\n });\r\n });\r\n }\r\n renderForPrintPromise(): Promise {\r\n $('body').addClass('print-render');\r\n const self = this;\r\n if (!this.score) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const layoutMgr = this.score!.layoutManager!;\r\n const layout = layoutMgr.getGlobalLayout();\r\n this._backupZoomScale = layout.zoomScale;\r\n layout.zoomScale = 1.0;\r\n layoutMgr.updateGlobalLayout(layout);\r\n this.setViewport();\r\n this.setRefresh();\r\n\r\n const promise = new Promise((resolve) => {\r\n const poll = () => {\r\n setTimeout(() => {\r\n if (!self.dirty && !self.renderer.backgroundRender) {\r\n // tracker.highlightSelection();\r\n $('body').removeClass('print-render');\r\n $('.vf-selection').remove();\r\n $('body').addClass('printing');\r\n $('.musicRelief').css('height', '');\r\n resolve();\r\n } else {\r\n poll();\r\n }\r\n }, 500);\r\n };\r\n poll();\r\n });\r\n return promise;\r\n }\r\n\r\n restoreLayoutAfterPrint() {\r\n const layout = this.score!.layoutManager!.getGlobalLayout();\r\n layout.zoomScale = this._backupZoomScale;\r\n this.score!.layoutManager!.updateGlobalLayout(layout);\r\n this.setViewport();\r\n this.setRefresh();\r\n }\r\n\r\n setPassState(st: number, location: string) {\r\n const oldState = this.passState;\r\n let msg = '';\r\n if (oldState !== st) {\r\n this.stateRepCount = 0;\r\n } else {\r\n this.stateRepCount += 1;\r\n }\r\n\r\n msg = location + ': passState ' + this.passState + '=>' + st;\r\n if (this.stateRepCount > 0) {\r\n msg += ' (' + this.stateRepCount + ')';\r\n }\r\n if (SuiRenderState.debugMask) {\r\n console.log(msg);\r\n }\r\n this.passState = st;\r\n }\r\n\r\n get score(): SmoScore | null {\r\n return this._score;\r\n }\r\n\r\n // used for debugging and drawing dots.\r\n dbgDrawDot(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean) {\r\n const context = this.renderer.getRenderer({ x, y });\r\n if (context) {\r\n context.getContext().beginPath();\r\n context.getContext().arc(x, y, radius, startAngle, endAngle, counterclockwise);\r\n context.getContext().closePath();\r\n context.getContext().fill(); \r\n }\r\n }\r\n set score(score: SmoScore | null) {\r\n if (score === null) {\r\n return;\r\n }\r\n /* if (this._score) {\r\n shouldReset = true;\r\n } */\r\n this.setPassState(SuiRenderState.passStates.initial, 'load score');\r\n const font = score.engravingFont;\r\n this.dirty = true;\r\n this._score = score;\r\n this.renderer.score = score;\r\n this.notifyFontChange();\r\n // if (shouldReset) {\r\n this.setViewport();\r\n if (this.measureMapper) {\r\n this.measureMapper.loadScore();\r\n }\r\n }\r\n\r\n // ### undo\r\n // Undo is handled by the render state machine, because the layout has to first\r\n // delete areas of the viewport that may have changed,\r\n // then create the modified score, then render the 'new' score.\r\n undo(undoBuffer: UndoBuffer, staffMap: Record): SmoScore {\r\n let op = 'setDirty';\r\n const buffer = undoBuffer.peek();\r\n // Unrender the modified music because the IDs may change and normal unrender won't work\r\n if (buffer) {\r\n const sel = buffer.selector;\r\n if (buffer.type === UndoBuffer.bufferTypes.MEASURE) { \r\n if (typeof(staffMap[sel.staff]) === 'number') {\r\n const mSelection = SmoSelection.measureSelection(this.score!, staffMap[sel.staff], sel.measure);\r\n if (mSelection !== null) {\r\n this.renderer.unrenderMeasure(mSelection.measure);\r\n }\r\n }\r\n } else if (buffer.type === UndoBuffer.bufferTypes.STAFF) {\r\n if (typeof(staffMap[sel.staff]) === 'number') {\r\n const sSelection = SmoSelection.measureSelection(this.score!, staffMap[sel.staff], 0);\r\n if (sSelection !== null) {\r\n this.renderer.unrenderStaff(sSelection.staff);\r\n }\r\n }\r\n op = 'setRefresh';\r\n } else {\r\n this.renderer.unrenderAll();\r\n op = 'setRefresh';\r\n }\r\n this._score = undoBuffer.undo(this._score!, staffMap, false);\r\n // Broken encapsulation - we need to know if we are 'undoing' an entire score\r\n // so we can change the score pointed to by the renderer.\r\n if (buffer.type === UndoBuffer.bufferTypes.SCORE) {\r\n this.renderer.score = this._score;\r\n }\r\n (this as any)[op]();\r\n }\r\n if (!this._score) {\r\n throw ('no score when undo');\r\n } \r\n return this._score;\r\n }\r\n\r\n\r\n unrenderColumn(measure: SmoMeasure) {\r\n this.score!.staves.forEach((staff) => {\r\n this.renderer.unrenderMeasure(staff.measures[measure.measureNumber.measureIndex]);\r\n });\r\n }\r\n\r\n // ### forceRender\r\n // For unit test applictions that want to render right-away\r\n forceRender() {\r\n this.setRefresh();\r\n this.render();\r\n }\r\n unrenderMeasure(measure: SmoMeasure) {\r\n this.renderer.unrenderMeasure(measure);\r\n }\r\n\r\n async renderScoreModifiers() {\r\n await this.renderer.renderScoreModifiers();\r\n }\r\n async render(): Promise {\r\n if (this._resetViewport) {\r\n this.setViewport();\r\n this._resetViewport = false;\r\n }\r\n try {\r\n if (SuiRenderState.passStates.replace === this.passState) {\r\n this.replaceMeasures();\r\n } else if (SuiRenderState.passStates.initial === this.passState) {\r\n if (this.renderer.backgroundRender) {\r\n return;\r\n }\r\n this.renderer.layout();\r\n this.renderer.drawPageLines();\r\n this.setPassState(SuiRenderState.passStates.clean, 'rs: complete render');\r\n }\r\n } catch (excp) {\r\n console.warn('exception in render: ' + excp);\r\n }\r\n this.dirty = false;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { StaffModifierBase } from '../../smo/data/staffModifiers';\r\nimport { VxMeasure } from '../vex/vxMeasure';\r\nimport { SuiMapper } from './mapper';\r\nimport { VxSystem } from '../vex/vxSystem';\r\nimport { SvgHelpers, StrokeInfo } from './svgHelpers';\r\nimport { SuiPiano } from './piano';\r\nimport { SuiLayoutFormatter, RenderedPage } from './formatter';\r\nimport { SmoBeamer } from '../../smo/xform/beamers';\r\nimport { SuiTextBlock } from './textRender';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SourceSansProFont } from '../../styles/font_metrics/ssp-sans-metrics';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SvgPageMap, SvgPage } from './svgPageMap';\r\nimport { VexFlow } from '../../common/vex';\r\nimport { Note } from '../../common/vex';\r\n\r\ndeclare var $: any;\r\nconst VF = VexFlow;\r\n/**\r\n * a renderer creates the SVG render context for vexflow from the given element. Then it\r\n * renders the initial score.\r\n * @category SuiRenderParams\r\n */\r\n export interface ScoreRenderParams {\r\n elementId: any,\r\n score: SmoScore,\r\n config: SmoRenderConfiguration,\r\n undoBuffer: UndoBuffer\r\n}\r\n\r\nexport interface MapParameters {\r\n vxSystem: VxSystem, measuresToBox: SmoMeasure[], modifiersToBox: StaffModifierBase[], printing: boolean\r\n}\r\n/**\r\n * This module renders the entire score. It calculates the layout first based on the\r\n * computed dimensions.\r\n * @category SuiRender\r\n**/\r\nexport class SuiScoreRender {\r\n constructor(params: ScoreRenderParams) { \r\n this.elementId = params.elementId;\r\n this.score = params.score;\r\n this.vexContainers = new SvgPageMap(this.score.layoutManager!.globalLayout, this.elementId, this.score.layoutManager!.pageLayouts);\r\n this.setViewport();\r\n }\r\n elementId: any;\r\n startRenderTime: number = 0;\r\n formatter: SuiLayoutFormatter | null = null;\r\n vexContainers: SvgPageMap;\r\n // vexRenderer: any = null;\r\n score: SmoScore | null = null;\r\n measureMapper: SuiMapper | null = null;\r\n measuresToMap: MapParameters[] = [];\r\n viewportChanged: boolean = false;\r\n renderTime: number = 0;\r\n backgroundRender: boolean = false;\r\n static debugMask: number = 0;\r\n renderedPages: Record = {};\r\n _autoAdjustRenderTime: boolean = true;\r\n lyricsToOffset: Map = new Map();\r\n renderingPage: number = -1; \r\n get autoAdjustRenderTime() {\r\n return this._autoAdjustRenderTime;\r\n }\r\n set autoAdjustRenderTime(value: boolean) {\r\n this._autoAdjustRenderTime = value;\r\n }\r\n getRenderer(box: SvgBox | SvgPoint): SvgPage | null {\r\n return this.vexContainers.getRenderer(box);\r\n }\r\n renderTextGroup(gg: SmoTextGroup) {\r\n let ix = 0;\r\n let jj = 0;\r\n if (gg.skipRender || this.score === null || this.measureMapper === null) {\r\n return;\r\n }\r\n gg.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n gg.elements = [];\r\n const layoutManager = this.score!.layoutManager!;\r\n const scaledScoreLayout = layoutManager.getScaledPageLayout(0);\r\n // If this text hasn't been rendered before, estimate the logical box.\r\n const dummyContainer = this.vexContainers.getRendererFromModifier(gg);\r\n if (dummyContainer && !gg.logicalBox) {\r\n const dummyBlock = SuiTextBlock.fromTextGroup(gg, dummyContainer, this.vexContainers, this.measureMapper!.scroller);\r\n gg.logicalBox = dummyBlock.getLogicalBox();\r\n }\r\n\r\n // If this is a per-page score text, get a text group copy for each page.\r\n // else the array contains the original.\r\n const groupAr = SmoTextGroup.getPagedTextGroups(gg, this.score!.layoutManager!.pageLayouts.length, scaledScoreLayout.pageHeight);\r\n groupAr.forEach((newGroup) => {\r\n let container: SvgPage = this.vexContainers.getRendererFromModifier(newGroup);\r\n // If this text is attached to the measure, base the block location on the rendered measure location.\r\n if (newGroup.attachToSelector) {\r\n // If this text is attached to a staff that is not visible, don't draw it.\r\n const mappedStaff = this.score!.staves.find((staff) => staff.staffId === newGroup.selector!.staff);\r\n if (!mappedStaff) {\r\n return;\r\n }\r\n // Indicate the new map;\r\n // newGroup.selector.staff = mappedStaff.staffId; \r\n const mmSel: SmoSelection | null = SmoSelection.measureSelection(this.score!, mappedStaff.staffId, newGroup.selector!.measure);\r\n if (mmSel) {\r\n const mm = mmSel.measure;\r\n if (mm.svg.logicalBox.width > 0) {\r\n const xoff = mm.svg.logicalBox.x + newGroup.musicXOffset;\r\n const yoff = mm.svg.logicalBox.y + newGroup.musicYOffset;\r\n newGroup.textBlocks[0].text.x = xoff;\r\n newGroup.textBlocks[0].text.y = yoff;\r\n }\r\n }\r\n }\r\n if (container) {\r\n const block = SuiTextBlock.fromTextGroup(newGroup, container, this.vexContainers, this.measureMapper!.scroller);\r\n block.render();\r\n if (block.currentBlock?.text.element) {\r\n gg.elements.push(block.currentBlock?.text.element);\r\n }\r\n // For the first one we render, use that as the bounding box for all the text, for\r\n // purposes of mapper/tracker\r\n if (ix === 0) {\r\n gg.logicalBox = JSON.parse(JSON.stringify(block.logicalBox));\r\n // map all the child scoreText objects, too.\r\n for (jj = 0; jj < gg.textBlocks.length; ++jj) {\r\n gg.textBlocks[jj].text.logicalBox = JSON.parse(JSON.stringify(block.inlineBlocks[jj].text.logicalBox));\r\n }\r\n }\r\n ix += 1;\r\n }\r\n });\r\n }\r\n \r\n // ### unrenderAll\r\n // ### Description:\r\n // Delete all the svg elements associated with the score.\r\n unrenderAll() {\r\n if (!this.score) {\r\n return;\r\n }\r\n this.score.staves.forEach((staff) => {\r\n this.unrenderStaff(staff);\r\n });\r\n // $(this.context.svg).find('g.lineBracket').remove();\r\n }\r\n // ### unrenderStaff\r\n // ### Description:\r\n // See unrenderMeasure. Like that, but with a staff.\r\n unrenderStaff(staff: SmoSystemStaff) {\r\n staff.measures.forEach((measure) => {\r\n this.unrenderMeasure(measure);\r\n });\r\n staff.renderableModifiers.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.element.remove();\r\n modifier.element = null;\r\n }\r\n });\r\n }\r\n clearRenderedPage(pg: number) {\r\n if (this.renderedPages[pg]) {\r\n this.renderedPages[pg] = null;\r\n }\r\n }\r\n // ### _setViewport\r\n // Create (or recrate) the svg viewport, considering the dimensions of the score.\r\n setViewport() {\r\n if (this.score === null) {\r\n return;\r\n }\r\n const layoutManager = this.score!.layoutManager!;\r\n // All pages have same width/height, so use that\r\n const layout = layoutManager.getGlobalLayout();\r\n this.vexContainers.updateLayout(layout, layoutManager.pageLayouts);\r\n this.renderedPages = {};\r\n this.viewportChanged = true;\r\n if (this.measureMapper) {\r\n this.measureMapper.scroller.scrollAbsolute(0, 0);\r\n }\r\n if (this.measureMapper) {\r\n this.measureMapper.scroller.updateViewport();\r\n }\r\n // this.context.setFont(this.font.typeface, this.font.pointSize, \"\").setBackgroundFillStyle(this.font.fillStyle);\r\n if (SuiScoreRender.debugMask) {\r\n console.log('layout setViewport: pstate initial');\r\n }\r\n }\r\n\r\n async renderScoreModifiers(): Promise {\r\n return new Promise((resolve) => {\r\n // remove existing modifiers, and also remove parent group for 'extra'\r\n // groups associated with pagination (once per page etc)\r\n for (var i = 0; i < this.score!.textGroups.length; ++i) {\r\n const tg = this.score!.textGroups[i];\r\n tg.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n tg.elements = [];\r\n }\r\n // group.classList.add('all-score-text');\r\n for (var i = 0; i < this.score!.textGroups.length; ++i) {\r\n const tg = this.score!.textGroups[i];\r\n this.renderTextGroup(tg);\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n /**\r\n * for music we've just rendered, get the bounding boxes. We defer this step so we don't force\r\n * a reflow, which can slow rendering.\r\n * @param vxSystem \r\n * @param measures \r\n * @param modifiers \r\n * @param printing \r\n */\r\n measureRenderedElements(vxSystem: VxSystem, measures: SmoMeasure[], modifiers: StaffModifierBase[], printing: boolean) {\r\n const pageContext = vxSystem.context;\r\n measures.forEach((smoMeasure) => {\r\n const element = smoMeasure.svg.element;\r\n if (element) { \r\n smoMeasure.setBox(pageContext.offsetBbox(element), 'vxMeasure bounding box');\r\n }\r\n const vxMeasure = vxSystem.getVxMeasure(smoMeasure);\r\n if (vxMeasure) {\r\n vxMeasure.modifiersToBox.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.logicalBox = pageContext.offsetBbox(modifier.element);\r\n }\r\n });\r\n }\r\n // unit test codes don't have tracker.\r\n if (this.measureMapper) {\r\n const tmpStaff: SmoSystemStaff | undefined = this.score!.staves.find((ss) => ss.staffId === smoMeasure.measureNumber.staffId);\r\n if (tmpStaff) {\r\n this.measureMapper.mapMeasure(tmpStaff, smoMeasure, printing);\r\n }\r\n } \r\n });\r\n modifiers.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.logicalBox = pageContext.offsetBbox(modifier.element);\r\n }\r\n });\r\n }\r\n _renderSystem(lineIx: number, printing: boolean) {\r\n if (this.score === null || this.formatter === null) {\r\n return;\r\n }\r\n const measuresToBox: SmoMeasure[] = [];\r\n const modifiersToBox: StaffModifierBase[] = [];\r\n const columns: Record = this.formatter.systems[lineIx].systems;\r\n\r\n // If this page hasn't changed since rendered\r\n const pageIndex = columns[0][0].svg.pageIndex;\r\n \r\n if (this.renderingPage !== pageIndex && this.renderedPages[pageIndex] && !printing) {\r\n if (SuiScoreRender.debugMask) {\r\n console.log(`skipping render on page ${pageIndex}`);\r\n }\r\n return;\r\n }\r\n const context = this.vexContainers.getRendererForPage(pageIndex);\r\n if (this.renderingPage !== pageIndex) {\r\n context.clearMap();\r\n this.renderingPage = pageIndex;\r\n }\r\n const vxSystem: VxSystem = new VxSystem(context, 0, lineIx, this.score);\r\n const colKeys = Object.keys(columns);\r\n colKeys.forEach((colKey) => {\r\n columns[parseInt(colKey, 10)].forEach((measure: SmoMeasure) => {\r\n if (this.measureMapper !== null) {\r\n const modId = 'mod-' + measure.measureNumber.staffId + '-' + measure.measureNumber.measureIndex;\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n vxSystem.renderMeasure(measure, printing);\r\n const pageIndex = measure.svg.pageIndex;\r\n const renderMeasures = this.renderedPages[pageIndex];\r\n if (!renderMeasures) {\r\n this.renderedPages[pageIndex] = {\r\n startMeasure: measure.measureNumber.measureIndex,\r\n endMeasure: measure.measureNumber.measureIndex\r\n }\r\n } else {\r\n renderMeasures.endMeasure = measure.measureNumber.measureIndex;\r\n }\r\n measuresToBox.push(measure);\r\n if (!printing && !measure.format.isDefault) {\r\n const at: any[] = [];\r\n at.push({ y: measure.svg.logicalBox.y - 5 });\r\n at.push({ x: measure.svg.logicalBox.x + 25 });\r\n at.push({ 'font-family': SourceSansProFont.fontFamily });\r\n at.push({ 'font-size': '12pt' });\r\n SvgHelpers.placeSvgText(context.svg, at, 'measure-format', '*');\r\n }\r\n }\r\n });\r\n });\r\n this.score.staves.forEach((stf) => {\r\n this.renderModifiers(stf, vxSystem).forEach((modifier) => {\r\n modifiersToBox.push(modifier);\r\n });\r\n });\r\n if (this.measureMapper !== null) {\r\n vxSystem.renderEndings(this.measureMapper.scroller);\r\n }\r\n this.measuresToMap.push({vxSystem, measuresToBox, modifiersToBox, printing });\r\n // this.measureRenderedElements(vxSystem, measuresToBox, modifiersToBox, printing);\r\n\r\n const timestamp = new Date().valueOf();\r\n if (!this.lyricsToOffset.has(vxSystem.lineIndex)) {\r\n this.lyricsToOffset.set(vxSystem.lineIndex, vxSystem);\r\n }\r\n // vxSystem.updateLyricOffsets();\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.POST_RENDER, new Date().valueOf() - timestamp);\r\n }\r\n _renderNextSystemPromise(systemIx: number, keys: number[], printing: boolean) {\r\n return new Promise((resolve: any) => {\r\n // const sleepDate = new Date().valueOf();\r\n this._renderSystem(keys[systemIx], printing);\r\n requestAnimationFrame(() => resolve());\r\n });\r\n }\r\n\r\n async _renderNextSystem(lineIx: number, keys: number[], printing: boolean) {\r\n createTopDomContainer('#renderProgress', 'progress');\r\n if (lineIx < keys.length) {\r\n const progress = Math.round((100 * lineIx) / keys.length);\r\n $('#renderProgress').attr('max', 100);\r\n $('#renderProgress').val(progress);\r\n await this._renderNextSystemPromise(lineIx,keys, printing);\r\n lineIx++;\r\n await this._renderNextSystem(lineIx, keys, printing);\r\n } else {\r\n await this.renderScoreModifiers();\r\n this.numberMeasures();\r\n this.measuresToMap.forEach((mm) => {\r\n this.measureRenderedElements(mm.vxSystem, mm.measuresToBox, mm.modifiersToBox, mm.printing);\r\n });\r\n this.lyricsToOffset.forEach((vv) => {\r\n vv.updateLyricOffsets();\r\n });\r\n this.measuresToMap = [];\r\n this.lyricsToOffset = new Map();\r\n // We pro-rate the background render timer on how long it takes\r\n // to actually render the score, so we are not thrashing on a large\r\n // score.\r\n if (this._autoAdjustRenderTime) {\r\n this.renderTime = new Date().valueOf() - this.startRenderTime;\r\n }\r\n $('body').removeClass('show-render-progress');\r\n // indicate the display is 'clean' and up-to-date with the score\r\n $('body').removeClass('refresh-1');\r\n if (this.measureMapper !== null) {\r\n this.measureMapper.updateMap();\r\n if (layoutDebug.mask & layoutDebug.values['artifactMap']) {\r\n this.score?.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n mm.voices.forEach((voice: SmoVoice) => {\r\n voice.notes.forEach((note) => {\r\n if (note.logicalBox) {\r\n const page = this.vexContainers.getRendererFromPoint(note.logicalBox);\r\n if (page) {\r\n const noteBox = SvgHelpers.smoBox(note.logicalBox);\r\n noteBox.y -= page.box.y;\r\n SvgHelpers.debugBox(page.svg, noteBox, 'measure-place-dbg', 0);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }\r\n }\r\n this.backgroundRender = false;\r\n }\r\n }\r\n \r\n // ### unrenderMeasure\r\n // All SVG elements are associated with a logical SMO element. We need to erase any SVG element before we change a SMO\r\n // element in such a way that some of the logical elements go away (e.g. when deleting a measure).\r\n unrenderMeasure(measure: SmoMeasure) {\r\n if (!measure) {\r\n return;\r\n }\r\n const modId = 'mod-' + measure.measureNumber.staffId + '-' + measure.measureNumber.measureIndex;\r\n const context = this.vexContainers.getRenderer(measure.svg.logicalBox);\r\n if (!context) {\r\n return;\r\n }\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n\r\n if (measure.svg.element) {\r\n measure.svg.element.remove();\r\n measure.svg.element = null;\r\n if (measure.svg.tabElement) {\r\n measure.svg.tabElement.remove();\r\n measure.svg.tabElement = undefined;\r\n }\r\n }\r\n const renderPage = this.renderedPages[measure.svg.pageIndex];\r\n if (renderPage) {\r\n this.renderedPages[measure.svg.pageIndex] = null;\r\n }\r\n measure.setYTop(0, 'unrender');\r\n }\r\n // ### _renderModifiers\r\n // ### Description:\r\n // Render staff modifiers (modifiers straddle more than one measure, like a slur). Handle cases where the destination\r\n // is on a different system due to wrapping.\r\n renderModifiers(staff: SmoSystemStaff, system: VxSystem): StaffModifierBase[] {\r\n let nextNote: SmoSelection | null = null;\r\n let lastNote: SmoSelection | null = null;\r\n let testNote: Note | null = null;\r\n let vxStart: Note | null = null;\r\n let vxEnd: Note | null = null;\r\n const modifiersToBox: StaffModifierBase[] = [];\r\n const removedModifiers: StaffModifierBase[] = [];\r\n if (this.score === null || this.measureMapper === null) {\r\n return [];\r\n }\r\n const renderedId: Record = {};\r\n staff.renderableModifiers.forEach((modifier) => {\r\n const startNote = SmoSelection.noteSelection(this.score!,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n const endNote = SmoSelection.noteSelection(this.score!,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n if (!startNote || !endNote) {\r\n // If the modifier doesn't have score endpoints, delete it from the score\r\n removedModifiers.push(modifier);\r\n return;\r\n }\r\n if (startNote.note !== null) {\r\n vxStart = system.getVxNote(startNote.note);\r\n }\r\n if (endNote.note !== null) {\r\n vxEnd = system.getVxNote(endNote.note);\r\n }\r\n\r\n // If the modifier goes to the next staff, draw what part of it we can on this staff.\r\n if (vxStart && !vxEnd) {\r\n nextNote = SmoSelection.nextNoteSelection(this.score!,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n if (nextNote === null) {\r\n console.warn('bad selector ' + JSON.stringify(modifier.startSelector, null, ' '));\r\n } else {\r\n if (nextNote.note !== null) {\r\n testNote = system.getVxNote(nextNote.note);\r\n }\r\n while (testNote) {\r\n vxEnd = testNote;\r\n nextNote = SmoSelection.nextNoteSelection(this.score!,\r\n nextNote.selector.staff, nextNote.selector.measure, nextNote.selector.voice, nextNote.selector.tick);\r\n if (!nextNote) {\r\n break;\r\n }\r\n if (nextNote.note !== null) {\r\n testNote = system.getVxNote(nextNote.note);\r\n } else {\r\n testNote = null;\r\n }\r\n }\r\n }\r\n }\r\n if (vxEnd && !vxStart) {\r\n lastNote = SmoSelection.lastNoteSelection(this.score!,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n if (lastNote !== null && lastNote.note !== null) {\r\n testNote = system.getVxNote(lastNote.note);\r\n while (testNote !== null) {\r\n vxStart = testNote;\r\n lastNote = SmoSelection.lastNoteSelection(this.score!,\r\n lastNote.selector.staff, lastNote.selector.measure, lastNote.selector.voice, lastNote.selector.tick);\r\n if (!lastNote) {\r\n break;\r\n }\r\n if (lastNote.note !== null) {\r\n testNote = system.getVxNote(lastNote.note);\r\n } else {\r\n testNote = null;\r\n }\r\n }\r\n }\r\n }\r\n if (!vxStart && !vxEnd || renderedId[modifier.attrs.id]) {\r\n return;\r\n }\r\n renderedId[modifier.attrs.id] = true;\r\n system.renderModifier(this.measureMapper!.scroller, modifier, vxStart, vxEnd, startNote, endNote);\r\n modifiersToBox.push(modifier);\r\n });\r\n // Silently remove modifiers from the score if the endpoints no longer exist\r\n removedModifiers.forEach((mod) => {\r\n staff.removeStaffModifier(mod);\r\n });\r\n return modifiersToBox;\r\n }\r\n\r\n drawPageLines() {\r\n let i = 0;\r\n const printing = $('body').hasClass('print-render');\r\n const layoutMgr = this.score!.layoutManager;\r\n if (printing || !layoutMgr) {\r\n return;\r\n }\r\n for (i = 1; i < layoutMgr.pageLayouts.length; ++i) {\r\n const context = this.vexContainers.getRendererForPage(i - 1);\r\n if (context) {\r\n $(context.svg).find('.pageLine').remove();\r\n const scaledPage = layoutMgr.getScaledPageLayout(i);\r\n const y = scaledPage.pageHeight * i - context.box.y;\r\n SvgHelpers.line(context.svg, 0, y, scaledPage.pageWidth, y,\r\n { strokeName: 'line', stroke: '#321', strokeWidth: '2', strokeDasharray: '4,1', fill: 'none', opacity: 1.0 }, 'pageLine');\r\n \r\n }\r\n }\r\n }\r\n replaceSelection(staffMap: Record, change: SmoSelection) {\r\n let system: VxSystem | null = null;\r\n if (this.renderedPages[change.measure.svg.pageIndex]) {\r\n this.renderedPages[change.measure.svg.pageIndex] = null;\r\n }\r\n SmoBeamer.applyBeams(change.measure);\r\n // Defer modifier update until all selected measures are drawn.\r\n if (!staffMap[change.staff.staffId]) {\r\n const context = this.vexContainers.getRenderer(change.measure.svg.logicalBox);\r\n if (context) {\r\n system = new VxSystem(context, change.measure.staffY, change.measure.svg.lineIndex, this.score!);\r\n staffMap[change.staff.staffId] = { system, staff: change.staff }; \r\n }\r\n } else {\r\n system = staffMap[change.staff.staffId].system;\r\n }\r\n const selections = SmoSelection.measuresInColumn(this.score!, change.measure.measureNumber.measureIndex);\r\n const measuresToMeasure: SmoMeasure[] = [];\r\n selections.forEach((selection) => {\r\n if (system !== null && this.measureMapper !== null) {\r\n this.unrenderMeasure(selection.measure);\r\n system.renderMeasure(selection.measure, false);\r\n measuresToMeasure.push(selection.measure);\r\n }\r\n });\r\n if (system) {\r\n this.measureRenderedElements(system, measuresToMeasure, [], false);\r\n }\r\n }\r\n\r\n async renderAllMeasures(lines: number[]) {\r\n if (!this.score) {\r\n return;\r\n }\r\n const printing = $('body').hasClass('print-render');\r\n $('.measure-format').remove();\r\n \r\n if (!printing) {\r\n $('body').addClass('show-render-progress');\r\n const isShowing = SuiPiano.isShowing;\r\n if (this.score.preferences.showPiano && !isShowing) {\r\n SuiPiano.showPiano();\r\n this.measureMapper!.scroller.updateViewport();\r\n } else if (isShowing && !this.score.preferences.showPiano) {\r\n SuiPiano.hidePiano();\r\n this.measureMapper!.scroller.updateViewport();\r\n }\r\n }\r\n this.backgroundRender = true;\r\n this.startRenderTime = new Date().valueOf();\r\n this.renderingPage = -1;\r\n this.vexContainers.updateContainerOffset(this.measureMapper!.scroller.scrollState);\r\n await this._renderNextSystem(0, lines, printing);\r\n }\r\n // Number the measures at the first measure in each system.\r\n numberMeasures() {\r\n const printing: boolean = $('body').hasClass('print-render');\r\n const staff = this.score!.staves[0];\r\n const measures = staff.measures.filter((measure) => measure.measureNumber.systemIndex === 0);\r\n $('.measure-number').remove();\r\n\r\n measures.forEach((measure) => {\r\n const context = this.vexContainers.getRenderer(measure.svg.logicalBox);\r\n if (measure.measureNumber.localIndex > 0 && measure.measureNumber.systemIndex === 0 && measure.svg.logicalBox && context) {\r\n const numAr: any[] = [];\r\n const modBox = context.offsetSvgPoint(measure.svg.logicalBox);\r\n numAr.push({ y: modBox.y - 10 });\r\n numAr.push({ x: modBox.x });\r\n numAr.push({ 'font-family': SourceSansProFont.fontFamily });\r\n numAr.push({ 'font-size': '10pt' });\r\n SvgHelpers.placeSvgText(context.svg, numAr, 'measure-number', (measure.measureNumber.localIndex + 1).toString());\r\n\r\n // Show line-feed symbol\r\n if (measure.format.systemBreak && !printing) {\r\n const starAr: any[] = [];\r\n const symbol = '\\u21b0';\r\n starAr.push({ y: modBox.y - 5 });\r\n starAr.push({ x: modBox.x + 25 });\r\n starAr.push({ 'font-family': SourceSansProFont.fontFamily });\r\n starAr.push({ 'font-size': '12pt' });\r\n SvgHelpers.placeSvgText(context.svg, starAr, 'measure-format', symbol);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This calculates the position of all the elements in the score, then renders the score\r\n * @returns \r\n */\r\n async layout() {\r\n if (!this.score) {\r\n return;\r\n }\r\n const score = this.score;\r\n $('head title').text(this.score.scoreInfo.name);\r\n const formatter = new SuiLayoutFormatter(score, this.vexContainers, this.renderedPages);\r\n Object.keys(this.renderedPages).forEach((key) => {\r\n this.vexContainers.clearModifiersForPage(parseInt(key));\r\n });\r\n const startPageCount = this.score.layoutManager!.pageLayouts.length;\r\n this.formatter = formatter;\r\n formatter.layout(); \r\n if (this.formatter.trimPages(startPageCount)) {\r\n this.setViewport();\r\n }\r\n this.measuresToMap = [];\r\n this.lyricsToOffset = new Map();\r\n await this.renderAllMeasures(formatter.lines);\r\n } \r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoGraceNote } from '../../smo/data/noteModifiers';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { StaffModifierBase } from '../../smo/data/staffModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { UndoBuffer, copyUndo } from '../../smo/xform/undo';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SuiScroller } from './scroller';\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SuiTracker } from './tracker';\r\nimport { createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { SuiRenderState, scoreChangeEvent } from './renderState';\r\nimport { ScoreRenderParams } from './scoreRender';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { SuiAudioPlayer } from '../audio/player';\r\nimport { SuiAudioAnimationParams } from '../audio/musicCursor';\r\nimport { SmoTempoText } from '../../smo/data/measureModifiers';\r\nimport { TimeSignature } from '../../smo/data/measureModifiers';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Indicates a stave is/is not displayed in the score\r\n * @category SuiRender\r\n */\r\nexport interface ViewMapEntry {\r\n show: boolean;\r\n}\r\n\r\n/**\r\n * Base class for all operations on the rendered score. The base class handles the following:\r\n * 1. Undo and recording actions for the operation\r\n * 2. Maintain/change which staves in the score are displayed (staff map)\r\n * 3. Mapping between the displayed score and the data representation\r\n * @category SuiRender\r\n */\r\nexport abstract class SuiScoreView {\r\n static Instance: SuiScoreView | null = null;\r\n score: SmoScore; // The score that is displayed\r\n storeScore: SmoScore; // the full score, including invisible staves\r\n staffMap: number[]; // mapping the 2 things above\r\n storeUndo: UndoBuffer; // undo buffer for operations to above\r\n tracker: SuiTracker; // UI selections\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n pasteBuffer: PasteBuffer;\r\n storePaste: PasteBuffer;\r\n config: SmoRenderConfiguration;\r\n audioAnimation: SuiAudioAnimationParams;\r\n constructor(config: SmoRenderConfiguration, svgContainer: HTMLElement, score: SmoScore, scrollSelector: HTMLElement, undoBuffer: UndoBuffer) {\r\n this.score = score;\r\n const renderParams: ScoreRenderParams = {\r\n elementId: svgContainer,\r\n score,\r\n config,\r\n undoBuffer\r\n };\r\n this.audioAnimation = config.audioAnimation;\r\n this.renderer = new SuiRenderState(renderParams);\r\n this.config = config;\r\n const scoreJson = score.serialize({ skipStaves: false, useDictionary: false });\r\n this.scroller = new SuiScroller(scrollSelector, this.renderer.renderer.vexContainers);\r\n this.pasteBuffer = new PasteBuffer();\r\n this.storePaste = new PasteBuffer();\r\n this.tracker = new SuiTracker(this.renderer, this.scroller, this.pasteBuffer);\r\n this.renderer.setMeasureMapper(this.tracker);\r\n\r\n this.storeScore = SmoScore.deserialize(JSON.stringify(scoreJson));\r\n this.synchronizeTextGroups()\r\n this.storeUndo = new UndoBuffer();\r\n this.staffMap = this.defaultStaffMap;\r\n SuiScoreView.Instance = this; // for debugging\r\n this.setMappedStaffIds();\r\n createTopDomContainer('.saveLink'); // for file upload\r\n }\r\n synchronizeTextGroups() {\r\n // Synchronize the score text IDs so cut/paste/undo works transparently\r\n this.score.textGroups.forEach((tg, ix) => {\r\n if (this.storeScore.textGroups.length > ix) {\r\n this.storeScore.textGroups[ix].attrs.id = tg.attrs.id;\r\n }\r\n });\r\n }\r\n /**\r\n * Await on the full update of the score\r\n * @returns \r\n */\r\n renderPromise(): Promise {\r\n return this.renderer.renderPromise();\r\n }\r\n /**\r\n * Await on the partial update of the score in the view\r\n * @returns \r\n */\r\n updatePromise(): Promise {\r\n return this.renderer.updatePromise();\r\n }\r\n async awaitRender(): Promise {\r\n this.renderer.rerenderAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * await on the full update of the score, also resetting the viewport (to reflect layout changes)\r\n * @returns \r\n */\r\n refreshViewport(): Promise {\r\n this.renderer.preserveScroll();\r\n this.renderer.setViewport();\r\n this.renderer.setRefresh();\r\n return this.renderer.renderPromise();\r\n }\r\n handleScrollEvent(scrollLeft: number, scrollTop: number) {\r\n this.tracker.scroller.handleScroll(scrollLeft, scrollTop);\r\n }\r\n getPartMap(): { keys: number[], partMap: Record } {\r\n let keepNext = false;\r\n let partCount = 0;\r\n let partMap: Record = {};\r\n const keys: number[] = [];\r\n this.storeScore.staves.forEach((staff) => {\r\n const partInfo = staff.partInfo;\r\n partInfo.associatedStaff = staff.staffId;\r\n if (!keepNext) {\r\n partMap[partCount] = partInfo;\r\n keys.push(partCount);\r\n partCount += 1;\r\n if (partInfo.stavesAfter > 0) {\r\n keepNext = true;\r\n }\r\n } else {\r\n keepNext = false;\r\n }\r\n });\r\n return { keys, partMap };\r\n }\r\n /**\r\n * This is used in some Smoosic demos and pens.\r\n * @param action any action, but most usefully a SuiScoreView method\r\n * @param repetition number of times to repeat, waiting on render promise between\r\n * if not specified, defaults to 1\r\n * @returns promise, resolved action has been completed and score is updated.\r\n */\r\n waitableAction(action: () => void, repetition?: number): Promise {\r\n const rep = repetition ?? 1;\r\n const self = this;\r\n const promise = new Promise((resolve: any) => {\r\n const fc = async (count: number) => {\r\n if (count > 0) {\r\n action();\r\n await self.renderer.updatePromise();\r\n fc(count - 1);\r\n } else {\r\n resolve();\r\n }\r\n };\r\n fc(rep);\r\n });\r\n return promise;\r\n }\r\n\r\n /**\r\n * The plural form of _getEquivalentSelection\r\n * @param selections \r\n * @returns \r\n */\r\n _getEquivalentSelections(selections: SmoSelection[]): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n selections.forEach((selection) => {\r\n const sel = this._getEquivalentSelection(selection);\r\n if (sel !== null) {\r\n rv.push(sel);\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * A staff modifier has changed, create undo operations for the measures affected\r\n * @param label \r\n * @param staffModifier \r\n * @param subtype \r\n */\r\n _undoStaffModifier(label: string, staffModifier: StaffModifierBase, subtype: number) {\r\n const copy = StaffModifierBase.deserialize(staffModifier.serialize());\r\n copy.startSelector = this._getEquivalentSelector(copy.startSelector);\r\n copy.endSelector = this._getEquivalentSelector(copy.endSelector);\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.STAFF_MODIFIER, SmoSelector.default,\r\n copy.serialize(), subtype);\r\n }\r\n /** \r\n * Return the index of the page that is in the center of the client screen.\r\n */\r\n getFocusedPage(): number {\r\n if (this.score.layoutManager === undefined) {\r\n return 0;\r\n }\r\n const scrollAvg = this.tracker.scroller.netScroll.y + (this.tracker.scroller.viewport.height / 2);\r\n const midY = scrollAvg;\r\n const layoutManager = this.score.layoutManager.getGlobalLayout();\r\n const lh = layoutManager.pageHeight / layoutManager.svgScale;\r\n const lw = layoutManager.pageWidth / layoutManager.svgScale;\r\n const pt = this.renderer.pageMap.svgToClient(SvgHelpers.smoBox({ x: lw, y: lh }));\r\n return Math.round(midY / pt.y);\r\n }\r\n /**\r\n * Create a rectangle undo, like a multiple columns but not necessarily the whole\r\n * score.\r\n */\r\n _undoColumn(label: string, measureIndex: number) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.COLUMN, SmoSelector.default,\r\n { score: this.storeScore, measureIndex }, UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n /**\r\n * Score preferences don't affect the display, but they do have an undo\r\n * @param label \r\n */\r\n _undoScorePreferences(label: string) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.SCORE_ATTRIBUTES, SmoSelector.default, this.storeScore, UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n \r\n /**\r\n * Add to the undo buffer the current set of measures selected.\r\n * @param label \r\n * @returns \r\n */\r\n _undoTrackerMeasureSelections(label: string): SmoSelection[] {\r\n const measureSelections = SmoSelection.getMeasureList(this.tracker.selections);\r\n measureSelections.forEach((measureSelection) => {\r\n const equiv = this._getEquivalentSelection(measureSelection);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n });\r\n return measureSelections;\r\n }\r\n /**\r\n * operation that only affects the first selection. Setup undo for the measure\r\n */\r\n _undoFirstMeasureSelection(label: string): SmoSelection {\r\n const sel = this.tracker.selections[0];\r\n const equiv = this._getEquivalentSelection(sel);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n return sel;\r\n }\r\n /**\r\n * Add the selection to the undo buffer\r\n * @param label \r\n * @param selection \r\n */\r\n _undoSelection(label: string, selection: SmoSelection) {\r\n const equiv = this._getEquivalentSelection(selection);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label,\r\n UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n }\r\n /**\r\n * Add multiple selections to the undo buffer as a group\r\n * @param label \r\n * @param selections \r\n */\r\n _undoSelections(label: string, selections: SmoSelection[]) {\r\n this.storeUndo.grouping = true;\r\n selections.forEach((selection) => {\r\n this._undoSelection(label, selection);\r\n });\r\n this.storeUndo.grouping = false;\r\n }\r\n\r\n /** \r\n * Update renderer for measures that have changed\r\n */\r\n _renderChangedMeasures(measureSelections: SmoSelection[]) {\r\n if (!Array.isArray(measureSelections)) {\r\n measureSelections = [measureSelections];\r\n }\r\n measureSelections.forEach((measureSelection) => {\r\n this.renderer.addToReplaceQueue(measureSelection);\r\n });\r\n }\r\n /**\r\n * Update renderer for some columns\r\n * @param fromSelector \r\n * @param toSelector \r\n */\r\n _renderRectangle(fromSelector: SmoSelector, toSelector: SmoSelector) {\r\n this._getRectangleSelections(fromSelector, toSelector).forEach((s) => {\r\n this.renderer.addToReplaceQueue(s);\r\n });\r\n }\r\n\r\n /**\r\n * Setup undo for operation that affects the whole score\r\n * @param label \r\n */\r\n _undoScore(label: string) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.SCORE, SmoSelector.default, this.storeScore,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n /**\r\n * Get the selector from this.storeScore that maps to the displayed selector from this.score\r\n * @param selector \r\n * @returns \r\n */\r\n _getEquivalentSelector(selector: SmoSelector) {\r\n const rv = JSON.parse(JSON.stringify(selector));\r\n rv.staff = this.staffMap[selector.staff];\r\n return rv;\r\n }\r\n /**\r\n * Get the equivalent staff id from this.storeScore that maps to the displayed selector from this.score\r\n * @param staffId \r\n * @returns \r\n */\r\n _getEquivalentStaff(staffId: number) {\r\n return this.staffMap[staffId];\r\n }\r\n /**\r\n * Get the equivalent selection from this.storeScore that maps to the displayed selection from this.score\r\n * @param selection \r\n * @returns \r\n */\r\n _getEquivalentSelection(selection: SmoSelection): SmoSelection | null {\r\n try {\r\n if (typeof (selection.selector.tick) === 'undefined') {\r\n return SmoSelection.measureSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure);\r\n }\r\n if (typeof (selection.selector.pitches) === 'undefined') {\r\n return SmoSelection.noteSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice,\r\n selection.selector.tick);\r\n }\r\n return SmoSelection.pitchSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice,\r\n selection.selector.tick, selection.selector.pitches);\r\n } catch (ex) {\r\n console.warn(ex);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get the equivalent selection from this.storeScore that maps to the displayed selection from this.score\r\n * @param selection \r\n * @returns \r\n */\r\n _getEquivalentGraceNote(selection: SmoSelection, gn: SmoGraceNote): SmoGraceNote {\r\n if (selection.note !== null) {\r\n const rv = selection.note.getGraceNotes().find((gg) => gg.attrs.id === gn.attrs.id);\r\n if (rv) {\r\n return rv;\r\n }\r\n }\r\n return gn;\r\n }\r\n /**\r\n * Get the rectangle of selections indicated by the parameters from the score\r\n * @param startSelector \r\n * @param endSelector \r\n * @param score \r\n * @returns \r\n */\r\n _getRectangleSelections(startSelector: SmoSelector, endSelector: SmoSelector): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n let i = 0;\r\n let j = 0;\r\n for (i = startSelector.staff; i <= endSelector.staff; i++) {\r\n for (j = startSelector.measure; j <= endSelector.measure; j++) {\r\n const target = SmoSelection.measureSelection(this.score, i, j);\r\n if (target !== null) {\r\n rv.push(target);\r\n }\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * set the grouping flag for undo operations\r\n * @param val \r\n */\r\n groupUndo(val: boolean) {\r\n this.storeUndo.grouping = val;\r\n }\r\n\r\n /**\r\n * Show all staves, 1:1 mapping of view score staff to stored score staff\r\n */\r\n get defaultStaffMap(): number[] {\r\n let i = 0;\r\n const rv: number[] = [];\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n rv.push(i);\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Bootstrapping function, creates the renderer and associated timers\r\n */\r\n startRenderingEngine() {\r\n if (!this.renderer.score) {\r\n // If there is only one part, display the part.\r\n if (this.storeScore.isPartExposed()) {\r\n this.exposePart(this.score.staves[0]);\r\n }\r\n // If the score is transposing, hide the instrument xpose settings\r\n this._setTransposing();\r\n this.renderer.score = this.score;\r\n this.renderer.setViewport();\r\n }\r\n this.renderer.startDemon();\r\n }\r\n /**\r\n * Gets the current mapping of displayed staves to score staves (this.storeScore)\r\n * @returns \r\n */\r\n getView(): ViewMapEntry[] {\r\n const rv = [];\r\n let i = 0;\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n const show = this.staffMap.indexOf(i) >= 0;\r\n rv.push({ show });\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Update the staff ID when the view changes\r\n */\r\n setMappedStaffIds() {\r\n this.score.staves.forEach((staff) => {\r\n if (!this.isPartExposed()) {\r\n staff.partInfo.displayCues = staff.partInfo.cueInScore;\r\n } else {\r\n staff.partInfo.displayCues = false;\r\n }\r\n staff.setMappedStaffId(this.staffMap[staff.staffId]);\r\n });\r\n }\r\n resetPartView() {\r\n if (this.staffMap.length === 1) {\r\n const staff = this.storeScore.staves[this.staffMap[0]];\r\n this.exposePart(staff);\r\n }\r\n }\r\n /**\r\n * Exposes a part: hides non-part staves, shows part staves.\r\n * Note this will reset the view. After this operation, staff 0 will\r\n * be the selected part.\r\n * @param staff \r\n */\r\n exposePart(staff: SmoSystemStaff) {\r\n let i = 0;\r\n const exposeMap: ViewMapEntry[] = [];\r\n let pushNext = false;\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n const tS = this.storeScore.staves[i];\r\n const show = tS.staffId === staff.staffId;\r\n if (pushNext) {\r\n exposeMap.push({ show: true });\r\n pushNext = false;\r\n } else {\r\n exposeMap.push({ show });\r\n if (tS.partInfo.stavesAfter > 0 && show) {\r\n pushNext = true;\r\n }\r\n }\r\n }\r\n this.setView(exposeMap);\r\n }\r\n /**\r\n * Indicates if the score is displaying in part-mode vs. score mode.\r\n * @returns \r\n */\r\n isPartExposed(): boolean {\r\n return this.score.isPartExposed();\r\n }\r\n /**\r\n * Parts have different formatting options from the parent score, indluding layout. Reset\r\n * them when exposing a part.\r\n */\r\n _mapPartFormatting() {\r\n this.score.layoutManager = this.score.staves[0].partInfo.layoutManager;\r\n let replacedText = false;\r\n this.score.staves.forEach((staff) => {\r\n staff.updateMeasureFormatsForPart();\r\n if (staff.partInfo.preserveTextGroups && !replacedText) {\r\n const tga: SmoTextGroup[] = [];\r\n replacedText = true;\r\n staff.partInfo.textGroups.forEach((tg) => {\r\n tga.push(tg)\r\n });\r\n this.score.textGroups = tga;\r\n }\r\n });\r\n }\r\n /**\r\n * Update the list of staves in the score that are displayed.\r\n */\r\n setView(rows: ViewMapEntry[]) {\r\n let i = 0;\r\n const any = rows.find((row) => row.show === true);\r\n if (!any) {\r\n return;\r\n }\r\n const nscore = SmoScore.deserialize(JSON.stringify(this.storeScore.serialize({ skipStaves: true, useDictionary: false })));\r\n const staffMap = [];\r\n for (i = 0; i < rows.length; ++i) {\r\n const row = rows[i];\r\n if (row.show) {\r\n const srcStave = this.storeScore.staves[i];\r\n const jsonObj = srcStave.serialize({ skipMaps: false });\r\n jsonObj.staffId = staffMap.length;\r\n const nStave = SmoSystemStaff.deserialize(jsonObj);\r\n nStave.mapStaffFromTo(i, nscore.staves.length);\r\n nscore.staves.push(nStave);\r\n if (srcStave.keySignatureMap) {\r\n nStave.keySignatureMap = JSON.parse(JSON.stringify(srcStave.keySignatureMap));\r\n }\r\n nStave.measures.forEach((measure: SmoMeasure, ix) => {\r\n const srcMeasure = srcStave.measures[ix];\r\n measure.tempo = new SmoTempoText(srcMeasure.tempo.serialize());\r\n measure.timeSignature = new TimeSignature(srcMeasure.timeSignature);\r\n measure.keySignature = srcMeasure.keySignature;\r\n });\r\n staffMap.push(i);\r\n }\r\n }\r\n nscore.numberStaves();\r\n this.staffMap = staffMap;\r\n this.score = nscore;\r\n // Indicate which score staff view staves are mapped to, to decide to display\r\n // modifiers.\r\n this.setMappedStaffIds();\r\n // TODO: add part-specific measure formatting, etc.\r\n this._setTransposing();\r\n this.renderer.score = nscore;\r\n // If this current view is a part, show the part layout\r\n if (this.isPartExposed()) {\r\n this._mapPartFormatting(); \r\n this.score.staves.forEach((staff) => {\r\n staff.partInfo.displayCues = false;\r\n });\r\n SmoOperation.computeMultipartRest(nscore);\r\n } else {\r\n this.score.staves.forEach((staff) => {\r\n staff.partInfo.displayCues = staff.partInfo.cueInScore;\r\n });\r\n }\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n this.renderer.setViewport();\r\n }\r\n /**\r\n * view all the staffs in score mode.\r\n */\r\n viewAll() {\r\n this.score = SmoScore.deserialize(JSON.stringify(\r\n this.storeScore.serialize({ skipStaves: false, useDictionary: false })));\r\n this.staffMap = this.defaultStaffMap;\r\n this.setMappedStaffIds();\r\n this._setTransposing();\r\n this.synchronizeTextGroups();\r\n this.renderer.score = this.score;\r\n this.pasteBuffer.setScore(this.score);\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n this.renderer.setViewport();\r\n }\r\n /**\r\n * Update score based on transposing flag.\r\n */\r\n _setTransposing() {\r\n if (!this.isPartExposed()) {\r\n const xpose = this.score.preferences?.transposingScore;\r\n if (xpose) {\r\n this.score.setTransposing();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update the view after loading or restoring a completely new score\r\n * @param score \r\n * @returns \r\n */\r\n async changeScore(score: SmoScore) {\r\n this.storeUndo.reset();\r\n SuiAudioPlayer.stopPlayer();\r\n this.renderer.score = score;\r\n this.renderer.setViewport();\r\n this.storeScore = SmoScore.deserialize(JSON.stringify(\r\n score.serialize({ skipStaves: false, useDictionary: false })));\r\n this.score = score;\r\n // If the score is non-transposing, hide the instrument xpose settings\r\n this._setTransposing();\r\n this.staffMap = this.defaultStaffMap;\r\n this.setMappedStaffIds();\r\n this.synchronizeTextGroups();\r\n if (this.storeScore.isPartExposed()) {\r\n this.exposePart(this.score.staves[0]);\r\n }\r\n const rv = await this.awaitRender();\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n return rv;\r\n }\r\n\r\n /**\r\n * for the view score, the renderer decides what to render\r\n * depending on what is undone.\r\n * @returns \r\n */\r\n undo() {\r\n if (!this.renderer.score) {\r\n return;\r\n }\r\n \r\n // A score-level undo might have changed the score.\r\n if (this.storeUndo.buffer.length < 1) {\r\n return;\r\n }\r\n const staffMap: Record = {};\r\n const identityMap: Record = {};\r\n this.defaultStaffMap.forEach((nn) => identityMap[nn] = nn);\r\n this.staffMap.forEach((mm, ix) => staffMap[mm] = ix);\r\n this.score = this.renderer.undo(this.storeUndo, staffMap);\r\n this.storeScore = this.storeUndo.undo(this.storeScore, identityMap, true);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiScoreView } from './scoreView';\r\nimport { SmoScore, engravingFontType } from '../../smo/data/score';\r\nimport { SmoSystemStaffParams, SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { KeyEvent, SvgBox, Pitch, PitchLetter } from '../../smo/data/common';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { SmoSystemGroup, SmoPageLayout, SmoGlobalLayout, SmoLayoutManager, SmoAudioPlayerSettings,\r\n SmoScorePreferences, SmoScoreInfo } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoDynamicText, SmoNoteModifierBase, SmoGraceNote, SmoArticulation, \r\n SmoOrnament, SmoLyric, SmoMicrotone, SmoArpeggio, SmoArpeggioType, SmoClefChange, \r\n SmoTabNote} from '../../smo/data/noteModifiers';\r\nimport { SmoTempoText, SmoVolta, SmoBarline, SmoRepeatSymbol, SmoRehearsalMark, SmoMeasureFormat, TimeSignature } from '../../smo/data/measureModifiers';\r\nimport { UndoBuffer, SmoUndoable } from '../../smo/xform/undo';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { BatchSelectionOperation } from '../../smo/xform/operations';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { SuiOscillator } from '../audio/oscillator';\r\nimport { XmlToSmo } from '../../smo/mxml/xmlToSmo';\r\nimport { SuiAudioPlayer } from '../audio/player';\r\nimport { SuiXhrLoader } from '../../ui/fileio/xhrLoader';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { StaffModifierBase, SmoSlur,\r\n SmoInstrument, SmoInstrumentParams, SmoStaffTextBracket, SmoTabStave } from '../../smo/data/staffModifiers';\r\nimport { SuiPiano } from './piano';\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\ndeclare var $: any;\r\ndeclare var SmoConfig: SmoRenderConfiguration;\r\n\r\n/**\r\n * MVVM-like operations on the displayed score.\r\n * \r\n * All operations that can be performed on a 'live' score go through this\r\n * module. It maps the score view to the actual score and makes sure the\r\n * model and view stay in sync. \r\n * \r\n * Because this object operates on the current selections, \r\n * all operations return promise so applications can wait for the \r\n * operation to complete and update the selection list.\r\n * @category SuiRender\r\n */\r\nexport class SuiScoreViewOperations extends SuiScoreView {\r\n /**\r\n * Add a new text group to the score \r\n * @param textGroup a new text group\r\n * @returns \r\n */\r\n async addTextGroup(textGroup: SmoTextGroup): Promise {\r\n const altNew = SmoTextGroup.deserializePreserveId(textGroup.serialize());\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altNew,\r\n UndoBuffer.bufferSubtypes.ADD);\r\n if (this.isPartExposed()) {\r\n this.score.updateTextGroup(textGroup, true);\r\n const partInfo = this.storeScore.staves[this._getEquivalentStaff(0)].partInfo;\r\n partInfo.updateTextGroup(altNew, true);\r\n } else {\r\n this.score.addTextGroup(textGroup);\r\n this.storeScore.addTextGroup(altNew);\r\n }\r\n await this.renderer.renderScoreModifiers();\r\n return this.renderer.updatePromise()\r\n }\r\n\r\n /**\r\n * Remove the text group from the score\r\n * @param textGroup \r\n * @returns \r\n */\r\n async removeTextGroup(textGroup: SmoTextGroup): Promise {\r\n this.score.updateTextGroup(textGroup, false);\r\n const altGroup = SmoTextGroup.deserializePreserveId(textGroup.serialize());\r\n textGroup.elements.forEach((el) => el.remove());\r\n textGroup.elements = [];\r\n const isPartExposed = this.isPartExposed();\r\n if (!isPartExposed) {\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altGroup,\r\n UndoBuffer.bufferSubtypes.REMOVE);\r\n this.storeScore.updateTextGroup(altGroup, false);\r\n } else {\r\n const stave = this.storeScore.staves[this._getEquivalentStaff(0)];\r\n stave.partInfo.textGroups = this.score.textGroups;\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altGroup,\r\n UndoBuffer.bufferSubtypes.REMOVE); \r\n }\r\n await this.renderer.renderScoreModifiers();\r\n return this.renderer.updatePromise()\r\n }\r\n\r\n /**\r\n * UPdate an existing text group. The original is passed in, because since TG not tied to a musical\r\n * element, we need to find the one we're updating.\r\n * @param oldVersion \r\n * @param newVersion \r\n * @returns \r\n */\r\n async updateTextGroup(newVersion: SmoTextGroup): Promise {\r\n const isPartExposed = this.isPartExposed();\r\n const altNew = SmoTextGroup.deserializePreserveId(newVersion.serialize());\r\n this.score.updateTextGroup(newVersion, true);\r\n // If this is part text, don't store it in the score text, except for the displayed score\r\n if (!isPartExposed) {\r\n SmoUndoable.changeTextGroup(this.storeScore, this.storeUndo, altNew, UndoBuffer.bufferSubtypes.UPDATE);\r\n this.storeScore.updateTextGroup(altNew, true);\r\n } else {\r\n this.storeScore.staves[this._getEquivalentStaff(0)].partInfo.updateTextGroup(altNew, true);\r\n }\r\n // TODO: only render the one TG.\r\n await this.renderer.renderScoreModifiers();\r\n // return this.renderer.updatePromise();\r\n }\r\n /**\r\n * load an mxml score remotely, return a promise that \r\n * completes when the file is loaded\r\n * @param url where to find the xml file\r\n * @returns \r\n */\r\n async loadRemoteXml(url: string): Promise {\r\n const req = new SuiXhrLoader(url);\r\n const self = this;\r\n // Shouldn't we return promise of actually displaying the score?\r\n await req.loadAsync();\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(req.value, 'text/xml');\r\n const score = XmlToSmo.convert(xml);\r\n score.layoutManager!.zoomToWidth($('body').width());\r\n await self.changeScore(score);\r\n }\r\n /**\r\n * load a remote score in SMO format\r\n * @param url url to find the score\r\n * @returns \r\n */\r\n async loadRemoteJson(url: string) : Promise {\r\n const req = new SuiXhrLoader(url);\r\n await req.loadAsync();\r\n const score = SmoScore.deserialize(req.value);\r\n await this.changeScore(score);\r\n }\r\n /**\r\n * Load a remote score, return promise when it's been loaded\r\n * from afar.\r\n * @param pref \r\n * @returns \r\n */\r\n async loadRemoteScore(url: string): Promise {\r\n if (url.endsWith('xml') || url.endsWith('mxl')) {\r\n return this.loadRemoteXml(url);\r\n } else {\r\n return this.loadRemoteJson(url);\r\n }\r\n }\r\n async updateAudioSettings(pref: SmoAudioPlayerSettings) {\r\n this._undoScorePreferences('Update preferences');\r\n this.score.audioSettings = pref;\r\n this.storeScore.audioSettings = new SmoAudioPlayerSettings(pref);\r\n // No rendering to be done\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Global settings that control how the score editor behaves\r\n * @param pref \r\n * @returns \r\n */\r\n async updateScorePreferences(pref: SmoScorePreferences): Promise {\r\n this._undoScorePreferences('Update preferences');\r\n const oldXpose = this.score.preferences.transposingScore;\r\n const curXpose = pref.transposingScore;\r\n this.score.updateScorePreferences(new SmoScorePreferences(pref));\r\n this.storeScore.updateScorePreferences(new SmoScorePreferences(pref));\r\n if (curXpose === false && oldXpose === true) {\r\n this.score.setNonTransposing();\r\n } else if (curXpose === true && oldXpose === false) {\r\n this.score.setTransposing();\r\n }\r\n this.renderer.setDirty();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update information about the score, composer etc.\r\n * @param scoreInfo \r\n * @returns \r\n */\r\n async updateScoreInfo(scoreInfo: SmoScoreInfo): Promise {\r\n this._undoScorePreferences('Update preferences');\r\n this.score.scoreInfo = scoreInfo;\r\n this.storeScore.scoreInfo = JSON.parse(JSON.stringify(scoreInfo));\r\n return this.renderer.updatePromise()\r\n }\r\n\r\n /**\r\n * Add a specific microtone modifier to the selected notes\r\n * @param tone \r\n * @returns \r\n */\r\n async addRemoveMicrotone(tone: SmoMicrotone): Promise {\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n const measureSelections = this._undoTrackerMeasureSelections('add/remove microtone');\r\n\r\n SmoOperation.addRemoveMicrotone(null, selections, tone);\r\n SmoOperation.addRemoveMicrotone(null, altSelections, tone);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise()\r\n }\r\n async addRemoveArpeggio(code: SmoArpeggioType) {\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n const measureSelections = this._undoTrackerMeasureSelections('add/remove arpeggio');\r\n [selections, altSelections].forEach((selType) => {\r\n selType.forEach((sel) => {\r\n if (sel.note) {\r\n if (code === 'none') {\r\n sel.note.arpeggio = undefined;\r\n } else {\r\n sel.note.arpeggio = new SmoArpeggio({ type: code });\r\n }\r\n }\r\n });\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise()\r\n }\r\n /**\r\n * A clef change mid-measure (clefNote)\r\n * @param clef \r\n */\r\n async addRemoveClefChange(clef: SmoClefChange) {\r\n const selections = [this.tracker.selections[0]];\r\n const altSelections = this._getEquivalentSelections(selections);\r\n const measureSelections = this._undoTrackerMeasureSelections('add/remove clef change');\r\n [selections, altSelections].forEach((selType) => {\r\n selType.forEach((sel) => {\r\n if (sel.note) {\r\n const measureClef = sel.measure.clef;\r\n // If the clef is the same as measure clef, remove any clef change from Note\r\n if (measureClef === clef.clef) {\r\n sel.note.clefNote = null;\r\n } else {\r\n sel.note.clefNote = clef;\r\n }\r\n sel.measure.updateClefChangeNotes();\r\n }\r\n });\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise()\r\n }\r\n /**\r\n * Modify the dynamics assoicated with the specific selection\r\n * @param selection \r\n * @param dynamic \r\n * @returns \r\n */\r\n async addDynamic(selection: SmoSelection, dynamic: SmoDynamicText): Promise {\r\n this._undoFirstMeasureSelection('add dynamic');\r\n this._removeDynamic(selection, dynamic);\r\n const equiv = this._getEquivalentSelection(selection);\r\n SmoOperation.addDynamic(selection, dynamic);\r\n SmoOperation.addDynamic(equiv!, SmoNoteModifierBase.deserialize(dynamic.serialize() as any));\r\n this.renderer.addToReplaceQueue(selection);\r\n await this.renderer.updatePromise()\r\n }\r\n /**\r\n * Remove dynamics from the selection \r\n * @param selection \r\n * @param dynamic \r\n * @returns \r\n */\r\n async _removeDynamic(selection: SmoSelection, dynamic: SmoDynamicText): Promise {\r\n const equiv = this._getEquivalentSelection(selection);\r\n if (equiv !== null && equiv.note !== null) {\r\n const altModifiers = equiv.note.getModifiers('SmoDynamicText');\r\n SmoOperation.removeDynamic(selection, dynamic);\r\n if (altModifiers.length) {\r\n SmoOperation.removeDynamic(equiv, altModifiers[0] as SmoDynamicText);\r\n }\r\n }\r\n await this.renderer.updatePromise()\r\n }\r\n /**\r\n * Remove dynamics from the current selection\r\n * @param dynamic\r\n * @returns \r\n */\r\n async removeDynamic(dynamic: SmoDynamicText): Promise {\r\n const sel = this.tracker.modifierSelections[0];\r\n if (!sel.selection) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n this.tracker.selections = [sel.selection];\r\n this._undoFirstMeasureSelection('remove dynamic');\r\n this._removeDynamic(sel.selection, dynamic);\r\n this.renderer.addToReplaceQueue(sel.selection);\r\n await this.renderer.updatePromise()\r\n }\r\n /**\r\n * we never really delete a note, but we will convert it into a rest and if it's\r\n * already a rest we will try to hide it.\r\n * Operates on current selections\r\n * */\r\n async deleteNote(): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('delete note');\r\n this.tracker.selections.forEach((sel) => {\r\n if (sel.note) {\r\n\r\n const altSel = this._getEquivalentSelection(sel);\r\n\r\n // set the pitch to be a good position for the rest\r\n const pitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[sel.measure.clef]));\r\n const altPitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[altSel!.measure.clef]));\r\n sel.note.pitches = [pitch];\r\n altSel!.note!.pitches = [altPitch];\r\n\r\n // If the note is a note, make it into a rest. If the note is a rest already,\r\n // make it invisible. If it is invisible already, make it back into a rest.\r\n if (sel.note.isRest() && !sel.note.isHidden()) {\r\n sel.note.makeHidden(true);\r\n altSel!.note!.makeHidden(true);\r\n } else {\r\n sel.note.makeRest();\r\n altSel!.note!.makeRest();\r\n sel.note.makeHidden(false);\r\n altSel!.note!.makeHidden(false);\r\n }\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise()\r\n }\r\n /**\r\n * The lyric editor moves around, so we can't depend on the tracker for the\r\n * correct selection. We get it directly from the editor.\r\n * \r\n * @param selector - the selector of the note with the lyric to remove\r\n * @param lyric - a copy of the lyric to remove. We use the verse, parser to identify it\r\n * @returns render promise\r\n */\r\n async removeLyric(selector: SmoSelector, lyric: SmoLyric): Promise {\r\n const selection = SmoSelection.noteFromSelector(this.score, selector);\r\n if (selection === null) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n this._undoSelection('remove lyric', selection);\r\n selection.note!.removeLyric(lyric);\r\n const equiv = this._getEquivalentSelection(selection);\r\n const storeLyric = equiv!.note!.getLyricForVerse(lyric.verse, lyric.parser);\r\n if (typeof (storeLyric) !== 'undefined') {\r\n equiv!.note!.removeLyric(lyric);\r\n }\r\n this.renderer.addToReplaceQueue(selection);\r\n lyric.deleted = true;\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * @param selector where to add or update the lyric\r\n * @param lyric a copy of the lyric to remove\r\n * @returns \r\n */\r\n async addOrUpdateLyric(selector: SmoSelector, lyric: SmoLyric): Promise {\r\n const selection = SmoSelection.noteFromSelector(this.score, selector);\r\n if (selection === null) {\r\n return;\r\n }\r\n this._undoSelection('update lyric', selection);\r\n selection.note!.addLyric(lyric);\r\n const equiv = this._getEquivalentSelection(selection);\r\n const altLyric = SmoNoteModifierBase.deserialize(lyric.serialize() as any) as SmoLyric;\r\n equiv!.note!.addLyric(altLyric);\r\n this.renderer.addToReplaceQueue(selection);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Delete all the notes for the currently selected voice\r\n * @returns \r\n */\r\n async depopulateVoice(): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('depopulate voice');\r\n measureSelections.forEach((selection) => {\r\n const ix = selection.measure.getActiveVoice();\r\n if (ix !== 0) {\r\n SmoOperation.depopulateVoice(selection, ix);\r\n const equiv = this._getEquivalentSelection(selection);\r\n SmoOperation.depopulateVoice(equiv!, ix);\r\n }\r\n });\r\n SmoOperation.setActiveVoice(this.score, 0);\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Change the active voice in a multi-voice measure.\r\n * @param index \r\n * @returns \r\n */\r\n _changeActiveVoice(index: number): SmoSelection[] {\r\n const measuresToAdd: SmoSelection[] = [];\r\n const measureSelections = SmoSelection.getMeasureList(this.tracker.selections);\r\n measureSelections.forEach((measureSelection) => {\r\n if (index === measureSelection.measure.voices.length) {\r\n measuresToAdd.push(measureSelection);\r\n }\r\n });\r\n return measuresToAdd;\r\n }\r\n /**\r\n * Populate a new voice with default notes\r\n * @param index the voice to populate\r\n * @returns \r\n */\r\n async populateVoice(index: number): Promise {\r\n const measuresToAdd = this._changeActiveVoice(index);\r\n if (measuresToAdd.length === 0) {\r\n SmoOperation.setActiveVoice(this.score, index);\r\n this.tracker.selectActiveVoice();\r\n return this.renderer.updatePromise();\r\n }\r\n measuresToAdd.forEach((selection) => {\r\n this._undoSelection('popualteVoice', selection);\r\n SmoOperation.populateVoice(selection, index);\r\n const equiv = this._getEquivalentSelection(selection);\r\n SmoOperation.populateVoice(equiv!, index);\r\n });\r\n SmoOperation.setActiveVoice(this.score, index);\r\n this._renderChangedMeasures(measuresToAdd);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Assign an instrument to a set of measures\r\n * @param instrument the instrument to assign to the selections\r\n * @param selections \r\n * @returns \r\n */\r\n async changeInstrument(instrument: SmoInstrument, selections: SmoSelection[]): Promise {\r\n if (typeof (selections) === 'undefined') {\r\n selections = this.tracker.selections;\r\n }\r\n this._undoSelections('change instrument', selections);\r\n const altSelections = this._getEquivalentSelections(selections);\r\n SmoOperation.changeInstrument(instrument, selections);\r\n SmoOperation.changeInstrument(instrument, altSelections);\r\n this._renderChangedMeasures(selections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Set the time signature for a selection\r\n * @param timeSignature actual time signature\r\n */\r\n async setTimeSignature(timeSignature: TimeSignature): Promise {\r\n this._undoScore('Set time signature');\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n SmoOperation.setTimeSignature(this.score, selections, timeSignature);\r\n SmoOperation.setTimeSignature(this.storeScore, altSelections, timeSignature);\r\n this._renderChangedMeasures(SmoSelection.getMeasureList(this.tracker.selections));\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move selected staff up or down in the score.\r\n * @param index direction to move\r\n * @returns \r\n */\r\n async moveStaffUpDown(index: number): Promise {\r\n this._undoScore('re-order staves');\r\n // Get staff to move\r\n const selection = this._getEquivalentSelection(this.tracker.selections[0]);\r\n // Make the move in the model, and reset the view so we can see the new\r\n // arrangement\r\n SmoOperation.moveStaffUpDown(this.storeScore, selection!, index);\r\n this.viewAll();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update the staff group for a score, which determines how the staves\r\n * are justified and bracketed\r\n * @param staffGroup \r\n */\r\n async addOrUpdateStaffGroup(staffGroup: SmoSystemGroup): Promise {\r\n this._undoScore('group staves');\r\n // Assume that the view is now set to full score\r\n this.score.addOrReplaceSystemGroup(staffGroup);\r\n this.storeScore.addOrReplaceSystemGroup(staffGroup);\r\n this.renderer.setDirty();\r\n await this.renderer.updatePromise();\r\n }\r\n async updateTabStave(tabStave: SmoTabStave) {\r\n const selections = SmoSelection.getMeasuresBetween(this.score, tabStave.startSelector, tabStave.endSelector);\r\n const altSelections = this._getEquivalentSelections(selections);\r\n if (selections.length === 0) {\r\n return;\r\n }\r\n this._undoSelections('updateTabStave', selections);\r\n const staff: number = selections[0].selector.staff;\r\n const altStaff = altSelections[0].selector.staff;\r\n const altTabStave = new SmoTabStave(tabStave.serialize());\r\n altTabStave.startSelector.staff = altStaff;\r\n altTabStave.endSelector.staff = altStaff;\r\n altTabStave.attrs.id = tabStave.attrs.id;\r\n this.score.staves[staff].updateTabStave(tabStave);\r\n this.storeScore.staves[altStaff].updateTabStave(altTabStave);\r\n this._renderChangedMeasures(SmoSelection.getMeasureList(this.tracker.selections));\r\n await this.renderer.updatePromise();\r\n }\r\n async removeTabStave() {\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n if (selections.length === 0) {\r\n return;\r\n }\r\n this._undoSelections('updateTabStave', selections);\r\n const stavesToRemove: SmoTabStave[] = [];\r\n const altStavesToRemove: SmoTabStave[] = [];\r\n const added: Record = {};\r\n selections.forEach((sel, ix) => {\r\n const altSel = altSelections[ix];\r\n const tabStave = sel.staff.getTabStaveForMeasure(sel.selector);\r\n const altTabStave = altSel.staff.getTabStaveForMeasure(altSel.selector);\r\n if (tabStave && altTabStave) {\r\n if (!added[tabStave.attrs.id]) {\r\n added[tabStave.attrs.id] = tabStave;\r\n stavesToRemove.push(tabStave);\r\n altStavesToRemove.push(altTabStave);\r\n }\r\n }\r\n });\r\n selections[0].staff.removeTabStaves(stavesToRemove);\r\n altSelections[0].staff.removeTabStaves(altStavesToRemove);\r\n this._renderChangedMeasures(SmoSelection.getMeasureList(this.tracker.selections));\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update tempo for all or part of the score\r\n * @param measure the measure with the tempo. Tempo is measure-wide parameter\r\n * @param scoreMode if true, update whole score. Else selections\r\n * @returns \r\n */\r\n async updateTempoScore(measure: SmoMeasure, tempo: SmoTempoText, scoreMode: boolean, selectionMode: boolean): Promise {\r\n let measureIndex = 0; \r\n const originalTempo = new SmoTempoText(measure.tempo);\r\n this._undoColumn('update tempo', measure.measureNumber.measureIndex);\r\n let startMeasure = measure.measureNumber.measureIndex;\r\n let endMeasure = this.score.staves[0].measures.length;\r\n let displayed = false;\r\n if (selectionMode) {\r\n const endSel = this.tracker.getExtremeSelection(1);\r\n if (endSel.selector.measure > startMeasure) {\r\n endMeasure = endSel.selector.measure;\r\n }\r\n }\r\n // If we are only changing the position of the text, it only affects the tempo measure.\r\n if (SmoTempoText.eq(originalTempo, tempo) && tempo.yOffset !== originalTempo.yOffset && endMeasure > startMeasure) {\r\n endMeasure = startMeasure + 1; \r\n }\r\n for (measureIndex = startMeasure; measureIndex < endMeasure; ++measureIndex) {\r\n if (!scoreMode && !selectionMode) {\r\n // If not whole score or selections, change until the tempo doesn't match previous measure's tempo (next tempo change)\r\n const compMeasure = this.score.staves[0].measures[measureIndex];\r\n if (SmoTempoText.eq(originalTempo, compMeasure.tempo) || displayed === false) {\r\n const sel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n const altSel = SmoSelection.measureSelection(this.storeScore, 0, measureIndex);\r\n if (sel && sel.measure.tempo.display && !displayed) {\r\n this.renderer.addToReplaceQueue(sel);\r\n displayed = true;\r\n }\r\n if (sel) {\r\n SmoOperation.addTempo(this.score, sel, tempo);\r\n }\r\n if (altSel) {\r\n SmoOperation.addTempo(this.storeScore, altSel, tempo);\r\n }\r\n } else {\r\n break;\r\n }\r\n } else {\r\n const sel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n const altSel = SmoSelection.measureSelection(this.storeScore, 0, measureIndex);\r\n if (sel) {\r\n SmoOperation.addTempo(this.score, sel, tempo);\r\n if (!displayed) {\r\n this.renderer.addToReplaceQueue(sel);\r\n displayed = true;\r\n }\r\n }\r\n if (altSel) {\r\n SmoOperation.addTempo(this.storeScore, altSel, tempo);\r\n }\r\n }\r\n }\r\n await this.renderer.updatePromise();\r\n }\r\n async updateTabNote(tabNote: SmoTabNote) {\r\n const selections = SmoSelection.getMeasuresBetween(this.score, \r\n this.tracker.getExtremeSelection(-1).selector, this.tracker.getExtremeSelection(1).selector);\r\n const altSelections = this._getEquivalentSelections(selections);\r\n this._undoSelections('updateTabNote', selections);\r\n SmoOperation.updateTabNote(selections, tabNote);\r\n SmoOperation.updateTabNote(altSelections, tabNote);\r\n this.renderer.addToReplaceQueue(selections);\r\n await this.renderer.updatePromise();\r\n }\r\n async removeTabNote() {\r\n const selections = SmoSelection.getMeasuresBetween(this.score, \r\n this.tracker.getExtremeSelection(-1).selector, this.tracker.getExtremeSelection(1).selector);\r\n const altSelections = this._getEquivalentSelections(selections);\r\n this._undoSelections('updateTabNote', selections);\r\n SmoOperation.removeTabNote(selections);\r\n SmoOperation.removeTabNote(altSelections);\r\n this.renderer.addToReplaceQueue(selections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * 'remove' tempo, which means either setting the bars to the \r\n * default tempo, or the previously-set tempo.\r\n * @param scoreMode whether to reset entire score\r\n */\r\n async removeTempo(measure: SmoMeasure, tempo: SmoTempoText, scoreMode: boolean, selectionMode: boolean): Promise {\r\n const startSelection = this.tracker.selections[0];\r\n if (startSelection.selector.measure > 0) {\r\n const measureIx = startSelection.selector.measure - 1;\r\n const target = startSelection.staff.measures[measureIx];\r\n const tempo = target.getTempo();\r\n const newTempo = new SmoTempoText(tempo);\r\n newTempo.display = false;\r\n this.updateTempoScore(measure, newTempo, scoreMode, selectionMode);\r\n } else {\r\n this.updateTempoScore(measure, new SmoTempoText(SmoTempoText.defaults), scoreMode, selectionMode);\r\n }\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add a grace note to the selected real notes.\r\n */\r\n async addGraceNote(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('add grace note');\r\n selections.forEach((selection) => {\r\n const index = selection.note!.getGraceNotes().length;\r\n const pitches = JSON.parse(JSON.stringify(selection.note!.pitches));\r\n const grace = new SmoGraceNote({\r\n pitches, ticks:\r\n { numerator: 2048, denominator: 1, remainder: 0 }\r\n });\r\n SmoOperation.addGraceNote(selection, grace, index);\r\n\r\n const altPitches = JSON.parse(JSON.stringify(selection.note!.pitches));\r\n const altGrace = new SmoGraceNote({\r\n pitches: altPitches, ticks:\r\n { numerator: 2048, denominator: 1, remainder: 0 }\r\n });\r\n altGrace.attrs.id = grace.attrs.id;\r\n const altSelection = this._getEquivalentSelection(selection);\r\n SmoOperation.addGraceNote(altSelection!, altGrace, index);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * remove selected grace note\r\n * @returns\r\n */\r\n async removeGraceNote(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('remove grace note');\r\n selections.forEach((selection) => {\r\n // TODO: get the correct offset\r\n SmoOperation.removeGraceNote(selection, 0);\r\n const altSel = (this._getEquivalentSelection(selection));\r\n SmoOperation.removeGraceNote(altSel!, 0);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle slash in stem of grace note\r\n */\r\n async slashGraceNotes(): Promise {\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n const measureSelections = this._undoTrackerMeasureSelections('slash grace note toggle');\r\n grace.forEach((gn) => {\r\n SmoOperation.slashGraceNotes(gn);\r\n if (gn.selection !== null) {\r\n const altSelection = this._getEquivalentSelection(gn.selection);\r\n const altGn = this._getEquivalentGraceNote(altSelection!, gn.modifier as SmoGraceNote);\r\n SmoOperation.slashGraceNotes({\r\n selection: altSelection, modifier: altGn as any,\r\n box: SvgBox.default, index: 0\r\n });\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n async transposeScore(offset: number): Promise {\r\n this._undoScore('transpose score');\r\n SmoOperation.transposeScore(this.score, offset);\r\n SmoOperation.transposeScore(this.storeScore, offset);\r\n this.renderer.rerenderAll();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * transpose selected notes\r\n * @param offset 1/2 steps\r\n * @returns \r\n */\r\n async transposeSelections(offset: number): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('transpose');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n if (artifact.selection !== null && artifact.selection.note !== null) {\r\n const gn1 = artifact.modifier as SmoGraceNote;\r\n const index = artifact.selection.note.graceNotes.findIndex((x) => x.attrs.id === gn1.attrs.id);\r\n const altSelection = this._getEquivalentSelection(artifact.selection);\r\n if (altSelection && altSelection.note !== null) {\r\n const gn2 = altSelection.note.graceNotes[index];\r\n SmoOperation.transposeGraceNotes(altSelection!, [gn2], offset);\r\n }\r\n SmoOperation.transposeGraceNotes(artifact.selection, [gn1], offset);\r\n }\r\n });\r\n\r\n } else {\r\n selections.forEach((selected) => {\r\n SmoOperation.transpose(selected, offset);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.transpose(altSel!, offset);\r\n });\r\n if (selections.length === 1 && this.score.preferences.autoPlay) {\r\n SuiOscillator.playSelectionNow(selections[0], this.score, 1);\r\n }\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle the accidental spelling of the selected notes\r\n * @returns\r\n */\r\n async toggleEnharmonic(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle enharmonic');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n SmoOperation.toggleGraceNoteEnharmonic(artifact.selection!, [artifact.modifier as SmoGraceNote]);\r\n const altSelection = this._getEquivalentSelection(artifact.selection!);\r\n const altGr = this._getEquivalentGraceNote(altSelection!, artifact.modifier as SmoGraceNote);\r\n SmoOperation.toggleGraceNoteEnharmonic(altSelection!,\r\n [altGr]);\r\n });\r\n } else {\r\n selections.forEach((selected) => {\r\n if (typeof (selected.selector.pitches) === 'undefined') {\r\n selected.selector.pitches = [];\r\n }\r\n SmoOperation.toggleEnharmonic(selected);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.toggleEnharmonic(altSel!);\r\n });\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Toggle cautionary/courtesy accidentals\r\n */\r\n async toggleCourtesyAccidentals(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle courtesy accidental');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n const gn1 = [artifact.modifier] as SmoGraceNote[];\r\n SmoOperation.toggleGraceNoteCourtesy(artifact.selection, gn1);\r\n const altSel = this._getEquivalentSelection(artifact.selection!);\r\n const gn2 = this._getEquivalentGraceNote(altSel!, gn1[0]);\r\n SmoOperation.toggleGraceNoteCourtesy(altSel!, [gn2]);\r\n });\r\n } else {\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleCourtesyAccidental(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleCourtesyAccidental(altSel!);\r\n });\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * change the duration of notes for selected, creating more \r\n * or fewer notes. \r\n * After the change, reset the selection so it's as close as possible \r\n * to the original length\r\n * @param operation \r\n * @returns \r\n */\r\n async batchDurationOperation(operation: BatchSelectionOperation): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('change duration');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n const graceMap: Record = {\r\n doubleDuration: 'doubleGraceNoteDuration',\r\n halveDuration: 'halveGraceNoteDuration'\r\n };\r\n if (grace.length && typeof (graceMap[operation]) !== 'undefined') {\r\n operation = graceMap[operation];\r\n grace.forEach((artifact) => {\r\n (SmoOperation as any)[operation](artifact.selection, artifact.modifier);\r\n const altSelection = this._getEquivalentSelection(artifact.selection!);\r\n const gn2 = this._getEquivalentGraceNote(altSelection!, artifact.modifier as SmoGraceNote);\r\n (SmoOperation as any)[operation](altSelection!, gn2);\r\n });\r\n } else {\r\n const altAr = this._getEquivalentSelections(selections);\r\n SmoOperation.batchSelectionOperation(this.score, selections, operation);\r\n SmoOperation.batchSelectionOperation(this.storeScore, altAr, operation);\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle selected modifier on selected notes\r\n * @param modifier \r\n * @param ctor parent class constructor (e.g. SmoOrnament)\r\n * @returns \r\n */\r\n async toggleArticulation(modifier: string, ctor: string): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle articulation');\r\n this.tracker.selections.forEach((sel) => {\r\n if (ctor === 'SmoArticulation') {\r\n const aa = new SmoArticulation({ articulation: modifier });\r\n const altAa = new SmoArticulation({ articulation: modifier });\r\n altAa.attrs.id = aa.attrs.id;\r\n SmoOperation.toggleArticulation(sel, aa);\r\n const altSelection = this._getEquivalentSelection(sel);\r\n SmoOperation.toggleArticulation(altSelection!, altAa);\r\n } else {\r\n const aa = new SmoOrnament({ ornament: modifier });\r\n const altAa = new SmoOrnament({ ornament: modifier });\r\n altAa.attrs.id = aa.attrs.id;\r\n const altSelection = this._getEquivalentSelection(sel!);\r\n SmoOperation.toggleOrnament(sel, aa);\r\n SmoOperation.toggleOrnament(altSelection!, altAa);\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * convert non-tuplet not to a tuplet\r\n * @param numNotes 3 means triplet, etc.\r\n */\r\n async makeTuplet(numNotes: number): Promise {\r\n const selection = this.tracker.selections[0];\r\n const measureSelections = this._undoTrackerMeasureSelections('make tuplet');\r\n SmoOperation.makeTuplet(selection, numNotes);\r\n const altSelection = this._getEquivalentSelection(selection!);\r\n SmoOperation.makeTuplet(altSelection!, numNotes);\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Convert selected tuplet to a single (if possible) non-tuplet\r\n */\r\n async unmakeTuplet(): Promise {\r\n const selection = this.tracker.selections[0];\r\n const measureSelections = this._undoTrackerMeasureSelections('unmake tuplet');\r\n SmoOperation.unmakeTuplet(selection);\r\n const altSelection = this._getEquivalentSelection(selection);\r\n SmoOperation.unmakeTuplet(altSelection!);\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Create a chord by adding an interval to selected note\r\n * @param interval 1/2 steps\r\n * @returns \r\n */\r\n async setInterval(interval: number): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('set interval');\r\n selections.forEach((selected) => {\r\n SmoOperation.interval(selected, interval);\r\n const altSelection = this._getEquivalentSelection(selected);\r\n SmoOperation.interval(altSelection!, interval);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * change the selected chord into a single note\r\n * @returns\r\n */\r\n async collapseChord(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('collapse chord');\r\n selections.forEach((selected) => {\r\n const note: SmoNote | null = selected.note;\r\n if (note) {\r\n const pp = JSON.parse(JSON.stringify(note.pitches[0]));\r\n const altpp = JSON.parse(JSON.stringify(note.pitches[0]));\r\n // No operation for this?\r\n note.pitches = [pp];\r\n const altSelection = this._getEquivalentSelection(selected);\r\n altSelection!.note!.pitches = [altpp];\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle chicken-scratches, for jazz improv, comping etc.\r\n */\r\n async toggleSlash(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('make slash');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleSlash(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleSlash(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * make selected notes into a rest, or visa-versa\r\n * @returns\r\n */\r\n async makeRest(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('make rest');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleRest(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleRest(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle the 'end beam' flag for selected notes\r\n * @returns \r\n */\r\n async toggleBeamGroup(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle beam group');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleBeamGroup(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleBeamGroup(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n async toggleCue() {\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle note cue');\r\n this.tracker.selections.forEach((selection) => {\r\n const altSelection = this._getEquivalentSelection(selection);\r\n if (selection.note && selection.note.isRest() === false) {\r\n selection.note.isCue = !selection.note.isCue;\r\n if (altSelection && altSelection.note) {\r\n altSelection.note.isCue = selection.note.isCue;\r\n }\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * up or down\r\n * @returns \r\n */\r\n async toggleBeamDirection(): Promise {\r\n const selections = this.tracker.selections;\r\n if (selections.length < 1) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const measureSelections = this._undoTrackerMeasureSelections('toggle beam direction');\r\n SmoOperation.toggleBeamDirection(selections);\r\n SmoOperation.toggleBeamDirection(this._getEquivalentSelections(selections));\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add the selected notes to a beam group\r\n */\r\n async beamSelections(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('beam selections');\r\n SmoOperation.beamSelections(this.score, selections);\r\n SmoOperation.beamSelections(this.storeScore, this._getEquivalentSelections(selections));\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * change key signature for selected measures\r\n * @param keySignature vex key signature\r\n */\r\n async addKeySignature(keySignature: string): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('set key signature ' + keySignature);\r\n measureSelections.forEach((sel) => {\r\n SmoOperation.addKeySignature(this.score, sel, keySignature);\r\n const altSel = this._getEquivalentSelection(sel);\r\n SmoOperation.addKeySignature(this.storeScore, altSel!, keySignature);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Sets a pitch from the piano widget.\r\n * @param pitch {Pitch}\r\n * @param chordPedal {boolean} - indicates we are adding to a chord\r\n */\r\n async setPitchPiano(pitch: Pitch, chordPedal: boolean): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections(\r\n 'setAbsolutePitch ' + pitch.letter + '/' + pitch.accidental);\r\n this.tracker.selections.forEach((selected) => {\r\n const npitch: Pitch = {\r\n letter: pitch.letter,\r\n accidental: pitch.accidental, octave: pitch.octave\r\n };\r\n const octave = SmoMeasure.defaultPitchForClef[selected.measure.clef].octave;\r\n npitch.octave += octave;\r\n const altSel = this._getEquivalentSelection(selected);\r\n if (chordPedal && selected.note) {\r\n selected.note.toggleAddPitch(npitch);\r\n altSel!.note!.toggleAddPitch(npitch);\r\n } else {\r\n SmoOperation.setPitch(selected, [npitch]);\r\n SmoOperation.setPitch(altSel!, [npitch]);\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * show or hide the piano widget\r\n * @param value to show it\r\n */\r\n async showPiano(value: boolean): Promise {\r\n this.score.preferences.showPiano = value;\r\n this.storeScore.preferences.showPiano = value;\r\n if (value) {\r\n SuiPiano.showPiano();\r\n } else {\r\n SuiPiano.hidePiano();\r\n }\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Render a pitch for each letter name-pitch in the string,\r\n * @param pitches letter names for pitches\r\n * @returns promise, resolved when all pitches rendered\r\n * @see setPitch\r\n */\r\n async setPitchesPromise(pitches: PitchLetter[]): Promise {\r\n const self = this;\r\n const promise = new Promise((resolve: any) => {\r\n const fc = async (index: number) => {\r\n if (index >= pitches.length) {\r\n resolve();\r\n } else {\r\n await self.setPitch(pitches[index]);\r\n fc(index + 1);\r\n }\r\n };\r\n fc(0);\r\n });\r\n await promise;\r\n }\r\n\r\n /**\r\n * Add a pitch to the score at the cursor. This tries to find the best pitch\r\n * to match the letter key (F vs F# for instance) based on key and surrounding notes\r\n * @param letter string\r\n */\r\n async setPitch(letter: PitchLetter): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('set pitch ' + letter);\r\n selections.forEach((selected) => {\r\n const selector = selected.selector;\r\n let hintSel = SmoSelection.lastNoteSelectionNonRest(this.score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n if (!hintSel) {\r\n hintSel = SmoSelection.nextNoteSelectionNonRest(this.score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n // The selection no longer exists, possibly deleted\r\n if (hintSel === null || hintSel.note === null) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const pitch = SmoMusic.getLetterNotePitch(hintSel.note.pitches[0],\r\n letter, hintSel.measure.keySignature);\r\n SmoOperation.setPitch(selected, [pitch]);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.setPitch(altSel!, [pitch]);\r\n if (this.score.preferences.autoAdvance) {\r\n this.tracker.moveSelectionRight(this.score, null, true);\r\n }\r\n });\r\n if (selections.length === 1 && this.score.preferences.autoPlay) {\r\n SuiOscillator.playSelectionNow(selections[0], this.score, 1);\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Generic clipboard copy action\r\n */\r\n async copy(): Promise {\r\n this.pasteBuffer.setSelections(this.score, this.tracker.selections);\r\n const altAr: SmoSelection[] = [];\r\n this.tracker.selections.forEach((sel) => {\r\n const noteSelection = this._getEquivalentSelection(sel);\r\n if (noteSelection !== null) {\r\n altAr.push(noteSelection);\r\n }\r\n });\r\n this.storePaste.setSelections(this.storeScore, altAr);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * clipboard paste action\r\n * @returns \r\n */\r\n async paste(): Promise {\r\n // We undo the whole score on a paste, since we don't yet know the\r\n // extent of the overlap\r\n this._undoScore('paste');\r\n this.renderer.preserveScroll();\r\n const firstSelection = this.tracker.selections[0];\r\n const pasteTarget = firstSelection.selector;\r\n const altSelection = this._getEquivalentSelection(firstSelection);\r\n const altTarget = altSelection!.selector;\r\n this.pasteBuffer.pasteSelections(pasteTarget);\r\n this.storePaste.pasteSelections(altTarget);\r\n this._renderChangedMeasures(this.pasteBuffer.replacementMeasures);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * specify a note head other than the default for the duration\r\n * @param head \r\n */\r\n async setNoteHead(head: string): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this._undoTrackerMeasureSelections('set note head');\r\n SmoOperation.setNoteHead(selections, head);\r\n SmoOperation.setNoteHead(this._getEquivalentSelections(selections), head);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Add a volta for selected measures\r\n */\r\n async addEnding(): Promise {\r\n // TODO: we should have undo for columns\r\n this._undoScore('Add Volta');\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const params = SmoVolta.defaults;\r\n params.startBar = ft.selector.measure;\r\n params.endBar = tt.selector.measure;\r\n params.number = 1;\r\n const volta = new SmoVolta(params);\r\n const altVolta = new SmoVolta(params);\r\n this._renderChangedMeasures([ft, tt]);\r\n SmoOperation.addEnding(this.storeScore, altVolta);\r\n SmoOperation.addEnding(this.score, volta);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * @param ending volta settings\r\n * @returns \r\n */\r\n async updateEnding(ending: SmoVolta): Promise {\r\n this._undoScore('Change Volta');\r\n ending.elements.forEach((el) => {\r\n $(el).find('g.' + ending.attrs.id).remove();\r\n });\r\n ending.elements = [];\r\n SmoOperation.removeEnding(this.storeScore, ending);\r\n SmoOperation.removeEnding(this.score, ending);\r\n const altVolta = new SmoVolta(ending);\r\n SmoOperation.addEnding(this.storeScore, altVolta);\r\n SmoOperation.addEnding(this.score, ending);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param ending volta to remove\r\n * @returns \r\n */\r\n async removeEnding(ending: SmoVolta): Promise {\r\n this._undoScore('Remove Volta');\r\n ending.elements.forEach((el) => {\r\n $(el).find('g.' + ending.attrs.id).remove();\r\n });\r\n ending.elements = [];\r\n SmoOperation.removeEnding(this.storeScore, ending);\r\n SmoOperation.removeEnding(this.score, ending);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param position begin or end\r\n * @param barline barline type\r\n * @returns \r\n */\r\n async setBarline(position: number, barline: number): Promise {\r\n const obj = new SmoBarline({ position, barline });\r\n const altObj = new SmoBarline({ position, barline });\r\n const selection = this.tracker.selections[0];\r\n this._undoColumn('set barline', selection.selector.measure);\r\n SmoOperation.setMeasureBarline(this.score, selection, obj);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.setMeasureBarline(this.storeScore, altSel!, altObj);\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param position start or end\r\n * @param symbol coda, etc.\r\n */\r\n async setRepeatSymbol(position: number, symbol: number): Promise {\r\n const params = SmoRepeatSymbol.defaults;\r\n params.position = position;\r\n params.symbol = symbol;\r\n const obj = new SmoRepeatSymbol(params);\r\n const altObj = new SmoRepeatSymbol(params);\r\n const selection = this.tracker.selections[0];\r\n this._undoColumn('set repeat symbol', selection.selector.measure);\r\n SmoOperation.setRepeatSymbol(this.score, selection, obj);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.setRepeatSymbol(this.storeScore, altSel!, altObj);\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle rehearsal mark on first selected measure\r\n * @returns\r\n */\r\n async toggleRehearsalMark(): Promise {\r\n const selection = this.tracker.getExtremeSelection(-1);\r\n const altSelection = this._getEquivalentSelection(selection);\r\n const cmd = selection.measure.getRehearsalMark() ? 'removeRehearsalMark' : 'addRehearsalMark';\r\n SmoOperation[cmd](this.score, selection, new SmoRehearsalMark(SmoRehearsalMark.defaults));\r\n SmoOperation[cmd](this.storeScore, altSelection!, new SmoRehearsalMark(SmoRehearsalMark.defaults));\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n _removeStaffModifier(modifier: StaffModifierBase) {\r\n this.score.staves[modifier.associatedStaff].removeStaffModifier(modifier);\r\n const altModifier = StaffModifierBase.deserialize(modifier.serialize());\r\n altModifier.startSelector = this._getEquivalentSelector(altModifier.startSelector);\r\n altModifier.endSelector = this._getEquivalentSelector(altModifier.endSelector);\r\n this.storeScore.staves[this._getEquivalentStaff(modifier.associatedStaff)].removeStaffModifier(altModifier);\r\n }\r\n /**\r\n * Remove selected modifier\r\n * @param modifier slur, hairpin, etc.\r\n * @returns \r\n */\r\n async removeStaffModifier(modifier: StaffModifierBase): Promise {\r\n this._undoStaffModifier('Set measure proportion', modifier,\r\n UndoBuffer.bufferSubtypes.REMOVE);\r\n this._removeStaffModifier(modifier);\r\n this._renderRectangle(modifier.startSelector, modifier.endSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Change a staff modifier\r\n * @param original original version\r\n * @param modifier modified version\r\n * @returns \r\n */\r\n async addOrUpdateStaffModifier(original: StaffModifierBase, modifier: StaffModifierBase): Promise {\r\n if (!modifier) {\r\n if (original) {\r\n // Handle legacy API changed\r\n modifier = StaffModifierBase.deserialize(original);\r\n } else {\r\n console.warn('update modifier: bad modifier');\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n }\r\n const existing = this.score.staves[modifier.startSelector.staff]\r\n .getModifier(modifier);\r\n const subtype = existing === null ? UndoBuffer.bufferSubtypes.ADD :\r\n UndoBuffer.bufferSubtypes.UPDATE;\r\n this._undoStaffModifier('Set measure proportion', original,\r\n subtype);\r\n this._removeStaffModifier(modifier);\r\n const copy = StaffModifierBase.deserialize(modifier.serialize());\r\n copy.startSelector = this._getEquivalentSelector(copy.startSelector);\r\n copy.endSelector = this._getEquivalentSelector(copy.endSelector);\r\n const sel = SmoSelection.noteFromSelector(this.score, modifier.startSelector);\r\n if (sel !== null) {\r\n const altSel = this._getEquivalentSelection(sel);\r\n SmoOperation.addStaffModifier(sel, modifier);\r\n SmoOperation.addStaffModifier(altSel!, copy);\r\n const modId = 'mod-' + sel.selector.staff + '-' + sel.selector.measure;\r\n const context = this.renderer.renderer.getRenderer(sel.measure.svg.logicalBox);\r\n if (context) {\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n }\r\n }\r\n this._renderRectangle(modifier.startSelector, modifier.endSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n _lineOperation(op: string) {\r\n // if (this.tracker.selections.length < 2) {\r\n // return;\r\n // }\r\n const measureSelections = this._undoTrackerMeasureSelections(op);\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const ftAlt = this._getEquivalentSelection(ft);\r\n const ttAlt = this._getEquivalentSelection(tt);\r\n const modifier = (SmoOperation as any)[op](ft, tt);\r\n (SmoOperation as any)[op](ftAlt, ttAlt);\r\n this._undoStaffModifier('add ' + op, modifier, UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(measureSelections);\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n async crescendo(): Promise {\r\n this._lineOperation('crescendo');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n async crescendoBracket(): Promise {\r\n this._lineOperation('crescendoBracket');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n async dimenuendo(): Promise {\r\n this._lineOperation('dimenuendo');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n async accelerando(): Promise {\r\n this._lineOperation('accelerando');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n async ritard(): Promise {\r\n this._lineOperation('ritard');\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * diminuendo selections\r\n * @returns \r\n */\r\n async decrescendo(): Promise {\r\n this._lineOperation('decrescendo');\r\n return this.renderer.updatePromise();\r\n }\r\n async removeTextBracket(bracket: SmoStaffTextBracket): Promise {\r\n return this.removeStaffModifier(bracket);\r\n }\r\n async addOrReplaceTextBracket(modifier: SmoStaffTextBracket) {\r\n const from1 = SmoSelection.noteFromSelector(this.score, modifier.startSelector);\r\n const to1 = SmoSelection.noteFromSelector(this.score, modifier.endSelector);\r\n if (from1 === null || to1 === null) {\r\n return;\r\n }\r\n const altFrom = this._getEquivalentSelection(from1);\r\n const altTo = this._getEquivalentSelection(to1);\r\n if (altFrom === null || altTo === null) {\r\n return;\r\n }\r\n SmoOperation.addOrReplaceBracket(modifier, from1, to1);\r\n SmoOperation.addOrReplaceBracket(modifier, altFrom, altTo);\r\n const redraw = SmoSelection.getMeasuresBetween(this.score, from1.selector, to1.selector);\r\n this._undoStaffModifier('add repl text bracket', modifier, UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(redraw);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Slur selected notes\r\n * @returns\r\n */\r\n async slur(): Promise {\r\n const measureSelections = this._undoTrackerMeasureSelections('slur');\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const ftAlt = this._getEquivalentSelection(ft);\r\n const ttAlt = this._getEquivalentSelection(tt);\r\n const modifier = SmoOperation.slur(this.score, ft, tt);\r\n const altModifier = SmoOperation.slur(this.storeScore, ftAlt!, ttAlt!);\r\n this._undoStaffModifier('add ' + 'op', new SmoSlur(modifier), UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * tie selected notes\r\n * @returns \r\n */\r\n async tie(): Promise {\r\n this._lineOperation('tie');\r\n return this.renderer.updatePromise();\r\n }\r\n async updateZoom(zoomFactor: number): Promise {\r\n const original = this.score.layoutManager!.getGlobalLayout();\r\n original.zoomScale = zoomFactor;\r\n this.score.layoutManager!.globalLayout.zoomScale = zoomFactor;\r\n this.renderer.pageMap.updateZoom(zoomFactor);\r\n this.renderer.pageMap.updateContainerOffset(this.scroller.scrollState);\r\n }\r\n /**\r\n * set global page for score, zoom etc.\r\n * @param layout global SVG settings\r\n * @returns \r\n */\r\n async setGlobalLayout(layout: SmoGlobalLayout): Promise {\r\n this._undoScore('Set Global Layout');\r\n const original = this.score.layoutManager!.getGlobalLayout().svgScale;\r\n this.score.layoutManager!.updateGlobalLayout(layout);\r\n this.score.scaleTextGroups(original / layout.svgScale);\r\n this.storeScore.layoutManager!.updateGlobalLayout(layout);\r\n this.renderer.rerenderAll();\r\n return this.renderer.preserveScroll();\r\n }\r\n /**\r\n * Set the layout of a single page\r\n * @param layout page layout\r\n * @param pageIndex which page to change\r\n * @returns \r\n */\r\n async setPageLayout(layout: SmoPageLayout, pageIndex: number) {\r\n this.score.layoutManager!.updatePage(layout, pageIndex);\r\n this.storeScore.layoutManager!.updatePage(layout, pageIndex);\r\n // If we are in part mode, save the page layout in the part so it is there next time\r\n // the part is exposed.\r\n if (this.isPartExposed()) {\r\n this.score.staves.forEach((staff, staffIx) => {\r\n staff.partInfo.layoutManager.updatePage(layout, pageIndex);\r\n const altStaff = this.storeScore.staves[this.staffMap[staffIx]];\r\n altStaff.partInfo.layoutManager.updatePage(layout, pageIndex);\r\n });\r\n }\r\n await this.refreshViewport();\r\n }\r\n async setPageLayouts(layout: SmoPageLayout, startIndex: number, endIndex: number) {\r\n this._undoScore('Set Page Layout');\r\n let i = 0;\r\n for (i = startIndex; i <= endIndex; ++i) {\r\n this.setPageLayout(layout, i);\r\n }\r\n this.renderer.rerenderAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update the music font\r\n * @param family \r\n * @returns \r\n */\r\n async setEngravingFontFamily(family: engravingFontType): Promise {\r\n this.score.engravingFont = family;\r\n this.storeScore.engravingFont = family;\r\n this.renderer.notifyFontChange(); \r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Upate global font used for chord changes\r\n * @param fontInfo\r\n * @returns \r\n */\r\n async setChordFont(fontInfo: FontInfo): Promise {\r\n this._undoScore('Set Chord Font');\r\n this.score.setChordFont(fontInfo);\r\n this.storeScore.setChordFont(fontInfo);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update font used for lyrics\r\n * @param fontInfo \r\n * @returns \r\n */\r\n async setLyricFont(fontInfo: FontInfo): Promise {\r\n this._undoScore('Set Lyric Font');\r\n this.score.setLyricFont(fontInfo);\r\n this.storeScore.setLyricFont(fontInfo);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * @param value if false, lyric widths don't affect measure width\r\n * @returns \r\n */\r\n async setLyricAdjustWidth(value: boolean): Promise {\r\n this._undoScore('Set Lyric Adj Width');\r\n this.score.setLyricAdjustWidth(value);\r\n this.storeScore.setLyricAdjustWidth(value);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * delete selected measures\r\n * @returns \r\n */\r\n async deleteMeasure(): Promise {\r\n this._undoScore('Delete Measure');\r\n if (this.storeScore.staves[0].measures.length < 2) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const selections = SmoSelection.getMeasureList(this.tracker.selections);\r\n // THe measures get renumbered, so keep the index at 0\r\n const index = selections[0].selector.measure;\r\n for (var i = 0; i < selections.length; ++i) {\r\n // Unrender the deleted measure\r\n this.score.staves.forEach((staff) => {\r\n this.tracker.clearMeasureMap(staff.measures[index]);\r\n this.renderer.unrenderMeasure(staff.measures[index]);\r\n this.renderer.unrenderMeasure(staff.measures[staff.measures.length - 1]);\r\n // A little hacky - delete the modifiers if they start or end on\r\n // the measure\r\n staff.renderableModifiers.forEach((modifier) => {\r\n if (modifier.startSelector.measure === index || modifier.endSelector.measure === index) {\r\n if (modifier.logicalBox) {\r\n const context = this.renderer.renderer.getRenderer(modifier.logicalBox);\r\n if (context) {\r\n $(context.svg).find('g.' + modifier.attrs.id).remove();\r\n }\r\n }\r\n }\r\n });\r\n });\r\n // Remove the SVG artifacts mapped to this measure.\r\n this.score.deleteMeasure(index);\r\n this.storeScore.deleteMeasure(index);\r\n // Note: index doesn't increment since there are now 1 fewer measures\r\n };\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * add number of measures, with default notes selections\r\n * @param append \r\n * @param numberToAdd \r\n * @returns \r\n */\r\n async addMeasures(append: boolean, numberToAdd: number): Promise {\r\n let pos = 0;\r\n let ix = 0;\r\n this._undoScore('Add Measure');\r\n for (ix = 0; ix < numberToAdd; ++ix) {\r\n const measure = this.tracker.getFirstMeasureOfSelection();\r\n if (measure) {\r\n const nmeasure = SmoMeasure.getDefaultMeasureWithNotes(measure);\r\n pos = measure.measureNumber.measureIndex;\r\n if (append) {\r\n pos += 1;\r\n }\r\n nmeasure.measureNumber.measureIndex = pos;\r\n nmeasure.setActiveVoice(0);\r\n this.score.addMeasure(pos);\r\n this.storeScore.addMeasure(pos);\r\n }\r\n }\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * add a single measure before or after selection\r\n * @param append \r\n * @returns \r\n */\r\n async addMeasure(append: boolean): Promise {\r\n this._undoScore('Add Measure');\r\n let pos = 0;\r\n const measure = this.tracker.getFirstMeasureOfSelection();\r\n if (!measure) {\r\n return;\r\n }\r\n const nmeasure = SmoMeasure.getDefaultMeasureWithNotes(measure);\r\n pos = measure.measureNumber.measureIndex;\r\n if (append) {\r\n pos += 1;\r\n }\r\n nmeasure.measureNumber.measureIndex = pos;\r\n nmeasure.setActiveVoice(0);\r\n this.score.addMeasure(pos);\r\n this.storeScore.addMeasure(pos);\r\n this.renderer.clearLine(measure);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * remove an entire line of music\r\n * @returns\r\n */\r\n async removeStaff(): Promise {\r\n this._undoScore('Remove Instrument');\r\n if (this.storeScore.staves.length < 2 || this.score.staves.length < 2) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n // if we are looking at a subset of the score,\r\n // revert to the full score view before removing the staff.\r\n const sel = this.tracker.selections[0];\r\n const scoreSel = this._getEquivalentSelection(sel);\r\n const staffIndex = scoreSel!.selector.staff;\r\n SmoOperation.removeStaff(this.storeScore, staffIndex);\r\n this.viewAll();\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n async addStaff(instrument: SmoSystemStaffParams): Promise {\r\n this._undoScore('Add Instrument');\r\n // if we are looking at a subset of the score, we won't see the new staff. So\r\n // revert to the full view\r\n const staff = SmoOperation.addStaff(this.storeScore, instrument);\r\n const instKeys = Object.keys(staff.measureInstrumentMap);\r\n // update the key signatures for the new part\r\n instKeys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n const inst = staff.measureInstrumentMap[numKey];\r\n const selections = SmoSelection.innerSelections(this.storeScore, inst.startSelector, inst.endSelector);\r\n SmoOperation.changeInstrument(inst, selections);\r\n })\r\n if (instrument.staffId > 0) {\r\n const selection = SmoSelection.measureSelection(this.storeScore, instrument.staffId - 1, 0);\r\n const sel = SmoSelector.default;\r\n sel.staff = instrument.staffId - 1;\r\n if (selection) {\r\n let grp = this.storeScore.getSystemGroupForStaff(selection);\r\n if (grp) {\r\n grp.endSelector.staff = instrument.staffId;\r\n } else {\r\n let grp = new SmoSystemGroup(SmoSystemGroup.defaults);\r\n grp.startSelector.staff = instrument.staffId - 1;\r\n grp.endSelector.staff = instrument.staffId;\r\n this.storeScore.systemGroups.push(grp);\r\n }\r\n }\r\n }\r\n this.viewAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update part info assumes that the part is currently exposed - that\r\n * staff 0 is the first staff in the part prior to editing.\r\n * @param info\r\n */\r\n async updatePartInfo(info: SmoPartInfo): Promise {\r\n let i: number = 0;\r\n this._undoScore('Update part info');\r\n const storeStaff = this.staffMap[0] - info.stavesBefore;\r\n const partLength = info.stavesBefore + info.stavesAfter + 1;\r\n const resetView = !SmoLayoutManager.areLayoutsEqual(info.layoutManager.getGlobalLayout(), this.score.layoutManager!.getGlobalLayout());\r\n const restChange = this.score.staves[0].partInfo.expandMultimeasureRests != info.expandMultimeasureRests;\r\n const stavesChange = this.score.staves[0].partInfo.stavesAfter !== info.stavesAfter;\r\n for (i = 0; i < partLength; ++i) {\r\n const nStaffIndex = storeStaff + i;\r\n const nInfo = new SmoPartInfo(info);\r\n nInfo.stavesBefore = i;\r\n nInfo.stavesAfter = partLength - i - 1;\r\n this.storeScore.staves[nStaffIndex].partInfo = nInfo;\r\n // If the staff index is currently displayed, \r\n const displayedIndex = this.staffMap.findIndex((x) => x === nStaffIndex);\r\n if (displayedIndex >= 0) {\r\n this.score.staves[displayedIndex].partInfo = new SmoPartInfo(nInfo);\r\n this.score.layoutManager = nInfo.layoutManager;\r\n }\r\n }\r\n if (resetView || restChange || stavesChange) {\r\n SmoOperation.computeMultipartRest(this.score);\r\n // this.resetPartView();\r\n this.renderer.rerenderAll()\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * A simpler API for applications to add a new staff to the score.\r\n * @param params - the instrument, which determines clef, etc.\r\n * @returns \r\n */\r\n async addStaffSimple(params: Partial): Promise {\r\n const instrumentParams = SmoInstrument.defaults;\r\n instrumentParams.startSelector.staff = instrumentParams.endSelector.staff = this.score.staves.length;\r\n instrumentParams.clef = params.clef ?? instrumentParams.clef;\r\n\r\n const staffParams = SmoSystemStaff.defaults;\r\n staffParams.staffId = this.storeScore.staves.length; // add a staff\r\n staffParams.measureInstrumentMap[0] = new SmoInstrument(instrumentParams);\r\n this.addStaff(staffParams);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Save the score to local storage.\r\n */\r\n quickSave() {\r\n const scoreStr = JSON.stringify(this.storeScore.serialize());\r\n localStorage.setItem(smoSerialize.localScore, scoreStr);\r\n }\r\n updateRepeatCount(count: number) {\r\n const measureSelections = this._undoTrackerMeasureSelections('repeat bar');\r\n const symbol = count > 0 ? true : false; \r\n measureSelections.forEach((ms) => {\r\n const store = this._getEquivalentSelection(ms);\r\n ms.measure.repeatCount = count;\r\n ms.measure.repeatSymbol = symbol;\r\n if (store) {\r\n store.measure.repeatCount = count;\r\n store.measure.repeatSymbol = symbol;\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.updatePromise();\r\n }\r\n /**\r\n * Update the measure formatting parameters for the current selection\r\n * @param format generic measure formatting parameters\r\n * @returns \r\n */\r\n setMeasureFormat(format: SmoMeasureFormat): Promise {\r\n const label = 'set measure format';\r\n const fromSelector = this.tracker.getExtremeSelection(-1).selector;\r\n const toSelector = this.tracker.getExtremeSelection(1).selector;\r\n const measureSelections = this.tracker.getSelectedMeasures();\r\n // If the formatting is on a part, preserve it in the part's info\r\n const isPart = this.isPartExposed();\r\n measureSelections.forEach((m) => {\r\n this._undoColumn(label, m.selector.measure);\r\n SmoOperation.setMeasureFormat(this.score, m, format);\r\n if (isPart) {\r\n m.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n const alt = this._getEquivalentSelection(m);\r\n SmoOperation.setMeasureFormat(this.storeScore, alt!, format);\r\n if (isPart) {\r\n alt!.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n });\r\n this._renderRectangle(fromSelector, toSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Remove system breaks from the measure formatting for selected measures\r\n * @returns \r\n */\r\n removeSystemBreaks(): Promise {\r\n const label = 'set measure format';\r\n const fromSelector = this.tracker.getExtremeSelection(-1).selector;\r\n const toSelector = this.tracker.getExtremeSelection(1).selector;\r\n const measureSelections = this.tracker.getSelectedMeasures();\r\n // If the formatting is on a part, preserve it in the part's info\r\n const isPart = this.isPartExposed();\r\n measureSelections.forEach((m) => {\r\n this._undoColumn(label, m.selector.measure);\r\n const format = new SmoMeasureFormat(m.measure.format);\r\n format.systemBreak = false;\r\n SmoOperation.setMeasureFormat(this.score, m, format);\r\n if (isPart) {\r\n m.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n const alt = this._getEquivalentSelection(m);\r\n SmoOperation.setMeasureFormat(this.storeScore, alt!, format);\r\n if (isPart) {\r\n alt!.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n });\r\n this._renderRectangle(fromSelector, toSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n renumberMeasures(measureIndex: number, localIndex: number) {\r\n this.score.updateRenumberingMap(measureIndex, localIndex);\r\n this.storeScore.updateRenumberingMap(measureIndex, localIndex);\r\n const mmsel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n if (mmsel) {\r\n this._renderChangedMeasures([mmsel]);\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Play the music from the starting selection\r\n * @returns \r\n */\r\n playFromSelection(): void {\r\n var mm = this.tracker.getExtremeSelection(-1);\r\n if (SuiAudioPlayer.playingInstance && SuiAudioPlayer.playingInstance.paused) {\r\n SuiAudioPlayer.playingInstance.play();\r\n return;\r\n }\r\n if (SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n new SuiAudioPlayer({ audioAnimation: this.audioAnimation, score: this.score, startIndex: mm.selector.measure, view: this }).play();\r\n }\r\n stopPlayer() {\r\n SuiAudioPlayer.stopPlayer();\r\n }\r\n pausePlayer() {\r\n SuiAudioPlayer.pausePlayer();\r\n }\r\n\r\n /**\r\n * Proxy calls to move the tracker parameters according to the\r\n * rules of the 'Home' key (depending on shift/ctrl/alt)\r\n * @param ev \r\n * @returns \r\n */\r\n async moveHome(ev: KeyEvent): Promise {\r\n this.tracker.moveHome(this.score, ev);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Proxy calls to move the tracker parameters according to the\r\n * rules of the 'End' key (depending on shift/ctrl/alt)\r\n * @param ev \r\n * @returns \r\n */\r\n async moveEnd(ev: KeyEvent): Promise {\r\n this.tracker.moveEnd(this.score, ev);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Grow the current selection by one to the left, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n async growSelectionLeft(): Promise {\r\n this.tracker.growSelectionLeft();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Grow the current selection by one to the right, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n async growSelectionRight(): Promise {\r\n this.tracker.growSelectionRight();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Select the next tabbable modifier near one of the selected notes\r\n * @param keyEv \r\n * @returns \r\n */\r\n async advanceModifierSelection(keyEv: KeyEvent): Promise {\r\n this.tracker.advanceModifierSelection(this.score, keyEv);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Select the next entire measure, if possible\r\n * @returns \r\n */\r\n async growSelectionRightMeasure(): Promise {\r\n this.tracker.growSelectionRightMeasure();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor forwards, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n async moveSelectionRight(ev: KeyEvent): Promise {\r\n this.tracker.moveSelectionRight(this.score, ev, true);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor backwards, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n async moveSelectionLeft(): Promise {\r\n this.tracker.moveSelectionLeft();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor back entire measure, if possible\r\n * @returns \r\n */\r\n async moveSelectionLeftMeasure(): Promise {\r\n this.tracker.moveSelectionLeftMeasure();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor forward one measure, if possible\r\n * @returns \r\n */\r\n async moveSelectionRightMeasure(): Promise {\r\n this.tracker.moveSelectionRightMeasure();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor to a higher pitch in the current chord, with wrap\r\n * @returns \r\n */\r\n async moveSelectionPitchUp(): Promise {\r\n this.tracker.moveSelectionPitchUp();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor to a lower pitch in the current chord, with wrap\r\n */\r\n async moveSelectionPitchDown(): Promise {\r\n this.tracker.moveSelectionPitchDown();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor up a staff in the system, if possible\r\n * @returns \r\n */\r\n async moveSelectionUp(): Promise {\r\n this.tracker.moveSelectionUp();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor down a staff in the system, if possible\r\n * @returns \r\n */\r\n async moveSelectionDown(): Promise {\r\n this.tracker.moveSelectionDown();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Set the current suggestions (hover element) as the selection\r\n * @returns \r\n */\r\n async selectSuggestion(evData: KeyEvent): Promise {\r\n this.tracker.selectSuggestion(this.score, evData);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Find an element at the given box, and make it the current selection\r\n * */\r\n async intersectingArtifact(evData: SvgBox): Promise {\r\n this.tracker.intersectingArtifact(evData);\r\n await this.renderer.updatePromise();\r\n } \r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { layoutDebug } from './layoutDebug';\r\ndeclare var $: any;\r\n\r\n/**\r\n * Respond to scroll events in music DOM, and handle the scroll of the viewport\r\n * @category SuiRender\r\n */\r\nexport class SuiScroller {\r\n selector: HTMLElement;\r\n svgPages: SvgPageMap;\r\n _scroll: SvgPoint;\r\n _offsetInitial: SvgPoint;\r\n viewport: SvgBox = SvgBox.default;\r\n logicalViewport: SvgBox = SvgBox.default;\r\n scrolling: boolean = false;\r\n // ### constructor\r\n // selector is the scrollable DOM container of the music container\r\n // (grandparent of svg element)\r\n constructor(selector: HTMLElement, svgPages: SvgPageMap) {\r\n const self = this;\r\n this.selector = selector;\r\n this._scroll = { x: 0, y: 0 };\r\n this.svgPages = svgPages;\r\n const scroller = $(selector);\r\n this._offsetInitial = { x: $(scroller).offset().left, y: $(scroller).offset().top };\r\n }\r\n\r\n get scrollState(): SvgPoint {\r\n return { x: this._scroll.x, y: this._scroll.y };\r\n }\r\n restoreScrollState(state: SvgPoint) {\r\n this.scrollOffset(state.x - this._scroll.x, state.y - this._scroll.y);\r\n this.deferUpdateDebug();\r\n }\r\n\r\n // ### handleScroll\r\n // update viewport in response to scroll events\r\n handleScroll(x: number, y: number) {\r\n this._scroll = { x, y };\r\n this.deferUpdateDebug();\r\n }\r\n updateDebug() {\r\n layoutDebug.updateScrollDebug(this._scroll);\r\n }\r\n deferUpdateDebug() {\r\n if (layoutDebug.mask & layoutDebug.values.scroll) {\r\n setTimeout(() => {\r\n this.updateDebug();\r\n }, 1);\r\n }\r\n }\r\n\r\n scrollAbsolute(x: number, y: number) {\r\n $(this.selector)[0].scrollLeft = x;\r\n $(this.selector)[0].scrollTop = y;\r\n this.netScroll.x = this._scroll.x = x;\r\n this.netScroll.y = this._scroll.y = y;\r\n this.deferUpdateDebug();\r\n }\r\n\r\n /**\r\n * Scroll such that the box is fully visible, if possible (if it is\r\n * not larger than the screen) \r\n **/\r\n scrollVisibleBox(box: SvgBox) {\r\n let yoff = 0;\r\n let xoff = 0;\r\n\r\n const screenBox = this.svgPages.svgToClientNoOffset(box);\r\n const scrollState = this.scrollState;\r\n const scrollDown = () => screenBox.y + screenBox.height > scrollState.y + this.viewport.height;\r\n const scrollUp = () => screenBox.y < scrollState.y;\r\n const scrollLeft = () => screenBox.x < scrollState.x;\r\n const scrollRight = () => screenBox.x + screenBox.width > scrollState.x + this.viewport.width;\r\n // Math: make sure we don't scroll down if scrollUp is indicated, etc.\r\n if (scrollUp()) {\r\n yoff = Math.min(screenBox.y - scrollState.y, 0);\r\n } \r\n if (scrollDown()) {\r\n yoff = Math.max(screenBox.y - (scrollState.y - screenBox.height), 0);\r\n }\r\n if (scrollLeft()) {\r\n xoff = Math.min(screenBox.x - scrollState.x, 0);\r\n }\r\n if (scrollRight()) {\r\n xoff = Math.max(screenBox.x - (scrollState.x - screenBox.height), 0);\r\n }\r\n this.scrollOffset(xoff, yoff);\r\n}\r\n // Update viewport size, and also fix height of scroll region.\r\n updateViewport() {\r\n $(this.selector).css('height', (window.innerHeight - $(this.selector).offset().top).toString() + 'px');\r\n this.viewport = SvgHelpers.boxPoints(\r\n $(this.selector).offset().left,\r\n $(this.selector).offset().top,\r\n $(this.selector).width(),\r\n $(this.selector).height());\r\n this.deferUpdateDebug();\r\n }\r\n\r\n // ### scrollBox\r\n // get the current viewport, in scrolled coordinates. When tracker maps the\r\n // music element to client coordinates, these are the coordinates used in the\r\n // map\r\n get scrollBox(): SvgBox {\r\n return SvgHelpers.boxPoints(this.viewport.x + this.netScroll.x,\r\n this.viewport.y + this.netScroll.y,\r\n this.viewport.width,\r\n this.viewport.height\r\n );\r\n }\r\n\r\n // ### scrollOffset\r\n // scroll the offset from the starting scroll point\r\n scrollOffset(x: number, y: number) {\r\n const xScreen = Math.max(this._scroll.x + x, 0);\r\n const yScreen = Math.max(this._scroll.y + y, 0);\r\n this.scrollAbsolute(xScreen, yScreen);\r\n }\r\n\r\n // ### netScroll\r\n // return the net amount we've scrolled, based on when the maps were make (initial)\r\n // , the offset of the container, and the absolute coordinates of the scrollbar.\r\n get netScroll() {\r\n var xoffset = $(this.selector).offset().left - this._offsetInitial.x;\r\n var yoffset = $(this.selector).offset().top - this._offsetInitial.y;\r\n return { x: this._scroll.x - xoffset, y: this._scroll.y - yoffset };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { Transposable, SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SvgPage } from './svgPageMap';\r\n\r\ndeclare var $: any;\r\n\r\nexport interface StrokeInfo {\r\n strokeName: string,\r\n stroke: string,\r\n strokeWidth: string | number,\r\n strokeDasharray: string | number,\r\n fill: string,\r\n opacity: number\r\n}\r\n\r\nexport interface OutlineInfo {\r\n stroke: StrokeInfo,\r\n classes: string,\r\n box: SvgBox | SvgBox[],\r\n scroll: SvgPoint,\r\n context: SvgPage,\r\n timeOff: number,\r\n timer?: number,\r\n element?: SVGSVGElement\r\n}\r\n\r\nexport interface GradientInfo {\r\n color: string, offset: string, opacity: number\r\n}\r\n\r\nexport interface Boxable {\r\n box: SvgBox\r\n}\r\n\r\nexport class SvgBuilder {\r\n e: Element;\r\n constructor(el: string) {\r\n const ns = SvgHelpers.namespace;\r\n this.e = document.createElementNS(ns, el);\r\n }\r\n classes(cl: string): SvgBuilder {\r\n this.e.setAttributeNS('', 'class', cl);\r\n return this;\r\n }\r\n attr(name: string, value: string): SvgBuilder {\r\n this.e.setAttributeNS('', name, value);\r\n return this;\r\n }\r\n\r\n text(x: number | string, y: number | string, classes: string, text: string): SvgBuilder {\r\n x = typeof (x) == 'string' ? x : x.toString();\r\n y = typeof (y) == 'string' ? y : y.toString();\r\n this.e.setAttributeNS('', 'class', classes);\r\n this.e.setAttributeNS('', 'x', x);\r\n this.e.setAttributeNS('', 'y', y);\r\n this.e.textContent = text;\r\n return this;\r\n }\r\n rect(x: number | string, y: number | string, width: number | string, height: number | string, classes: string): SvgBuilder {\r\n x = typeof (x) == 'string' ? x : x.toString();\r\n y = typeof (y) == 'string' ? y : y.toString();\r\n width = typeof (width) == 'string' ? width : width.toString();\r\n height = typeof (height) == 'string' ? height : height.toString();\r\n this.e.setAttributeNS('', 'x', x);\r\n this.e.setAttributeNS('', 'y', y);\r\n this.e.setAttributeNS('', 'width', width);\r\n this.e.setAttributeNS('', 'height', height);\r\n if (classes) {\r\n this.e.setAttributeNS('', 'class', classes);\r\n }\r\n return this;\r\n }\r\n line(x1: number | string, y1: number | string, x2: number | string, y2: number | string, classes: string): SvgBuilder {\r\n x1 = typeof (x1) == 'string' ? x1 : x1.toString();\r\n y1 = typeof (y1) == 'string' ? y1 : y1.toString();\r\n x2 = typeof (x2) == 'string' ? x2 : x2.toString();\r\n y2 = typeof (y2) == 'string' ? y2 : y2.toString();\r\n\r\n this.e.setAttributeNS('', 'x1', x1);\r\n this.e.setAttributeNS('', 'y1', y1);\r\n this.e.setAttributeNS('', 'x2', x2);\r\n this.e.setAttributeNS('', 'y2', y2);\r\n if (classes) {\r\n this.e.setAttributeNS('', 'class', classes);\r\n }\r\n return this;\r\n }\r\n append(el: any): SvgBuilder {\r\n this.e.appendChild(el.e);\r\n return this;\r\n }\r\n dom(): Element {\r\n return this.e;\r\n }\r\n static b(element: string): SvgBuilder {\r\n return new SvgBuilder(element);\r\n }\r\n}\r\n// ## SvgHelpers\r\n// Mostly utilities for converting coordinate spaces based on transforms, etc.\r\n// ### static class methods:\r\n// ---\r\nexport class SvgHelpers {\r\n static get namespace(): string {\r\n return \"http://www.w3.org/2000/svg\";\r\n }\r\n\r\n // ### gradient\r\n // Create an svg linear gradient.\r\n // Stops look like this:\r\n // `[{color:\"#eee\", offset:\"0%\",opacity:0.5}]`\r\n // orientation is horizontal or vertical\r\n static gradient(svg: SVGSVGElement, id: string, orientation: string, stops: GradientInfo[]) {\r\n var ns = SvgHelpers.namespace;\r\n var x2 = orientation === 'vertical' ? 0 : 1;\r\n var y2 = orientation === 'vertical' ? 1 : 0;\r\n\r\n var e = document.createElementNS(ns, 'linearGradient');\r\n e.setAttributeNS('', 'id', id);\r\n e.setAttributeNS('', 'x1', '0');\r\n e.setAttributeNS('', 'x2', x2.toString());\r\n e.setAttributeNS('', 'y1', '0');\r\n e.setAttributeNS('', 'y2', y2.toString());\r\n stops.forEach((stop) => {\r\n var s = document.createElementNS(ns, 'stop');\r\n s.setAttributeNS('', 'stop-opacity', stop.opacity.toString());\r\n s.setAttributeNS('', 'stop-color', stop.color);\r\n s.setAttributeNS('', 'offset', stop.offset);\r\n e.appendChild(s);\r\n\r\n });\r\n svg.appendChild(e);\r\n }\r\n\r\n static renderCursor(svg: SVGSVGElement, x: number, y: number, height: number) {\r\n var ns = SvgHelpers.namespace;\r\n const width = height * 0.4;\r\n x = x - (width / 2);\r\n var mcmd = (d: string, x: number, y: number) => {\r\n return d + 'M ' + x.toString() + ' ' + y.toString() + ' ';\r\n };\r\n var qcmd = (d: string, x1: number, y1: number, x2: number, y2: number) => {\r\n return d + 'q ' + x1.toString() + ' ' + y1.toString() + ' ' + x2.toString() + ' ' + y2.toString() + ' ';\r\n };\r\n var lcmd = (d: string, x: number, y: number) => {\r\n return d + 'L ' + x.toString() + ' ' + y.toString() + ' ';\r\n };\r\n var x1 = (width / 2) * .333;\r\n var y1 = -1 * (x1 / 4);\r\n var x2 = (width / 2);\r\n var y2 = x2 / 4;\r\n var ns = SvgHelpers.namespace;\r\n var e = document.createElementNS(ns, 'path');\r\n var d = '';\r\n d = mcmd(d, x, y);\r\n d = qcmd(d, x1, y1, x2, y2);\r\n d = lcmd(d, x + (width / 2), y + height - (width / 8));\r\n d = mcmd(d, x + width, y);\r\n d = qcmd(d, -1 * x1, y1, -1 * x2, y2);\r\n d = mcmd(d, x, y + height);\r\n d = qcmd(d, x1, -1 * y1, x2, -1 * y2);\r\n d = mcmd(d, x + width, y + height);\r\n d = qcmd(d, -1 * x1, -1 * y1, -1 * x2, -1 * y2);\r\n e.setAttributeNS('', 'd', d);\r\n e.setAttributeNS('', 'stroke-width', '1');\r\n e.setAttributeNS('', 'stroke', '#555');\r\n e.setAttributeNS('', 'fill', 'none');\r\n svg.appendChild(e);\r\n }\r\n\r\n // ### boxNote\r\n // update the note geometry based on current viewbox conditions.\r\n // This may not be the appropriate place for this...maybe in layout\r\n static updateArtifactBox(context: SvgPage, element: SVGSVGElement | undefined, artifact: Transposable) {\r\n if (!element) {\r\n console.log('updateArtifactBox: undefined element!');\r\n return;\r\n }\r\n artifact.logicalBox = context.offsetBbox(element);\r\n }\r\n\r\n // ### eraseOutline\r\n // Erases old outlineRects.\r\n static eraseOutline(params: OutlineInfo) {\r\n // Hack: Assume a stroke style, should just take a stroke param.\r\n if (params.element) {\r\n params.element.remove();\r\n params.element = undefined;\r\n }\r\n }\r\n\r\n static outlineRect(params: OutlineInfo) {\r\n const context = params.context;\r\n if (params.element && params.timer) {\r\n clearTimeout(params.timer);\r\n params.timer = undefined;\r\n params.element.remove();\r\n params.element = undefined;\r\n }\r\n if (params.timeOff) {\r\n params.timer = window.setTimeout(() => {\r\n if (params.element) {\r\n params.element.remove();\r\n params.element = undefined;\r\n params.timer = undefined;\r\n }\r\n }, params.timeOff);\r\n }\r\n // Don't highlight in print mode.\r\n if ($('body').hasClass('printing')) {\r\n return;\r\n }\r\n const classes = params.classes.length > 0 ? params.classes + ' ' + params.stroke.strokeName : params.stroke.strokeName;\r\n var grp = context.getContext().openGroup(classes, classes + '-outline');\r\n params.element = grp;\r\n const boxes = Array.isArray(params.box) ? params.box : [params.box];\r\n\r\n boxes.forEach((box: SvgBox) => {\r\n if (box) {\r\n var strokeObj:any = params.stroke;\r\n strokeObj['stroke-width'] = params.stroke.strokeWidth;\r\n var margin = 5;\r\n /* if (params.clientCoordinates === true) {\r\n box = SvgHelpers.smoBox(SvgHelpers.clientToLogical(context.svg, SvgHelpers.smoBox(SvgHelpers.adjustScroll(box, scroll))));\r\n } */\r\n context.getContext().rect(box.x - margin, box.y - margin, box.width + margin * 2, box.height + margin * 2, strokeObj);\r\n }\r\n });\r\n context.getContext().closeGroup(grp);\r\n }\r\n\r\n static setSvgStyle(element: Element, attrs: StrokeInfo) {\r\n element.setAttributeNS('', 'stroke', attrs.stroke);\r\n if (attrs.strokeDasharray) {\r\n element.setAttributeNS('', 'stroke-dasharray', attrs.strokeDasharray.toString());\r\n }\r\n if (attrs.strokeWidth) {\r\n element.setAttributeNS('', 'stroke-width', attrs.strokeWidth.toString());\r\n }\r\n if (attrs.fill) {\r\n element.setAttributeNS('', 'fill', attrs.fill);\r\n }\r\n }\r\n static rect(svg: Document, box: SvgBox, attrs: StrokeInfo, classes: string) {\r\n var rect = document.createElementNS(SvgHelpers.namespace, 'rect');\r\n SvgHelpers.setSvgStyle(rect, attrs);\r\n if (classes) {\r\n rect.setAttributeNS('', 'class', classes);\r\n }\r\n svg.appendChild(rect);\r\n return rect;\r\n }\r\n\r\n static line(svg: SVGSVGElement, x1: number | string, y1: number | string, x2: number | string, y2: number | string, attrs: StrokeInfo, classes: string) {\r\n var line = document.createElementNS(SvgHelpers.namespace, 'line');\r\n x1 = typeof (x1) == 'string' ? x1 : x1.toString();\r\n y1 = typeof (y1) == 'string' ? y1 : y1.toString();\r\n x2 = typeof (x2) == 'string' ? x2 : x2.toString();\r\n y2 = typeof (y2) == 'string' ? y2 : y2.toString();\r\n\r\n line.setAttributeNS('', 'x1', x1);\r\n line.setAttributeNS('', 'y1', y1);\r\n line.setAttributeNS('', 'x2', x2);\r\n line.setAttributeNS('', 'y2', y2);\r\n SvgHelpers.setSvgStyle(line, attrs);\r\n if (classes) {\r\n line.setAttributeNS('', 'class', classes);\r\n }\r\n svg.appendChild(line);\r\n }\r\n\r\n static arrowDown(svg: SVGSVGElement, box: SvgBox) {\r\n const arrowStroke: StrokeInfo = { strokeName: 'arrow-stroke', stroke: '#321', strokeWidth: '2', strokeDasharray: '4,1', fill: 'none', opacity: 1.0 };\r\n SvgHelpers.line(svg, box.x + box.width / 2, box.y, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n var arrowY = box.y + box.height / 4;\r\n SvgHelpers.line(svg, box.x, arrowY, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n SvgHelpers.line(svg, box.x + box.width, arrowY, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n }\r\n static debugBox(svg: SVGSVGElement, box: SvgBox | null, classes: string, voffset: number) {\r\n voffset = voffset ?? 0;\r\n classes = classes ?? '';\r\n if (!box)\r\n return;\r\n classes += ' svg-debug-box';\r\n var b = SvgBuilder.b;\r\n var mid = box.x + box.width / 2;\r\n var xtext = 'x1: ' + Math.round(box.x);\r\n var wtext = 'x2: ' + Math.round(box.width + box.x);\r\n var ytext = 'y1: ' + Math.round(box.y);\r\n var htext = 'y2: ' + Math.round(box.height + box.y);\r\n var ytextp = Math.round(box.y + box.height);\r\n var ytextp2 = Math.round(box.y + box.height - 30);\r\n\r\n var r = b('g').classes(classes)\r\n .append(\r\n b('text').text(box.x + 20, box.y - 14 + voffset, 'svg-debug-text', xtext))\r\n .append(\r\n b('text').text(mid - 20, box.y - 14 + voffset, 'svg-debug-text', wtext))\r\n .append(\r\n b('line').line(box.x, box.y - 2, box.x + box.width, box.y - 2, ''))\r\n .append(\r\n b('line').line(box.x, box.y - 8, box.x, box.y + 5, ''))\r\n .append(\r\n b('line').line(box.x + box.width, box.y - 8, box.x + box.width, box.y + 5, ''))\r\n .append(\r\n b('text').text(Math.round(box.x - 14 + voffset), ytextp, 'svg-vdebug-text', ytext)\r\n .attr('transform', 'rotate(-90,' + Math.round(box.x - 14 + voffset) + ',' + ytextp + ')'));\r\n if (box.height > 2) {\r\n r.append(\r\n b('text').text(Math.round(box.x - 14 + voffset), ytextp2, 'svg-vdebug-text', htext)\r\n .attr('transform', 'rotate(-90,' + Math.round(box.x - 14 + voffset) + ',' + (ytextp2) + ')'))\r\n .append(\r\n b('line').line(Math.round(box.x - 2), Math.round(box.y + box.height), box.x - 2, box.y, ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y + box.height), box.x + 6, Math.round(box.y + box.height), ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y), Math.round(box.x + 6), Math.round(box.y),''));\r\n }\r\n svg.appendChild(r.dom());\r\n }\r\n static debugBoxNoText(svg: SVGSVGElement, box: SvgBox | null, classes: string, voffset: number) {\r\n voffset = voffset ?? 0;\r\n classes = classes ?? '';\r\n if (!box)\r\n return;\r\n classes += ' svg-debug-box';\r\n var b = SvgBuilder.b;\r\n var r = b('g').classes(classes)\r\n .append(\r\n b('line').line(box.x, box.y - 2, box.x + box.width, box.y - 2, ''))\r\n .append(\r\n b('line').line(box.x, box.y - 8, box.x, box.y + 5, ''))\r\n .append(\r\n b('line').line(box.x + box.width, box.y - 8, box.x + box.width, box.y + 5, ''));\r\n if (box.height > 2) {\r\n r.append(\r\n b('line').line(Math.round(box.x - 2), Math.round(box.y + box.height), box.x - 2, box.y, ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y + box.height), box.x + 6, Math.round(box.y + box.height), ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y), Math.round(box.x + 6), Math.round(box.y),''));\r\n }\r\n svg.appendChild(r.dom());\r\n }\r\n\r\n static placeSvgText(svg: SVGSVGElement, attributes: Record[], classes: string, text: string): SVGSVGElement {\r\n var ns = SvgHelpers.namespace;\r\n var e = document.createElementNS(ns, 'text');\r\n attributes.forEach((attr) => {\r\n var key: string = Object.keys(attr)[0];\r\n e.setAttributeNS('', key, attr[key].toString());\r\n })\r\n if (classes) {\r\n e.setAttributeNS('', 'class', classes);\r\n }\r\n var tn = document.createTextNode(text);\r\n e.appendChild(tn);\r\n svg.appendChild(e);\r\n return (e as any);\r\n }\r\n static doesBox1ContainBox2(box1?: SvgBox, box2?: SvgBox): boolean {\r\n if (!box1 || !box2) {\r\n return false;\r\n }\r\n const i1 = box2.x - box1.x;\r\n const i2 = box2.y - box1.y;\r\n return (i1 > 0 && i1 < box1.width && i2 > 0 && i2 < box1.height);\r\n }\r\n\r\n // ### findIntersectionArtifact\r\n // find all object that intersect with the rectangle\r\n static findIntersectingArtifact(clientBox: SvgBox, objects: Boxable[]): Boxable[] {\r\n var box = SvgHelpers.smoBox(clientBox); //svgHelpers.untransformSvgPoint(this.context.svg,clientBox);\r\n\r\n // box.y = box.y - this.renderElement.offsetTop;\r\n // box.x = box.x - this.renderElement.offsetLeft;\r\n var rv: Boxable[] = [];\r\n objects.forEach((object) => {\r\n // Measure has been updated, but not drawn.\r\n if (!object.box) {\r\n // console.log('there is no box');\r\n } else {\r\n var obox = SvgHelpers.smoBox(object.box);\r\n if (SvgHelpers.doesBox1ContainBox2(obox, box)) {\r\n rv.push(object);\r\n }\r\n }\r\n });\r\n\r\n return rv;\r\n }\r\n\r\n static findSmallestIntersection(clientBox: SvgBox, objects: Boxable[]) {\r\n var ar = SvgHelpers.findIntersectingArtifact(clientBox, objects);\r\n if (!ar.length) {\r\n return null;\r\n }\r\n var rv = ar[0];\r\n var min = ar[0].box.width * ar[0].box.height;\r\n ar.forEach((obj) => {\r\n var tst = obj.box.width * obj.box.height;\r\n if (tst < min) {\r\n rv = obj;\r\n min = tst;\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n static translateElement(g: SVGSVGElement, x: number | string, y: number | string) {\r\n g.setAttributeNS('', 'transform', 'translate(' + x + ' ' + y + ')');\r\n }\r\n\r\n static stringify(box: SvgBox): string {\r\n if (box['width']) {\r\n\r\n return JSON.stringify({\r\n x: box.x,\r\n y: box.y,\r\n width: box.width,\r\n height: box.height\r\n }, null, ' ');\r\n } else {\r\n return JSON.stringify({\r\n x: box.x,\r\n y: box.y\r\n }, null, ' ');\r\n }\r\n }\r\n\r\n static log(box: SvgBox) {\r\n if (box['width']) {\r\n console.log(JSON.stringify({\r\n x: box.x,\r\n y: box.y,\r\n width: box.width,\r\n height: box.height\r\n }, null, ' '));\r\n } else {\r\n console.log('{}');\r\n }\r\n }\r\n\r\n // ### smoBox:\r\n // return a simple box object that can be serialized, copied\r\n // (from svg DOM box)\r\n static smoBox(box: any) {\r\n if (typeof (box) === \"undefined\" || box === null) {\r\n return SvgBox.default;\r\n }\r\n let testBox = box;\r\n if (Array.isArray(box)) {\r\n testBox = box[0];\r\n }\r\n const hround = (f: number): number => {\r\n return Math.round((f + Number.EPSILON) * 100) / 100;\r\n }\r\n const x = typeof (testBox.x) == 'undefined' ? hround(testBox.left) : hround(testBox.x);\r\n const y = typeof (testBox.y) == 'undefined' ? hround(testBox.top) : hround(testBox.y);\r\n return ({\r\n x: hround(x),\r\n y: hround(y),\r\n width: hround(testBox.width),\r\n height: hround(testBox.height)\r\n });\r\n }\r\n // ### unionRect\r\n // grow the bounding box two objects to include both.\r\n static unionRect(b1: SvgBox, b2: SvgBox): SvgBox {\r\n const x = Math.min(b1.x, b2.x);\r\n const y = Math.min(b1.y, b2.y);\r\n const width = Math.max(b1.x + b1.width, b2.x + b2.width) - x;\r\n const height = Math.max(b1.y + b1.height, b2.y + b2.height) - y;\r\n return {\r\n x: x,\r\n y: y,\r\n width: width,\r\n height: height\r\n };\r\n }\r\n\r\n static boxPoints(x: number, y: number, w: number, h: number): SvgBox {\r\n return ({\r\n x: x,\r\n y: y,\r\n width: w,\r\n height: h\r\n });\r\n }\r\n\r\n // ### svgViewport\r\n // set `svg` element to `width`,`height` and viewport `scale`\r\n static svgViewport(svg: SVGSVGElement, xOffset: number, yOffset: Number, width: number, height: number, scale: number) {\r\n svg.setAttributeNS('', 'width', '' + width);\r\n svg.setAttributeNS('', 'height', '' + height);\r\n svg.setAttributeNS('', 'viewBox', '' + xOffset + ' ' + yOffset + ' ' + Math.round(width / scale) + ' ' +\r\n Math.round(height / scale));\r\n }\r\n static removeElementsByClass(svg: SVGSVGElement, className: string) {\r\n const els = svg.getElementsByClassName(className);\r\n const ellength = els.length\r\n for (var xxx = 0; xxx < ellength; ++xxx) {\r\n els[0].remove();\r\n }\r\n }\r\n}\r\n","import { SvgHelpers, StrokeInfo } from \"./svgHelpers\";\r\nimport { SvgPoint, SvgBox, Renderable } from '../../smo/data/common';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SmoGlobalLayout, SmoPageLayout } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { ModifierTab } from '../../smo/xform/selections';\r\nimport { VexFlow } from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\n/**\r\n * classes for managing the SVG containers where the music is rendered. Each\r\n * page is a different SVG element. Screen coordinates need to be mapped to the\r\n * correct page and then to the correct element on that page.\r\n * @module /render/sui/svgPageMap\r\n */\r\ndeclare var $: any;\r\n/**\r\n * A selection map maps a sub-section of music (a measure, for instance) to a region\r\n * on the screen. SelectionMap can contain other SelectionMaps with\r\n * different 'T', for instance, notes in a measure, in a 'Russian Dolls' kind of model.\r\n * This allows us to search for elements in < O(n) time and avoid\r\n * expensive geometry operations.\r\n */\r\nexport abstract class SelectionMap {\r\n /**\r\n * Create a key from the selection (selector). e.g. (1,1)\r\n * @param selection \r\n */\r\n abstract createKey(selection: SmoSelection): K;\r\n /**\r\n * get a set of coordinates from this selection, if it has been rendered.\r\n * @param selection \r\n */\r\n abstract boxFromSelection(selection: SmoSelection): SvgBox;\r\n /**\r\n * Add the selection to our map, and possibly to our child map.\r\n * @param key \r\n * @param selection \r\n */\r\n abstract addKeyToMap(key: K, selection: SmoSelection): void;\r\n /**\r\n * find a collection of selection that match a bounding box, possibly by\r\n * recursing through our child SelectionMaps.\r\n * @param value \r\n * @param box \r\n * @param rv \r\n */\r\n abstract findValueInMap(value: T, box: SvgBox): SmoSelection[];\r\n /**\r\n * the outer bounding box of these selections\r\n */\r\n box: SvgBox = SvgBox.default;\r\n /**\r\n * map of key to child SelectionMaps or SmoSelections\r\n */\r\n systemMap: Map = new Map();\r\n /**\r\n * Given a bounding box (or point), find all the musical elements contained\r\n * in that point\r\n * @param box \r\n * @returns SmoSelection[]\r\n */\r\n findArtifact(box: SvgBox): SmoSelection[] {\r\n let rv: SmoSelection[] = [];\r\n for (const [key, value] of this.systemMap) {\r\n rv = rv.concat(this.findValueInMap(value, box));\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Add a rendered element to the map, and update the bounding box\r\n * @param selection \r\n * @returns \r\n */\r\n addArtifact(selection: SmoSelection) {\r\n if (!selection.note || !selection.note.logicalBox) {\r\n return; \r\n }\r\n const bounds = this.boxFromSelection(selection);\r\n if (this.systemMap.size === 0) {\r\n this.box = JSON.parse(JSON.stringify(bounds));\r\n }\r\n const ix = this.createKey(selection);\r\n this.addKeyToMap(ix, selection);\r\n this.box = SvgHelpers.unionRect(bounds, this.box);\r\n }\r\n}\r\n\r\n/**\r\n * logic to map a set of notes to a region on the screen, for searching\r\n */\r\nexport class MappedNotes extends SelectionMap{\r\n createKey(selection: SmoSelection): string {\r\n return `${selection.selector.voice}-${selection.selector.tick}`;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n return selection.note?.logicalBox ?? SvgBox.default;\r\n }\r\n addKeyToMap(key: string, selection: SmoSelection) {\r\n this.systemMap.set(key, selection);\r\n }\r\n findValueInMap(value: SmoSelection, box: SvgBox): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n const note = value.note;\r\n if (note && note.logicalBox && SvgHelpers.doesBox1ContainBox2(note.logicalBox, box)) {\r\n rv.push(value);\r\n }\r\n return rv;\r\n }\r\n}\r\n/**\r\n * Map of measures to a region on the page.\r\n */\r\nexport class MappedMeasures extends SelectionMap {\r\n box: SvgBox = SvgBox.default;\r\n systemMap: Map = new Map();\r\n createKey(selection: SmoSelection): string {\r\n return `${selection.selector.staff}-${selection.selector.measure}`;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n const noteBox = selection.note?.logicalBox ?? SvgBox.default;\r\n return SvgHelpers.unionRect(noteBox, selection.measure.svg.logicalBox);\r\n }\r\n addKeyToMap(key: string, selection: SmoSelection) {\r\n if (!this.systemMap.has(key)) {\r\n const nnote = new MappedNotes();\r\n this.systemMap.set(key, nnote); \r\n }\r\n this.systemMap.get(key)?.addArtifact(selection);\r\n }\r\n findValueInMap(value: MappedNotes, box: SvgBox): SmoSelection[] {\r\n let rv: SmoSelection[] = [];\r\n if (SvgHelpers.doesBox1ContainBox2(value.box, box)) {\r\n rv = rv.concat(value.findArtifact(box));\r\n }\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * Map of the systems on a page. Each system has a unique line index\r\n * which is the hash\r\n */\r\nexport class MappedSystems extends SelectionMap {\r\n box: SvgBox = SvgBox.default;\r\n systemMap: Map = new Map();\r\n createKey(selection: SmoSelection):number {\r\n return selection.measure.svg.lineIndex;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n const noteBox = selection.note?.logicalBox ?? SvgBox.default;\r\n return SvgHelpers.unionRect(noteBox, selection.measure.svg.logicalBox);\r\n }\r\n addKeyToMap(selectionKey: number, selection: SmoSelection) {\r\n if (!this.systemMap.has(selectionKey)) {\r\n const nmeasure = new MappedMeasures();\r\n this.systemMap.set(selectionKey, nmeasure);\r\n }\r\n this.systemMap.get(selectionKey)?.addArtifact(selection);\r\n }\r\n findValueInMap(value: MappedMeasures, box: SvgBox) {\r\n let rv: SmoSelection[] = [];\r\n if (SvgHelpers.doesBox1ContainBox2(value.box, box)) {\r\n rv = rv.concat(value.findArtifact(box));\r\n }\r\n return rv;\r\n } \r\n clearMeasure(selection: SmoSelection) {\r\n if (this.systemMap.has(selection.measure.svg.lineIndex)) {\r\n const mmap = this.systemMap.get(selection.measure.svg.lineIndex);\r\n if (mmap) {\r\n this.systemMap.delete(selection.measure.svg.lineIndex);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Each page is a different SVG element, with its own offset within the DOM. This\r\n * makes partial updates faster. SvgPage keeps track of all musical elements in SelectionMaps.\r\n * staff and score modifiers are kept in seperate lists since they may span multiple\r\n * musical elements (e.g. slurs, text elements).\r\n */\r\nexport class SvgPage {\r\n _renderer: any;\r\n pageNumber: number;\r\n box: SvgBox;\r\n systemMap: MappedSystems = new MappedSystems();\r\n modifierYKeys: number[] = [];\r\n modifierTabDivs: Record = {};\r\n static get defaultMap() {\r\n return {\r\n box: SvgBox.default,\r\n systemMap: new Map()\r\n };\r\n }\r\n /**\r\n * Modifiers are divided into `modifierDivs` vertical \r\n * rectangles for event lookup.\r\n */\r\n static get modifierDivs() {\r\n return 8;\r\n }\r\n /**\r\n * This is the VextFlow renderer context (SVGContext)\r\n * @returns \r\n */\r\n getContext(): any {\r\n return this._renderer.getContext();\r\n }\r\n get divSize(): number {\r\n return this.box.height / SvgPage.modifierDivs;\r\n }\r\n constructor(renderer: any, pageNumber: number, box: SvgBox) {\r\n this._renderer = renderer;\r\n this.pageNumber = pageNumber;\r\n this.box = box;\r\n let divEnd = this.divSize;\r\n for (let i = 0; i < SvgPage.modifierDivs; ++i) {\r\n this.modifierYKeys.push(divEnd);\r\n divEnd += this.divSize;\r\n }\r\n }\r\n /**\r\n * Given SVG y, return the div for modifiers\r\n * @param y \r\n * @returns \r\n */\r\n divIndex(y: number): number {\r\n return Math.round((y - this.box.y) / this.divSize);\r\n }\r\n /**\r\n * Remove all elements and modifiers in this page, for a redraw.\r\n */\r\n clearMap() {\r\n this.systemMap = new MappedSystems();\r\n this.modifierTabDivs = {};\r\n }\r\n /**\r\n * Clear mapped objects associated with a measure, including any\r\n * modifiers that span that measure.\r\n * @param selection \r\n */\r\n clearMeasure(selection: SmoSelection) { \r\n this.systemMap.clearMeasure(selection);\r\n const div = this.divIndex(selection.measure.svg.logicalBox.y);\r\n if (div < this.modifierYKeys.length) {\r\n const mods: ModifierTab[] = [];\r\n this.modifierTabDivs[div].forEach((mt: ModifierTab) => {\r\n if (mt.selection) {\r\n if (!SmoSelector.sameMeasure(mt.selection.selector, selection.selector)) {\r\n mods.push(mt);\r\n }\r\n } else {\r\n mods.push(mt);\r\n }\r\n });\r\n this.modifierTabDivs[div] = mods;\r\n }\r\n }\r\n /**\r\n * add a modifier to the page, indexed by its rectangle\r\n * @param modifier \r\n */\r\n addModifierTab(modifier: ModifierTab) {\r\n const div = this.divIndex(modifier.box.y);\r\n if (div < this.modifierYKeys.length) {\r\n if (!this.modifierTabDivs[div]) {\r\n this.modifierTabDivs[div] = [];\r\n }\r\n this.modifierTabDivs[div].push(modifier);\r\n }\r\n }\r\n /**\r\n * Add a new selection to the page\r\n * @param selection \r\n */\r\n addArtifact(selection: SmoSelection) { \r\n this.systemMap.addArtifact(selection);\r\n }\r\n /**\r\n * Try to find a selection on this page, based on the mouse event\r\n * @param box \r\n * @returns \r\n */\r\n findArtifact(box: SvgBox): SmoSelection[] {\r\n return this.systemMap.findArtifact(box);\r\n }\r\n /**\r\n * Try to find a modifier on this page, based on the mouse event\r\n * @param box \r\n * @returns \r\n */\r\n findModifierTabs(box: SvgBox): ModifierTab[] {\r\n const rv:ModifierTab[] = [];\r\n const div = this.divIndex(box.y);\r\n if (div < this.modifierYKeys.length) {\r\n if (this.modifierTabDivs[div]) {\r\n this.modifierTabDivs[div].forEach((modTab) => {\r\n if (SvgHelpers.doesBox1ContainBox2(modTab.box, box)) {\r\n rv.push(modTab);\r\n }\r\n });\r\n }\r\n }\r\n return rv;\r\n }\r\n clearModifiers() { \r\n Object.keys(this.modifierTabDivs).forEach((key) => {\r\n const modifiers = this.modifierTabDivs[parseInt(key)];\r\n modifiers.forEach((mod) => {\r\n if (mod instanceof SmoTextGroup) {\r\n (mod as SmoTextGroup).elements.forEach((element) => {\r\n element.remove();\r\n });\r\n (mod as SmoTextGroup).elements = [];\r\n }\r\n });\r\n });\r\n this.modifierTabDivs = {};\r\n }\r\n /**\r\n * Measure the bounding box of an element. Return the box as if the top of the first page were 0,0.\r\n * Bounding boxes are stored in absolute coordinates from the top of the first page. When rendering\r\n * elements, we adjust the coordinates for hte local page.\r\n * @param element \r\n * @returns \r\n */\r\n offsetBbox(element: SVGSVGElement): SvgBox {\r\n const yoff = this.box.y;\r\n const xoff = this.box.x;\r\n const lbox = element.getBBox();\r\n return ({ x: lbox.x + xoff, y: lbox.y + yoff, width: lbox.width, height: lbox.height });\r\n }\r\n /**\r\n * Adjust the bounding box to local coordinates for this page.\r\n * @param box \r\n * @returns \r\n */\r\n offsetSvgBox(box: SvgBox) {\r\n return { x: box.x - this.box.x, y: box.y - this.box.y, width: box.width, height: box.height };\r\n }\r\n /**\r\n * Adjust the point to local coordinates for this page.\r\n * @param box \r\n * @returns \r\n */\r\n offsetSvgPoint(box: SvgPoint) {\r\n return { x: box.x - this.box.x, y: box.y - this.box.y };\r\n }\r\n get svg(): SVGSVGElement {\r\n return this.getContext().svg as SVGSVGElement;\r\n }\r\n}\r\n/**\r\n * A container for all the SVG elements, and methods to manage adding and finding elements. Each\r\n * page of the score has its own SVG element.\r\n */\r\nexport class SvgPageMap {\r\n _layout: SmoGlobalLayout;\r\n _container: HTMLElement;\r\n _pageLayouts: SmoPageLayout[];\r\n vfRenderers: SvgPage[] = [];\r\n static get strokes(): Record {\r\n return {\r\n 'debug-mouse-box': {\r\n strokeName: 'debug-mouse',\r\n stroke: '#7ce',\r\n strokeWidth: 3,\r\n strokeDasharray: '1,1',\r\n fill: 'none',\r\n opacity: 0.6\r\n }\r\n };\r\n }\r\n containerOffset: SvgPoint = SvgPoint.default;\r\n /**\r\n * \r\n * @param layout - defines the page width/height and relative zoom common to all the pages\r\n * @param container - the parent DOM element that contains all the pages\r\n * @param pages - the layouts (margins, etc) for each pages.\r\n */\r\n constructor(layout: SmoGlobalLayout, container: HTMLElement, pages: SmoPageLayout[]) {\r\n this._layout = layout;\r\n this._container = container;\r\n this._pageLayouts = pages;\r\n }\r\n get container() {\r\n return this._container;\r\n }\r\n /**\r\n * Update the offset of the music container DOM element, in client coordinates. This is used\r\n * when converting absolute screen coordinates (like from a mouse event) to SVG coordinates\r\n * @param scrollPoint \r\n */\r\n updateContainerOffset(scrollPoint: SvgPoint) {\r\n const rect = SvgHelpers.smoBox(this.container.getBoundingClientRect());\r\n this.containerOffset = { x: rect.x + scrollPoint.x, y: rect.y + scrollPoint.y };\r\n }\r\n get layout() {\r\n return this._layout;\r\n }\r\n get pageLayouts() {\r\n return this._pageLayouts;\r\n }\r\n get zoomScale() {\r\n return this.layout.zoomScale;\r\n }\r\n get renderScale() {\r\n return this.layout.svgScale;\r\n }\r\n get pageDivHeight() {\r\n return this.layout.pageHeight * this.zoomScale;\r\n }\r\n get pageDivWidth() {\r\n return this.layout.pageWidth * this.zoomScale;\r\n }\r\n get pageHeight() {\r\n return this.layout.pageHeight / this.layout.svgScale;\r\n }\r\n get pageWidth() {\r\n return this.layout.pageWidth / this.layout.svgScale;\r\n }\r\n get totalHeight() {\r\n return this.pageDivHeight * this.pageLayouts.length;\r\n }\r\n /**\r\n * create/re-create all the page SVG elements\r\n */\r\n createRenderers() {\r\n // $(this.container).html('');\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(this.totalHeight) + 'px');\r\n const toRemove: HTMLElement[] = [];\r\n this.vfRenderers.forEach((renderer) => {\r\n const container = (renderer.svg as SVGSVGElement).parentElement;\r\n if (container) {\r\n toRemove.push(container);\r\n }\r\n });\r\n toRemove.forEach((tt) => {\r\n tt.remove();\r\n });\r\n this.vfRenderers = [];\r\n this.pageLayouts.forEach(() => {\r\n this.addPage();\r\n });\r\n }\r\n addPage() {\r\n const ix = this.vfRenderers.length;\r\n const container = document.createElement('div');\r\n container.setAttribute('id', 'smoosic-svg-div-' + ix.toString());\r\n this._container.append(container);\r\n const vexRenderer = new VF.Renderer(container, VF.Renderer.Backends.SVG);\r\n const svg = (vexRenderer.getContext() as any).svg as SVGSVGElement;\r\n SvgHelpers.svgViewport(svg, 0, 0, this.pageDivWidth, this.pageDivHeight, this.renderScale * this.zoomScale);\r\n const topY = this.pageHeight * ix;\r\n const box = SvgHelpers.boxPoints(0, topY, this.pageWidth, this.pageHeight);\r\n this.vfRenderers.push(new SvgPage(vexRenderer, ix, box));\r\n }\r\n updateZoom(zoomScale: number) {\r\n this.layout.zoomScale = zoomScale;\r\n this.vfRenderers.forEach((pp) => {\r\n SvgHelpers.svgViewport(pp.svg, 0, 0, this.pageDivWidth, this.pageDivHeight, this.renderScale * this.zoomScale);\r\n });\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(this.totalHeight) + 'px');\r\n }\r\n\r\n /**\r\n * Convert from screen/client event to SVG space. We assume the scroll offset is already added to `box`\r\n * @param box \r\n * @returns \r\n */\r\n clientToSvg(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x - this.containerOffset.x) / cof;\r\n const y = (box.y - this.containerOffset.y) / cof;\r\n const logicalBox = SvgHelpers.boxPoints(x, y, Math.max(box.width / cof, 1), Math.max(box.height / cof, 1));\r\n logicalBox.y -= Math.round(logicalBox.y / this.layout.pageHeight) / this.layout.svgScale;\r\n if (layoutDebug.mask | layoutDebug.values['mouseDebug']) {\r\n layoutDebug.updateMouseDebug(box, logicalBox, this.containerOffset);\r\n }\r\n return logicalBox;\r\n }\r\n /**\r\n * Convert from SVG bounding box to screen coordinates\r\n * @param box \r\n * @returns \r\n */\r\n svgToClient(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x * cof) + this.containerOffset.x;\r\n const y = (box.y * cof) + this.containerOffset.y;\r\n const clientBox = SvgHelpers.boxPoints(x, y, box.width * cof, box.height * cof);\r\n return clientBox;\r\n }\r\n /**\r\n * Convert from SVG bounding box to screen coordinates\r\n * @param box \r\n * @returns \r\n */\r\n svgToClientNoOffset(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x * cof);\r\n const y = (box.y * cof);\r\n const clientBox = SvgHelpers.boxPoints(x, y, box.width * cof, box.height * cof);\r\n return clientBox;\r\n }\r\n\r\n /**\r\n * Find a selection from a mouse event\r\n * @param box - location of a mouse event or specific screen coordinates\r\n * @returns \r\n */\r\n findArtifact(logicalBox: SvgBox): { selections: SmoSelection[], page: SvgPage} {\r\n const selections: SmoSelection[] = [];\r\n const page = this.getRenderer(logicalBox);\r\n if (page) {\r\n return { selections: page.findArtifact(logicalBox), page };\r\n }\r\n return { selections, page: this.vfRenderers[0] };\r\n }\r\n /**\r\n * Find any modifiers intersecting with `box`\r\n * @param box \r\n * @returns \r\n */\r\n findModifierTabs(logicalBox: SvgBox): ModifierTab[] {\r\n const page = this.getRenderer(logicalBox);\r\n if (page) {\r\n return page.findModifierTabs(logicalBox);\r\n }\r\n return [];\r\n }\r\n /**\r\n * add a rendered page to the page map\r\n * @param selection \r\n * @returns \r\n */\r\n addArtifact(selection: SmoSelection) {\r\n if (!selection.note || !selection.note.logicalBox) {\r\n return;\r\n }\r\n const page = this.getRenderer(selection.note.logicalBox);\r\n if (page) {\r\n page.addArtifact(selection);\r\n }\r\n }\r\n /**\r\n * add a rendered modifier to the page map\r\n * @param modifier \r\n */\r\n addModifierTab(modifier: ModifierTab) {\r\n const page = this.getRenderer(modifier.box);\r\n if (page) {\r\n page.addModifierTab(modifier);\r\n }\r\n }\r\n clearModifiersForPage(page: number) {\r\n if (this.vfRenderers.length > page) {\r\n this.vfRenderers[page].clearModifiers();\r\n }\r\n }\r\n /**\r\n * The number of pages is changing, remove the last page\r\n * @returns \r\n */\r\n removePage() {\r\n let i = 0;\r\n // Don't remove the only page\r\n if (this.vfRenderers.length < 2) {\r\n return;\r\n }\r\n\r\n // Remove last page div\r\n const elementId = 'smoosic-svg-div-' + (this.vfRenderers.length - 1).toString();\r\n const container = document.getElementById(elementId);\r\n if (container) {\r\n container.remove();\r\n }\r\n // pop last renderer off the stack.\r\n const renderers = [];\r\n const layouts = [];\r\n for (i = 0; i < this.vfRenderers.length - 1; ++i) {\r\n renderers.push(this.vfRenderers[i]);\r\n layouts.push(this.pageLayouts[i]);\r\n }\r\n this.vfRenderers = renderers;\r\n this._pageLayouts = layouts;\r\n\r\n // update page height\r\n const totalHeight = this.pageDivHeight * this.pageLayouts.length ;\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(totalHeight) + 'px');\r\n }\r\n /**\r\n * The score dimensions have changed, clear maps and recreate the pages.\r\n * @param layout \r\n * @param pageLayouts \r\n */\r\n updateLayout(layout: SmoGlobalLayout, pageLayouts: SmoPageLayout[]) {\r\n this._layout = layout;\r\n this._pageLayouts = pageLayouts;\r\n this.createRenderers();\r\n }\r\n /**\r\n * Return the page by index\r\n * @param page \r\n * @returns \r\n */\r\n getRendererForPage(page: number) {\r\n if (this.vfRenderers.length > page) {\r\n return this.vfRenderers[page];\r\n }\r\n return this.vfRenderers[this.vfRenderers.length - 1];\r\n }\r\n /**\r\n * Return the SvgPage based on SVG point (conversion from client coordinates already done)\r\n * @param point \r\n * @returns \r\n */\r\n getRendererFromPoint(point: SvgPoint): SvgPage | null {\r\n const ix = Math.floor(point.y / (this.layout.pageHeight / this.layout.svgScale));\r\n if (ix < this.vfRenderers.length) {\r\n return this.vfRenderers[ix];\r\n }\r\n return null;\r\n }\r\n /**\r\n * Return the SvgPage based on SVG point (conversion from client coordinates already done)\r\n * @param box \r\n * @returns \r\n */\r\n getRenderer(box: SvgBox | SvgPoint): SvgPage {\r\n const rv = this.getRendererFromPoint({ x: box.x, y: box.y });\r\n if (rv) {\r\n return rv;\r\n }\r\n return this.vfRenderers[0];\r\n }\r\n /**\r\n * Return the page based on the coordinates of a modifier\r\n * @param modifier \r\n * @returns \r\n */\r\n getRendererFromModifier(modifier?: Renderable) {\r\n let rv = this.vfRenderers[0];\r\n if (modifier && modifier.logicalBox) {\r\n const context = this.getRenderer(modifier.logicalBox);\r\n if (context) {\r\n rv = context;\r\n }\r\n }\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiInlineText, SuiTextBlock } from './textRender';\r\nimport { SuiRenderState } from './renderState';\r\nimport { SuiScroller } from './scroller';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { OutlineInfo, StrokeInfo, SvgHelpers } from './svgHelpers';\r\nimport { SmoScoreText, SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SvgBox, KeyEvent } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SvgPage } from './svgPageMap';\r\nimport { SuiScoreViewOperations } from './scoreViewOperations';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { VexFlow, getChordSymbolGlyphFromCode } from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\ndeclare var $: any;\r\n\r\n/**\r\n * Basic parameters to create a text editor\r\n * @param context Vex renderer context\r\n * @param scroller\r\n * @param x initial x position\r\n * @param y initial y position\r\n * @param text initial text\r\n */\r\nexport interface SuiTextEditorParams {\r\n pageMap: SvgPageMap,\r\n context: SvgPage,\r\n scroller: SuiScroller,\r\n x: number,\r\n y: number,\r\n text: string\r\n}\r\nexport interface SuiLyricEditorParams extends SuiTextEditorParams {\r\n lyric: SmoLyric\r\n}\r\n\r\nexport interface SuiTextSessionParams {\r\n scroller: SuiScroller;\r\n renderer: SuiRenderState;\r\n scoreText: SmoScoreText;\r\n text: string;\r\n x: number;\r\n y: number;\r\n textGroup: SmoTextGroup;\r\n}\r\n\r\nexport interface SuiLyricSessionParams {\r\n score: SmoScore;\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n view: SuiScoreViewOperations;\r\n verse: number;\r\n selector: SmoSelector;\r\n}\r\nexport type SuiTextStrokeName = 'text-suggestion' | 'text-selection' | 'text-highlight' | 'text-drag' | 'inactive-text';\r\n/**\r\n * The heirarchy of text editing objects goes:\r\n * \r\n * `dialog -> component -> session -> editor`\r\n * \r\n * Editors and Sessions are defined in this module.\r\n * ### editor\r\n * handles low-level events and renders the preview using one\r\n * of the text layout objects.\r\n * ### session\r\n * creates and destroys editors, e.g. for lyrics that have a Different\r\n * editor instance for each note.\r\n * \r\n * ## SuiTextEditor\r\n * The base text editor handles the positioning and inserting\r\n * of text blocks into the text area. The derived class shoud interpret key events.\r\n * A container class will manage the session for starting/stopping the editor\r\n * and retrieving the results into the target object.\r\n * */\r\nexport class SuiTextEditor {\r\n static get States(): Record {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n // parsers use this convention to represent text types (superscript)\r\n static textTypeToChar(textType: number): string {\r\n if (textType === SuiInlineText.textTypes.superScript) {\r\n return '^';\r\n }\r\n if (textType === SuiInlineText.textTypes.subScript) {\r\n return '%';\r\n }\r\n return '';\r\n }\r\n\r\n static textTypeFromChar(char: string): number {\r\n if (char === '^') {\r\n return SuiInlineText.textTypes.superScript;\r\n }\r\n if (char === '%') {\r\n return SuiInlineText.textTypes.subScript;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n svgText: SuiInlineText | null = null;\r\n context: SvgPage;\r\n outlineInfo: OutlineInfo | null = null;\r\n pageMap: SvgPageMap;\r\n x: number = 0;\r\n y: number = 0;\r\n text: string;\r\n textPos: number = 0;\r\n selectionStart: number = -1;\r\n selectionLength: number = -1;\r\n empty: boolean = true;\r\n scroller: SuiScroller;\r\n suggestionIndex: number = -1;\r\n cursorState: boolean = false;\r\n cursorRunning: boolean = false;\r\n textType: number = SuiInlineText.textTypes.normal;\r\n fontWeight: string = 'normal';\r\n fontFamily: string = 'Merriweather';\r\n fontSize: number = 14;\r\n state: number = SuiTextEditor.States.RUNNING;\r\n suggestionRect: OutlineInfo | null = null;\r\n constructor(params: SuiTextEditorParams) {\r\n this.scroller = params.scroller;\r\n this.context = params.context;\r\n this.x = params.x;\r\n this.y = params.y;\r\n this.text = params.text;\r\n this.pageMap = params.pageMap;\r\n }\r\n\r\n static get strokes(): Record {\r\n return {\r\n 'text-suggestion': {\r\n strokeName: 'text-suggestion',\r\n stroke: '#cce',\r\n strokeWidth: 1,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n 'text-selection': {\r\n strokeName: 'text-selection',\r\n stroke: '#99d',\r\n strokeWidth: 1,\r\n fill: 'none',\r\n strokeDasharray: '',\r\n opacity: 1.0\r\n }, \r\n 'text-highlight': {\r\n strokeName: 'text-highlight',\r\n stroke: '#dd9',\r\n strokeWidth: 1,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n }, \r\n 'text-drag': {\r\n strokeName: 'text-drag',\r\n stroke: '#d99',\r\n strokeWidth: 1,\r\n strokeDasharray: '2,1',\r\n fill: '#eee',\r\n opacity: 0.3\r\n },\r\n 'inactive-text': {\r\n strokeName: 'inactive-text',\r\n stroke: '#fff',\r\n strokeWidth: 1,\r\n strokeDasharray: '',\r\n fill: '#ddd',\r\n opacity: 0.3\r\n }\r\n };\r\n }\r\n\r\n // ### _suggestionParameters\r\n // Create the svg text outline parameters\r\n _suggestionParameters(box: SvgBox, strokeName: SuiTextStrokeName): OutlineInfo {\r\n const outlineStroke = SuiTextEditor.strokes[strokeName];\r\n if (!this.suggestionRect) {\r\n this.suggestionRect = {\r\n context: this.context, box, classes: '',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n };\r\n this.suggestionRect.box = SvgHelpers.smoBox(box);\r\n return this.suggestionRect;\r\n }\r\n\r\n // ### _expandSelectionToSuggestion\r\n // Expand the selection to include the character the user clicked on.\r\n _expandSelectionToSuggestion() {\r\n if (this.suggestionIndex < 0) {\r\n return;\r\n }\r\n if (this.selectionStart < 0) {\r\n this._setSelectionToSugggestion();\r\n return;\r\n } else if (this.selectionStart > this.suggestionIndex) {\r\n const oldStart = this.selectionStart;\r\n this.selectionStart = this.suggestionIndex;\r\n this.selectionLength = (oldStart - this.selectionStart) + this.selectionLength;\r\n } else if (this.selectionStart < this.suggestionIndex\r\n && this.selectionStart > this.selectionStart + this.selectionLength) {\r\n this.selectionLength = (this.suggestionIndex - this.selectionStart) + 1;\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### _setSelectionToSugggestion\r\n // Set the selection to the character the user clicked on.\r\n _setSelectionToSugggestion() {\r\n this.selectionStart = this.suggestionIndex;\r\n this.selectionLength = 1;\r\n this.suggestionIndex = -1;\r\n this._updateSelections();\r\n }\r\n\r\n rerender() {\r\n this.svgText?.unrender();\r\n this.svgText?.render();\r\n }\r\n // ### handleMouseEvent\r\n // Handle hover/click behavior for the text under edit.\r\n // Returns: true if the event was handled here\r\n handleMouseEvent(ev: any): boolean {\r\n let handled = false;\r\n if (this.svgText === null) {\r\n return false;\r\n }\r\n const clientBox = SvgHelpers.boxPoints(\r\n ev.clientX + this.scroller.scrollState.x,\r\n ev.clientY + this.scroller.scrollState.y, \r\n 1, 1);\r\n const logicalBox = this.pageMap.clientToSvg(clientBox);\r\n var blocks = this.svgText.getIntersectingBlocks(logicalBox);\r\n\r\n // The mouse is not over the text\r\n if (!blocks.length) {\r\n if (this.suggestionRect) {\r\n SvgHelpers.eraseOutline(this.suggestionRect);\r\n }\r\n\r\n // If the user clicks and there was a previous selection, treat it as selected\r\n if (ev.type === 'click' && this.suggestionIndex >= 0) {\r\n if (ev.shiftKey) {\r\n this._expandSelectionToSuggestion();\r\n } else {\r\n this._setSelectionToSugggestion();\r\n }\r\n handled = true;\r\n this.rerender();\r\n }\r\n return handled;\r\n }\r\n handled = true;\r\n // outline the text that is hovered. Since mouse is a point\r\n // there should only be 1\r\n blocks.forEach((block) => {\r\n SvgHelpers.outlineRect(this._suggestionParameters(block.box, 'text-suggestion'));\r\n this.suggestionIndex = block.index;\r\n });\r\n // if the user clicked on it, add it to the selection.\r\n if (ev.type === 'click') {\r\n if (this.suggestionRect) {\r\n SvgHelpers.eraseOutline(this.suggestionRect);\r\n }\r\n if (ev.shiftKey) {\r\n this._expandSelectionToSuggestion();\r\n } else {\r\n this._setSelectionToSugggestion();\r\n }\r\n const npos = this.selectionStart + this.selectionLength;\r\n if (npos >= 0 && npos <= this.svgText.blocks.length) {\r\n this.textPos = npos;\r\n }\r\n this.rerender();\r\n }\r\n return handled;\r\n }\r\n\r\n // ### _serviceCursor\r\n // Flash the cursor as a background task\r\n _serviceCursor() {\r\n if (this.cursorState) {\r\n this.svgText?.renderCursorAt(this.textPos - 1, this.textType);\r\n } else {\r\n this.svgText?.removeCursor();\r\n }\r\n this.cursorState = !this.cursorState;\r\n }\r\n // ### _refreshCursor\r\n // If the text position changes, update the cursor position right away\r\n // don't wait for blink.\r\n _refreshCursor() {\r\n this.svgText?.removeCursor();\r\n this.cursorState = true;\r\n this._serviceCursor();\r\n }\r\n\r\n get _endCursorCondition(): boolean {\r\n return this.cursorRunning === false;\r\n }\r\n\r\n _cursorPreResolve() {\r\n this.svgText?.removeCursor();\r\n }\r\n\r\n _cursorPoll() {\r\n this._serviceCursor();\r\n }\r\n\r\n // ### startCursorPromise\r\n // Used by the calling logic to start the cursor.\r\n // returns a promise that can be pended when the editing ends.\r\n startCursorPromise(): Promise {\r\n var self = this;\r\n this.cursorRunning = true;\r\n this.cursorState = true;\r\n self.svgText?.renderCursorAt(this.textPos, SuiInlineText.textTypes.normal);\r\n return PromiseHelpers.makePromise(() => this._endCursorCondition, () => this._cursorPreResolve(), () => this._cursorPoll(), 333);\r\n }\r\n stopCursor() {\r\n this.cursorRunning = false;\r\n }\r\n\r\n // ### setTextPos\r\n // Set the text position within the editor space and update the cursor\r\n setTextPos(val: number) {\r\n this.textPos = val;\r\n this._refreshCursor();\r\n }\r\n // ### moveCursorRight\r\n // move cursor right within the block of text.\r\n moveCursorRight() {\r\n if (this.svgText === null) {\r\n return;\r\n }\r\n if (this.textPos <= this.svgText.blocks.length) {\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n }\r\n // ### moveCursorRight\r\n // move cursor left within the block of text.\r\n moveCursorLeft() {\r\n if (this.textPos > 0) {\r\n this.setTextPos(this.textPos - 1);\r\n }\r\n }\r\n\r\n // ### moveCursorRight\r\n // highlight the text selections\r\n _updateSelections() {\r\n let i = 0;\r\n const end = this.selectionStart + this.selectionLength;\r\n const start = this.selectionStart;\r\n this.svgText?.blocks.forEach((block) => {\r\n const val = start >= 0 && i >= start && i < end;\r\n this.svgText!.setHighlight(block, val);\r\n ++i;\r\n });\r\n }\r\n\r\n // ### _checkGrowSelectionLeft\r\n // grow selection within the bounds\r\n _checkGrowSelectionLeft() {\r\n if (this.selectionStart > 0) {\r\n this.selectionStart -= 1;\r\n this.selectionLength += 1;\r\n }\r\n }\r\n // ### _checkGrowSelectionRight\r\n // grow selection within the bounds\r\n _checkGrowSelectionRight() {\r\n if (this.svgText === null) {\r\n return;\r\n }\r\n const end = this.selectionStart + this.selectionLength;\r\n if (end < this.svgText.blocks.length) {\r\n this.selectionLength += 1;\r\n }\r\n }\r\n\r\n // ### growSelectionLeft\r\n // handle the selection keys\r\n growSelectionLeft() {\r\n if (this.selectionStart === -1) {\r\n this.moveCursorLeft();\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n } else if (this.textPos === this.selectionStart) {\r\n this.moveCursorLeft();\r\n this._checkGrowSelectionLeft();\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### growSelectionRight\r\n // handle the selection keys\r\n growSelectionRight() {\r\n if (this.selectionStart === -1) {\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n this.moveCursorRight();\r\n } else if (this.selectionStart + this.selectionLength === this.textPos) {\r\n this._checkGrowSelectionRight();\r\n this.moveCursorRight();\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### _clearSelections\r\n // Clear selected text\r\n _clearSelections() {\r\n this.selectionStart = -1;\r\n this.selectionLength = 0;\r\n }\r\n\r\n // ### deleteSelections\r\n // delete the selected blocks of text/glyphs\r\n deleteSelections() {\r\n let i = 0;\r\n const blockPos = this.selectionStart;\r\n for (i = 0; i < this.selectionLength; ++i) {\r\n this.svgText?.removeBlockAt(blockPos); // delete shifts blocks so keep index the same.\r\n }\r\n this.setTextPos(blockPos);\r\n this.selectionStart = -1;\r\n this.selectionLength = 0;\r\n }\r\n\r\n // ### parseBlocks\r\n // THis can be overridden by the base class to create the correct combination\r\n // of text and glyph blocks based on the underlying text\r\n parseBlocks() {\r\n let i = 0;\r\n \r\n this.svgText = new SuiInlineText({\r\n context: this.context, startX: this.x, startY: this.y,\r\n fontFamily: this.fontFamily, fontSize: this.fontSize, fontWeight: this.fontWeight, scroller: this.scroller,\r\n purpose: SuiInlineText.textPurposes.edit,\r\n fontStyle: 'normal', pageMap: this.pageMap\r\n });\r\n for (i = 0; i < this.text.length; ++i) {\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = this.text[i]\r\n this.svgText.addTextBlockAt(i, def);\r\n this.empty = false;\r\n }\r\n this.textPos = this.text.length;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n // ### evKey\r\n // Handle key events that filter down to the editor\r\n async evKey(evdata: KeyEvent): Promise {\r\n const removeCurrent = () => {\r\n if (this.svgText) {\r\n this.svgText.element?.remove();\r\n this.svgText.element = null;\r\n }\r\n }\r\n if (evdata.code === 'ArrowRight') {\r\n if (evdata.shiftKey) {\r\n this.growSelectionRight();\r\n } else {\r\n this.moveCursorRight();\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'ArrowLeft') {\r\n if (evdata.shiftKey) {\r\n this.growSelectionLeft();\r\n } else {\r\n this.moveCursorLeft();\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'Backspace') {\r\n removeCurrent();\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n } else {\r\n if (this.textPos > 0) {\r\n this.selectionStart = this.textPos - 1;\r\n this.selectionLength = 1;\r\n this.deleteSelections();\r\n }\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'Delete') {\r\n removeCurrent();\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n } else {\r\n if (this.textPos > 0 && this.svgText !== null && this.textPos < this.svgText.blocks.length) {\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n this.deleteSelections();\r\n }\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.key.charCodeAt(0) >= 33 && evdata.key.charCodeAt(0) <= 126 && evdata.key.length === 1) {\r\n removeCurrent();\r\n const isPaste = evdata.ctrlKey && evdata.key === 'v';\r\n let text = evdata.key;\r\n if (isPaste) {\r\n text = await navigator.clipboard.readText();\r\n }\r\n if (this.empty) {\r\n this.svgText?.removeBlockAt(0);\r\n this.empty = false;\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = text;\r\n this.svgText?.addTextBlockAt(0, def);\r\n this.setTextPos(1);\r\n } else {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = text;\r\n def.textType = this.textType;\r\n this.svgText?.addTextBlockAt(this.textPos, def);\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nexport class SuiTextBlockEditor extends SuiTextEditor {\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiTextEditorParams) {\r\n super(params);\r\n $(this.context.svg).find('g.vf-text-highlight').remove();\r\n this.parseBlocks();\r\n }\r\n\r\n _highlightEditor() {\r\n if (this.svgText === null || this.svgText.blocks.length === 0) {\r\n return;\r\n }\r\n const bbox = this.svgText.getLogicalBox();\r\n const outlineStroke = SuiTextEditor.strokes['text-highlight'];\r\n if (this.outlineInfo && this.outlineInfo.element) {\r\n this.outlineInfo.element.remove();\r\n }\r\n this.outlineInfo = {\r\n context: this.context, box: bbox, classes: '',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState,\r\n timeOff: 0\r\n };\r\n SvgHelpers.outlineRect(this.outlineInfo);\r\n }\r\n\r\n getText(): string {\r\n if (this.svgText !== null) {\r\n return this.svgText.getText();\r\n }\r\n return '';\r\n }\r\n\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (evdata.key.charCodeAt(0) === 32) {\r\n if (this.empty) {\r\n this.svgText?.removeBlockAt(0);\r\n this.empty = false;\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = ' ';\r\n this.svgText?.addTextBlockAt(0, def);\r\n this.setTextPos(1);\r\n } else {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = ' ';\r\n def.textType = this.textType;\r\n this.svgText?.addTextBlockAt(this.textPos, def);\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n const rv = super.evKey(evdata);\r\n this._highlightEditor();\r\n return rv;\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n $(this.context.svg).find('g.vf-text-highlight').remove();\r\n this.stopCursor();\r\n this.svgText?.unrender();\r\n }\r\n}\r\n\r\nexport class SuiLyricEditor extends SuiTextEditor {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4 };\r\n }\r\n parseBlocks() {\r\n let i = 0;\r\n const def = SuiInlineText.defaults;\r\n def.context = this.context;\r\n def.startX = this.x;\r\n def.startY = this.y;\r\n def.scroller = this.scroller;\r\n this.svgText = new SuiInlineText(def);\r\n for (i = 0; i < this.text.length; ++i) {\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.text = this.text[i];\r\n this.svgText.addTextBlockAt(i, blockP);\r\n this.empty = false;\r\n }\r\n this.textPos = this.text.length;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n\r\n getText(): string {\r\n if (this.svgText !== null) {\r\n return this.svgText.getText();\r\n }\r\n return '';\r\n }\r\n lyric: SmoLyric;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiLyricEditorParams) {\r\n super(params);\r\n this.text = params.lyric.getText();\r\n if (params.lyric.isHyphenated()) {\r\n this.text += '-';\r\n }\r\n this.lyric = params.lyric;\r\n this.parseBlocks();\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n this.stopCursor();\r\n if (this.svgText !== null) {\r\n this.svgText.unrender();\r\n }\r\n }\r\n}\r\n\r\nexport class SuiChordEditor extends SuiTextEditor {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4 };\r\n }\r\n static get SymbolModifiers() {\r\n return {\r\n NONE: 1,\r\n SUBSCRIPT: 2,\r\n SUPERSCRIPT: 3\r\n };\r\n }\r\n\r\n // ### toTextTypeChar\r\n // Given an old text type and a desited new text type,\r\n // return what the new text type character should be\r\n static toTextTypeChar(oldTextType: number, newTextType: number): string {\r\n const tt = SuiInlineText.getTextTypeResult(oldTextType, newTextType);\r\n return SuiTextEditor.textTypeToChar(tt);\r\n }\r\n\r\n static toTextTypeTransition(oldTextType: number, result: number): string {\r\n const tt = SuiInlineText.getTextTypeTransition(oldTextType, result);\r\n return SuiTextEditor.textTypeToChar(tt);\r\n }\r\n\r\n setTextType(textType: number) {\r\n this.textType = textType;\r\n }\r\n\r\n // Handle the case where user changed super/subscript in the middle of the\r\n // string.\r\n _updateSymbolModifiers() {\r\n let change = this.textPos;\r\n let render = false;\r\n let i = 0;\r\n for (i = this.textPos; this.svgText !== null && i < this.svgText.blocks.length; ++i) {\r\n const block = this.svgText!.blocks[i];\r\n if (block.textType !== this.textType &&\r\n block.textType !== change) {\r\n change = block.textType;\r\n block.textType = this.textType;\r\n render = true;\r\n } else {\r\n break;\r\n }\r\n }\r\n if (render) {\r\n this.rerender();\r\n }\r\n }\r\n _setSymbolModifier(char: string): boolean {\r\n if (['^', '%'].indexOf(char) < 0) {\r\n return false;\r\n }\r\n const currentTextType = this.textType;\r\n const transitionType = SuiTextEditor.textTypeFromChar(char);\r\n this.textType = SuiInlineText.getTextTypeResult(currentTextType, transitionType);\r\n this._updateSymbolModifiers();\r\n return true;\r\n }\r\n\r\n parseBlocks() {\r\n let readGlyph = false;\r\n let curGlyph = '';\r\n let blockIx = 0; // so we skip modifier characters\r\n let i = 0;\r\n const params = SuiInlineText.defaults;\r\n params.context = this.context;\r\n params.startX = this.x;\r\n params.startY = this.y;\r\n params.scroller = this.scroller;\r\n this.svgText = new SuiInlineText(params);\r\n\r\n for (i = 0; i < this.text.length; ++i) {\r\n const char = this.text[i];\r\n const isSymbolModifier = this._setSymbolModifier(char);\r\n if (char === '@') {\r\n if (!readGlyph) {\r\n readGlyph = true;\r\n curGlyph = '';\r\n } else {\r\n this._addGlyphAt(blockIx, curGlyph);\r\n blockIx += 1;\r\n readGlyph = false;\r\n }\r\n } else if (!isSymbolModifier) {\r\n if (readGlyph) {\r\n curGlyph = curGlyph + char;\r\n } else {\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.text = char;\r\n blockP.textType = this.textType;\r\n this.svgText.addTextBlockAt(blockIx, blockP);\r\n blockIx += 1;\r\n }\r\n }\r\n this.empty = false;\r\n }\r\n this.textPos = blockIx;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n\r\n // ### getText\r\n // Get the text value that we persist\r\n getText(): string {\r\n if (this.svgText === null || this.svgText.blocks.length < 1) {\r\n return '';\r\n }\r\n let text = '';\r\n let textType = this.svgText.blocks[0].textType;\r\n this.svgText.blocks.forEach((block) => {\r\n if (block.textType !== textType) {\r\n text += SuiChordEditor.toTextTypeTransition(textType, block.textType);\r\n textType = block.textType;\r\n }\r\n if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n text += '@' + block.glyphCode + '@';\r\n } else {\r\n text += block.text;\r\n }\r\n });\r\n return text;\r\n }\r\n\r\n _addGlyphAt(ix: number, code: string) {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.glyphCode = code;\r\n blockP.textType = this.textType;\r\n this.svgText?.addGlyphBlockAt(ix, blockP);\r\n this.textPos += 1;\r\n }\r\n unrender() {\r\n if (this.svgText) {\r\n this.svgText.element?.remove();\r\n }\r\n }\r\n async evKey(evdata: KeyEvent): Promise {\r\n let edited = false;\r\n if (this._setSymbolModifier(evdata.key)) {\r\n return true;\r\n }\r\n // Dialog gives us a specific glyph code\r\n if (evdata.key[0] === '@' && evdata.key.length > 2) {\r\n this.unrender();\r\n const glyph = evdata.key.substr(1, evdata.key.length - 2);\r\n this._addGlyphAt(this.textPos, getChordSymbolGlyphFromCode(glyph));\r\n this.rerender();\r\n edited = true;\r\n } else if (VF.ChordSymbol.glyphs[evdata.key[0]]) { // glyph shortcut like 'b'\r\n this.unrender();\r\n // hack: vexflow 5 broke this\r\n this._addGlyphAt(this.textPos, evdata.key[0]);\r\n this.rerender();\r\n edited = true;\r\n } else {\r\n // some ordinary key\r\n edited = await super.evKey(evdata);\r\n }\r\n if (this.svgText !== null && this.svgText.blocks.length > this.textPos && this.textPos >= 0) {\r\n this.textType = this.svgText.blocks[this.textPos].textType;\r\n }\r\n return edited;\r\n }\r\n lyric: SmoLyric;\r\n\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiLyricEditorParams) {\r\n super(params);\r\n this.text = params.lyric.text;\r\n this.lyric = params.lyric;\r\n this.textType = SuiInlineText.textTypes.normal;\r\n this.parseBlocks();\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n this.stopCursor();\r\n this.svgText?.unrender();\r\n }\r\n\r\n // ### _markStopped\r\n // Indicate this editor session is done running\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n}\r\nexport interface SuiDragSessionParams {\r\n context: SvgPageMap;\r\n scroller: SuiScroller;\r\n textGroup: SmoTextGroup;\r\n}\r\n\r\nexport class SuiDragSession {\r\n pageMap: SvgPageMap;\r\n page: SvgPage;\r\n scroller: SuiScroller;\r\n outlineBox: SvgBox;\r\n textObject: SuiTextBlock;\r\n dragging: boolean = false;\r\n outlineRect: OutlineInfo | null = null;\r\n textGroup: SmoTextGroup;\r\n constructor(params: SuiDragSessionParams) {\r\n this.textGroup = params.textGroup;\r\n this.pageMap = params.context;\r\n this.scroller = params.scroller;\r\n this.page = this.pageMap.getRendererFromModifier(this.textGroup);\r\n // create a temporary text object for dragging\r\n this.textObject = SuiTextBlock.fromTextGroup(this.textGroup, this.page, this.pageMap, this.scroller); // SuiTextBlock\r\n this.dragging = false;\r\n this.outlineBox = this.textObject.getLogicalBox();\r\n }\r\n\r\n _outlineBox() {\r\n const outlineStroke = SuiTextEditor.strokes['text-drag'];\r\n const x = this.outlineBox.x - this.page.box.x;\r\n const y = this.outlineBox.y - this.page.box.y;\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context: this.page, \r\n box: SvgHelpers.boxPoints(x , y + this.outlineBox.height, this.outlineBox.width, this.outlineBox.height),\r\n classes: 'text-drag',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n }\r\n this.outlineRect.box = SvgHelpers.boxPoints(x , y + this.outlineBox.height, this.outlineBox.width, this.outlineBox.height),\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n unrender() {\r\n this.textGroup.elements.forEach((el) => {\r\n el.remove();\r\n });\r\n this.textGroup.elements = [];\r\n this.textObject.unrender();\r\n }\r\n scrolledClientBox(x: number, y: number) {\r\n return { x: x + this.scroller.scrollState.x, y: y + this.scroller.scrollState.y, width: 1, height: 1 };\r\n }\r\n checkBounds() {\r\n if (this.outlineBox.y < this.outlineBox.height) {\r\n this.outlineBox.y = this.outlineBox.height;\r\n }\r\n if (this.outlineBox.x < 0) {\r\n this.outlineBox.x = 0;\r\n }\r\n if (this.outlineBox.x > this.page.box.x + this.page.box.width - this.outlineBox.width) {\r\n this.outlineBox.x = this.page.box.x + this.page.box.width - this.outlineBox.width;\r\n }\r\n if (this.outlineBox.y > this.page.box.y + this.page.box.height) {\r\n this.outlineBox.y = this.page.box.y + this.page.box.height;\r\n }\r\n }\r\n startDrag(e: any) {\r\n const evBox = this.scrolledClientBox(e.clientX, e.clientY);\r\n const svgMouseBox = this.pageMap.clientToSvg(evBox);\r\n svgMouseBox.y -= this.outlineBox.height;\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(svgMouseBox, this.outlineBox, 'start');\r\n }\r\n if (!SvgHelpers.doesBox1ContainBox2(this.outlineBox, svgMouseBox)) {\r\n return;\r\n }\r\n this.dragging = true;\r\n this.outlineBox = svgMouseBox;\r\n const currentBox = this.textObject.getLogicalBox();\r\n this.outlineBox.width = currentBox.width;\r\n this.outlineBox.height = currentBox.height;\r\n this.unrender();\r\n this.checkBounds();\r\n this._outlineBox();\r\n }\r\n\r\n mouseMove(e: any) {\r\n if (!this.dragging) {\r\n return;\r\n }\r\n const evBox = this.scrolledClientBox(e.clientX, e.clientY);\r\n const svgMouseBox = this.pageMap.clientToSvg(evBox);\r\n svgMouseBox.y -= this.outlineBox.height;\r\n this.outlineBox = SvgHelpers.smoBox(svgMouseBox);\r\n const currentBox = this.textObject.getLogicalBox();\r\n this.outlineBox.width = currentBox.width;\r\n this.outlineBox.height = currentBox.height;\r\n this.checkBounds();\r\n\r\n this.textObject.offsetStartX(this.outlineBox.x - currentBox.x);\r\n this.textObject.offsetStartY(this.outlineBox.y - currentBox.y);\r\n this.textObject.render();\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(svgMouseBox, this.outlineBox, 'drag');\r\n }\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect = null;\r\n }\r\n this._outlineBox();\r\n }\r\n\r\n endDrag() {\r\n // this.textObject.render();\r\n const newBox = this.textObject.getLogicalBox();\r\n const curBox = this.textGroup.logicalBox ?? SvgBox.default;\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(curBox, newBox, 'end');\r\n }\r\n this.textGroup.offsetX(newBox.x - curBox.x);\r\n this.textGroup.offsetY(newBox.y - curBox.y + this.outlineBox.height);\r\n this.dragging = false;\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect = null;\r\n }\r\n }\r\n}\r\n\r\n// ## SuiTextSession\r\n// session for editing plain text\r\nexport class SuiTextSession {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n scroller: SuiScroller;\r\n scoreText: SmoScoreText;\r\n text: string;\r\n x: number;\r\n y: number;\r\n textGroup: SmoTextGroup;\r\n fontFamily: string = '';\r\n fontWeight: string = '';\r\n fontSize: number = 14;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n editor: SuiTextBlockEditor | null = null;\r\n renderer: SuiRenderState;\r\n cursorPromise: Promise | null = null;\r\n constructor(params: SuiTextSessionParams) {\r\n this.scroller = params.scroller;\r\n this.renderer = params.renderer;\r\n this.scoreText = params.scoreText;\r\n this.text = this.scoreText.text;\r\n this.x = params.x;\r\n this.y = params.y;\r\n this.textGroup = params.textGroup;\r\n this.renderer = params.renderer;\r\n\r\n // Create a text group if one was not a startup parameter\r\n if (!this.textGroup) {\r\n this.textGroup = new SmoTextGroup(SmoTextGroup.defaults);\r\n }\r\n // Create a scoreText if one was not a startup parameter, or\r\n // get it from the text group\r\n if (!this.scoreText) {\r\n if (this.textGroup && this.textGroup.textBlocks.length) {\r\n this.scoreText = this.textGroup.textBlocks[0].text;\r\n } else {\r\n const stDef = SmoScoreText.defaults;\r\n stDef.x = this.x;\r\n stDef.y = this.y;\r\n this.scoreText = new SmoScoreText(stDef);\r\n this.textGroup.addScoreText(this.scoreText, SmoTextGroup.relativePositions.RIGHT);\r\n }\r\n }\r\n this.fontFamily = SmoScoreText.familyString(this.scoreText.fontInfo.family);\r\n this.fontWeight = SmoScoreText.weightString(this.scoreText.fontInfo.weight);\r\n this.fontSize = SmoScoreText.fontPointSize(this.scoreText.fontInfo.size);\r\n this.text = this.scoreText.text;\r\n }\r\n\r\n // ### _isRefreshed\r\n // renderer has partially rendered text(promise condition)\r\n get _isRefreshed(): boolean {\r\n return this.renderer.dirty === false;\r\n }\r\n\r\n get isStopped(): boolean {\r\n return this.state === SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n get isRunning(): boolean {\r\n return this.state === SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n // ### _isRendered\r\n // renderer has rendered text(promise condition)\r\n get _isRendered(): boolean {\r\n return this.renderer.passState === SuiRenderState.passStates.clean;\r\n }\r\n\r\n _removeScoreText() {\r\n const selector = '#' + this.scoreText.attrs.id;\r\n $(selector).remove();\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric session\r\n startSession() {\r\n const context = this.renderer.pageMap.getRenderer({ x: this.x, y: this.y });\r\n if (context) {\r\n this.editor = new SuiTextBlockEditor({\r\n x: this.x, y: this.y, scroller: this.scroller,\r\n context: context, text: this.scoreText.text, pageMap: this.renderer.pageMap\r\n });\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this._removeScoreText();\r\n }\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Stop the lyric session, return promise for done\r\n stopSession(): Promise {\r\n if (this.editor) {\r\n this.scoreText.text = this.editor.getText();\r\n this.scoreText.tryParseUnicode(); // convert unicode chars\r\n this.editor.stopEditor();\r\n }\r\n return PromiseHelpers.makePromise(()=> this._isRendered,() => this._markStopped(), null, 100);\r\n }\r\n\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.state !== SuiTextEditor.States.RUNNING || this.editor === null) {\r\n return false;\r\n }\r\n const rv = await this.editor.evKey(evdata);\r\n if (rv) {\r\n this._removeScoreText();\r\n }\r\n return rv;\r\n }\r\n\r\n handleMouseEvent(ev: any) {\r\n if (this.isRunning && this.editor !== null) {\r\n this.editor.handleMouseEvent(ev);\r\n }\r\n }\r\n}\r\n// ## SuiLyricSession\r\n// Manage editor for lyrics, jupmping from note to note if asked\r\nexport class SuiLyricSession {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n score: SmoScore;\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n view: SuiScoreViewOperations;\r\n parser: number;\r\n verse: number;\r\n selector: SmoSelector;\r\n selection: SmoSelection | null;\r\n note: SmoNote | null = null;\r\n originalText: string;\r\n lyric: SmoLyric | null = null;\r\n text: string = '';\r\n editor: SuiLyricEditor | null = null;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n cursorPromise: Promise | null = null;\r\n constructor(params: SuiLyricSessionParams) {\r\n this.score = params.score;\r\n this.renderer = params.renderer;\r\n this.scroller = params.scroller;\r\n this.view = params.view;\r\n this.parser = SmoLyric.parsers.lyric;\r\n this.verse = params.verse;\r\n this.selector = params.selector;\r\n this.selection = SmoSelection.noteFromSelector(this.score, this.selector);\r\n if (this.selection !== null) {\r\n this.note = this.selection.note;\r\n }\r\n this.originalText = '';\r\n }\r\n\r\n // ### _setLyricForNote\r\n // Get the text from the editor and update the lyric with it.\r\n _setLyricForNote() {\r\n this.lyric = null;\r\n if (!this.note) {\r\n return;\r\n }\r\n const lar = this.note.getLyricForVerse(this.verse, SmoLyric.parsers.lyric);\r\n if (lar.length) {\r\n this.lyric = lar[0] as SmoLyric;\r\n }\r\n if (!this.lyric) {\r\n const scoreFont = this.score.fonts.find((fn) => fn.name === 'lyrics');\r\n const fontInfo = JSON.parse(JSON.stringify(scoreFont));\r\n const lyricD = SmoLyric.defaults;\r\n lyricD.text = '';\r\n lyricD.verse = this.verse;\r\n lyricD.fontInfo = fontInfo;\r\n this.lyric = new SmoLyric(lyricD);\r\n }\r\n this.text = this.lyric.text;\r\n this.originalText = this.text;\r\n // this.view.addOrUpdateLyric(this.selection.selector, this.lyric);\r\n }\r\n\r\n // ### _endLyricCondition\r\n // Lyric editor has stopped running (promise condition)\r\n get _endLyricCondition(): boolean {\r\n return this.editor !== null && this.editor.state !== SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _endLyricCondition\r\n // renderer has partially rendered text(promise condition)\r\n get _isRefreshed(): boolean {\r\n return this.renderer.renderStateRendered;\r\n }\r\n\r\n // ### _isRendered\r\n // renderer has rendered text(promise condition)\r\n get _isRendered(): boolean {\r\n return this.renderer.renderStateClean;\r\n }\r\n\r\n get _pendingEditor(): boolean {\r\n return this.state !== SuiTextEditor.States.PENDING_EDITOR;\r\n }\r\n\r\n // ### _hideLyric\r\n // Hide the lyric so you only see the editor.\r\n _hideLyric() {\r\n if (this.lyric !== null && this.lyric.selector) {\r\n $(this.lyric.selector).remove();\r\n }\r\n }\r\n\r\n get isStopped(): boolean {\r\n return this.state === SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n get isRunning(): boolean {\r\n return this.state === SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _markStopped\r\n // Indicate this editor session is done running\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric editor for a note (current selected note)\r\n _startSessionForNote() {\r\n if (this.lyric === null || this.note === null || this.note.logicalBox === null) {\r\n return;\r\n }\r\n let startX = this.note.logicalBox.x;\r\n let startY = this.note.logicalBox.y + this.note.logicalBox.height + \r\n SmoScoreText.fontPointSize(this.lyric.fontInfo.size);\r\n this.lyric.skipRender = true;\r\n const lyricRendered = this.lyric.text.length > 0;\r\n if (this.lyric.logicalBox !== null) {\r\n startX = this.lyric.logicalBox.x;\r\n startY = this.lyric.logicalBox.y + this.lyric.logicalBox.height;\r\n }\r\n const context = this.view.renderer.pageMap.getRenderer({ x: startX, y: startY });\r\n if (context) {\r\n this.editor = new SuiLyricEditor({\r\n context,\r\n lyric: this.lyric, x: startX, y: startY, scroller: this.scroller,\r\n text: this.lyric.getText(),\r\n pageMap: this.renderer.pageMap\r\n });\r\n this.state = SuiTextEditor.States.RUNNING;\r\n if (!lyricRendered && this.editor !== null && this.editor.svgText !== null) {\r\n const delta = 2 * this.editor.svgText.maxFontHeight(1.0) * (this.lyric.verse + 1);\r\n this.editor.svgText.offsetStartY(delta);\r\n }\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this._hideLyric();\r\n \r\n }\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric session\r\n startSession() {\r\n this._setLyricForNote();\r\n this._startSessionForNote();\r\n this.state = SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Stop the lyric session, return promise for done\r\n async stopSession() {\r\n if (this.editor && !this._endLyricCondition) {\r\n await this._updateLyricFromEditor();\r\n this.editor.stopEditor();\r\n }\r\n return PromiseHelpers.makePromise(() => this._isRendered, () => this._markStopped(), null, 100);\r\n }\r\n\r\n // ### _advanceSelection\r\n // Based on a skip character, move the editor forward/back one note.\r\n async _advanceSelection(isShift: boolean) {\r\n const nextSelection = isShift ? SmoSelection.lastNoteSelectionFromSelector(this.score, this.selector)\r\n : SmoSelection.nextNoteSelectionFromSelector(this.score, this.selector);\r\n if (nextSelection) {\r\n this.selector = nextSelection.selector;\r\n this.selection = nextSelection;\r\n this.note = nextSelection.note;\r\n this._setLyricForNote();\r\n const conditionArray: any = [];\r\n this.state = SuiTextEditor.States.PENDING_EDITOR;\r\n conditionArray.push(PromiseHelpers.makePromiseObj(() => this._endLyricCondition, null, null, 100));\r\n conditionArray.push(PromiseHelpers.makePromiseObj(() => this._isRefreshed,() => this._startSessionForNote(), null, 100));\r\n await PromiseHelpers.promiseChainThen(conditionArray);\r\n }\r\n }\r\n\r\n // ### advanceSelection\r\n // external interfoace to move to next/last note\r\n async advanceSelection(isShift: boolean) {\r\n if (this.isRunning) {\r\n await this._updateLyricFromEditor();\r\n await this._advanceSelection(isShift);\r\n }\r\n }\r\n\r\n async removeLyric() {\r\n if (this.selection && this.lyric) {\r\n await this.view.removeLyric(this.selection.selector, this.lyric);\r\n this.lyric.skipRender = true;\r\n await this.advanceSelection(false);\r\n }\r\n }\r\n\r\n // ### _updateLyricFromEditor\r\n // The editor is done running, so update the lyric now.\r\n async _updateLyricFromEditor() {\r\n if (this.editor === null || this.lyric === null) {\r\n return;\r\n }\r\n const txt = this.editor.getText();\r\n this.lyric.setText(txt);\r\n this.lyric.skipRender = false;\r\n this.editor.stopEditor();\r\n if (!this.lyric.deleted && this.originalText !== txt && this.selection !== null) {\r\n await this.view.addOrUpdateLyric(this.selection.selector, this.lyric);\r\n }\r\n }\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.state !== SuiTextEditor.States.RUNNING) {\r\n return false;\r\n }\r\n if (evdata.key === '-' || evdata.key === ' ') {\r\n // skip\r\n const back = evdata.shiftKey && evdata.key === ' ';\r\n if (evdata.key === '-' && this.editor !== null) {\r\n await this.editor.evKey(evdata);\r\n }\r\n this._updateLyricFromEditor();\r\n this._advanceSelection(back);\r\n } else if (this.editor !== null) {\r\n await this.editor.evKey(evdata);\r\n this._hideLyric();\r\n }\r\n return true;\r\n }\r\n get textType(): number {\r\n if (this.isRunning && this.editor !== null) {\r\n return this.editor.textType;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n\r\n set textType(type) {\r\n if (this.editor) {\r\n this.editor.textType = type;\r\n }\r\n }\r\n // ### handleMouseEvent\r\n // Mouse event (send to editor)\r\n handleMouseEvent(ev: any) {\r\n if (this.state !== SuiTextEditor.States.RUNNING || this.editor === null) {\r\n return;\r\n }\r\n this.editor.handleMouseEvent(ev);\r\n }\r\n}\r\n\r\nexport class SuiChordSession extends SuiLyricSession {\r\n editor: SuiLyricEditor | null = null;\r\n constructor(params: SuiLyricSessionParams) {\r\n super(params);\r\n this.parser = SmoLyric.parsers.chord;\r\n }\r\n\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n let edited = false;\r\n if (this.state !== SuiTextEditor.States.RUNNING) {\r\n return false;\r\n }\r\n if (evdata.code === 'Enter') {\r\n this._updateLyricFromEditor();\r\n this._advanceSelection(evdata.shiftKey);\r\n edited = true;\r\n } else if (this.editor !== null) {\r\n edited = await this.editor.evKey(evdata);\r\n }\r\n this._hideLyric();\r\n return edited;\r\n }\r\n\r\n // ### _setLyricForNote\r\n // Get the text from the editor and update the lyric with it.\r\n _setLyricForNote() {\r\n this.lyric = null;\r\n if (this.note === null) {\r\n return;\r\n }\r\n const lar = this.note.getLyricForVerse(this.verse, this.parser);\r\n if (lar.length) {\r\n this.lyric = lar[0] as SmoLyric;\r\n }\r\n if (!this.lyric) {\r\n const scoreFont = this.score.fonts.find((fn) => fn.name === 'chords');\r\n const fontInfo = JSON.parse(JSON.stringify(scoreFont));\r\n const ldef = SmoLyric.defaults;\r\n ldef.text = '';\r\n ldef.verse = this.verse;\r\n ldef.parser = this.parser;\r\n ldef.fontInfo = fontInfo;\r\n this.lyric = new SmoLyric(ldef);\r\n this.note.addLyric(this.lyric);\r\n }\r\n this.text = this.lyric.text;\r\n }\r\n // ### _startSessionForNote\r\n // Start the lyric editor for a note (current selected note)\r\n _startSessionForNote() {\r\n if (this.lyric === null) {\r\n return;\r\n }\r\n if (this.selection === null || this.note === null || this.note.logicalBox === null) {\r\n return;\r\n }\r\n let startX = this.note.logicalBox.x;\r\n let startY = this.selection.measure.svg.logicalBox.y;\r\n if (this.lyric.logicalBox !== null) {\r\n startX = this.lyric.logicalBox.x;\r\n startY = this.lyric.logicalBox.y + this.lyric.logicalBox.height;\r\n }\r\n this.selection.measure.svg.logicalBox.y + this.selection.measure.svg.logicalBox.height - 70;\r\n const context = this.renderer.pageMap.getRenderer({ x: startX, y: startY });\r\n if (context) {\r\n this.editor = new SuiChordEditor({\r\n context,\r\n lyric: this.lyric, x: startX, y: startY, scroller: this.scroller,\r\n text: this.lyric.getText(),\r\n pageMap: this.renderer.pageMap\r\n });\r\n this.state = SuiTextEditor.States.RUNNING;\r\n if (this.editor !== null && this.editor.svgText !== null) {\r\n const delta = (-1) * this.editor.svgText.maxFontHeight(1.0) * (this.lyric.verse + 1);\r\n this.editor.svgText.offsetStartY(delta);\r\n }\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this._hideLyric(); \r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers, OutlineInfo } from './svgHelpers';\r\nimport { SmoTextGroup, SmoScoreText } from '../../smo/data/scoreText';\r\nimport { SuiTextEditor } from './textEdit';\r\nimport { SuiScroller } from './scroller';\r\nimport { SmoAttrs, SvgBox, getId } from '../../smo/data/common';\r\nimport { SvgPage, SvgPageMap } from './svgPageMap';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { VexFlow,\r\n chordSubscriptOffset, chordSuperscriptOffset, FontInfo, getVexGlyphFromChordCode, \r\n getChordSymbolMetricsForGlyph, blockMetricsYShift } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\ndeclare var $: any;\r\nconst VF = VexFlow;\r\n\r\n// From textfont.ts in VF\r\n\r\n/**\r\n * parameters to render text\r\n * @category SuiParameters\r\n */\r\nexport interface SuiInlineTextParams {\r\n fontFamily: string,\r\n fontWeight: string,\r\n fontSize: number,\r\n fontStyle: string,\r\n startX: number,\r\n startY: number,\r\n scroller: SuiScroller,\r\n purpose: string,\r\n context: SvgPage,\r\n pageMap: SvgPageMap\r\n}\r\n/**\r\n * metrics for a single line of text. A textGroup can be composed\r\n * of multiple inline blocks.\r\n * @category SuiParameters\r\n */\r\nexport interface SuiInlineBlock {\r\n symbolType: number,\r\n textType: number,\r\n highlighted: boolean,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n scale: number,\r\n metrics: any,\r\n glyph: any,\r\n glyphCode: string,\r\n text: string\r\n}\r\nexport interface SuiInlineArtifact {\r\n block: SuiInlineBlock,\r\n box: SvgBox,\r\n index: number\r\n}\r\n// ## textRender.js\r\n// Classes responsible for formatting and rendering text in SVG space.\r\n\r\n/**\r\n * Inline text is a block of SVG text with the same font. Each block can\r\n * contain either text or an svg (vex) glyph. Each block in the text has its own\r\n * metrics so we can support inline svg text editors (cursor).\r\n * @category SuiRender\r\n */\r\nexport class SuiInlineText {\r\n static get textTypes() {\r\n return { normal: 0, superScript: 1, subScript: 2 };\r\n }\r\n static get symbolTypes() {\r\n return {\r\n GLYPH: 1,\r\n TEXT: 2,\r\n LINE: 3\r\n };\r\n }\r\n static get textPurposes(): Record {\r\n return {render: 'sui-inline-render', edit: 'sui-inline-edit' };\r\n }\r\n\r\n // ### textTypeTransitions\r\n // Given a current text type and a type change request, what is the result\r\n // text type? This truth table tells you.\r\n static get textTypeTransitions(): number[][] {\r\n return [\r\n [1, 1, 0],\r\n [1, 0, 1],\r\n [1, 2, 2],\r\n [2, 2, 0],\r\n [2, 0, 2],\r\n [2, 1, 1],\r\n [0, 1, 1],\r\n [0, 0, 0],\r\n [0, 2, 2]\r\n ];\r\n }\r\n\r\n static getTextTypeResult(oldType: number, newType: number): number {\r\n let rv = SuiInlineText.textTypes.normal;\r\n let i = 0;\r\n for (i = 0; i < SuiInlineText.textTypeTransitions.length; ++i) {\r\n const tt = SuiInlineText.textTypeTransitions[i];\r\n if (tt[0] === oldType && tt[1] === newType) {\r\n rv = tt[2];\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n static getTextTypeTransition(oldType: number, result: number): number {\r\n let rv = SuiInlineText.textTypes.normal;\r\n let i = 0;\r\n for (i = 0; i < SuiInlineText.textTypeTransitions.length; ++i) {\r\n const tt = SuiInlineText.textTypeTransitions[i];\r\n if (tt[0] === oldType && tt[2] === result) {\r\n rv = tt[1];\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n get spacing(): number {\r\n return VF.ChordSymbol.spacingBetweenBlocks;\r\n }\r\n\r\n static get defaults(): SuiInlineTextParams {\r\n return JSON.parse(JSON.stringify({\r\n blocks: [],\r\n fontFamily: 'Merriweather',\r\n fontSize: 14,\r\n startX: 100,\r\n startY: 100,\r\n fontWeight: 500,\r\n fontStyle: 'normal',\r\n scale: 1,\r\n activeBlock: -1,\r\n artifacts: [],\r\n purpose: 'render',\r\n classes: '',\r\n updatedMetrics: false\r\n }));\r\n }\r\n fontFamily: string;\r\n fontWeight: string;\r\n fontStyle: string;\r\n fontSize: number;\r\n width: number = -1;\r\n height: number = -1;\r\n purpose: string;\r\n\r\n attrs: SmoAttrs;\r\n textFont: TextFormatter;\r\n startX: number;\r\n startY: number;\r\n blocks: SuiInlineBlock[] = [];\r\n updatedMetrics: boolean = false;\r\n context: SvgPage;\r\n pageMap: SvgPageMap;\r\n scroller: SuiScroller;\r\n artifacts: SuiInlineArtifact[] = [];\r\n logicalBox: SvgBox = SvgBox.default;\r\n element: SVGSVGElement | null = null;\r\n\r\n updateFontInfo(): TextFormatter {\r\n const tf = TextFormatter.create({\r\n family: this.fontFamily,\r\n weight: this.fontWeight,\r\n size: this.fontSize,\r\n style: this.fontStyle\r\n });\r\n return tf;\r\n }\r\n // ### constructor just creates an empty svg\r\n constructor(params: SuiInlineTextParams) {\r\n this.fontFamily = params.fontFamily;\r\n this.fontWeight = params.fontWeight;\r\n this.fontStyle = params.fontStyle;\r\n this.fontSize = params.fontSize;\r\n this.textFont = this.updateFontInfo();\r\n this.scroller = params.scroller;\r\n this.startX = params.startX;\r\n this.startY = params.startY;\r\n this.purpose = params.purpose;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SuiInlineText'\r\n };\r\n this.context = params.context;\r\n this.pageMap = params.pageMap;\r\n }\r\n\r\n static fromScoreText(scoreText: SmoScoreText, context: SvgPage, pageMap: SvgPageMap, scroller: SuiScroller): SuiInlineText {\r\n \r\n const params: SuiInlineTextParams = {\r\n fontFamily: SmoScoreText.familyString(scoreText.fontInfo.family),\r\n fontWeight: SmoScoreText.weightString(scoreText.fontInfo.weight),\r\n fontStyle: scoreText.fontInfo.style ?? 'normal',\r\n startX: scoreText.x, startY: scoreText.y,\r\n scroller,\r\n purpose: SuiInlineText.textPurposes.render,\r\n fontSize: SmoScoreText.fontPointSize(scoreText.fontInfo.size), context,\r\n pageMap\r\n };\r\n const rv = new SuiInlineText(params);\r\n rv.attrs.id = scoreText.attrs.id;\r\n const blockParams = SuiInlineText.blockDefaults;\r\n blockParams.text = scoreText.text;\r\n rv.addTextBlockAt(0, blockParams);\r\n return rv;\r\n }\r\n\r\n static get blockDefaults(): SuiInlineBlock {\r\n return JSON.parse(JSON.stringify({\r\n symbolType: SuiInlineText.symbolTypes.TEXT,\r\n textType: SuiInlineText.textTypes.normal,\r\n highlighted: false,\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n scale: 1.0,\r\n glyph: {},\r\n text: '',\r\n glyphCode: ''\r\n }));\r\n }\r\n\r\n // ### pointsToPixels\r\n // The font size is specified in points, convert to 'pixels' in the svg space\r\n get pointsToPixels(): number {\r\n return this.textFont.fontSizeInPixels;\r\n }\r\n\r\n offsetStartX(offset: number) {\r\n this.startX += offset;\r\n this.blocks.forEach((block) => {\r\n block.x += offset;\r\n });\r\n }\r\n\r\n offsetStartY(offset: number) {\r\n this.startY += offset;\r\n this.blocks.forEach((block) => {\r\n block.y += offset;\r\n });\r\n }\r\n maxFontHeight(scale: number): number {\r\n return this.textFont.maxHeight * scale;\r\n }\r\n\r\n _glyphOffset(block: SuiInlineBlock): number {\r\n return blockMetricsYShift(block.glyph.getMetrics()) * this.pointsToPixels * block.scale;\r\n }\r\n\r\n /**\r\n * Based on the font metrics, compute the width of the strings and glyph that make up\r\n * this block\r\n */\r\n _calculateBlockIndex() {\r\n var curX = this.startX;\r\n var maxH = 0;\r\n let superXAlign = 0;\r\n let superXWidth = 0;\r\n let prevBlock: SuiInlineBlock | null = null;\r\n let i = 0;\r\n this.textFont.setFontSize(this.fontSize);\r\n this.blocks.forEach((block) => {\r\n // super/subscript\r\n const sp = this.isSuperscript(block);\r\n const sub = this.isSubcript(block);\r\n\r\n block.width = 0;\r\n block.height = 0;\r\n\r\n // coeff for sub/super script\r\n const subAdj = (sp || sub) ? VF.ChordSymbol.superSubRatio : 1.0;\r\n // offset for super/sub\r\n let subOffset = 0;\r\n if (sp) {\r\n subOffset = chordSuperscriptOffset() * this.pointsToPixels;\r\n } else if (sub) {\r\n subOffset = chordSubscriptOffset() * this.pointsToPixels;\r\n } else {\r\n subOffset = 0;\r\n }\r\n block.x = curX;\r\n if (block.symbolType === SuiInlineText.symbolTypes.TEXT) {\r\n for (i = 0; i < block.text.length; ++i) {\r\n const ch = block.text[i];\r\n const glyph = this.textFont.getGlyphMetrics(ch);\r\n block.width += ((glyph.advanceWidth ?? 0) / this.textFont.getResolution()) * this.pointsToPixels * block.scale * subAdj;\r\n const blockHeight = (glyph.ha / this.textFont.getResolution()) * this.pointsToPixels * block.scale;\r\n block.height = block.height < blockHeight ? blockHeight : block.height;\r\n block.y = this.startY + (subOffset * block.scale);\r\n }\r\n } else if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n // TODO: vexflow broke leftSideBearing and advanceWidth\r\n // vex5\r\n /*\r\n block.width = (block.glyph.getMetrics().width) * this.pointsToPixels * block.scale;\r\n block.height = (block.glyph.getMetrics().ha) * this.pointsToPixels * block.scale;\r\n block.x += block.glyph.getMetrics().xMin * this.pointsToPixels * block.scale;\r\n */\r\n block.width = (block.metrics.advanceWidth / VF.ChordSymbol.engravingFontResolution) * this.pointsToPixels * block.scale;\r\n block.height = (block.glyph.metrics.ha / VF.ChordSymbol.engravingFontResolution) * this.pointsToPixels * block.scale; \r\n block.x += block.metrics.leftSideBearing / VF.ChordSymbol.engravingFontResolution * this.pointsToPixels * block.scale;\r\n block.y = this.startY + this._glyphOffset(block) + subOffset;\r\n }\r\n // Line subscript up with super if the follow each other\r\n if (sp) {\r\n if (superXAlign === 0) {\r\n superXAlign = block.x;\r\n }\r\n } else if (sub) {\r\n if (superXAlign > 0 && prevBlock !== null) {\r\n block.x = superXAlign;\r\n superXWidth = prevBlock.x + prevBlock.width;\r\n curX = superXAlign;\r\n superXAlign = 0;\r\n } else {\r\n if (superXWidth > 0 && superXWidth < block.width + block.x) {\r\n superXWidth = block.width + block.x;\r\n }\r\n }\r\n } else if (superXWidth > 0) {\r\n block.x = superXWidth + VF.ChordSymbol.spacingBetweenBlocks;\r\n superXWidth = 0;\r\n } else {\r\n superXAlign = 0;\r\n }\r\n curX += block.width;\r\n maxH = block.height > maxH ? maxH : block.height;\r\n prevBlock = block;\r\n });\r\n this.width = curX - this.startX;\r\n this.height = maxH;\r\n this.updatedMetrics = true;\r\n }\r\n\r\n // ### getLogicalBox\r\n // return the calculated svg metrics. In SMO parlance the\r\n // logical box is in SVG space, 'renderedBox' is in client space.\r\n getLogicalBox(): SvgBox {\r\n let rv: SvgBox = SvgBox.default;\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n const adjBox = (box: SvgBox) => {\r\n const nbox = SvgHelpers.smoBox(box);\r\n nbox.y = nbox.y - nbox.height;\r\n return nbox;\r\n };\r\n this.blocks.forEach((block) => {\r\n if (!rv.x) {\r\n rv = SvgHelpers.smoBox(adjBox(block));\r\n } else {\r\n rv = SvgHelpers.unionRect(rv, adjBox(block));\r\n }\r\n });\r\n return rv;\r\n }\r\n // ### renderCursorAt\r\n // When we are using textLayout to render editor, create a cursor that adjusts it's size\r\n renderCursorAt(position: number, textType: number) {\r\n let adjH = 0;\r\n let adjY = 0;\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n const group = this.context.getContext().openGroup();\r\n group.id = 'inlineCursor';\r\n const h = this.fontSize;\r\n if (this.blocks.length <= position || position < 0) {\r\n const x = this.startX - this.context.box.x;\r\n const y = this.startY - this.context.box.y;\r\n SvgHelpers.renderCursor(group, x, y - h, h);\r\n this.context.getContext().closeGroup();\r\n return;\r\n }\r\n const block = this.blocks[position];\r\n adjH = block.symbolType === SuiInlineText.symbolTypes.GLYPH ? h / 2 : h;\r\n // For glyph, add y adj back to the cursor since it's not a glyph\r\n adjY = block.symbolType === SuiInlineText.symbolTypes.GLYPH ? block.y - this._glyphOffset(block) :\r\n block.y;\r\n if (typeof (textType) === 'number' && textType !== SuiInlineText.textTypes.normal) {\r\n const ratio = textType !== SuiInlineText.textTypes.normal ? VF.ChordSymbol.superSubRatio : 1.0;\r\n adjH = adjH * ratio;\r\n if (textType !== block.textType) {\r\n if (textType === SuiInlineText.textTypes.superScript) {\r\n adjY -= h / 2;\r\n } else {\r\n adjY += h / 2;\r\n }\r\n }\r\n }\r\n const x = block.x + block.width - this.context.box.x;\r\n const y = adjY - (adjH * block.scale) - this.context.box.y;\r\n SvgHelpers.renderCursor(group, x, y, adjH * block.scale);\r\n this.context.getContext().closeGroup();\r\n }\r\n removeCursor() {\r\n $('svg #inlineCursor').remove();\r\n }\r\n unrender() {\r\n this.element?.remove();\r\n this.element = null;\r\n }\r\n getIntersectingBlocks(box: SvgBox): SuiInlineArtifact[] {\r\n if (!this.artifacts) {\r\n return [];\r\n }\r\n return SvgHelpers.findIntersectingArtifact(box, this.artifacts) as SuiInlineArtifact[];\r\n }\r\n _addBlockAt(position: number, block: SuiInlineBlock) {\r\n if (position >= this.blocks.length) {\r\n this.blocks.push(block);\r\n } else {\r\n this.blocks.splice(position, 0, block);\r\n }\r\n }\r\n removeBlockAt(position: number) {\r\n this.blocks.splice(position, 1);\r\n this.updatedMetrics = false;\r\n }\r\n\r\n // ### addTextBlockAt\r\n // Add a text block to the line of text.\r\n // params must contain at least:\r\n // {text:'xxx'}\r\n addTextBlockAt(position: number, params: SuiInlineBlock) {\r\n const block: SuiInlineBlock = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n smoSerialize.vexMerge(block, params);\r\n block.text = params.text;\r\n block.scale = params.scale ? params.scale : 1;\r\n this._addBlockAt(position, block);\r\n this.updatedMetrics = false;\r\n }\r\n _getGlyphBlock(params: SuiInlineBlock): SuiInlineBlock {\r\n // vex 5\r\n /* const block: SuiInlineBlock = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n smoSerialize.vexMerge(block, params);\r\n params.text = params.glyphCode;\r\n block.text = params.text;\r\n block.scale = params.scale ? params.scale : 1; */\r\n const block = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n block.symbolType = SuiInlineText.symbolTypes.GLYPH;\r\n\r\n block.glyphCode = params.glyphCode;\r\n const vexCode = getVexGlyphFromChordCode(block.glyphCode);\r\n block.glyph = new VF.Glyph(vexCode, this.fontSize);\r\n // Vex 4 feature, vex 5 elimitated metrics here\r\n block.metrics = getChordSymbolMetricsForGlyph(vexCode);\r\n block.scale = (params.textType && params.textType !== SuiInlineText.textTypes.normal) ?\r\n 2 * VF.ChordSymbol.superSubRatio : 2;\r\n\r\n block.textType = params.textType ? params.textType : SuiInlineText.textTypes.normal;\r\n\r\n block.glyph.scale = block.glyph.scale * block.scale;\r\n return block;\r\n }\r\n // ### addGlyphBlockAt\r\n // Add a glyph block to the line of text. Params must include:\r\n // {glyphCode:'csymDiminished'}\r\n addGlyphBlockAt(position: number, params: SuiInlineBlock) {\r\n const block = this._getGlyphBlock(params);\r\n this._addBlockAt(position, block);\r\n this.updatedMetrics = false;\r\n }\r\n isSuperscript(block: SuiInlineBlock): boolean {\r\n return block.textType === SuiInlineText.textTypes.superScript;\r\n }\r\n isSubcript(block: SuiInlineBlock): boolean {\r\n return block.textType === SuiInlineText.textTypes.subScript;\r\n }\r\n getHighlight(block: SuiInlineBlock): boolean {\r\n return block.highlighted;\r\n }\r\n setHighlight(block: SuiInlineBlock, value: boolean) {\r\n block.highlighted = value;\r\n }\r\n\r\n rescale(scale: number) {\r\n scale = (scale * this.fontSize < 6) ? 6 / this.fontSize : scale;\r\n scale = (scale * this.fontSize > 72) ? 72 / this.fontSize : scale;\r\n this.blocks.forEach((block) => {\r\n block.scale = scale;\r\n });\r\n this.updatedMetrics = false;\r\n }\r\n\r\n render() {\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n\r\n this.context.getContext().setFont({\r\n family: this.fontFamily, size: this.fontSize, weight: this.fontWeight, style: this.fontStyle\r\n });\r\n const group = this.context.getContext().openGroup();\r\n this.element = group;\r\n const mmClass = 'suiInlineText';\r\n let ix = 0;\r\n group.classList.add('vf-' + this.attrs.id);\r\n group.classList.add(this.attrs.id);\r\n group.classList.add(mmClass);\r\n group.classList.add(this.purpose);\r\n group.id = this.attrs.id;\r\n this.artifacts = [];\r\n\r\n this.blocks.forEach((block) => {\r\n var bg = this.context.getContext().openGroup();\r\n bg.classList.add('textblock-' + this.attrs.id + ix);\r\n this._drawBlock(block);\r\n this.context.getContext().closeGroup();\r\n const artifact: SuiInlineArtifact = { block, box: SvgBox.default, index: 0 };\r\n artifact.box = this.context.offsetBbox(bg);\r\n artifact.index = ix;\r\n this.artifacts.push(artifact);\r\n ix += 1;\r\n });\r\n this.context.getContext().closeGroup();\r\n this.logicalBox = this.context.offsetBbox(group);\r\n }\r\n\r\n _drawBlock(block: SuiInlineBlock) {\r\n const sp = this.isSuperscript(block);\r\n const sub = this.isSubcript(block);\r\n const highlight = this.getHighlight(block);\r\n const y = block.y - this.context.box.y; // relative y into page\r\n\r\n if (highlight) {\r\n this.context.getContext().save();\r\n this.context.getContext().setFillStyle('#999');\r\n }\r\n\r\n // This is how svgcontext expects to get 'style'\r\n const weight = this.fontWeight;\r\n const style = this.fontStyle;\r\n const family = this.fontFamily;\r\n if (sp || sub) {\r\n this.context.getContext().save();\r\n this.context.getContext().setFont({\r\n family, size: this.fontSize * VF.ChordSymbol.superSubRatio * block.scale, weight, style\r\n });\r\n } else {\r\n this.context.getContext().setFont({ family, size: this.fontSize * block.scale, weight, style });\r\n }\r\n if (block.symbolType === SuiInlineText.symbolTypes.TEXT) {\r\n this.context.getContext().fillText(block.text, block.x, y);\r\n } else if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n block.glyph.render(this.context.getContext(), block.x, y);\r\n }\r\n if (sp || sub) {\r\n this.context.getContext().restore();\r\n }\r\n if (highlight) {\r\n this.context.getContext().restore();\r\n }\r\n }\r\n\r\n getText(): string {\r\n let rv = '';\r\n this.blocks.forEach((block) => {\r\n rv += block.text;\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport interface SuiTextBlockBlock {\r\n text: SuiInlineText;\r\n position: number;\r\n activeText: boolean;\r\n}\r\nexport interface SuiTextBlockParams {\r\n blocks: SuiTextBlockBlock[];\r\n scroller: SuiScroller;\r\n spacing: number;\r\n context: SvgPage;\r\n skipRender: boolean;\r\n justification: number;\r\n}\r\nexport interface SuiTextBlockJusityCalc {\r\n blocks: SuiInlineText[], minx: number, maxx: number, width: number\r\n}\r\n// ## SuiTextBlock\r\n// A text block is a set of inline blocks that can be aligned/arranged in different ways.\r\nexport class SuiTextBlock {\r\n static get relativePosition() {\r\n return {\r\n ABOVE: SmoTextGroup.relativePositions.ABOVE,\r\n BELOW: SmoTextGroup.relativePositions.BELOW,\r\n LEFT: SmoTextGroup.relativePositions.LEFT,\r\n RIGHT: SmoTextGroup.relativePositions.RIGHT\r\n };\r\n }\r\n inlineBlocks: SuiTextBlockBlock[] = [];\r\n scroller: SuiScroller;\r\n spacing: number = 0;\r\n context: SvgPage;\r\n skipRender: boolean;\r\n currentBlockIndex: number = 0;\r\n justification: number;\r\n outlineRect: OutlineInfo | null = null;\r\n currentBlock: SuiTextBlockBlock | null = null;\r\n logicalBox: SvgBox = SvgBox.default;\r\n constructor(params: SuiTextBlockParams) {\r\n this.inlineBlocks = [];\r\n this.scroller = params.scroller;\r\n this.spacing = params.spacing;\r\n this.context = params.context;\r\n this.skipRender = false; // used when editing the text\r\n if (params.blocks.length < 1) {\r\n const inlineParams = SuiInlineText.defaults;\r\n inlineParams.scroller = this.scroller;\r\n inlineParams.context = this.context;\r\n const inst = new SuiInlineText(inlineParams);\r\n params.blocks = [{ text: inst, position: SmoTextGroup.relativePositions.RIGHT, activeText: true }];\r\n }\r\n params.blocks.forEach((block) => {\r\n if (!this.currentBlock) {\r\n this.currentBlock = block;\r\n this.currentBlockIndex = 0;\r\n }\r\n this.inlineBlocks.push(block);\r\n });\r\n this.justification = params.justification ? params.justification :\r\n SmoTextGroup.justifications.LEFT;\r\n }\r\n render() {\r\n this.unrender(); \r\n this.inlineBlocks.forEach((block) => {\r\n block.text.render();\r\n if (block.activeText) {\r\n this._outlineBox(this.context, block.text.logicalBox);\r\n }\r\n if (!this.logicalBox || this.logicalBox.width < 1) {\r\n this.logicalBox = SvgHelpers.smoBox(block.text.logicalBox);\r\n } else {\r\n this.logicalBox = SvgHelpers.unionRect(this.logicalBox, block.text.logicalBox);\r\n }\r\n });\r\n }\r\n _outlineBox(context: any, box: SvgBox) {\r\n const outlineStroke = SuiTextEditor.strokes['text-highlight'];\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context, box, classes: 'text-drag',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n }\r\n this.outlineRect.box = box;\r\n this.outlineRect.context = context;\r\n this.outlineRect.scroll = this.scroller.scrollState;\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n\r\n offsetStartX(offset: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.offsetStartX(offset);\r\n });\r\n }\r\n\r\n offsetStartY(offset: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.offsetStartY(offset);\r\n });\r\n }\r\n\r\n rescale(scale: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.rescale(scale);\r\n });\r\n }\r\n\r\n get x(): number {\r\n return this.getLogicalBox().x;\r\n }\r\n get y(): number {\r\n return this.getLogicalBox().y;\r\n }\r\n\r\n maxFontHeight(scale: number): number {\r\n let rv = 0;\r\n this.inlineBlocks.forEach((block) => {\r\n const blockHeight = block.text.maxFontHeight(scale);\r\n rv = blockHeight > rv ? blockHeight : rv;\r\n });\r\n return rv;\r\n }\r\n static blockFromScoreText(scoreText: SmoScoreText, context: SvgPage, pageMap: SvgPageMap, position: number, scroller: SuiScroller): SuiTextBlockBlock {\r\n var inlineText = SuiInlineText.fromScoreText(scoreText, context, pageMap, scroller);\r\n return { text: inlineText, position, activeText: true };\r\n }\r\n\r\n getLogicalBox(): SvgBox {\r\n return this._calculateBoundingClientRect();\r\n }\r\n _calculateBoundingClientRect(): SvgBox {\r\n let rv: SvgBox = SvgBox.default;\r\n this.inlineBlocks.forEach((block) => {\r\n if (!rv.x) {\r\n rv = block.text.getLogicalBox();\r\n } else {\r\n rv = SvgHelpers.unionRect(rv, block.text.getLogicalBox());\r\n }\r\n });\r\n rv.y = rv.y - rv.height;\r\n return rv;\r\n }\r\n static fromTextGroup(tg: SmoTextGroup, context: SvgPage, pageMap: SvgPageMap, scroller: SuiScroller): SuiTextBlock {\r\n const blocks: SuiTextBlockBlock[] = [];\r\n\r\n // Create an inline block for each ScoreText\r\n tg.textBlocks.forEach((stBlock) => {\r\n const st = stBlock.text;\r\n const newText = SuiTextBlock.blockFromScoreText(st, context, pageMap, stBlock.position, scroller);\r\n newText.activeText = stBlock.activeText;\r\n blocks.push(newText);\r\n });\r\n const rv = new SuiTextBlock({\r\n blocks, justification: tg.justification, spacing: tg.spacing, context, scroller,\r\n skipRender: false\r\n });\r\n rv._justify();\r\n return rv;\r\n }\r\n unrender() {\r\n this.inlineBlocks.forEach((block) => {\r\n if (block.text.element) {\r\n block.text.element.remove();\r\n block.text.element = null;\r\n }\r\n });\r\n }\r\n // ### _justify\r\n // justify the blocks according to the group justify policy and the\r\n // relative position of the blocks\r\n _justify() {\r\n let hIx = 0;\r\n let left = 0;\r\n let minx = 0;\r\n let maxx = 0;\r\n let lvl = 0;\r\n let maxwidth = 0;\r\n let runningWidth = 0;\r\n let runningHeight = 0;\r\n if (!this.inlineBlocks.length) {\r\n return;\r\n }\r\n minx = this.inlineBlocks[0].text.startX;\r\n // We justify relative to first block x/y.\r\n const initialX = this.inlineBlocks[0].text.startX;\r\n const initialY = this.inlineBlocks[0].text.startY;\r\n const vert: Record = {};\r\n this.inlineBlocks.forEach((inlineBlock) => {\r\n const block = inlineBlock.text;\r\n const blockBox = block.getLogicalBox();\r\n // If this is a horizontal positioning, reset to first blokc position\r\n //\r\n if (hIx > 0) {\r\n block.startX = initialX;\r\n block.startY = initialY;\r\n }\r\n minx = block.startX < minx ? block.startX : minx;\r\n maxx = (block.startX + blockBox.width) > maxx ? block.startX + blockBox.width : maxx;\r\n\r\n lvl = inlineBlock.position === SmoTextGroup.relativePositions.ABOVE ? lvl + 1 : lvl;\r\n lvl = inlineBlock.position === SmoTextGroup.relativePositions.BELOW ? lvl - 1 : lvl;\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.RIGHT) {\r\n block.startX += runningWidth;\r\n if (hIx > 0) {\r\n block.startX += this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.LEFT) {\r\n if (hIx > 0) {\r\n block.startX = minx - blockBox.width;\r\n minx = block.startX;\r\n block.startX -= this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.BELOW) {\r\n block.startY += runningHeight;\r\n if (hIx > 0) {\r\n block.startY += this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.ABOVE) {\r\n block.startY -= runningHeight;\r\n if(hIx > 0) {\r\n block.startY -= this.spacing;\r\n }\r\n }\r\n if (!vert[lvl]) {\r\n vert[lvl] = {\r\n blocks: [block], minx: block.startX, maxx: block.startX + blockBox.width,\r\n width: blockBox.width\r\n };\r\n maxwidth = vert[lvl].width;\r\n vert[lvl].blocks = [block];\r\n vert[lvl].minx = block.startX;\r\n vert[lvl].maxx = block.startX + blockBox.width;\r\n maxwidth = vert[lvl].width = blockBox.width;\r\n } else {\r\n vert[lvl].blocks.push(block);\r\n vert[lvl].minx = vert[lvl].minx < block.startX ? vert[lvl].minx : block.startX;\r\n vert[lvl].maxx = vert[lvl].maxx > (block.startX + blockBox.width) ?\r\n vert[lvl].maxx : (block.startX + blockBox.width);\r\n vert[lvl].width += blockBox.width;\r\n maxwidth = maxwidth > vert[lvl].width ? maxwidth : vert[lvl].width;\r\n }\r\n runningWidth += blockBox.width;\r\n runningHeight += blockBox.height;\r\n hIx += 1;\r\n block.updatedMetrics = false;\r\n });\r\n\r\n const levels = Object.keys(vert);\r\n\r\n // Horizontal justify the vertical blocks\r\n levels.forEach((level) => {\r\n const vobj = vert[level];\r\n if (this.justification === SmoTextGroup.justifications.LEFT) {\r\n left = minx - vobj.minx;\r\n } else if (this.justification === SmoTextGroup.justifications.RIGHT) {\r\n left = maxx - vobj.maxx;\r\n } else {\r\n left = (maxwidth / 2) - (vobj.width / 2);\r\n left += minx - vobj.minx;\r\n }\r\n vobj.blocks.forEach((block) => {\r\n block.offsetStartX(left);\r\n });\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiMapper, SuiRendererBase } from './mapper';\r\nimport { SvgHelpers, StrokeInfo, OutlineInfo } from './svgHelpers';\r\nimport { SmoSelection, SmoSelector, ModifierTab } from '../../smo/xform/selections';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SuiOscillator } from '../audio/oscillator';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SvgBox, KeyEvent } from '../../smo/data/common';\r\nimport { SuiScroller } from './scroller';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { layoutDebug } from './layoutDebug';\r\ndeclare var $: any;\r\n\r\n/**\r\n * SuiTracker\r\n A tracker maps the UI elements to the logical elements ,and allows the user to\r\n move through the score and make selections, for navigation and editing.\r\n */\r\nexport class SuiTracker extends SuiMapper {\r\n idleTimer: number = Date.now();\r\n musicCursorGlyph: SVGSVGElement | null = null;\r\n static get strokes(): Record {\r\n return {\r\n suggestion: {\r\n strokeName: 'suggestion',\r\n stroke: '#fc9',\r\n strokeWidth: 3,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n selection: {\r\n strokeName: 'selection',\r\n stroke: '#99d',\r\n strokeWidth: 3,\r\n strokeDasharray: 2,\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n staffModifier: {\r\n strokeName: 'staffModifier',\r\n stroke: '#933',\r\n strokeWidth: 3,\r\n fill: 'none',\r\n strokeDasharray: 0,\r\n opacity: 1.0\r\n }, pitchSelection: {\r\n strokeName: 'pitchSelection',\r\n stroke: '#933',\r\n strokeWidth: 3,\r\n fill: 'none',\r\n strokeDasharray: 0,\r\n opacity: 1.0\r\n }\r\n\r\n };\r\n }\r\n constructor(renderer: SuiRendererBase, scroller: SuiScroller, pasteBuffer: PasteBuffer) {\r\n super(renderer, scroller, pasteBuffer);\r\n }\r\n // ### renderElement\r\n // the element the score is rendered on\r\n get renderElement(): Element {\r\n return this.renderer.renderElement;\r\n }\r\n\r\n get score(): SmoScore | null {\r\n return this.renderer.score;\r\n }\r\n\r\n getIdleTime(): number {\r\n return this.idleTimer;\r\n }\r\n\r\n getSelectedModifier() {\r\n if (this.modifierSelections.length) {\r\n return this.modifierSelections[0];\r\n }\r\n return null;\r\n }\r\n\r\n getSelectedModifiers() {\r\n return this.modifierSelections;\r\n }\r\n\r\n static serializeEvent(evKey: KeyEvent | null): any {\r\n if (!evKey) {\r\n return [];\r\n }\r\n const rv = {};\r\n smoSerialize.serializedMerge(['type', 'shiftKey', 'ctrlKey', 'altKey', 'key', 'keyCode'], evKey, rv);\r\n return rv;\r\n }\r\n\r\n advanceModifierSelection(score: SmoScore, keyEv: KeyEvent | null) {\r\n if (!keyEv) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n const offset = keyEv.key === 'ArrowLeft' ? -1 : 1;\r\n this.modifierIndex = this.modifierIndex + offset;\r\n this.modifierIndex = (this.modifierIndex === -2 && this.localModifiers.length) ?\r\n this.localModifiers.length - 1 : this.modifierIndex;\r\n if (this.modifierIndex >= this.localModifiers.length || this.modifierIndex < 0) {\r\n this.modifierIndex = -1;\r\n this.modifierSelections = [];\r\n return;\r\n }\r\n const local: ModifierTab = this.localModifiers[this.modifierIndex];\r\n const box: SvgBox = SvgHelpers.smoBox(local.box) as SvgBox;\r\n this.modifierSelections = [{ index: 0, box, modifier: local.modifier, selection: local.selection }];\r\n this._highlightModifier();\r\n }\r\n\r\n static stringifyBox(box: SvgBox): string {\r\n return '{x:' + box.x + ',y:' + box.y + ',width:' + box.width + ',height:' + box.height + '}';\r\n }\r\n\r\n // ### _getOffsetSelection\r\n // Get the selector that is the offset of the first existing selection\r\n _getOffsetSelection(offset: number): SmoSelector {\r\n if (!this.score) {\r\n return SmoSelector.default;\r\n }\r\n let testSelection = this.getExtremeSelection(Math.sign(offset));\r\n const scopyTick = JSON.parse(JSON.stringify(testSelection.selector));\r\n const scopyMeasure = JSON.parse(JSON.stringify(testSelection.selector));\r\n scopyTick.tick += offset;\r\n scopyMeasure.measure += offset;\r\n const targetMeasure = SmoSelection.measureSelection(this.score, testSelection.selector.staff,\r\n scopyMeasure.measure);\r\n if (targetMeasure && targetMeasure.measure && targetMeasure.measure.voices.length <= scopyMeasure.voice) {\r\n scopyMeasure.voice = 0;\r\n }\r\n if (targetMeasure && targetMeasure.measure) {\r\n scopyMeasure.tick = (offset < 0) ? targetMeasure.measure.voices[scopyMeasure.voice].notes.length - 1 : 0;\r\n }\r\n\r\n if (testSelection.measure.voices.length > scopyTick.voice &&\r\n testSelection.measure.voices[scopyTick.voice].notes.length > scopyTick.tick && scopyTick.tick >= 0) {\r\n if (testSelection.selector.voice !== testSelection.measure.getActiveVoice()) {\r\n scopyTick.voice = testSelection.measure.getActiveVoice();\r\n testSelection = this._getClosestTick(scopyTick);\r\n return testSelection.selector;\r\n }\r\n return scopyTick;\r\n } else if (targetMeasure &&\r\n scopyMeasure.measure < testSelection.staff.measures.length && scopyMeasure.measure >= 0) {\r\n return scopyMeasure;\r\n }\r\n return testSelection.selector;\r\n }\r\n\r\n getSelectedGraceNotes(): ModifierTab[] {\r\n if (!this.modifierSelections.length) {\r\n return [];\r\n }\r\n const ff = this.modifierSelections.filter((mm) =>\r\n mm.modifier?.attrs?.type === 'SmoGraceNote'\r\n );\r\n return ff;\r\n }\r\n\r\n isGraceNoteSelected(): boolean {\r\n if (this.modifierSelections.length) {\r\n const ff = this.modifierSelections.findIndex((mm) => mm.modifier.attrs.type === 'SmoGraceNote');\r\n return ff >= 0;\r\n }\r\n return false;\r\n }\r\n\r\n _growGraceNoteSelections(offset: number) {\r\n this.idleTimer = Date.now();\r\n const far = this.modifierSelections.filter((mm) => mm.modifier.attrs.type === 'SmoGraceNote');\r\n if (!far.length) {\r\n return;\r\n }\r\n const ix = (offset < 0) ? 0 : far.length - 1;\r\n const sel: ModifierTab = far[ix] as ModifierTab;\r\n const left = this.localModifiers.filter((mt) =>\r\n mt.modifier?.attrs?.type === 'SmoGraceNote' && sel.selection && mt.selection &&\r\n SmoSelector.sameNote(mt.selection.selector, sel.selection.selector)\r\n );\r\n if (ix + offset < 0 || ix + offset >= left.length) {\r\n return;\r\n }\r\n const leftSel = left[ix + offset];\r\n if (!leftSel) {\r\n console.warn('bad selector in _growGraceNoteSelections');\r\n }\r\n leftSel.box = leftSel.box ?? SvgBox.default;\r\n this.modifierSelections.push(leftSel);\r\n this._highlightModifier();\r\n }\r\n get autoPlay(): boolean {\r\n return this.renderer.score ? this.renderer.score.preferences.autoPlay : false;\r\n }\r\n\r\n growSelectionRight() {\r\n this._growSelectionRight(false);\r\n }\r\n _growSelectionRight(skipPlay: boolean): number {\r\n this.idleTimer = Date.now();\r\n if (this.isGraceNoteSelected()) {\r\n this._growGraceNoteSelections(1);\r\n return 0;\r\n }\r\n const nselect = this._getOffsetSelection(1);\r\n // already selected\r\n const artifact = this._getClosestTick(nselect);\r\n if (!artifact) {\r\n return 0;\r\n }\r\n if (this.selections.find((sel) => SmoSelector.sameNote(sel.selector, artifact.selector))) {\r\n return 0;\r\n }\r\n if (!this.mapping && this.autoPlay && skipPlay === false && this.score) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n this.selections.push(artifact);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n return (artifact.note as SmoNote).tickCount;\r\n }\r\n moveHome(score: SmoScore, evKey: KeyEvent) {\r\n this.idleTimer = Date.now();\r\n const ls = this.selections[0].staff;\r\n if (evKey.ctrlKey) {\r\n const mm = ls.measures[0];\r\n const homeSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: 0, voice: mm.getActiveVoice(), tick: 0, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], homeSel);\r\n } else {\r\n this.selections = [homeSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (homeSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(homeSel.measure.svg.logicalBox);\r\n }\r\n }\r\n } else {\r\n const system = this.selections[0].measure.svg.lineIndex;\r\n const lm = ls.measures.find((mm) =>\r\n mm.svg.lineIndex === system && mm.measureNumber.systemIndex === 0);\r\n const mm = lm as SmoMeasure;\r\n const homeSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: mm.measureNumber.measureIndex, voice: mm.getActiveVoice(),\r\n tick: 0, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], homeSel);\r\n } else if (homeSel?.measure?.svg?.logicalBox) {\r\n this.selections = [homeSel];\r\n this.scroller.scrollVisibleBox(homeSel.measure.svg.logicalBox);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n }\r\n }\r\n moveEnd(score: SmoScore, evKey: KeyEvent) {\r\n this.idleTimer = Date.now();\r\n const ls = this.selections[0].staff;\r\n if (evKey.ctrlKey) {\r\n const lm = ls.measures[ls.measures.length - 1];\r\n const voiceIx = lm.getActiveVoice();\r\n const voice = lm.voices[voiceIx];\r\n const endSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: ls.measures.length - 1, voice: voiceIx, tick: voice.notes.length - 1, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], endSel);\r\n } else {\r\n this.selections = [endSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (endSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(endSel.measure.svg.logicalBox);\r\n }\r\n }\r\n } else {\r\n const system = this.selections[0].measure.svg.lineIndex;\r\n // find the largest measure index on this staff in this system\r\n const measures = ls.measures.filter((mm) =>\r\n mm.svg.lineIndex === system);\r\n const lm = measures.reduce((a, b) =>\r\n b.measureNumber.measureIndex > a.measureNumber.measureIndex ? b : a);\r\n const ticks = lm.voices[lm.getActiveVoice()].notes.length;\r\n const endSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: lm.measureNumber.measureIndex, voice: lm.getActiveVoice(), tick: ticks - 1, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], endSel);\r\n } else {\r\n this.selections = [endSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (endSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(endSel.measure.svg.logicalBox);\r\n }\r\n }\r\n }\r\n }\r\n growSelectionRightMeasure() {\r\n let toSelect = 0;\r\n const rightmost = this.getExtremeSelection(1);\r\n const ticksLeft = rightmost.measure.voices[rightmost.measure.activeVoice]\r\n .notes.length - rightmost.selector.tick;\r\n if (ticksLeft === 0) {\r\n if (rightmost.selector.measure < rightmost.staff.measures.length) {\r\n const mix = rightmost.selector.measure + 1;\r\n rightmost.staff.measures[mix].setActiveVoice(rightmost.selector.voice);\r\n toSelect = rightmost.staff.measures[mix]\r\n .voices[rightmost.staff.measures[mix].activeVoice].notes.length;\r\n }\r\n } else {\r\n toSelect = ticksLeft;\r\n }\r\n while (toSelect > 0) {\r\n this._growSelectionRight(true);\r\n toSelect -= 1;\r\n }\r\n }\r\n\r\n growSelectionLeft(): number {\r\n if (this.isGraceNoteSelected()) {\r\n this._growGraceNoteSelections(-1);\r\n return 0;\r\n }\r\n this.idleTimer = Date.now();\r\n const nselect = this._getOffsetSelection(-1);\r\n // already selected\r\n const artifact = this._getClosestTick(nselect);\r\n if (!artifact) {\r\n return 0;\r\n }\r\n if (this.selections.find((sel) => SmoSelector.sameNote(sel.selector, artifact.selector))) {\r\n return 0;\r\n }\r\n artifact.measure.setActiveVoice(nselect.voice);\r\n this.selections.push(artifact);\r\n if (this.autoPlay && this.score) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n return (artifact.note as SmoNote).tickCount;\r\n }\r\n\r\n // if we are being moved right programmatically, avoid playing the selected note.\r\n moveSelectionRight(score: SmoScore, evKey: KeyEvent | null, skipPlay: boolean) {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n // const original = JSON.parse(JSON.stringify(this.getExtremeSelection(-1).selector));\r\n const nselect = this._getOffsetSelection(1);\r\n // skip any measures that are not displayed due to rest or repetition\r\n const mselect = SmoSelection.measureSelection(this.score, nselect.staff, nselect.measure); \r\n if (mselect?.measure.svg.multimeasureLength) {\r\n nselect.measure += mselect?.measure.svg.multimeasureLength;\r\n }\r\n if (mselect) {\r\n mselect.measure.setActiveVoice(nselect.voice);\r\n }\r\n this._replaceSelection(nselect, skipPlay);\r\n }\r\n\r\n moveSelectionLeft() {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n const nselect = this._getOffsetSelection(-1);\r\n // Skip multimeasure rests in parts\r\n const mselect = SmoSelection.measureSelection(this.score, nselect.staff, nselect.measure);\r\n while (nselect.measure > 0 && mselect && (mselect.measure.svg.hideMultimeasure || mselect.measure.svg.multimeasureLength > 0)) {\r\n nselect.measure -= 1;\r\n }\r\n if (mselect) {\r\n mselect.measure.setActiveVoice(nselect.voice);\r\n } \r\n this._replaceSelection(nselect, false);\r\n }\r\n moveSelectionLeftMeasure() {\r\n this._moveSelectionMeasure(-1);\r\n }\r\n moveSelectionRightMeasure() {\r\n this._moveSelectionMeasure(1);\r\n }\r\n _moveSelectionMeasure(offset: number) {\r\n const selection = this.getExtremeSelection(Math.sign(offset));\r\n this.idleTimer = Date.now();\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n selector.measure += offset;\r\n selector.tick = 0;\r\n const selObj = this._getClosestTick(selector);\r\n if (selObj) {\r\n this.selections = [selObj];\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n\r\n _moveStaffOffset(offset: number) {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n const nselector = JSON.parse(JSON.stringify(this.selections[0].selector));\r\n nselector.staff = this.score.incrementActiveStaff(offset);\r\n \r\n this.selections = [this._getClosestTick(nselector)];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n removePitchSelection() {\r\n if (this.outlines['pitchSelection']) {\r\n if (this.outlines['pitchSelection'].element) {\r\n this.outlines['pitchSelection'].element.remove();\r\n }\r\n delete this.outlines['pitchSelection'];\r\n }\r\n }\r\n\r\n // ### _moveSelectionPitch\r\n // Suggest a specific pitch in a chord, so we can transpose just the one note vs. the whole chord.\r\n _moveSelectionPitch(index: number) {\r\n this.idleTimer = Date.now();\r\n if (!this.selections.length) {\r\n return;\r\n }\r\n const sel = this.selections[0];\r\n const note = sel.note as SmoNote;\r\n if (note.pitches.length < 2) {\r\n this.pitchIndex = -1;\r\n this.removePitchSelection();\r\n return;\r\n }\r\n this.pitchIndex = (this.pitchIndex + index) % note.pitches.length;\r\n sel.selector.pitches = [];\r\n sel.selector.pitches.push(this.pitchIndex);\r\n this._highlightPitchSelection(note, this.pitchIndex);\r\n }\r\n moveSelectionPitchUp() {\r\n this._moveSelectionPitch(1);\r\n }\r\n moveSelectionPitchDown() {\r\n if (!this.selections.length) {\r\n return;\r\n }\r\n this._moveSelectionPitch((this.selections[0].note as SmoNote).pitches.length - 1);\r\n }\r\n\r\n moveSelectionUp() {\r\n this._moveStaffOffset(-1);\r\n }\r\n moveSelectionDown() {\r\n this._moveStaffOffset(1);\r\n }\r\n\r\n containsArtifact(): boolean {\r\n return this.selections.length > 0;\r\n }\r\n\r\n _replaceSelection(nselector: SmoSelector, skipPlay: boolean) {\r\n if (this.score === null) {\r\n return;\r\n }\r\n var artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, nselector.voice, nselector.tick);\r\n if (!artifact) {\r\n artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, 0, nselector.tick);\r\n }\r\n if (!artifact) {\r\n artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, 0, 0);\r\n }\r\n if (!artifact) {\r\n // disappeared - default to start\r\n artifact = SmoSelection.noteSelection(this.score, 0, 0, 0, 0);\r\n }\r\n if (!skipPlay && this.autoPlay && artifact) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n if (!artifact) {\r\n return;\r\n }\r\n artifact.measure.setActiveVoice(nselector.voice);\r\n\r\n // clear modifier selections\r\n this.clearModifierSelections();\r\n this.score.setActiveStaff(nselector.staff);\r\n const mapKey = Object.keys(this.measureNoteMap).find((k) =>\r\n artifact && SmoSelector.sameNote(this.measureNoteMap[k].selector, artifact.selector)\r\n );\r\n if (!mapKey) {\r\n return;\r\n }\r\n const mapped = this.measureNoteMap[mapKey];\r\n // If this is a new selection, remove pitch-specific and replace with note-specific\r\n if (!nselector.pitches || nselector.pitches.length === 0) {\r\n this.pitchIndex = -1;\r\n }\r\n\r\n this.selections = [mapped];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n\r\n getFirstMeasureOfSelection() {\r\n if (this.selections.length) {\r\n return this.selections[0].measure;\r\n }\r\n return null;\r\n }\r\n // ## measureIterator\r\n // Description: iterate over the any measures that are part of the selection\r\n getSelectedMeasures(): SmoSelection[] {\r\n const set: number[] = [];\r\n const rv: SmoSelection[] = [];\r\n if (!this.score) {\r\n return [];\r\n }\r\n this.selections.forEach((sel) => {\r\n const measure = SmoSelection.measureSelection(this.score!, sel.selector.staff, sel.selector.measure);\r\n if (measure) {\r\n const ix = measure.selector.measure;\r\n if (set.indexOf(ix) === -1) {\r\n set.push(ix);\r\n rv.push(measure);\r\n }\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n _addSelection(selection: SmoSelection) {\r\n const ar: SmoSelection[] = this.selections.filter((sel) =>\r\n SmoSelector.neq(sel.selector, selection.selector)\r\n );\r\n if (this.autoPlay && this.score) {\r\n SuiOscillator.playSelectionNow(selection, this.score, 1);\r\n }\r\n ar.push(selection);\r\n this.selections = ar;\r\n }\r\n\r\n _selectFromToInStaff(score: SmoScore, sel1: SmoSelection, sel2: SmoSelection) {\r\n const selections = SmoSelection.innerSelections(score, sel1.selector, sel2.selector);\r\n /* .filter((ff) => \r\n ff.selector.voice === sel1.measure.activeVoice\r\n ); */\r\n this.selections = [];\r\n // Get the actual selections from our map, since the client bounding boxes are already computed\r\n selections.forEach((sel) => {\r\n const key = SmoSelector.getNoteKey(sel.selector);\r\n sel.measure.setActiveVoice(sel.selector.voice);\r\n // Skip measures that are not rendered because they are part of a multi-rest\r\n if (this.measureNoteMap && this.measureNoteMap[key]) {\r\n this.selections.push(this.measureNoteMap[key]);\r\n }\r\n });\r\n\r\n if (this.selections.length === 0) {\r\n this.selections = [sel1];\r\n }\r\n this.idleTimer = Date.now();\r\n }\r\n _selectBetweenSelections(score: SmoScore, s1: SmoSelection, s2: SmoSelection) {\r\n const min = SmoSelector.gt(s1.selector, s2.selector) ? s2 : s1;\r\n const max = SmoSelector.lt(min.selector, s2.selector) ? s2 : s1;\r\n this._selectFromToInStaff(score, min, max);\r\n this._createLocalModifiersList();\r\n this.highlightQueue.selectionCount = this.selections.length;\r\n this.deferHighlight();\r\n }\r\n selectSuggestion(score: SmoScore,ev: KeyEvent) {\r\n if (!this.suggestion || !this.suggestion.measure || this.score === null) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n\r\n if (this.modifierSuggestion) {\r\n this.modifierIndex = -1;\r\n this.modifierSelections = [this.modifierSuggestion];\r\n this.modifierSuggestion = null;\r\n this.createLocalModifiersFromModifierTabs(this.modifierSelections);\r\n // If we selected due to a mouse click, move the selection to the\r\n // selected modifier\r\n this._highlightModifier();\r\n return;\r\n } else if (ev.type === 'click') {\r\n this.clearModifierSelections(); // if we click on a non-modifier, clear the\r\n // modifier selections\r\n }\r\n\r\n if (ev.shiftKey) {\r\n const sel1 = this.getExtremeSelection(-1);\r\n if (sel1.selector.staff === this.suggestion.selector.staff) {\r\n this._selectBetweenSelections(score, sel1, this.suggestion);\r\n return;\r\n }\r\n }\r\n\r\n if (ev.ctrlKey) {\r\n this._addSelection(this.suggestion);\r\n this._createLocalModifiersList();\r\n this.deferHighlight();\r\n return;\r\n }\r\n if (this.autoPlay) {\r\n SuiOscillator.playSelectionNow(this.suggestion, this.score, 1);\r\n }\r\n\r\n const preselected = this.selections[0] ?\r\n SmoSelector.sameNote(this.suggestion.selector, this.selections[0].selector) && this.selections.length === 1 : false;\r\n\r\n if (this.selections.length === 0) {\r\n this.selections.push(this.suggestion);\r\n }\r\n const note = this.selections[0].note as SmoNote;\r\n if (preselected && note.pitches.length > 1) {\r\n this.pitchIndex = (this.pitchIndex + 1) % note.pitches.length;\r\n this.selections[0].selector.pitches = [this.pitchIndex];\r\n } else {\r\n const selection = SmoSelection.noteFromSelector(this.score, this.suggestion.selector);\r\n if (selection) {\r\n selection.box = JSON.parse(JSON.stringify(this.suggestion.box));\r\n selection.scrollBox = JSON.parse(JSON.stringify(this.suggestion.scrollBox));\r\n this.selections = [selection];\r\n }\r\n }\r\n if (preselected && this.modifierSelections.length) {\r\n const mods = this.modifierSelections.filter((mm) => mm.selection && SmoSelector.sameNote(mm.selection.selector, this.selections[0].selector));\r\n if (mods.length) {\r\n const modToAdd = mods[0];\r\n if (!modToAdd) {\r\n console.warn('bad modifier selection in selectSuggestion 2');\r\n }\r\n this.modifierSelections[0] = modToAdd;\r\n this.modifierIndex = mods[0].index;\r\n this._highlightModifier();\r\n return;\r\n }\r\n }\r\n this.score.setActiveStaff(this.selections[0].selector.staff);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n _setModifierAsSuggestion(artifact: ModifierTab): void {\r\n if (!artifact.box) {\r\n return;\r\n }\r\n this.modifierSuggestion = artifact;\r\n this._drawRect(artifact.box, 'suggestion');\r\n }\r\n\r\n _setArtifactAsSuggestion(artifact: SmoSelection) {\r\n let sameSel: SmoSelection | null = null;\r\n let i = 0;\r\n for (i = 0; i < this.selections.length; ++i) {\r\n const ss = this.selections[i];\r\n if (ss && SmoSelector.sameNote(ss.selector, artifact.selector)) {\r\n sameSel = ss;\r\n break;\r\n }\r\n }\r\n if (sameSel || !artifact.box) {\r\n return;\r\n }\r\n this.modifierSuggestion = null;\r\n\r\n this.suggestion = artifact;\r\n this._drawRect(artifact.box, 'suggestion');\r\n }\r\n _highlightModifier() {\r\n let box: SvgBox | null = null;\r\n if (!this.modifierSelections.length) {\r\n return;\r\n }\r\n this.modifierSelections.forEach((artifact) => {\r\n if (box === null) {\r\n box = artifact.modifier.logicalBox ?? null;\r\n } else {\r\n box = SvgHelpers.unionRect(box, SvgHelpers.smoBox(artifact.modifier.logicalBox));\r\n }\r\n });\r\n if (box === null) {\r\n return;\r\n }\r\n this._drawRect(box, 'staffModifier');\r\n }\r\n\r\n _highlightPitchSelection(note: SmoNote, index: number) {\r\n const noteDiv = $(this.renderElement).find('#' + note.renderId);\r\n const heads = noteDiv.find('.vf-notehead');\r\n if (!heads.length) {\r\n return;\r\n }\r\n const headEl = heads[index];\r\n const pageContext = this.renderer.pageMap.getRendererFromModifier(note);\r\n $(pageContext.svg).find('.vf-pitchSelection').remove();\r\n const box = pageContext.offsetBbox(headEl);\r\n this._drawRect(box, 'pitchSelection');\r\n }\r\n\r\n _highlightActiveVoice(selection: SmoSelection) {\r\n let i = 0;\r\n const selector = selection.selector;\r\n for (i = 1; i <= 4; ++i) {\r\n const cl = 'v' + i.toString() + '-active';\r\n $('body').removeClass(cl);\r\n }\r\n const c2 = 'v' + (selector.voice + 1).toString() + '-active';\r\n $('body').addClass(c2);\r\n }\r\n // The user has just switched voices, select the active voice\r\n selectActiveVoice() {\r\n const selection = this.selections[0];\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n selector.voice = selection.measure.activeVoice;\r\n this.selections = [this._getClosestTick(selector)];\r\n this.deferHighlight();\r\n }\r\n\r\n highlightSelection() {\r\n let i = 0;\r\n let prevSel: SmoSelection | null = null;\r\n let curBox: SvgBox = SvgBox.default;\r\n this.idleTimer = Date.now();\r\n const grace = this.getSelectedGraceNotes();\r\n // If this is not a note with grace notes, logically unselect the grace notes\r\n if (grace && grace.length && grace[0].selection && this.selections.length) {\r\n if (!SmoSelector.sameNote(grace[0].selection.selector, this.selections[0].selector)) {\r\n this.clearModifierSelections();\r\n } else {\r\n this._highlightModifier();\r\n return;\r\n }\r\n }\r\n // If there is a race condition with a change, avoid referencing null note\r\n if (!this.selections[0].note) {\r\n return;\r\n }\r\n const note = this.selections[0].note as SmoNote;\r\n if (this.pitchIndex >= 0 && this.selections.length === 1 &&\r\n this.pitchIndex < note.pitches.length) {\r\n this._highlightPitchSelection(note, this.pitchIndex);\r\n this._highlightActiveVoice(this.selections[0]);\r\n return;\r\n }\r\n this.removePitchSelection();\r\n this.pitchIndex = -1;\r\n if (this.selections.length === 1 && note.logicalBox) {\r\n this._drawRect(note.logicalBox, 'selection');\r\n this._highlightActiveVoice(this.selections[0]);\r\n return;\r\n }\r\n const sorted = this.selections.sort((a, b) => SmoSelector.gt(a.selector, b.selector) ? 1 : -1);\r\n prevSel = sorted[0];\r\n // rendered yet?\r\n if (!prevSel || !prevSel.box) {\r\n return;\r\n }\r\n curBox = SvgHelpers.smoBox(prevSel.box);\r\n const boxes: SvgBox[] = [];\r\n for (i = 1; i < sorted.length; ++i) {\r\n const sel = sorted[i];\r\n if (!sel.box || !prevSel.box) {\r\n continue;\r\n }\r\n // const ydiff = Math.abs(prevSel.box.y - sel.box.y);\r\n if (sel.selector.staff === prevSel.selector.staff && sel.measure.svg.lineIndex === prevSel.measure.svg.lineIndex) {\r\n curBox = SvgHelpers.unionRect(curBox, sel.box);\r\n } else if (curBox) {\r\n boxes.push(curBox);\r\n curBox = SvgHelpers.smoBox(sel.box);\r\n }\r\n this._highlightActiveVoice(sel);\r\n prevSel = sel;\r\n }\r\n boxes.push(curBox);\r\n if (this.modifierSelections.length) {\r\n boxes.push(this.modifierSelections[0].box);\r\n }\r\n this._drawRect(boxes, 'selection');\r\n }\r\n /**\r\n * Boxes are divided up into lines/systems already. But we need\r\n * to put the correct box on the correct page.\r\n * @param boxes \r\n */\r\n drawSelectionRects(boxes: SvgBox[]) {\r\n const keys = Object.keys(this.selectionRects);\r\n // erase any old selections\r\n keys.forEach((key) => {\r\n const oon = this.selectionRects[parseInt(key)];\r\n oon.forEach((outline) => {\r\n if (outline.element) {\r\n outline.element.remove();\r\n outline.element = undefined;\r\n \r\n }\r\n })\r\n });\r\n this.selectionRects = {};\r\n // Create an OutlineInfo for each page\r\n const pages: number[] = [];\r\n const stroke: StrokeInfo = (SuiTracker.strokes as any)['selection'];\r\n boxes.forEach((box) => {\r\n let testBox: SvgBox = SvgHelpers.smoBox(box);\r\n let context = this.renderer.pageMap.getRenderer(testBox);\r\n testBox.y -= context.box.y;\r\n if (!this.selectionRects[context.pageNumber]) {\r\n this.selectionRects[context.pageNumber] = [];\r\n pages.push(context.pageNumber);\r\n }\r\n this.selectionRects[context.pageNumber].push({\r\n context: context, box: testBox, classes: '',\r\n stroke, scroll: this.scroller.scrollState,\r\n timeOff: 0\r\n });\r\n });\r\n pages.forEach((pageNo) => {\r\n const outlineInfos = this.selectionRects[pageNo];\r\n outlineInfos.forEach((info) => {\r\n SvgHelpers.outlineRect(info);\r\n });\r\n });\r\n }\r\n _drawRect(pBox: SvgBox | SvgBox[], strokeName: string) { \r\n const stroke: StrokeInfo = (SuiTracker.strokes as any)[strokeName];\r\n const boxes = Array.isArray(pBox) ? pBox : [pBox];\r\n if (strokeName === 'selection') {\r\n this.drawSelectionRects(boxes);\r\n return;\r\n }\r\n boxes.forEach((box) => {\r\n let testBox: SvgBox = SvgHelpers.smoBox(box);\r\n let context = this.renderer.pageMap.getRenderer(testBox);\r\n const timeOff = strokeName === 'suggestion' ? 1000 : 0; \r\n if (context) {\r\n testBox.y -= context.box.y;\r\n if (!this.outlines[strokeName]) {\r\n this.outlines[strokeName] = {\r\n context: context, box: testBox, classes: '',\r\n stroke, scroll: this.scroller.scrollState,\r\n timeOff\r\n };\r\n }\r\n this.outlines[strokeName].box = testBox;\r\n this.outlines[strokeName].context = context;\r\n SvgHelpers.outlineRect(this.outlines[strokeName]);\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoBarline } from '../../smo/data/measureModifiers';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { VexFlow, GlyphInfo, getGlyphWidth } from '../../common/vex';\r\n\r\nexport class vexGlyph {\r\n static width(smoGlyph: GlyphInfo) {\r\n return getGlyphWidth(smoGlyph);\r\n }\r\n static accidental(a: string): GlyphInfo {\r\n return vexGlyph.accidentals[a];\r\n }\r\n static barWidth(b: SmoBarline): number {\r\n const str = SmoBarline.barlineString(b);\r\n const cc = vexGlyph.dimensions[str];\r\n return cc.width + cc.spacingRight;\r\n }\r\n static accidentalWidth(accidental: string): number {\r\n return vexGlyph.width(vexGlyph.accidentals[accidental]);\r\n }\r\n static get accidentals(): Record {\r\n return {\r\n 'b': vexGlyph.dimensions.flat,\r\n '#': vexGlyph.dimensions.sharp,\r\n 'bb': vexGlyph.dimensions.doubleFlat,\r\n '##': vexGlyph.dimensions.doubleSharp,\r\n 'n': vexGlyph.dimensions.natural\r\n };\r\n }\r\n\r\n static repeatSymbolWidth(): number {\r\n return vexGlyph.width(vexGlyph.dimensions['repeatSymbol']);\r\n }\r\n static get tempo(): GlyphInfo {\r\n return vexGlyph.dimensions.tempo;\r\n }\r\n static keySignatureLength(key: string) {\r\n return SmoMusic.getSharpsInKeySignature(key) * vexGlyph.width(vexGlyph.dimensions.sharp) +\r\n SmoMusic.getFlatsInKeySignature(key) * vexGlyph.width(vexGlyph.dimensions.flat) +\r\n vexGlyph.dimensions.keySignature.spacingRight;\r\n }\r\n static get timeSignature() {\r\n return vexGlyph.dimensions.timeSignature;\r\n }\r\n static get dot() {\r\n return vexGlyph.dimensions.dot;\r\n }\r\n\r\n static get tupletBeam() {\r\n return vexGlyph.dimensions.tupletBeam;\r\n }\r\n static get stem() {\r\n return vexGlyph.dimensions.stem;\r\n }\r\n static get flag() {\r\n return vexGlyph.dimensions.flag;\r\n }\r\n static clef(c: string): GlyphInfo {\r\n const key = c.toLowerCase() + 'Clef';\r\n if (!vexGlyph.dimensions[key]) {\r\n return vexGlyph.dimensions.tenorClef;\r\n }\r\n if (vexGlyph.dimensions[key].vexGlyph) {\r\n const width = vexGlyph.width(vexGlyph.dimensions[key]);\r\n return {\r\n width,\r\n height: 68.32,\r\n yTop: 3,\r\n yBottom: 3,\r\n spacingRight: 10,\r\n vexGlyph: 'gClef'\r\n };\r\n }\r\n return vexGlyph.dimensions[key];\r\n }\r\n static get dimensions(): Record {\r\n return {\r\n tupletBeam: {\r\n width: 5,\r\n height: 6,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n }, repeatSymbol: {\r\n width: 25,\r\n height: 6,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'repeat1Bar'\r\n },\r\n singleBar: {\r\n width: 1,\r\n height: 41,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 1,\r\n vexGlyph: null\r\n },\r\n endBar: {\r\n width: 5.22,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n },\r\n doubleBar: {\r\n width: 3.22,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n endRepeat: {\r\n width: 6,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n startRepeat: {\r\n width: 6,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n },\r\n noteHead: {\r\n width: 15.3,\r\n height: 10.48,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'noteheadBlack'\r\n },\r\n dot: {\r\n width: 15,\r\n height: 5,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'augmentationDot'\r\n }, // This isn't accurate, but I don't\r\n // want to add extra space just for clef.\r\n trebleClef: {\r\n width: 35,\r\n height: 68.32,\r\n yTop: 3,\r\n yBottom: 3,\r\n spacingRight: 5,\r\n vexGlyph: 'gClef'\r\n }, // This isn't accurate, but I don't\r\n // want to add extra space just for clef.\r\n tab: {\r\n width: 27.3,\r\n height: 39,\r\n yTop: 3,\r\n yBottom: 3,\r\n spacingRight: 5,\r\n vexGlyph: 'tab'\r\n },\r\n bassClef: {\r\n width: 36,\r\n height: 31.88,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'fClef'\r\n },\r\n altoClef: {\r\n width: 31.5,\r\n yTop: 0,\r\n yBottom: 0,\r\n height: 85.5,\r\n spacingRight: 5,\r\n vexGlyph: 'cClef'\r\n },\r\n tenorClef: {\r\n width: 31.5,\r\n yTop: 10,\r\n yBottom: 0,\r\n height: 41,\r\n spacingRight: 5,\r\n vexGlyph: 'cClef'\r\n },\r\n timeSignature: {\r\n width: 22.36,\r\n height: 85,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 11,\r\n vexGlyph: 'timeSig4'\r\n },\r\n tempo: {\r\n width: 10,\r\n height: 37,\r\n yTop: 37,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n flat: {\r\n width: 15,\r\n height: 23.55,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalFlat'\r\n },\r\n keySignature: {\r\n width: 0,\r\n height: 85.5,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 10,\r\n vexGlyph: null\r\n },\r\n sharp: {\r\n width: 17,\r\n height: 62,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalSharp',\r\n },\r\n natural: {\r\n width: 15,\r\n height: 53.35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalNatural',\r\n },\r\n doubleSharp: {\r\n height: 10.04,\r\n width: 21.63,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalDoubleSharp'\r\n },\r\n doubleFlat: {\r\n width: 13.79,\r\n height: 49.65,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalDoubleFlat'\r\n }, stem: {\r\n width: 1,\r\n height: 35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n }, flag: {\r\n width: 10,\r\n height: 35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'flag8thUp' // use for width measurements all flags\r\n }\r\n };\r\n }\r\n}\r\n","import { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { SmoBarline, SmoMeasureText, SmoRepeatSymbol, SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SmoTabStave, SmoTie } from '../../smo/data/staffModifiers';\r\nimport { SmoLyric, VexAnnotationParams, SmoTabNote, SmoFretPosition } from '../../smo/data/noteModifiers';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { TabNotePosition, VexFlow } from '../../common/vex';\r\nconst VF = VexFlow;\r\n/**\r\n * convert from Smo library values to Vex values\r\n * @module\r\n * \r\n **/\r\nexport function VexTabNotePositions(stave: SmoTabStave, tabNote: SmoTabNote, smoNote: SmoNote): TabNotePosition[] {\r\n const rv = tabNote.positions.map((pp) => { \r\n return { str: pp.string, fret: pp.fret }\r\n });\r\n return rv;\r\n}\r\n/**\r\n *\r\n *\r\n * @export\r\n * @param {SmoSystemGroup} athis\r\n * @return {*} \r\n */\r\nexport function leftConnectorVx(athis: SmoSystemGroup) {\r\n switch (athis.leftConnector) {\r\n case SmoSystemGroup.connectorTypes.single:\r\n return VF.StaveConnector.type.SINGLE_LEFT;\r\n case SmoSystemGroup.connectorTypes.double:\r\n return VF.StaveConnector.type.DOUBLE_LEFT;\r\n case SmoSystemGroup.connectorTypes.brace:\r\n return VF.StaveConnector.type.BRACE;\r\n case SmoSystemGroup.connectorTypes.bracket:\r\n default:\r\n return VF.StaveConnector.type.BRACKET;\r\n }\r\n}\r\n/**\r\n * convert from a SmoSystemGroup connector to Vex enumeration\r\n * @param athis \r\n * @returns \r\n */\r\nexport function rightConnectorVx(athis: SmoSystemGroup) {\r\n switch (athis.rightConnector) {\r\n case SmoSystemGroup.connectorTypes.single:\r\n return VF.StaveConnector.type.SINGLE_RIGHT;\r\n case SmoSystemGroup.connectorTypes.double:\r\n default:\r\n return VF.StaveConnector.type.DOUBLE_RIGHT;\r\n }\r\n}\r\nexport const vexBarlineType = [VF.Barline.type.SINGLE, VF.Barline.type.DOUBLE, VF.Barline.type.END,\r\n VF.Barline.type.REPEAT_BEGIN, VF.Barline.type.REPEAT_END, VF.Barline.type.NONE];\r\n\r\nexport const vexBarlinePosition = [ VF.StaveModifierPosition.BEGIN, VF.StaveModifierPosition.END ];\r\n\r\nexport function toVexBarlineType(athis: SmoBarline): number {\r\n return vexBarlineType[athis.barline];\r\n}\r\nexport function toVexBarlinePosition(athis: SmoBarline): number {\r\n return vexBarlinePosition[athis.position];\r\n}\r\n\r\nexport const vexSymbol = [VF.Repetition.type.NONE, VF.Repetition.type.CODA_LEFT, VF.Repetition.type.SEGNO_LEFT, VF.Repetition.type.DC,\r\n VF.Repetition.type.DC_AL_CODA, VF.Repetition.type.DC_AL_FINE, VF.Repetition.type.DS,\r\n VF.Repetition.type.DS_AL_CODA, VF.Repetition.type.DS_AL_FINE, VF.Repetition.type.FINE];\r\n\r\nexport function toVexSymbol(athis: SmoRepeatSymbol) {\r\n return vexSymbol[athis.symbol];\r\n}\r\nexport function toVexVolta(volta: SmoVolta, measureNumber: number) {\r\n if (volta.startBar === measureNumber && volta.startBar === volta.endBar) {\r\n return VF.Volta.type.BEGIN_END;\r\n }\r\n if (volta.startBar === measureNumber) {\r\n return VF.Volta.type.BEGIN;\r\n }\r\n if (volta.endBar === measureNumber) {\r\n return VF.Volta.type.END;\r\n }\r\n if (volta.startBar < measureNumber && volta.endBar > measureNumber) {\r\n return VF.Volta.type.MID;\r\n }\r\n return VF.Volta.type.NONE;\r\n}\r\n\r\nexport const vexTextPosition = [VF.Modifier.Position.ABOVE, VF.Modifier.Position.BELOW, VF.Modifier.Position.LEFT, VF.Modifier.Position.RIGHT];\r\nexport const vexTextJustification = [VF.TextJustification.LEFT, VF.TextJustification.RIGHT, VF.TextJustification.CENTER];\r\n\r\nexport function toVexTextJustification(athis: SmoMeasureText) {\r\n return vexTextJustification[athis.justification];\r\n}\r\nexport function toVexTextPosition(athis: SmoMeasureText) {\r\n return vexTextPosition[parseInt(athis.position as any, 10)];\r\n}\r\n\r\nexport function vexOptions(athis: SmoTie) {\r\n const rv: any = {};\r\n rv.direction = athis.invert ? VF.Stem.DOWN : VF.Stem.UP;\r\n SmoTie.vexParameters.forEach((p) => {\r\n rv[p] = (athis as any)[p];\r\n });\r\n return rv;\r\n}\r\nexport function vexAnnotationPosition(chordPos: number) {\r\n if (chordPos === SmoLyric.symbolPosition.NORMAL) {\r\n return VF.ChordSymbol.symbolModifiers.NONE;\r\n } else if (chordPos === SmoLyric.symbolPosition.SUPERSCRIPT) {\r\n return VF.ChordSymbol.symbolModifiers.SUPERSCRIPT;\r\n }\r\n return VF.ChordSymbol.symbolModifiers.SUBSCRIPT;\r\n}\r\n\r\n/**\r\n * Parse the SmoLyric text and convert it to a VEX chord symbol\r\n * @param athis \r\n * @returns \r\n */\r\nexport function getVexChordBlocks(athis: SmoLyric) {\r\n let mod = VF.ChordSymbol.symbolModifiers.NONE;\r\n let isGlyph = false;\r\n const tokens = SmoLyric._tokenizeChordString(athis.text);\r\n const blocks: VexAnnotationParams[] = [];\r\n tokens.forEach((token) => {\r\n if (token === '^') {\r\n mod = (mod === VF.ChordSymbol.symbolModifiers.SUPERSCRIPT) ?\r\n VF.ChordSymbol.symbolModifiers.NONE : VF.ChordSymbol.symbolModifiers.SUPERSCRIPT;\r\n } else if (token === '%') {\r\n mod = (mod === VF.ChordSymbol.symbolModifiers.SUBSCRIPT) ?\r\n VF.ChordSymbol.symbolModifiers.NONE : VF.ChordSymbol.symbolModifiers.SUBSCRIPT;\r\n } else if (token === '@') {\r\n isGlyph = !isGlyph;\r\n } else if (token.length) {\r\n if (isGlyph) {\r\n const glyph = SmoLyric._chordGlyphFromCode(token);\r\n blocks.push({\r\n glyph, symbolModifier: mod\r\n });\r\n } else {\r\n blocks.push({\r\n text: token, symbolModifier: mod\r\n });\r\n }\r\n }\r\n });\r\n return blocks;\r\n}\r\n\r\nexport function toVexStemDirection(note: SmoNote) {\r\n return (note.flagState === SmoNote.flagStates.up ? VF.Stem.UP : VF.Stem.DOWN);\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMeasure, SmoVoice, MeasureTickmaps } from '../../smo/data/measure';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoArticulation, SmoLyric, SmoOrnament } from '../../smo/data/noteModifiers';\r\nimport { VexFlow, StaveNoteStruct, TupletOptions, vexOrnaments } from '../../common/vex';\r\nimport { SmoBarline, SmoRehearsalMark } from '../../smo/data/measureModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { getId } from '../../smo/data/common';\r\nimport { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { StaffModifierBase, SmoStaffHairpin, SmoSlur, SmoTie, SmoStaffTextBracket } from '../../smo/data/staffModifiers';\r\nimport { toVexBarlineType, vexBarlineType, vexBarlinePosition, toVexBarlinePosition, leftConnectorVx, rightConnectorVx,\r\n toVexVolta, getVexChordBlocks } from '../../render/vex/smoAdapter';\r\n\r\n\r\n\r\nconst VF = VexFlow;\r\nexport const fontStacks: Record = {\r\n Bravura: ['\"Bravura\"', '\"Gonville\"', '\"Custom\"'],\r\n Gonville: ['\"Gonville\"', '\"Bravura\"', '\"Custom\"'],\r\n Petaluma: ['\"Petaluma\"', '\"Bravura\"', '\"Gonville\"', '\"Custom\"'],\r\n Leland: ['\"Leland\"', '\"Bravura\"', '\"Gonville\"', '\"Custom\"'] \r\n}\r\ninterface LyricAdjust {\r\n verse: number, lyric: SmoLyric, \r\n}\r\ninterface VexNoteRenderInfo {\r\n smoNote: SmoNote,voiceIx: number, noteIx: number, tickmapObject: MeasureTickmaps, lyricAdj: string[]\r\n}\r\ninterface VexStaveGroupMusic {\r\n formatter: string, measures: SmoMeasure[], voiceStrings: string[], heightOffset: number, \r\n systemGroup?: SmoSystemGroup\r\n}\r\nfunction smoNoteToVexKeys(smoNote: SmoNote) {\r\n const noteHead = smoNote.isRest() ? 'r' : smoNote.noteHead;\r\n const keys = SmoMusic.smoPitchesToVexKeys(smoNote.pitches, 0, noteHead);\r\n return keys;\r\n}\r\nfunction smoNoteToGraceNotes(smoNote: SmoNote, strs: string[]) {\r\n const gar = smoNote.getGraceNotes();\r\n var toBeam = true;\r\n if (gar && gar.length) {\r\n const grGroup: string[] = [];\r\n gar.forEach((g) => {\r\n const grid = g.attrs.id;\r\n const args = JSON.stringify(g.toVexGraceNote());\r\n strs.push(`const ${grid} = new VF.GraceNote(JSON.parse('${args}'))`);\r\n strs.push(`${grid}.setAttribute('id', '${grid}');`);\r\n for (var i = 0; i < g.pitches.length; ++i) {\r\n const pitch = g.pitches[i];\r\n if (!pitch.accidental) {\r\n console.warn('no accidental in grace note');\r\n }\r\n if (pitch.accidental && pitch.accidental !== 'n' || pitch.cautionary) {\r\n const acid = 'acc' + i.toString() + grid;\r\n strs.push(`const ${acid} = new VF.Accidental('${pitch.accidental}');`);\r\n if (pitch.cautionary) {\r\n strs.push(`${acid}.setAsCautionary();`);\r\n }\r\n strs.push(`${grid}.addModifier(${acid}, ${i})`);\r\n }\r\n }\r\n if (g.tickCount() >= 4096) {\r\n toBeam = false;\r\n }\r\n grGroup.push(grid);\r\n });\r\n const ggid = 'ggrp' + smoNote.attrs.id;\r\n const grString = '[' + grGroup.join(',') + ']';\r\n strs.push(`const ${ggid} = new VF.GraceNoteGroup(${grString});`);\r\n if (toBeam) {\r\n strs.push(`${ggid}.beamNotes();`);\r\n }\r\n strs.push(`${smoNote.attrs.id}.addModifier(${ggid}, 0);`);\r\n }\r\n}\r\nfunction smoNoteToStaveNote(smoNote: SmoNote) {\r\n const duration =\r\n smoNote.isTuplet ?\r\n SmoMusic.closestVexDuration(smoNote.tickCount) :\r\n SmoMusic.ticksToDuration[smoNote.tickCount];\r\n const sn: StaveNoteStruct = {\r\n clef: smoNote.clef,\r\n duration,\r\n dots: smoNote.dots,\r\n type: smoNote.noteType\r\n };\r\n if (smoNote.flagState !== SmoNote.flagStates.auto) {\r\n sn.stem_direction = smoNote.flagState === SmoNote.flagStates.up ? 1 : -1;\r\n sn.auto_stem = false; \r\n } else {\r\n sn.auto_stem = true;\r\n }\r\n sn.keys = smoNoteToVexKeys(smoNote);\r\n return sn;\r\n}\r\nexport const getVoiceId = (smoMeasure:SmoMeasure, voiceIx: number) => {\r\n return smoMeasure.id + 'v' + voiceIx.toString();\r\n}\r\nfunction lastNoteInSystem(smoScore: SmoScore, selection: SmoSelection) {\r\n let rv = selection;\r\n let next: SmoSelection | null = null;\r\n next = SmoSelection.nextNoteSelection(smoScore, selection.selector.staff,\r\n selection.selector.measure, selection.selector.voice, selection.selector.tick);\r\n while (next) {\r\n if (next.measure.svg.rowInSystem !== selection.measure.svg.rowInSystem) {\r\n return rv;\r\n break;\r\n }\r\n rv = next;\r\n next = SmoSelection.nextNoteSelection(smoScore, next.selector.staff,\r\n next.selector.measure, next.selector.voice, next.selector.tick);\r\n }\r\n return rv;\r\n}\r\nfunction createMeasureModifiers(smoMeasure: SmoMeasure, strs: string[]) {\r\n const sb = smoMeasure.getStartBarline();\r\n const eb = smoMeasure.getEndBarline();\r\n const sym = smoMeasure.getRepeatSymbol();\r\n const vxStave = 'stave' + smoMeasure.id;\r\n if (smoMeasure.measureNumber.systemIndex !== 0 && sb.barline === SmoBarline.barlines.singleBar\r\n && smoMeasure.format.padLeft === 0) {\r\n strs.push(`${vxStave}.setBegBarType(VF.Barline.type.NONE);`);\r\n } else {\r\n strs.push(`${vxStave}.setBegBarType(${toVexBarlineType(sb)});`);\r\n }\r\n if (smoMeasure.svg.multimeasureLength > 0 && !smoMeasure.svg.hideMultimeasure) {\r\n const bl = vexBarlineType[smoMeasure.svg.multimeasureEndBarline];\r\n strs.push(`${vxStave}.setEndBarType(${bl});`);\r\n } else if (eb.barline !== SmoBarline.barlines.singleBar) {\r\n const bl = toVexBarlineType(eb);\r\n strs.push(`${vxStave}.setEndBarType(${bl});`);\r\n }\r\n if (smoMeasure.svg.rowInSystem === 0) {\r\n const rmb = smoMeasure.getRehearsalMark();\r\n const rm = rmb as SmoRehearsalMark;\r\n if (rm) {\r\n strs.push(`${vxStave}.setSection('${rm.symbol}', 0);`);\r\n }\r\n }\r\n const tempo = smoMeasure.getTempo();\r\n if (tempo && smoMeasure.svg.forceTempo) {\r\n const vexTempo = tempo.toVexTempo();\r\n const tempoString = JSON.stringify(vexTempo);\r\n strs.push(`${vxStave}.setTempo(JSON.parse('${tempoString}'), -1 * ${tempo.yOffset});`);\r\n }\r\n}\r\nexport function renderVoltas(smoScore: SmoScore, startMeasure: number, endMeasure: number, strs: string[]) {\r\n const voltas = smoScore.staves[0].getVoltaMap(startMeasure, endMeasure);\r\n for (var i = 0; i < voltas.length; ++i) {\r\n const ending = voltas[i];\r\n for (var j = ending.startBar; j <= ending.endBar; ++j) {\r\n const smoMeasure = smoScore.staves[0].measures[j];\r\n const vtype = toVexVolta(ending, smoMeasure.measureNumber.measureIndex);\r\n const vx = smoMeasure.staffX + ending.xOffsetStart;\r\n const vxStave = 'stave' + smoMeasure.id;\r\n const endingName = ending.attrs.id + smoMeasure.id;\r\n strs.push(`const ${endingName} = new VF.Volta(${vtype}, '${ending.number.toString()}', ${vx}, ${ending.yOffset});`);\r\n strs.push(`${endingName}.setContext(context).draw(${vxStave}, -1 * ${ending.xOffsetEnd});`);\r\n }\r\n }\r\n}\r\nfunction renderModifier(modifier: StaffModifierBase, startNote: SmoNote | null, endNote: SmoNote | null, strs: string[]) {\r\n const modifierName = getId();\r\n const startKey = SmoSelector.getNoteKey(modifier.startSelector);\r\n const endKey = SmoSelector.getNoteKey(modifier.endSelector);\r\n strs.push(`// modifier from ${startKey} to ${endKey}`);\r\n if (modifier.ctor === 'SmoStaffHairpin' && startNote && endNote) {\r\n const hp = modifier as SmoStaffHairpin; \r\n const vxStart = startNote.attrs.id;\r\n const vxEnd = startNote.attrs.id;\r\n const hpParams = { first_note: vxStart, last_note: vxEnd };\r\n strs.push(`const ${modifierName} = new VF.StaveHairpin({ first_note: ${vxStart}, last_note: ${vxEnd},\r\n firstNote: ${vxStart}, lastNote: ${vxEnd} });`);\r\n strs.push(`${modifierName}.setRenderOptions({ height: ${hp.height}, y_shift: ${hp.yOffset}, left_shift_px: ${hp.xOffsetLeft},right_shift_px: ${hp.xOffsetRight} });`);\r\n strs.push(`${modifierName}.setContext(context).setPosition(${hp.position}).draw();`);\r\n } else if (modifier.ctor === 'SmoSlur') {\r\n const slur = modifier as SmoSlur; \r\n const vxStart = startNote?.attrs?.id ?? 'null';\r\n const vxEnd = endNote?.attrs?.id ?? 'null'; \r\n const svgPoint: SVGPoint[] = JSON.parse(JSON.stringify(slur.controlPoints));\r\n let slurX = 0;\r\n if (startNote === null || endNote === null) {\r\n slurX = -5;\r\n svgPoint[0].y = 10;\r\n svgPoint[1].y = 10;\r\n }\r\n if (modifier.startSelector.staff === modifier.endSelector.staff) {\r\n const hpParams = {\r\n thickness: slur.thickness,\r\n xShift: slurX,\r\n yShift: slur.yOffset,\r\n cps: svgPoint,\r\n invert: slur.invert,\r\n position: slur.position,\r\n positionEnd: slur.position_end\r\n };\r\n const paramStrings = JSON.stringify(hpParams);\r\n strs.push(`const ${modifierName} = new VF.Curve(${vxStart}, ${vxEnd}, JSON.parse('${paramStrings}'));`);\r\n strs.push(`${modifierName}.setContext(context).draw();`);\r\n }\r\n } else if (modifier.ctor === 'SmoTie') {\r\n const ctie = modifier as SmoTie;\r\n const vxStart = startNote?.attrs?.id ?? 'null';\r\n const vxEnd = endNote?.attrs?.id ?? 'null'; \r\n // TODO: handle case of overlap\r\n if (modifier.startSelector.staff === modifier.endSelector.staff) {\r\n if (ctie.lines.length > 0) {\r\n // Hack: if a chord changed, the ties may no longer be valid. We should check\r\n // this when it changes.\r\n const fromLines = ctie.lines.map((ll) => ll.from);\r\n const toLines = ctie.lines.map((ll) => ll.to);\r\n strs.push(`const ${modifierName} = new VF.StaveTie({ first_note: ${vxStart}, last_note: ${vxEnd}, \r\n firstNote: ${vxStart}, lastNote: ${vxEnd}, first_indices: [${fromLines}], last_indices: [${toLines}]});`);\r\n strs.push(`${modifierName}.setContext(context).draw();`);\r\n }\r\n }\r\n } else if (modifier.ctor === 'SmoStaffTextBracket' && startNote && endNote) {\r\n const ctext = modifier as SmoStaffTextBracket;\r\n const vxStart = startNote.attrs.id;\r\n const vxEnd = endNote.attrs.id;\r\n if (vxStart && vxEnd) {\r\n strs.push(`const ${modifierName} = new VF.TextBracket({ start: ${vxStart}, stop: ${vxEnd}, text: '${ctext.text}', position: ${ctext.position} });`);\r\n strs.push(`${modifierName}.setLine(${ctext.line}).setContext(context).draw();`);\r\n }\r\n }\r\n}\r\nfunction renderModifiers(smoScore: SmoScore, staff: SmoSystemStaff, \r\n startMeasure: number, endMeasure: number, strs: string[]) {\r\n const modifiers = staff.renderableModifiers.filter((mm) => mm.startSelector.measure >= startMeasure && mm.endSelector.measure <= endMeasure);\r\n modifiers.forEach((modifier) => {\r\n const startNote = SmoSelection.noteSelection(smoScore,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n const endNote = SmoSelection.noteSelection(smoScore,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n // TODO: handle case of multiple line slur/tie\r\n if (startNote && startNote.note && endNote && endNote.note) {\r\n if (endNote.measure.svg.lineIndex !== startNote.measure.svg.lineIndex) {\r\n const endFirst = lastNoteInSystem(smoScore, startNote);\r\n if (endFirst && endFirst.note) {\r\n const startLast = SmoSelection.noteSelection(smoScore, endNote.selector.staff,\r\n endNote.selector.measure, 0, 0);\r\n if (startLast && startLast.note) {\r\n renderModifier(modifier, startNote.note, null, strs);\r\n renderModifier(modifier, null, endNote.note, strs);\r\n }\r\n }\r\n } else {\r\n renderModifier(modifier, startNote.note, endNote.note, strs);\r\n }\r\n }\r\n });\r\n}\r\nfunction createStaveNote(renderInfo: VexNoteRenderInfo, key: string, row: number, strs: string[]) {\r\n const { smoNote, voiceIx, noteIx, tickmapObject, lyricAdj } = { ...renderInfo };\r\n const id = smoNote.attrs.id;\r\n const ctorInfo = smoNoteToStaveNote(smoNote);\r\n const ctorString = JSON.stringify(ctorInfo);\r\n if (smoNote.noteType === '/') {\r\n strs.push(`const ${id} = new VF.GlyphNote(new VF.Glyph('repeatBarSlash', 40), { duration: '${ctorInfo.duration}' });`)\r\n } else {\r\n strs.push(`const ${id} = new VF.StaveNote(JSON.parse('${ctorString}'))`);\r\n }\r\n smoNoteToGraceNotes(smoNote, strs);\r\n strs.push(`${id}.setAttribute('id', '${id}');`);\r\n if (smoNote.fillStyle) {\r\n strs.push(`${id}.setStyle({ fillStyle: '${smoNote.fillStyle}' });`);\r\n } else if (voiceIx > 0) {\r\n strs.push(`${id}.setStyle({ fillStyle: \"#115511\" });`);\r\n } else if (smoNote.isHidden()) {\r\n strs.push(`${id}.setStyle({ fillStyle: \"#ffffff00\" });`);\r\n }\r\n if (smoNote.noteType === 'n') {\r\n smoNote.pitches.forEach((pitch, ix) => {\r\n const zz = SmoMusic.accidentalDisplay(pitch, key,\r\n tickmapObject.tickmaps[voiceIx].durationMap[noteIx], tickmapObject.accidentalArray);\r\n if (zz) {\r\n const aname = id + ix.toString() + 'acc';\r\n strs.push(`const ${aname} = new VF.Accidental('${zz.symbol}');`);\r\n if (zz.courtesy) {\r\n strs.push(`${aname}.setAsCautionary();`);\r\n }\r\n strs.push(`${id}.addModifier(${aname}, ${ix});`);\r\n }\r\n }); \r\n }\r\n for (var i = 0; i < smoNote.dots; ++i) {\r\n for (var j = 0; j < smoNote.pitches.length; ++j) {\r\n strs.push(`${id}.addModifier(new VF.Dot(), ${j});`); \r\n }\r\n }\r\n smoNote.articulations.forEach((aa) => {\r\n const position: number = SmoArticulation.positionToVex[aa.position];\r\n const vexArt = SmoArticulation.articulationToVex[aa.articulation];\r\n const sn = getId();\r\n strs.push(`const ${sn} = new VF.Articulation('${vexArt}').setPosition(${position});`);\r\n strs.push(`${id}.addModifier(${sn}, 0);`);\r\n });\r\n smoNote.getJazzOrnaments().forEach((ll) => {\r\n const vexCode = ll.toVex();\r\n strs.push(`const ${ll.attrs.id} = new VF.Ornament('${vexCode}');`)\r\n strs.push(`${id}.addModifier(${ll.attrs.id}, 0);`);\r\n });\r\n smoNote.getOrnaments().forEach((ll) => {\r\n const vexCode = vexOrnaments[ll.ornament];\r\n strs.push(`const ${ll.attrs.id} = new VF.Ornament('${vexCode}');`);\r\n if (ll.offset === SmoOrnament.offsets.after) {\r\n strs.push(`${ll.attrs.id}.setDelayed(true);`);\r\n }\r\n strs.push(`${id}.addModifier(${ll.attrs.id}, 0);`);\r\n });\r\n const lyrics = smoNote.getTrueLyrics();\r\n if (smoNote.noteType !== '/') {\r\n lyrics.forEach((bll) => {\r\n const ll = bll as SmoLyric;\r\n let classString = 'lyric lyric-' + ll.verse;\r\n let text = ll.getText();\r\n if (!ll.skipRender) {\r\n if (!text.length && ll.isHyphenated()) {\r\n text = '-';\r\n }\r\n // no text, no hyphen, don't add it.\r\n if (text.length) {\r\n const sn = ll.attrs.id;\r\n text = text.replace(\"'\",\"\\\\'\");\r\n strs.push(`const ${sn} = new VF.Annotation('${text}');`);\r\n strs.push(`${sn}.setAttribute('id', '${sn}');`);\r\n const weight = ll.fontInfo.weight ?? 'normal';\r\n strs.push(`${sn}.setFont('${ll.fontInfo.family}', ${ll.fontInfo.size}, '${weight}');`)\r\n strs.push(`${sn}.setVerticalJustification(VF.Annotation.VerticalJustify.BOTTOM);`);\r\n strs.push(`${id}.addModifier(${sn});`);\r\n if (ll.adjY > 0) {\r\n const adjy = Math.round(ll.adjY);\r\n lyricAdj.push(`context.svg.getElementById('vf-${sn}').setAttributeNS('', 'transform', 'translate(0 ${adjy})');`);\r\n }\r\n if (ll.isHyphenated()) {\r\n classString += ' lyric-hyphen';\r\n }\r\n strs.push(`${sn}.addClass('${classString}');`);\r\n }\r\n }\r\n });\r\n }\r\n const chords = smoNote.getChords();\r\n chords.forEach((chord) => {\r\n strs.push(`const ${chord.attrs.id} = new VF.ChordSymbol();`);\r\n strs.push(`${chord.attrs.id}.setAttribute('id', '${chord.attrs.id}');`);\r\n const vblocks = getVexChordBlocks(chord);\r\n vblocks.forEach((vblock) => {\r\n const glyphParams = JSON.stringify(vblock);\r\n if (vblock.glyph) {\r\n strs.push(`${chord.attrs.id}.addGlyphOrText('${vblock.glyph}', JSON.parse('${glyphParams}'));`);\r\n } else {\r\n const btext = vblock.text ?? '';\r\n if (btext.trim().length) {\r\n strs.push(`${chord.attrs.id}.addGlyphOrText('${btext}', JSON.parse('${glyphParams}'));`);\r\n }\r\n }\r\n });\r\n strs.push(`${chord.attrs.id}.setFont('${chord.fontInfo.family}', ${chord.fontInfo.size}).setReportWidth(${chord.adjustNoteWidth});`);\r\n strs.push(`${id}.addModifier(${chord.attrs.id}, 0);`);\r\n });\r\n return id;\r\n}\r\nfunction createColumn(groups: Record, strs: string[]) {\r\n const groupKeys = Object.keys(groups);\r\n let maxXAdj = 0;\r\n groupKeys.forEach((groupKey) => {\r\n const music = groups[groupKey];\r\n // Need to create beam groups before formatting\r\n strs.push(`// create beam groups and tuplets for format grp ${groupKey} before formatting`);\r\n music.measures.forEach((smoMeasure) => {\r\n maxXAdj = Math.max(maxXAdj, smoMeasure.svg.adjX);\r\n createBeamGroups(smoMeasure, strs);\r\n createTuplets(smoMeasure, strs);\r\n });\r\n strs.push(' ');\r\n strs.push(`// formatting measures in staff group ${groupKey}`);\r\n // set x offset for alignment before format\r\n music.measures.forEach((smoMeasure) => {\r\n smoMeasure.voices.forEach((vv) => {\r\n vv.notes.forEach((nn) => {\r\n const id = nn.attrs.id;\r\n const offset = maxXAdj - smoMeasure.svg.adjX;\r\n strs.push(`${id}.setXShift(${offset});`);\r\n });\r\n });\r\n });\r\n const joinVoiceStr = '[' + music.voiceStrings.join(',') + ']';\r\n const widthMeasure = music.measures[0];\r\n const staffWidth = Math.round(widthMeasure.staffWidth -\r\n (widthMeasure.svg.maxColumnStartX + widthMeasure.svg.adjRight + widthMeasure.format.padLeft) - 10);\r\n strs.push(`${music.formatter}.format(${joinVoiceStr}, ${staffWidth});`);\r\n music.measures.forEach((smoMeasure) => {\r\n createMeasure(smoMeasure, music.heightOffset, strs);\r\n });\r\n });\r\n}\r\nfunction createBeamGroups(smoMeasure: SmoMeasure, strs: string[]) {\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n const bgs = smoMeasure.beamGroups.filter((bb) => bb.voice === voiceIx);\r\n for (var i = 0; i < bgs.length; ++i) {\r\n const bg = bgs[i];\r\n let keyNoteIx = bg.notes.findIndex((nn) => nn.noteType === 'n');\r\n keyNoteIx = (keyNoteIx >= 0) ? keyNoteIx : 0;\r\n const sdName = 'dir' + bg.attrs.id;\r\n strs.push(`const ${sdName} = ${bg.notes[keyNoteIx].attrs.id}.getStemDirection();`);\r\n const nar: string[] = [];\r\n for (var j = 0; j < bg.notes.length; ++j) {\r\n const note = bg.notes[j];\r\n const vexNote = `${note.attrs.id}`;\r\n if (note.noteType !== '/') {\r\n nar.push(vexNote);\r\n }\r\n if (note.noteType !== 'n') {\r\n continue;\r\n }\r\n strs.push(`${vexNote}.setStemDirection(${sdName});`);\r\n }\r\n const narString = '[' + nar.join(',') + ']';\r\n strs.push(`const ${bg.attrs.id} = new VF.Beam(${narString});`);\r\n }\r\n });\r\n}\r\nfunction createTuplets(smoMeasure: SmoMeasure, strs: string[]) {\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n const tps = smoMeasure.tuplets.filter((tp) => tp.voice === voiceIx);\r\n for (var i = 0; i < tps.length; ++i) {\r\n const tp = tps[i];\r\n const nar: string[] = [];\r\n for (var j = 0; j < tp.notes.length; ++j) {\r\n const note = tp.notes[j];\r\n const vexNote = `${note.attrs.id}`;\r\n nar.push(vexNote);\r\n }\r\n const direction = tp.getStemDirection(smoMeasure.clef) === SmoNote.flagStates.up ?\r\n VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM;\r\n const tpParams: TupletOptions = {\r\n num_notes: tp.num_notes,\r\n notes_occupied: tp.notes_occupied,\r\n ratioed: false,\r\n bracketed: true,\r\n location: direction\r\n };\r\n const tpParamString = JSON.stringify(tpParams);\r\n const narString = '[' + nar.join(',') + ']';\r\n strs.push(`const ${tp.id} = new VF.Tuplet(${narString}, JSON.parse('${tpParamString}'));`);\r\n }\r\n });\r\n}\r\nfunction createMeasure(smoMeasure: SmoMeasure, heightOffset: number, strs: string[]) {\r\n const ssid = 'stave' + smoMeasure.id;\r\n const staffY = smoMeasure.svg.staffY + heightOffset;\r\n const staffWidth = Math.round(smoMeasure.svg.staffWidth);\r\n strs.push(`const ${ssid} = new VF.Stave(${smoMeasure.svg.staffX}, ${staffY}, ${staffWidth});`);\r\n strs.push(`${ssid}.setAttribute('id', '${ssid}');`);\r\n createMeasureModifiers(smoMeasure, strs);\r\n if (smoMeasure.svg.forceClef) {\r\n strs.push(`${ssid}.addClef('${smoMeasure.clef}');`);\r\n }\r\n if (smoMeasure.svg.forceTimeSignature) {\r\n const ts = smoMeasure.timeSignature;\r\n let tsString = ts.timeSignature;\r\n if (smoMeasure.timeSignature.useSymbol && ts.actualBeats === 4 && ts.beatDuration === 4) {\r\n tsString = 'C';\r\n } else if (smoMeasure.timeSignature.useSymbol && ts.actualBeats === 2 && ts.beatDuration === 4) {\r\n tsString = 'C|';\r\n } else if (smoMeasure.timeSignature.displayString.length) {\r\n tsString = smoMeasure.timeSignature.displayString;\r\n }\r\n strs.push(`${ssid}.addTimeSignature('${tsString}');`);\r\n }\r\n if (smoMeasure.svg.forceKeySignature) {\r\n const key = SmoMusic.vexKeySignatureTranspose(smoMeasure.keySignature, 0);\r\n const ksid = 'key' + smoMeasure.id;\r\n strs.push(`const ${ksid} = new VF.KeySignature('${key}');`);\r\n if (smoMeasure.canceledKeySignature) {\r\n const canceledKey = SmoMusic.vexKeySignatureTranspose(smoMeasure.canceledKeySignature, 0);\r\n strs.push(`${ksid}.cancelKey('${canceledKey}');`);\r\n }\r\n strs.push(`${ksid}.addToStave(${ssid});`);\r\n }\r\n strs.push(`${ssid}.setContext(context);`);\r\n strs.push(`${ssid}.draw();`);\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n const vs = getVoiceId(smoMeasure, voiceIx);\r\n strs.push(`${vs}.draw(context, ${ssid});`);\r\n });\r\n smoMeasure.beamGroups.forEach((bg) => {\r\n strs.push(`${bg.attrs.id}.setContext(context);`);\r\n strs.push(`${bg.attrs.id}.draw();`)\r\n });\r\n smoMeasure.tuplets.forEach((tp) => {\r\n strs.push(`${tp.id}.setContext(context).draw();`)\r\n })\r\n}\r\n// ## SmoToVex\r\n// Simple serialize class that produced VEX note and voice objects\r\n// for vex EasyScore (for easier bug reports and test cases)\r\nexport class SmoToVex {\r\n static convert(smoScore: SmoScore, options: any): string {\r\n let div = 'boo';\r\n let page = 0;\r\n options = options ?? {};\r\n if (typeof(options['div']) === 'string') {\r\n div = options.div\r\n }\r\n if (typeof(options['page']) === 'number') {\r\n page = options.page;\r\n }\r\n let startMeasure = -1;\r\n let endMeasure = -1;\r\n const strs: string[] = [];\r\n const pageHeight = smoScore.layoutManager?.getGlobalLayout().pageHeight ?? 1056;\r\n const pageWidth = smoScore.layoutManager?.getGlobalLayout().pageWidth ?? 816;\r\n const pageLength = smoScore.staves[0].measures[smoScore.staves[0].measures.length - 1].svg.pageIndex + 1;\r\n let scoreName = smoScore.scoreInfo.title + ' p ' + (page + 1).toString() + '/' + pageLength.toString();\r\n const scoreSub = smoScore.scoreInfo.subTitle?.length ? `(${smoScore.scoreInfo.subTitle})` : '';\r\n scoreName = `${scoreName} ${scoreSub} by ${smoScore.scoreInfo.composer}`;\r\n strs.push(`// @@ ${scoreName}`);\r\n strs.push('function main() {');\r\n strs.push('// create the div and svg element for the music');\r\n strs.push(`const div = document.getElementById('${div}');`);\r\n strs.push('const VF = Vex.Flow;');\r\n strs.push(`const renderer = new VF.Renderer(div, VF.Renderer.Backends.SVG);`);\r\n const zoomScale = (smoScore.layoutManager?.getZoomScale() ?? 1.0);\r\n const svgScale = (smoScore.layoutManager?.getGlobalLayout().svgScale ?? 1.0);\r\n const width = zoomScale * pageWidth;\r\n const height = zoomScale * pageHeight;\r\n const scale = svgScale * zoomScale;\r\n const heightOffset = -1 * (height * page) / scale;\r\n const vbWidth = Math.round(width / scale);\r\n const vbHeight = Math.round(height / scale);\r\n strs.push('const context = renderer.getContext();');\r\n strs.push('const svg = context.svg');\r\n strs.push(`svg.setAttributeNS('', 'width', '${width}');`);\r\n strs.push(`svg.setAttributeNS('', 'height', '${height}');`);\r\n strs.push(`svg.setAttributeNS('', 'viewBox', '0 0 ${vbWidth} ${vbHeight}');`);\r\n strs.push('//');\r\n strs.push('// create the musical objects');\r\n const font = smoScore.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (font) {\r\n const fs = fontStacks[font.family].join(',');\r\n strs.push(`VF.setMusicFont(${fs});`);\r\n }\r\n const measureCount = smoScore.staves[0].measures.length;\r\n const lyricAdj: string[] = [];\r\n for (var k = 0; k < measureCount; ++k) {\r\n const groupMap: Record = {};\r\n if (smoScore.staves[0].measures[k].svg.pageIndex < page) {\r\n continue;\r\n }\r\n if (smoScore.staves[0].measures[k].svg.pageIndex > page) {\r\n break;\r\n }\r\n startMeasure = startMeasure < 0 ? k : startMeasure;\r\n endMeasure = Math.max(k, endMeasure);\r\n smoScore.staves.forEach((smoStaff, staffIx) => {\r\n const smoMeasure = smoStaff.measures[k];\r\n const selection = SmoSelection.measureSelection(smoScore, smoStaff.staffId, smoMeasure.measureNumber.measureIndex);\r\n if (!selection) {\r\n throw('ouch no selection');\r\n }\r\n const systemGroup = smoScore.getSystemGroupForStaff(selection);\r\n const justifyGroup: string = (systemGroup && smoMeasure.format.autoJustify) ? systemGroup.attrs.id : selection.staff.attrs.id;\r\n const tickmapObject = smoMeasure.createMeasureTickmaps();\r\n const measureIx = smoMeasure.measureNumber.measureIndex;\r\n const voiceStrings: string[] = [];\r\n const fmtid = 'fmt' + smoMeasure.id + measureIx.toString();\r\n strs.push(`const ${fmtid} = new VF.Formatter();`);\r\n if (!groupMap[justifyGroup]) {\r\n groupMap[justifyGroup] = {\r\n formatter: fmtid,\r\n measures: [],\r\n heightOffset,\r\n voiceStrings: [],\r\n systemGroup\r\n }\r\n }\r\n groupMap[justifyGroup].measures.push(smoMeasure);\r\n strs.push('//');\r\n strs.push(`// voices and notes for stave ${smoStaff.staffId} ${smoMeasure.measureNumber.measureIndex}`);\r\n smoMeasure.voices.forEach((smoVoice: SmoVoice, voiceIx: number) => { \r\n const vn = getVoiceId(smoMeasure, voiceIx);\r\n groupMap[justifyGroup].voiceStrings.push(vn);\r\n const vc = vn + 'ar';\r\n const ts = JSON.stringify({\r\n numBeats: smoMeasure.timeSignature.actualBeats,\r\n beatValue: smoMeasure.timeSignature.beatDuration\r\n });\r\n strs.push(`const ${vn} = new VF.Voice(JSON.parse('${ts}')).setMode(VF.Voice.Mode.SOFT);`);\r\n strs.push(`const ${vc} = [];`);\r\n smoVoice.notes.forEach((smoNote: SmoNote, noteIx: number) => {\r\n const renderInfo: VexNoteRenderInfo = { smoNote, voiceIx, noteIx, tickmapObject, lyricAdj };\r\n const noteId = createStaveNote(renderInfo, smoMeasure.keySignature, smoMeasure.svg.rowInSystem, strs);\r\n strs.push(`${vc}.push(${noteId});`);\r\n });\r\n strs.push(`${vn}.addTickables(${vc})`);\r\n voiceStrings.push(vn);\r\n strs.push(`${fmtid}.joinVoices([${vn}]);`);\r\n });\r\n if (smoMeasure.svg.rowInSystem === smoScore.staves.length - 1) {\r\n createColumn(groupMap, strs);\r\n const mapKeys = Object.keys(groupMap);\r\n mapKeys.forEach((mapKey) => {\r\n const tmpGroup = groupMap[mapKey];\r\n if (tmpGroup.systemGroup) {\r\n const systemIndex = smoMeasure.measureNumber.systemIndex;\r\n const startMeasure = 'stave' + smoScore.staves[tmpGroup.systemGroup.startSelector.staff].measures[k].id;\r\n const endMeasure = 'stave' + smoScore.staves[tmpGroup.systemGroup.endSelector.staff].measures[k].id;\r\n const leftConnector = leftConnectorVx(tmpGroup.systemGroup);\r\n const rightConnector = rightConnectorVx(tmpGroup.systemGroup);\r\n const jgname = justifyGroup + startMeasure + staffIx.toString();\r\n if (systemIndex === 0 && smoScore.staves.length > 1) {\r\n strs.push(`const left${jgname} = new VF.StaveConnector(${startMeasure}, ${endMeasure}).setType(${leftConnector});`);\r\n strs.push(`left${jgname}.setContext(context).draw();`);\r\n }\r\n let endStave = false;\r\n if (smoMeasure.measureNumber.systemIndex !== 0) {\r\n if (smoMeasure.measureNumber.systemIndex === smoScore.staves[0].measures.length - 1) {\r\n endStave = true;\r\n } else if (smoScore.staves[0].measures.length > k + 1 &&\r\n smoScore.staves[0].measures[k + 1].measureNumber.systemIndex === 0) {\r\n endStave = true;\r\n }\r\n }\r\n if (endStave) {\r\n strs.push(`const right${jgname} = new VF.StaveConnector(${startMeasure}, ${endMeasure}).setType(${rightConnector});`);\r\n strs.push(`right${jgname}.setContext(context).draw();`);\r\n } \r\n }\r\n });\r\n }\r\n });\r\n }\r\n smoScore.staves.forEach((staff) => {\r\n renderModifiers(smoScore, staff, startMeasure, endMeasure, strs);\r\n });\r\n renderVoltas(smoScore, startMeasure, endMeasure, strs);\r\n if (lyricAdj.length) {\r\n strs.push('// ');\r\n strs.push('// Align lyrics on different measures, once they are rendered.');\r\n }\r\n const render = strs.concat(lyricAdj);\r\n render.push('}');\r\n return render.join(`\\n`);\r\n // console.log(render.join(`\\n`));\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n// ## Description:\r\n// This file calls the vexflow routines that actually render a\r\n// measure of music. If multiple measures are justified in a\r\n// column, the rendering is deferred until all the measures have been\r\n// preformatted.\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { layoutDebug } from '../sui/layoutDebug';\r\nimport { SmoRepeatSymbol, SmoMeasureText, SmoBarline, SmoMeasureModifierBase, SmoRehearsalMark } from '../../smo/data/measureModifiers';\r\nimport { SourceSerifProFont } from '../../styles/font_metrics/ssp-serif-metrics';\r\nimport { SmoOrnament, SmoArticulation, SmoDynamicText, SmoLyric, \r\n SmoArpeggio, SmoNoteModifierBase, VexAnnotationParams, SmoTabNote } from '../../smo/data/noteModifiers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoMeasure, MeasureTickmaps } from '../../smo/data/measure';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { Clef, IsClef } from '../../smo/data/common';\r\nimport { SvgPage } from '../sui/svgPageMap';\r\nimport { SmoTabStave } from '../../smo/data/staffModifiers';\r\nimport { toVexBarlineType, vexBarlineType, vexBarlinePosition, toVexBarlinePosition, toVexSymbol,\r\n toVexTextJustification, toVexTextPosition, getVexChordBlocks, toVexStemDirection,\r\n VexTabNotePositions } from './smoAdapter';\r\nimport { VexFlow, Stave,StemmableNote, Note, Beam, Tuplet, Voice,\r\n Formatter, Accidental, Annotation, StaveNoteStruct, StaveText, StaveModifier,\r\n createStaveText, renderDynamics, applyStemDirection,\r\n getVexNoteParameters, defaultNoteScale, defaultCueScale, getVexTuplets,\r\n createStave, createVoice, getOrnamentGlyph, getSlashGlyph, getRepeatBar, getMultimeasureRest,\r\n createTextNote, TabStave, createTabStave, TabNotePosition, TabNoteStruct,\r\n CreateVexNoteParams, TabNote\r\n } from '../../common/vex';\r\n\r\nimport { VxMeasureIf, VexNoteModifierIf, VxNote } from './vxNote';\r\nimport { vexGlyph } from './glyphDimensions';\r\nconst VF = VexFlow;\r\n\r\ndeclare var $: any;\r\n// const VF = eval('Vex.Flow');\r\n\r\n/**\r\n * This is the interface for VexFlow library that actually does the engraving.\r\n * @category SuiRender\r\n */\r\nexport class VxMeasure implements VxMeasureIf {\r\n context: SvgPage;\r\n printing: boolean;\r\n selection: SmoSelection;\r\n softmax: number;\r\n smoMeasure: SmoMeasure;\r\n smoTabStave?: SmoTabStave;\r\n tabStave?: TabStave;\r\n rendered: boolean = false;\r\n noteToVexMap: Record = {};\r\n beamToVexMap: Record = {};\r\n tupletToVexMap: Record = {};\r\n multimeasureRest: any | null = null;\r\n vexNotes: Note[] = [];\r\n vexBeamGroups: Beam[] = [];\r\n vexTuplets: Tuplet[] = [];\r\n tickmapObject: MeasureTickmaps | null = null;\r\n stave: Stave | null = null; // vex stave\r\n voiceNotes: Note[] = []; // notes for current voice, as rendering\r\n tabNotes: Note[] = [];\r\n voiceAr: Voice[] = [];\r\n tabVoice: Voice | null = null;\r\n formatter: Formatter | null = null;\r\n allCues: boolean = false;\r\n modifiersToBox: SmoNoteModifierBase[] = [];\r\n collisionMap: Record = {};\r\n dbgLeftX: number = 0;\r\n dbgWidth: number = 0;\r\n\r\n constructor(context: SvgPage, selection: SmoSelection, printing: boolean, softmax: number) {\r\n this.context = context;\r\n this.rendered = false;\r\n this.selection = selection;\r\n this.smoMeasure = this.selection.measure;\r\n this.printing = printing;\r\n this.allCues = selection.staff.partInfo.displayCues;\r\n this.tupletToVexMap = {};\r\n this.vexNotes = [];\r\n this.vexBeamGroups = [];\r\n this.vexBeamGroups = [];\r\n this.beamToVexMap = {};\r\n this.softmax = softmax;\r\n this.smoTabStave = selection.staff.getTabStaveForMeasure(selection.selector);\r\n }\r\n\r\n static get fillStyle() {\r\n return '#000';\r\n }\r\n\r\n isWholeRest() {\r\n return (this.smoMeasure.voices.length === 1 &&\r\n this.smoMeasure.voices[0].notes.length === 1 &&\r\n this.smoMeasure.voices[0].notes[0].isRest()\r\n );\r\n }\r\n createCollisionTickmap() {\r\n let i = 0;\r\n let j = 0;\r\n if (!this.tickmapObject) {\r\n return;\r\n }\r\n for (i = 0; i < this.smoMeasure.voices.length; ++i) {\r\n const tm = this.tickmapObject.tickmaps[i];\r\n for (j = 0; j < tm.durationMap.length; ++j) {\r\n if (typeof(this.collisionMap[tm.durationMap[j]]) === 'undefined') {\r\n this.collisionMap[tm.durationMap[j]] = [];\r\n }\r\n this.collisionMap[tm.durationMap[j]].push(this.smoMeasure.voices[i].notes[j]);\r\n }\r\n }\r\n }\r\n isCollision(voiceIx: number, tickIx: number): boolean {\r\n let i = 0;\r\n let j = 0;\r\n let k = 0;\r\n let staffLines: number[] = [];\r\n if (!this.tickmapObject) {\r\n return false;\r\n }\r\n const tick = this.tickmapObject.tickmaps[voiceIx].durationMap[tickIx];\r\n // Just one note, no collision\r\n if (this.collisionMap[tick].length < 2) {\r\n return false;\r\n }\r\n for (i = 0; i < this.collisionMap[tick].length; ++i) {\r\n const note = this.collisionMap[tick][i];\r\n for (j = 0; j < note.pitches.length; ++j) {\r\n const clef: Clef = IsClef(note.clef) ? note.clef : 'treble';\r\n const pitch = note.pitches[j];\r\n const curLine = SmoMusic.pitchToStaffLine(clef, pitch);\r\n for (k = 0;k < staffLines.length; ++k) {\r\n if (Math.abs(curLine - staffLines[k]) < 1) {\r\n return true;\r\n }\r\n }\r\n staffLines.push(curLine);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * convert a smoNote into a vxNote so it can be rasterized\r\n * @param smoNote \r\n * @param tickIndex - used to calculate accidental\r\n * @param voiceIx \r\n * @returns \r\n */\r\n createVexNote(smoNote: SmoNote, tickIndex: number, voiceIx: number) {\r\n let vexNote: Note | null = null;\r\n let smoTabNote: SmoTabNote | null = null;\r\n let timestamp = new Date().valueOf();\r\n let tabNote: StemmableNote | null = null;\r\n const closestTicks = SmoMusic.closestVexDuration(smoNote.tickCount);\r\n const exactTicks = SmoMusic.ticksToDuration[smoNote.tickCount];\r\n const noteHead = smoNote.isRest() ? 'r' : smoNote.noteHead;\r\n const keys = SmoMusic.smoPitchesToVexKeys(smoNote.pitches, 0, noteHead);\r\n const smoNoteParams: CreateVexNoteParams = {\r\n isTuplet: smoNote.isTuplet, measureIndex: this.smoMeasure.measureNumber.measureIndex,\r\n clef: smoNote.clef,\r\n closestTicks, exactTicks, keys,\r\n noteType: smoNote.noteType };\r\n const { noteParams, duration } = getVexNoteParameters(smoNoteParams);\r\n if (this.tabStave && this.smoTabStave) {\r\n smoTabNote = this.smoTabStave.getTabNoteFromNote(smoNote, this.smoMeasure.transposeIndex);\r\n if (smoTabNote) {\r\n const positions: TabNotePosition[] = VexTabNotePositions(this.smoTabStave, smoTabNote, smoNote);\r\n if (positions.length) {\r\n if (!smoNote.isRest()) {\r\n tabNote = new VF.TabNote({ positions, duration: duration });\r\n if (this.smoTabStave.showStems) {\r\n tabNote.render_options.draw_stem = true;\r\n tabNote.render_options.draw_dots = true;\r\n tabNote.render_options.draw_stem_through_stave = smoTabNote.flagThrough;\r\n }\r\n } else {\r\n tabNote = new VF.StaveNote(noteParams);\r\n }\r\n }\r\n } \r\n }\r\n if (smoNote.noteType === '/') {\r\n // vexNote = new VF.GlyphNote('\\uE504', { duration });\r\n vexNote = getSlashGlyph();\r\n smoNote.renderId = 'vf-' + vexNote.getAttribute('id'); // where does 'vf' come from?\r\n } else {\r\n const smoVexStemParams = {\r\n voiceCount: this.smoMeasure.voices.length,\r\n voiceIx,\r\n isAuto: smoNote.flagState === SmoNote.flagStates.auto,\r\n isUp: smoNote.flagState === SmoNote.flagStates.up\r\n }\r\n applyStemDirection(smoVexStemParams, noteParams);\r\n if (smoTabNote && tabNote) {\r\n tabNote.setStemDirection(noteParams.stem_direction);\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATA, new Date().valueOf() - timestamp);\r\n timestamp = new Date().valueOf();\r\n vexNote = new VF.StaveNote(noteParams);\r\n if (voiceIx > 0 && this.isCollision(voiceIx, tickIndex)) {\r\n vexNote.setXShift(-10);\r\n }\r\n if (this.isWholeRest()) {\r\n noteParams.duration = 'wr';\r\n vexNote = new VF.StaveNote(noteParams);\r\n vexNote.setCenterAlignment(true);\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATB, new Date().valueOf() - timestamp);\r\n timestamp = new Date().valueOf();\r\n if (smoNote.fillStyle && !this.printing) {\r\n vexNote.setStyle({ fillStyle: smoNote.fillStyle });\r\n } else if (voiceIx > 0 && !this.printing) {\r\n vexNote.setStyle({ fillStyle: \"#115511\" });\r\n } else if (smoNote.isHidden() && this.printing) {\r\n vexNote.setStyle({ fillStyle: \"#ffffff00\" });\r\n }\r\n smoNote.renderId = 'vf-' + vexNote.getAttribute('id'); // where does 'vf' come from?\r\n }\r\n const noteData: VexNoteModifierIf = {\r\n smoMeasure: this.smoMeasure,\r\n vxMeasure: this,\r\n smoNote: smoNote,\r\n staveNote: vexNote,\r\n voiceIndex: voiceIx,\r\n tickIndex: tickIndex\r\n }\r\n if (tabNote) {\r\n noteData.tabNote = tabNote;\r\n this.tabNotes.push(tabNote);\r\n }\r\n const modObj = new VxNote(noteData);\r\n modObj.addModifiers();\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATC, new Date().valueOf() - timestamp);\r\n\r\n return modObj;\r\n }\r\n\r\n renderNoteGlyph(smoNote: SmoNote, textObj: SmoDynamicText) {\r\n var x = this.noteToVexMap[smoNote.attrs.id].getAbsoluteX() + textObj.xOffset;\r\n // the -3 is copied from vexflow textDynamics\r\n var y = this.stave!.getYForLine(textObj.yOffsetLine - 3) + textObj.yOffsetPixels;\r\n let maxh = 0;\r\n const minx = x;\r\n var group = this.context.getContext().openGroup();\r\n group.classList.add(textObj.attrs.id + '-' + smoNote.attrs.id);\r\n group.classList.add(textObj.attrs.id);\r\n // const duration = SmoMusic.closestVexDuration(smoNote.tickCount);\r\n for (var i = 0; i < textObj.text.length; i += 1 ) {\r\n const { width , height } = renderDynamics(this.context.getContext(), VF.TextDynamics.GLYPHS[textObj.text[i]].code,\r\n textObj.fontSize, x, y);\r\n /* const { width , height } = renderDynamics(this.context.getContext(), VF.TextDynamics.GLYPHS[textObj.text[i]],\r\n textObj.fontSize, x, y); */\r\n x += width;\r\n maxh = Math.max(height, maxh); \r\n }\r\n textObj.logicalBox = SvgHelpers.boxPoints(minx, y + this.context.box.y, x - minx, maxh);\r\n textObj.element = group;\r\n this.modifiersToBox.push(textObj);\r\n this.context.getContext().closeGroup();\r\n }\r\n\r\n renderDynamics() {\r\n this.smoMeasure.voices.forEach((voice) => {\r\n voice.notes.forEach((smoNote) => {\r\n const mods = smoNote.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoDynamicText'\r\n );\r\n mods.forEach((btm) => {\r\n const tm = btm as SmoDynamicText;\r\n this.renderNoteGlyph(smoNote, tm);\r\n });\r\n });\r\n });\r\n }\r\n createRepeatSymbol() {\r\n this.voiceNotes = [];\r\n // const vexNote = new VF.GlyphNote('\\uE500', { duration: 'w' }, { line: 2 });\r\n const vexNote = getRepeatBar();\r\n vexNote.setCenterAlignment(true);\r\n this.vexNotes.push(vexNote);\r\n this.voiceNotes.push(vexNote);\r\n }\r\n /**\r\n * create an a array of VF.StaveNote objects to render the active voice.\r\n * @param voiceIx \r\n */\r\n createVexNotes(voiceIx: number) {\r\n let i = 0;\r\n this.voiceNotes = [];\r\n const voice = this.smoMeasure.voices[voiceIx];\r\n let clefNoteAdded = false;\r\n \r\n for (i = 0;\r\n i < voice.notes.length; ++i) {\r\n const smoNote = voice.notes[i];\r\n const textNotes = smoNote.getTextOrnaments();\r\n const vexNote = this.createVexNote(smoNote, i, voiceIx);\r\n this.noteToVexMap[smoNote.attrs.id] = vexNote.noteData.staveNote;\r\n this.vexNotes.push(vexNote.noteData.staveNote);\r\n\r\n if (vexNote.noteData.smoNote.clefNote && !clefNoteAdded) {\r\n const cf = new VF.ClefNote(vexNote.noteData.smoNote.clefNote.clef, 'small');\r\n this.voiceNotes.push(cf);\r\n clefNoteAdded = true; // ignore 2nd in a measure\r\n }\r\n this.voiceNotes.push(vexNote.noteData.staveNote);\r\n textNotes.forEach((tn) => {\r\n this.voiceNotes.push(createTextNote(SmoOrnament.textNoteOrnaments[tn.ornament]));\r\n });\r\n if (isNaN(smoNote.ticks.numerator) || isNaN(smoNote.ticks.denominator)\r\n || isNaN(smoNote.ticks.remainder)) {\r\n throw ('vxMeasure: NaN in ticks');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Group the notes for beaming and create Vex beam objects\r\n * @param vix - voice index\r\n * @returns \r\n */\r\n createVexBeamGroups(vix: number) {\r\n let keyNoteIx = -1;\r\n let i = 0;\r\n let j = 0;\r\n let stemDirection = VF.Stem.DOWN;\r\n for (i = 0; i < this.smoMeasure.beamGroups.length; ++i) {\r\n const bg = this.smoMeasure.beamGroups[i];\r\n if (bg.voice !== vix) {\r\n continue;\r\n }\r\n const vexNotes: StemmableNote[] = [];\r\n keyNoteIx = bg.notes.findIndex((nn) => nn.noteType === 'n');\r\n\r\n // Fix stem bug: key off first non-rest note.\r\n keyNoteIx = (keyNoteIx >= 0) ? keyNoteIx : 0;\r\n for (j = 0; j < bg.notes.length; ++j) {\r\n const note = bg.notes[j];\r\n if (note.noteType === '/') {\r\n continue;\r\n }\r\n const vexNote = this.noteToVexMap[note.attrs.id];\r\n // some type of redraw condition?\r\n if (!(vexNote instanceof VF.StaveNote || vexNote instanceof VF.GraceNote)) {\r\n return;\r\n }\r\n if (note.tickCount >= 4096 || vexNote.getIntrinsicTicks() >= 4096) {\r\n console.warn('bad length in beam group');\r\n return;\r\n }\r\n if (keyNoteIx === j) {\r\n stemDirection = note.flagState === SmoNote.flagStates.auto ?\r\n vexNote.getStemDirection() : toVexStemDirection(note);\r\n }\r\n vexNote.setStemDirection(stemDirection);\r\n vexNotes.push(vexNote); \r\n }\r\n const vexBeam = new VF.Beam(vexNotes);\r\n this.beamToVexMap[bg.attrs.id] = vexBeam;\r\n this.vexBeamGroups.push(vexBeam);\r\n }\r\n }\r\n\r\n /**\r\n * Create the VF tuplet objects based on the smo tuplet objects\r\n * @param vix \r\n */\r\n // \r\n createVexTuplets(vix: number) {\r\n var j = 0;\r\n var i = 0;\r\n this.vexTuplets = [];\r\n this.tupletToVexMap = {};\r\n for (i = 0; i < this.smoMeasure.tuplets.length; ++i) {\r\n const tp = this.smoMeasure.tuplets[i];\r\n if (tp.voice !== vix) {\r\n continue;\r\n }\r\n const vexNotes: Note[] = [];\r\n for (j = 0; j < tp.notes.length; ++j) {\r\n const smoNote = tp.notes[j];\r\n vexNotes.push(this.noteToVexMap[smoNote.attrs.id]);\r\n }\r\n const location = tp.getStemDirection(this.smoMeasure.clef) === SmoNote.flagStates.up ?\r\n VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM;\r\n const smoTupletParams = {\r\n vexNotes,\r\n numNotes: tp.numNotes,\r\n notesOccupied: tp.note_ticks_occupied,\r\n location\r\n }\r\n const vexTuplet = getVexTuplets(smoTupletParams);\r\n this.tupletToVexMap[tp.id] = vexTuplet;\r\n this.vexTuplets.push(vexTuplet);\r\n }\r\n }\r\n\r\n /**\r\n * create the modifiers for the stave itself, bar lines etc.\r\n */\r\n createMeasureModifiers() {\r\n const sb = this.smoMeasure.getStartBarline();\r\n const eb = this.smoMeasure.getEndBarline();\r\n const sym = this.smoMeasure.getRepeatSymbol();\r\n if (!this.stave) {\r\n return;\r\n }\r\n\r\n // don't create a begin bar for any but the 1st measure.\r\n if (this.smoMeasure.measureNumber.systemIndex !== 0 && sb.barline === SmoBarline.barlines.singleBar\r\n && this.smoMeasure.format.padLeft === 0) {\r\n this.stave.setBegBarType(VF.Barline.type.NONE);\r\n } else {\r\n this.stave.setBegBarType(toVexBarlineType(sb));\r\n }\r\n if (this.smoMeasure.svg.multimeasureLength > 0 && !this.smoMeasure.svg.hideMultimeasure) {\r\n this.stave.setEndBarType(vexBarlineType[this.smoMeasure.svg.multimeasureEndBarline]);\r\n } else if (eb.barline !== SmoBarline.barlines.singleBar) {\r\n this.stave.setEndBarType(toVexBarlineType(eb));\r\n }\r\n if (sym && sym.symbol !== SmoRepeatSymbol.symbols.None) {\r\n const rep = new VF.Repetition(toVexSymbol(sym), sym.xOffset + this.smoMeasure.staffX, sym.yOffset);\r\n this.stave.getModifiers().push(rep);\r\n }\r\n const tms = this.smoMeasure.getMeasureText();\r\n // TODO: set font\r\n tms.forEach((tmb: SmoMeasureModifierBase) => {\r\n const tm = tmb as SmoMeasureText;\r\n const offset = tm.position === SmoMeasureText.positions.left ? this.smoMeasure.format.padLeft : 0;\r\n const staveText = createStaveText(tm.text, toVexTextPosition(tm), \r\n {\r\n shiftX: tm.adjustX + offset, shiftY: tm.adjustY, justification: toVexTextJustification(tm)\r\n }\r\n );\r\n this.stave?.addModifier(staveText);\r\n\r\n // hack - we can't create staveText directly so this is the only way I could set the font\r\n const ar = this.stave!.getModifiers();\r\n const vm = ar[ar.length - 1];\r\n vm.setFont(tm.fontInfo);\r\n });\r\n if (this.smoMeasure.svg.rowInSystem === 0) {\r\n const rmb = this.smoMeasure.getRehearsalMark();\r\n const rm = rmb as SmoRehearsalMark;\r\n if (rm) {\r\n this.stave.setSection(rm.symbol, 0);\r\n }\r\n }\r\n\r\n const tempo = this.smoMeasure.getTempo();\r\n if (tempo && this.smoMeasure.svg.forceTempo) {\r\n this.stave.setTempo(tempo.toVexTempo(), -1 * tempo.yOffset);\r\n const vexTempo = this.stave.getModifiers().find((mod: StaveModifier) => mod.getAttribute('type') === 'StaveTempo');\r\n if (vexTempo) {\r\n vexTempo.setFont({ family: SourceSerifProFont.fontFamily, size: 13, weight: 'bold' });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Create all Vex notes and modifiers. We defer the format and rendering so\r\n * we can align across multiple staves\r\n */\r\n preFormat() {\r\n var j = 0;\r\n if (this.smoMeasure.svg.element !== null) {\r\n this.smoMeasure.svg.element.remove();\r\n this.smoMeasure.svg.element = null;\r\n if (this.smoMeasure.svg.tabElement) {\r\n this.smoMeasure.svg.tabElement.remove();\r\n this.smoMeasure.svg.tabElement = undefined;\r\n }\r\n }\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n // Note: need to do this to get it into VEX KS format\r\n const staffX = this.smoMeasure.staffX + this.smoMeasure.format.padLeft;\r\n const staffY = this.smoMeasure.staffY - this.context.box.y;\r\n const key = SmoMusic.vexKeySignatureTranspose(this.smoMeasure.keySignature, 0);\r\n const canceledKey = SmoMusic.vexKeySignatureTranspose(this.smoMeasure.canceledKeySignature, 0);\r\n const smoVexStaveParams = {\r\n x: staffX,\r\n y: staffY,\r\n padLeft: this.smoMeasure.format.padLeft,\r\n id: this.smoMeasure.id,\r\n staffX: this.smoMeasure.staffX,\r\n staffY: this.smoMeasure.staffY,\r\n staffWidth: this.smoMeasure.staffWidth,\r\n forceClef: this.smoMeasure.svg.forceClef,\r\n clef: this.smoMeasure.clef,\r\n forceKey: this.smoMeasure.svg.forceKeySignature,\r\n key,\r\n canceledKey,\r\n startX: this.smoMeasure.svg.maxColumnStartX,\r\n adjX: this.smoMeasure.svg.adjX,\r\n context: this.context.getContext()\r\n }\r\n this.stave = createStave(smoVexStaveParams);\r\n if (this.smoMeasure.svg.forceTimeSignature) {\r\n const ts = this.smoMeasure.timeSignature;\r\n let tsString = ts.timeSignature;\r\n if (this.smoMeasure.timeSignature.useSymbol && ts.actualBeats === 4 && ts.beatDuration === 4) {\r\n tsString = 'C';\r\n } else if (this.smoMeasure.timeSignature.useSymbol && ts.actualBeats === 2 && ts.beatDuration === 4) {\r\n tsString = 'C|';\r\n } else if (this.smoMeasure.timeSignature.displayString.length) {\r\n tsString = this.smoMeasure.timeSignature.displayString;\r\n }\r\n this.stave.addTimeSignature(tsString);\r\n }\r\n // Connect it to the rendering context and draw!\r\n this.stave.setContext(this.context.getContext());\r\n if (this.smoTabStave && this.smoMeasure.svg.tabStaveBox?.width) {\r\n const box = this.smoMeasure.svg.tabStaveBox;\r\n let tabWidth = 0;\r\n box.y -= this.context.box.y;\r\n box.x = staffX - this.context.box.x;\r\n box.width = this.smoMeasure.staffWidth;\r\n this.tabStave = createTabStave(box, this.smoTabStave.spacing, this.smoTabStave.numLines);\r\n if (this.smoMeasure.svg.forceClef) {\r\n this.tabStave.addTabGlyph();\r\n tabWidth = vexGlyph.dimensions['tab'].width;\r\n }\r\n this.tabStave.setNoteStartX(this.tabStave.getNoteStartX() + this.smoMeasure.svg.adjX - tabWidth);\r\n this.tabStave.setContext(this.context.getContext());\r\n }\r\n\r\n this.createMeasureModifiers();\r\n\r\n this.tickmapObject = this.smoMeasure.createMeasureTickmaps();\r\n this.createCollisionTickmap();\r\n\r\n this.voiceAr = [];\r\n this.vexNotes = [];\r\n this.noteToVexMap = {};\r\n\r\n // If there are multiple voices, add them all to the formatter at the same time so they don't collide\r\n for (j = 0; j < this.smoMeasure.voices.length; ++j) {\r\n const smoVexVoiceParams = {\r\n actualBeats: this.smoMeasure.timeSignature.actualBeats,\r\n beatDuration: this.smoMeasure.timeSignature.beatDuration,\r\n notes: this.vexNotes\r\n }\r\n if (!this.smoMeasure.svg.multimeasureLength && !this.smoMeasure.repeatSymbol) {\r\n this.createVexNotes(j);\r\n smoVexVoiceParams.notes = this.voiceNotes;\r\n this.createVexTuplets(j);\r\n this.createVexBeamGroups(j);\r\n\r\n // Create a voice in 4/4 and add above notes\r\n const voice = createVoice(smoVexVoiceParams);\r\n this.voiceAr.push(voice);\r\n }\r\n if (this.smoMeasure.repeatSymbol) {\r\n this.createRepeatSymbol();\r\n // Create a voice in 4/4 and add above notes\r\n const voice = createVoice(smoVexVoiceParams);\r\n this.voiceAr.push(voice);\r\n }\r\n }\r\n // Need to format for x position, then set y position before drawing dynamics.\r\n this.formatter = new VF.Formatter({ softmaxFactor: this.softmax, globalSoftmax: false });\r\n this.formatter.joinVoices(this.voiceAr);\r\n if (this.tabStave) {\r\n this.tabVoice = createVoice({\r\n actualBeats: this.smoMeasure.timeSignature.actualBeats,\r\n beatDuration: this.smoMeasure.timeSignature.beatDuration,\r\n notes: this.tabNotes\r\n });\r\n this.formatter.joinVoices([this.tabVoice]);\r\n }\r\n }\r\n /**\r\n * Create the Vex formatter that calculates the X and Y positions of the notes. A formatter\r\n * may actually span multiple staves for justified staves. The notes are drawn in their\r\n * individual vxMeasure objects but formatting is done once for all justified staves\r\n * @param voices Voice objects from VexFlow\r\n * @returns \r\n */\r\n format(voices: Voice[]) {\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n\r\n if (this.smoMeasure.svg.multimeasureLength > 0) {\r\n this.multimeasureRest = getMultimeasureRest(this.smoMeasure.svg.multimeasureLength);\r\n this.multimeasureRest.setContext(this.context.getContext());\r\n this.multimeasureRest.setStave(this.stave);\r\n return;\r\n }\r\n if (!this.formatter) {\r\n return;\r\n }\r\n const timestamp = new Date().valueOf();\r\n const staffWidth = this.smoMeasure.staffWidth -\r\n (this.smoMeasure.svg.maxColumnStartX + this.smoMeasure.svg.adjRight + this.smoMeasure.format.padLeft) - 10;\r\n this.dbgLeftX = this.smoMeasure.staffX + this.smoMeasure.format.padLeft + this.smoMeasure.svg.adjX;\r\n this.dbgWidth = staffWidth;\r\n this.formatter.format(voices, staffWidth);\r\n if (this.tabVoice && this.tabNotes.length) {\r\n this.formatter.format([this.tabVoice], staffWidth);\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.FORMAT, new Date().valueOf() - timestamp);\r\n }\r\n /**\r\n * render is called after format. Actually draw the things.\r\n */\r\n render() {\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n\r\n var group = this.context.getContext().openGroup() as SVGSVGElement;\r\n var mmClass = this.smoMeasure.getClassId();\r\n var j = 0;\r\n try {\r\n // bound each measure in its own SVG group for easy deletion and mapping to screen coordinate\r\n group.classList.add(this.smoMeasure.id);\r\n group.classList.add(mmClass);\r\n group.id = this.smoMeasure.id;\r\n this.stave!.draw();\r\n this.smoMeasure.svg.element = group;\r\n\r\n for (j = 0; j < this.voiceAr.length; ++j) {\r\n this.voiceAr[j].draw(this.context.getContext(), this.stave!);\r\n }\r\n\r\n this.vexBeamGroups.forEach((b) => {\r\n b.setContext(this.context.getContext()).draw();\r\n });\r\n\r\n this.vexTuplets.forEach((tuplet) => {\r\n tuplet.setContext(this.context.getContext()).draw();\r\n });\r\n if (this.multimeasureRest) {\r\n this.multimeasureRest.draw();\r\n }\r\n // this._updateLyricDomSelectors();\r\n this.renderDynamics();\r\n // this.smoMeasure.adjX = this.stave.start_x - (this.smoMeasure.staffX);\r\n\r\n this.context.getContext().closeGroup();\r\n if (this.tabStave) {\r\n const tabStaveId = `${this.smoMeasure.id}-tab`;\r\n const tabGroup = this.context.getContext().openGroup() as SVGSVGElement;\r\n tabGroup.classList.add(tabStaveId);\r\n this.tabStave.draw();\r\n this.tabVoice?.draw(this.context.getContext(), this.tabStave);\r\n this.context.getContext().closeGroup();\r\n this.smoMeasure.svg.tabElement = tabGroup;\r\n }\r\n // layoutDebug.setTimestamp(layoutDebug.codeRegions.RENDER, new Date().valueOf() - timestamp);\r\n\r\n this.rendered = true;\r\n if (layoutDebug.mask & layoutDebug.values['adjust']) {\r\n SvgHelpers.debugBoxNoText(this.context.getContext().svg,\r\n SvgHelpers.boxPoints(this.dbgLeftX, \r\n this.smoMeasure.svg.staffY, this.dbgWidth, 40), 'render-x-dbg', 0);\r\n }\r\n } catch (exc) {\r\n console.warn('unable to render measure ' + this.smoMeasure.measureNumber.measureIndex);\r\n this.context.getContext().closeGroup();\r\n }\r\n }\r\n}\r\n","\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { layoutDebug } from '../sui/layoutDebug';\r\nimport { SmoRepeatSymbol, SmoMeasureText, SmoBarline, SmoMeasureModifierBase, SmoRehearsalMark, SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\nimport { SourceSerifProFont } from '../../styles/font_metrics/ssp-serif-metrics';\r\nimport { SmoOrnament, SmoArticulation, SmoDynamicText, SmoLyric, \r\n SmoArpeggio, SmoNoteModifierBase, VexAnnotationParams, SmoTabNote } from '../../smo/data/noteModifiers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoMeasure, MeasureTickmaps } from '../../smo/data/measure';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { Clef, IsClef } from '../../smo/data/common';\r\nimport { SvgPage } from '../sui/svgPageMap';\r\nimport { toVexBarlineType, vexBarlineType, vexBarlinePosition, toVexBarlinePosition, toVexSymbol,\r\n toVexTextJustification, toVexTextPosition, getVexChordBlocks, toVexStemDirection } from './smoAdapter';\r\nimport { VexFlow, Stave,StemmableNote, Note, Beam, Tuplet, Voice,\r\n Formatter, Accidental, Annotation, StaveNoteStruct, StaveText, StaveModifier, \r\n createStaveText, renderDynamics, applyStemDirection,\r\n getVexNoteParameters, defaultNoteScale, defaultCueScale, getVexTuplets,\r\n createStave, createVoice, getOrnamentGlyph, getSlashGlyph, getRepeatBar, getMultimeasureRest,\r\n addChordGlyph, StaveNote,\r\n TabNote} from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\n\r\nexport interface VxMeasureIf {\r\n isWholeRest(): boolean;\r\n noteToVexMap: Record;\r\n smoMeasure: SmoMeasure;\r\n tickmapObject: MeasureTickmaps | null\r\n}\r\n\r\nexport interface VexNoteModifierIf {\r\n smoMeasure: SmoMeasure,\r\n vxMeasure: VxMeasureIf,\r\n smoNote: SmoNote,\r\n staveNote: Note,\r\n voiceIndex: number,\r\n tickIndex: number,\r\n tabNote?: StemmableNote | TabNote\r\n}\r\n\r\nexport class VxNote {\r\n noteData: VexNoteModifierIf;\r\n constructor(noteData: VexNoteModifierIf) {\r\n this.noteData = noteData;\r\n }\r\n createMicrotones(smoNote: SmoNote, vexNote: Note) {\r\n const tones = smoNote.getMicrotones();\r\n tones.forEach((tone) => {\r\n const acc: Accidental = new VF.Accidental(tone.toVex);\r\n vexNote.addModifier(acc, tone.pitchIndex);\r\n });\r\n }\r\n createDots() {\r\n for (var i = 0; i < this.noteData.smoNote.dots; ++i) {\r\n for (var j = 0; j < this.noteData.smoNote.pitches.length; ++j) {\r\n if (!this.noteData.vxMeasure.isWholeRest()) {\r\n this.noteData.staveNote.addModifier(new VF.Dot(), j);\r\n if (this.noteData.tabNote) {\r\n const tabDot = new VF.Dot();\r\n if (this.noteData.tabNote.getCategory() === VF.TabNote.CATEGORY && j === 0) {\r\n tabDot.setDotShiftY(this.noteData.tabNote.glyphProps.dot_shiftY);\r\n }\r\n this.noteData.tabNote.addModifier(tabDot, 0);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Create accidentals based on the active key and previous accidentals in this voice\r\n * @param smoNote \r\n * @param vexNote \r\n * @param tickIndex \r\n * @param voiceIx \r\n * @returns \r\n */\r\n createAccidentals() {\r\n let i = 0;\r\n if (this.noteData.smoNote.noteType === '/') {\r\n return;\r\n }\r\n if (this.noteData.smoNote.noteType !== 'n') {\r\n this.createDots();\r\n return;\r\n }\r\n this.noteData.smoNote.accidentalsRendered = [];\r\n for (i = 0; i < this.noteData.smoNote.pitches.length && this.noteData.vxMeasure.tickmapObject !== null; ++i) {\r\n const pitch = this.noteData.smoNote.pitches[i];\r\n const zz = SmoMusic.accidentalDisplay(pitch, this.noteData.smoMeasure.keySignature,\r\n this.noteData.vxMeasure.tickmapObject.tickmaps[this.noteData.voiceIndex].durationMap[this.noteData.tickIndex], \r\n this.noteData.vxMeasure.tickmapObject.accidentalArray);\r\n if (zz) {\r\n const acc = new VF.Accidental(zz.symbol);\r\n if (zz.courtesy) {\r\n acc.setAsCautionary();\r\n }\r\n this.noteData.smoNote.accidentalsRendered.push(pitch.accidental);\r\n this.noteData.staveNote.addModifier(acc, i);\r\n } else {\r\n this.noteData.smoNote.accidentalsRendered.push('');\r\n }\r\n }\r\n this.createDots();\r\n this.createMicrotones(this.noteData.smoNote, this.noteData.staveNote);\r\n if (this.noteData.smoNote.arpeggio) {\r\n this.noteData.staveNote.addModifier(new VF.Stroke(this.noteData.smoNote.arpeggio.typeCode));\r\n }\r\n }\r\n createJazzOrnaments() {\r\n const smoNote = this.noteData.smoNote;\r\n const vexNote = this.noteData.staveNote;\r\n const o = smoNote.getJazzOrnaments();\r\n o.forEach((ll) => {\r\n const mod = new VF.Ornament(ll.toVex());\r\n vexNote.addModifier(mod, 0);\r\n });\r\n }\r\n\r\n createOrnaments() {\r\n const o = this.noteData.smoNote.getOrnaments();\r\n o.forEach((ll) => {\r\n if (!SmoOrnament.textNoteOrnaments[ll.ornament]) {\r\n const ornamentCode = getOrnamentGlyph(ll.ornament);\r\n const mod = new VF.Ornament(ornamentCode);\r\n if (ll.offset === SmoOrnament.offsets.after) {\r\n mod.setDelayed(true);\r\n }\r\n this.noteData.staveNote.addModifier(mod, 0);\r\n }\r\n });\r\n }\r\n addLyricAnnotationToNote(vexNote: Note, lyric: SmoLyric) {\r\n let classString = 'lyric lyric-' + lyric.verse;\r\n let text = lyric.getText();\r\n if (lyric.skipRender) {\r\n return;\r\n }\r\n if (!text.length && lyric.isHyphenated()) {\r\n text = '-';\r\n }\r\n // no text, no hyphen, don't add it.\r\n if (!text.length) {\r\n return;\r\n }\r\n const vexL: Annotation = new VF.Annotation(text); // .setReportWidth(lyric.adjustNoteWidth);\r\n vexL.setAttribute('id', lyric.attrs.id); //\r\n\r\n // If we adjusted this note for the lyric, adjust the lyric as well.\r\n vexL.setFont(lyric.fontInfo.family, lyric.fontInfo.size, lyric.fontInfo.weight);\r\n vexL.setVerticalJustification(VF.Annotation.VerticalJustify.BOTTOM);\r\n vexNote.addModifier(vexL);\r\n if (lyric.isHyphenated()) {\r\n classString += ' lyric-hyphen';\r\n }\r\n vexL.addClass(classString);\r\n }\r\n addChordChangeToNote(vexNote: Note, lyric: SmoLyric) {\r\n const cs = new VF.ChordSymbol();\r\n cs.setAttribute('id', lyric.attrs.id);\r\n const blocks = getVexChordBlocks(lyric);\r\n blocks.forEach((block) => {\r\n if (block.glyph) {\r\n // Vex 5 broke this, does not distinguish between glyph and text\r\n // the reverse is for vex4 which expects the non-mangled identifier here,\r\n // e.g. 'diminished' and not 'csymDiminished'\r\n addChordGlyph(cs, block.glyph);\r\n } else {\r\n cs.addGlyphOrText(block.text ?? '', block);\r\n }\r\n });\r\n cs.setFont(lyric.fontInfo.family, lyric.fontInfo.size).setReportWidth(lyric.adjustNoteWidth);\r\n vexNote.addModifier(cs, 0);\r\n const classString = 'chord chord-' + lyric.verse;\r\n cs.addClass(classString);\r\n }\r\n createLyric() {\r\n const lyrics = this.noteData.smoNote.getTrueLyrics();\r\n if (this.noteData.smoNote.noteType !== '/') {\r\n lyrics.forEach((bll) => {\r\n const ll = bll as SmoLyric;\r\n this.addLyricAnnotationToNote(this.noteData.staveNote, ll);\r\n });\r\n }\r\n const chords = this.noteData.smoNote.getChords();\r\n chords.forEach((chord) => {\r\n this.addChordChangeToNote(this.noteData.staveNote, chord);\r\n });\r\n }\r\n createGraceNotes() {\r\n const smoNote = this.noteData.smoNote;\r\n const vexNote = this.noteData.staveNote;\r\n let i = 0;\r\n const gar = smoNote.getGraceNotes();\r\n var toBeam = true;\r\n if (gar && gar.length) {\r\n const group: any[] = [];\r\n gar.forEach((g) => {\r\n const gr = new VF.GraceNote(g.toVexGraceNote());\r\n gr.setAttribute('id', g.attrs.id);\r\n for (i = 0; i < g.pitches.length; ++i) {\r\n const pitch = g.pitches[i];\r\n if (!pitch.accidental) {\r\n console.warn('no accidental in grace note');\r\n }\r\n if (pitch.accidental && pitch.accidental !== 'n' || pitch.cautionary) {\r\n const accidental = new VF.Accidental(pitch.accidental);\r\n if (pitch.cautionary) {\r\n accidental.setAsCautionary();\r\n }\r\n gr.addModifier(accidental, i);\r\n }\r\n }\r\n if (g.tickCount() >= 4096) {\r\n toBeam = false;\r\n }\r\n gr.addClass('grace-note'); // note: this doesn't work :(\r\n\r\n g.renderId = gr.getAttribute('id');\r\n group.push(gr);\r\n });\r\n const grace: any = new VF.GraceNoteGroup(group);\r\n if (toBeam) {\r\n grace.beamNotes();\r\n }\r\n vexNote.addModifier(grace, 0);\r\n }\r\n }\r\n addArticulations() {\r\n const smoNote = this.noteData.smoNote;\r\n smoNote.articulations.forEach((art) => {\r\n if (smoNote.noteType === 'n') {\r\n const vx = this.noteData.staveNote;\r\n const position: number = SmoArticulation.positionToVex[art.position];\r\n const vexArt = SmoArticulation.articulationToVex[art.articulation];\r\n const vxArt = new VF.Articulation(vexArt).setPosition(position);\r\n vx.addModifier(vxArt, this.noteData.voiceIndex);\r\n }\r\n });\r\n }\r\n\r\n addModifiers() {\r\n this.createAccidentals();\r\n this.createLyric();\r\n this.createOrnaments();\r\n this.createJazzOrnaments();\r\n this.createGraceNotes();\r\n this.addArticulations();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { VxMeasure } from './vxMeasure';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, StaffModifierBase, SmoTie, SmoStaffTextBracket } from '../../smo/data/staffModifiers';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { leftConnectorVx, rightConnectorVx } from './smoAdapter';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\nimport { SmoScoreText } from '../../smo/data/scoreText'\r\nimport { SvgPage } from '../sui/svgPageMap';\r\nimport { SuiScroller } from '../sui/scroller';\r\nimport { VexFlow, Voice, Note, createHairpin, createSlur, createTie } from '../../common/vex';\r\nimport { toVexVolta, vexOptions } from './smoAdapter';\r\nconst VF = VexFlow;\r\n\r\nexport interface VoltaInfo {\r\n smoMeasure: SmoMeasure,\r\n ending: SmoVolta\r\n}\r\nexport interface SuiSystemGroup {\r\n firstMeasure: VxMeasure,\r\n voices: Voice[]\r\n}\r\n/**\r\n * Create a system of staves and draw music on it. This calls the Vex measure\r\n * rendering methods, and also draws all the score and system level stuff like slurs, \r\n * text, aligns the lyrics.\r\n * */\r\nexport class VxSystem {\r\n context: SvgPage;\r\n leftConnector: any[] = [null, null];\r\n score: SmoScore;\r\n vxMeasures: VxMeasure[] = [];\r\n smoMeasures: SmoMeasure[] = [];\r\n lineIndex: number;\r\n maxStaffIndex: number;\r\n maxSystemIndex: number;\r\n minMeasureIndex: number = -1;\r\n maxMeasureIndex: number = 0;\r\n width: number;\r\n staves: SmoSystemStaff[] = [];\r\n box: SvgBox = SvgBox.default;\r\n currentY: number;\r\n topY: number;\r\n clefWidth: number;\r\n ys: number[] = [];\r\n measures: VxMeasure[] = [];\r\n modifiers: any[] = [];\r\n constructor(context: SvgPage, topY: number, lineIndex: number, score: SmoScore) {\r\n this.context = context;\r\n this.lineIndex = lineIndex;\r\n this.score = score;\r\n this.maxStaffIndex = -1;\r\n this.maxSystemIndex = -1;\r\n this.width = -1;\r\n this.staves = [];\r\n this.currentY = 0;\r\n this.topY = topY;\r\n this.clefWidth = 70;\r\n this.ys = [];\r\n }\r\n\r\n getVxMeasure(smoMeasure: SmoMeasure) {\r\n let i = 0;\r\n for (i = 0; i < this.vxMeasures.length; ++i) {\r\n const vm = this.vxMeasures[i];\r\n if (vm.smoMeasure.id === smoMeasure.id) {\r\n return vm;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getVxNote(smoNote: SmoNote): Note | null {\r\n let i = 0;\r\n if (!smoNote) {\r\n return null;\r\n }\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const mm = this.measures[i];\r\n if (mm.noteToVexMap[smoNote.attrs.id]) {\r\n return mm.noteToVexMap[smoNote.attrs.id];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _updateChordOffsets(note: SmoNote) {\r\n var i = 0;\r\n for (i = 0; i < 3; ++i) {\r\n const chords = note.getLyricForVerse(i, SmoLyric.parsers.chord);\r\n chords.forEach((bchord) => {\r\n const chord = bchord as SmoLyric;\r\n const dom = this.context.svg.getElementById('vf-' + chord.attrs.id);\r\n if (dom) {\r\n dom.setAttributeNS('', 'transform', 'translate(' + chord.translateX + ' ' + (-1 * chord.translateY) + ')');\r\n }\r\n });\r\n }\r\n }\r\n _lowestYLowestVerse(lyrics: SmoLyric[], vxMeasures: VxMeasure[]) {\r\n // Move each verse down, according to the lowest lyric on that line/verse,\r\n // and the accumulation of the verses above it\r\n let lowestY = 0;\r\n for (var lowVerse = 0; lowVerse < 4; ++lowVerse) {\r\n let maxVerseHeight = 0;\r\n const verseLyrics = lyrics.filter((ll) => ll.verse === lowVerse);\r\n if (lowVerse === 0) {\r\n // first verse, go through list twice. first find lowest points\r\n verseLyrics.forEach((lyric: SmoLyric) => {\r\n if (lyric.logicalBox) {\r\n // 'lowest' Y on screen is Y with largest value...\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n lowestY = Math.max(ly + lyric.musicYOffset, lowestY);\r\n }\r\n });\r\n // second offset all to that point\r\n verseLyrics.forEach((lyric: SmoLyric) => {\r\n if (lyric.logicalBox) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const offset = Math.max(0, lowestY - ly);\r\n lyric.adjY = offset + lyric.translateY;\r\n }\r\n });\r\n } else {\r\n // subsequent verses, first find the tallest lyric\r\n verseLyrics.forEach((lyric: SmoLyric)=> {\r\n if (lyric.logicalBox) {\r\n maxVerseHeight = Math.max(lyric.logicalBox.height, maxVerseHeight);\r\n }\r\n });\r\n // adjust lowestY to be the verse height below the previous verse\r\n lowestY = lowestY + maxVerseHeight * 1.1; // 1.1 magic number?\r\n // and offset these lyrics\r\n verseLyrics.forEach((lyric: SmoLyric)=> {\r\n if (lyric.logicalBox) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const offset = Math.max(0, lowestY - ly);\r\n lyric.adjY = offset + lyric.translateY;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n // ### updateLyricOffsets\r\n // Adjust the y position for all lyrics in the line so they are even.\r\n // Also replace '-' with a longer dash do indicate 'until the next measure'\r\n updateLyricOffsets() {\r\n let i = 0;\r\n for (i = 0; i < this.score.staves.length; ++i) {\r\n const tmpI = i;\r\n const lyricsDash: SmoLyric[] = [];\r\n const lyricHyphens: SmoLyric[] = [];\r\n const lyricVerseMap: Record = {};\r\n const lyrics: SmoLyric[] = [];\r\n // is this necessary? They should all be from the current line\r\n const vxMeasures = this.vxMeasures.filter((vx) =>\r\n vx.smoMeasure.measureNumber.staffId === tmpI\r\n );\r\n\r\n // All the lyrics on this line\r\n // The vertical bounds on each line\r\n vxMeasures.forEach((mm) => {\r\n var smoMeasure = mm.smoMeasure;\r\n\r\n // Get lyrics from any voice.\r\n smoMeasure.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n this._updateChordOffsets(note);\r\n note.getTrueLyrics().forEach((ll: SmoLyric) => {\r\n const hasLyric = ll.getText().length > 0 || ll.isHyphenated();\r\n if (hasLyric && ll.logicalBox && !lyricVerseMap[ll.verse]) {\r\n lyricVerseMap[ll.verse] = [];\r\n }else if (hasLyric && !ll.logicalBox) {\r\n console.warn(\r\n `unrendered lyric for note ${note.attrs.id} measure ${smoMeasure.measureNumber.staffId}-${smoMeasure.measureNumber.measureIndex}`);\r\n }\r\n if (hasLyric && ll.logicalBox) {\r\n lyricVerseMap[ll.verse].push(ll);\r\n lyrics.push(ll);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n // calculate y offset so the lyrics all line up\r\n this._lowestYLowestVerse(lyrics, vxMeasures);\r\n const vkey: string[] = Object.keys(lyricVerseMap).sort((a, b) => parseInt(a, 10) - parseInt(b, 10));\r\n vkey.forEach((sverse) => {\r\n const verse = parseInt(sverse, 10);\r\n let hyphenLyric: SmoLyric | null = null;\r\n const lastVerse = lyricVerseMap[verse][lyricVerseMap[verse].length - 1].attrs.id;\r\n lyricVerseMap[verse].forEach((ll: SmoLyric) => {\r\n if (hyphenLyric !== null && hyphenLyric.logicalBox !== null && ll.logicalBox !== null) {\r\n const x = ll.logicalBox.x - (ll.logicalBox.x -\r\n (hyphenLyric.logicalBox.x + hyphenLyric.logicalBox.width)) / 2;\r\n ll.hyphenX = x;\r\n lyricHyphens.push(ll);\r\n }\r\n if (ll.isHyphenated() && ll.logicalBox !== null) {\r\n if (ll.attrs.id === lastVerse) {\r\n // Last word on the system, place the hyphen after the word\r\n const fontSize = SmoScoreText.fontPointSize(ll.fontInfo.size);\r\n ll.hyphenX = ll.logicalBox.x + ll.logicalBox.width + fontSize / 2;\r\n lyricHyphens.push(ll);\r\n } else if (ll.getText().length) {\r\n // place the hyphen 1/2 between next word and this one.\r\n hyphenLyric = ll;\r\n }\r\n } else {\r\n hyphenLyric = null;\r\n }\r\n });\r\n });\r\n lyrics.forEach((lyric) => {\r\n const dom = this.context.svg.getElementById('vf-' + lyric.attrs.id) as SVGSVGElement;\r\n if (dom) {\r\n dom.setAttributeNS('', 'transform', 'translate(' + lyric.adjX + ' ' + lyric.adjY + ')');\r\n // Keep track of lyrics that are 'dash'\r\n if (lyric.isDash()) {\r\n lyricsDash.push(lyric);\r\n }\r\n }\r\n });\r\n lyricHyphens.forEach((lyric) => {\r\n const parent = this.context.svg.getElementById('vf-' + lyric.attrs.id);\r\n if (parent && lyric.logicalBox !== null) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const text = document.createElementNS(SvgHelpers.namespace, 'text');\r\n text.textContent = '-';\r\n const fontSize = SmoScoreText.fontPointSize(lyric.fontInfo.size);\r\n text.setAttributeNS('', 'x', (lyric.hyphenX - fontSize / 3).toString());\r\n text.setAttributeNS('', 'y', (ly + (lyric.logicalBox.height * 2) / 3).toString());\r\n text.setAttributeNS('', 'font-size', '' + fontSize + 'pt');\r\n parent.appendChild(text);\r\n }\r\n });\r\n lyricsDash.forEach((lyric) => {\r\n const parent = this.context.svg.getElementById('vf-' + lyric.attrs.id);\r\n if (parent && lyric.logicalBox !== null) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const line = document.createElementNS(SvgHelpers.namespace, 'line');\r\n const ymax = Math.round(ly + lyric.logicalBox.height / 2);\r\n const offset = Math.round(lyric.logicalBox.width / 2);\r\n line.setAttributeNS('', 'x1', (lyric.logicalBox.x - offset).toString());\r\n line.setAttributeNS('', 'y1', ymax.toString());\r\n line.setAttributeNS('', 'x2', (lyric.logicalBox.x + lyric.logicalBox.width + offset).toString());\r\n line.setAttributeNS('', 'y2', ymax.toString());\r\n line.setAttributeNS('', 'stroke-width', '1');\r\n line.setAttributeNS('', 'fill', 'none');\r\n line.setAttributeNS('', 'stroke', '#999999');\r\n parent.appendChild(line);\r\n const texts = parent.getElementsByTagName('text');\r\n // hide hyphen and replace with dash\r\n if (texts && texts.length) {\r\n const text = texts[0];\r\n text.setAttributeNS('', 'fill', '#fff');\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // ### renderModifier\r\n // render a line-type modifier that is associated with a staff (e.g. slur)\r\n renderModifier(scroller: SuiScroller, modifier: StaffModifierBase,\r\n vxStart: Note | null, vxEnd: Note | null, smoStart: SmoSelection, smoEnd: SmoSelection) {\r\n let xoffset = 0;\r\n const setSameIfNull = (a: any, b: any) => {\r\n if (typeof (a) === 'undefined' || a === null) {\r\n return b;\r\n }\r\n return a;\r\n };\r\n if (smoStart && smoStart.note && smoStart.note.noteType === '/') {\r\n return;\r\n } if (smoEnd && smoEnd.note && smoEnd.note.noteType === '/') {\r\n return;\r\n }\r\n // if it is split between lines, render one artifact for each line, with a common class for\r\n // both if it is removed.\r\n if (vxStart) {\r\n const toRemove = this.context.svg.getElementById('vf-' + modifier.attrs.id);\r\n if (toRemove) {\r\n toRemove.remove();\r\n }\r\n }\r\n const artifactId = modifier.attrs.id + '-' + this.lineIndex;\r\n const group = this.context.getContext().openGroup('slur', artifactId);\r\n group.classList.add(modifier.attrs.id);\r\n const measureMod = 'mod-' + smoStart.selector.staff + '-' + smoStart.selector.measure;\r\n const staffMod = 'mod-' + smoStart.selector.staff;\r\n group.classList.add(measureMod);\r\n group.classList.add(staffMod);\r\n if (modifier.ctor === 'SmoStaffHairpin') {\r\n const hp = modifier as SmoStaffHairpin;\r\n if (!vxStart && !vxEnd) {\r\n this.context.getContext().closeGroup();\r\n }\r\n vxStart = setSameIfNull(vxStart, vxEnd);\r\n vxEnd = setSameIfNull(vxEnd, vxStart);\r\n const smoVexHairpinParams = {\r\n vxStart,\r\n vxEnd,\r\n hairpinType: hp.hairpinType,\r\n height: hp.height,\r\n yOffset: hp.yOffset,\r\n leftShiftPx: hp.xOffsetLeft,\r\n rightShiftPx: hp.xOffsetRight\r\n };\r\n const hairpin = createHairpin(smoVexHairpinParams);\r\n hairpin.setContext(this.context.getContext()).setPosition(hp.position).draw();\r\n } else if (modifier.ctor === 'SmoSlur') {\r\n const startNote: SmoNote = smoStart!.note as SmoNote;\r\n const slur = modifier as SmoSlur;\r\n let slurX = slur.xOffset;\r\n const svgPoint: SVGPoint[] = JSON.parse(JSON.stringify(slur.controlPoints));\r\n const lyric = startNote.longestLyric() as SmoLyric;\r\n if (lyric && lyric.getText()) {\r\n // If there is a lyric, the bounding box of the start note is stretched to the right.\r\n // slide the slur left, and also make it a bit wider.\r\n const xtranslate = (-1 * lyric.getText().length * 6);\r\n xoffset += (xtranslate / 2) - SmoSlur.defaults.xOffset;\r\n }\r\n if (vxStart === null || vxEnd === null) {\r\n slurX = -5;\r\n svgPoint[0].y = 10;\r\n svgPoint[1].y = 10;\r\n }\r\n const smoVexSlurParams = {\r\n vxStart, vxEnd,\r\n thickness: slur.thickness,\r\n xShift: slur.xOffset,\r\n yShift: slur.yOffset,\r\n cps: svgPoint,\r\n invert: slur.invert,\r\n position: slur.position,\r\n positionEnd: slur.position_end\r\n };\r\n const curve = createSlur(smoVexSlurParams);\r\n curve.setContext(this.context.getContext()).draw();\r\n } else if (modifier.ctor === 'SmoTie') {\r\n const ctie = modifier as SmoTie;\r\n const startNote: SmoNote = smoStart!.note as SmoNote;\r\n const endNote: SmoNote = smoEnd!.note as SmoNote;\r\n ctie.checkLines(startNote, endNote);\r\n if (ctie.lines.length > 0) {\r\n const fromLines = ctie.lines.map((ll) => ll.from);\r\n const toLines = ctie.lines.map((ll) => ll.to);\r\n const smoVexTieParams = {\r\n fromLines,\r\n toLines,\r\n firstNote: vxStart,\r\n lastNote: vxEnd,\r\n vexOptions: vexOptions(ctie)\r\n }\r\n const tie = createTie(smoVexTieParams);\r\n tie.setContext(this.context.getContext()).draw();\r\n }\r\n } else if (modifier.ctor === 'SmoStaffTextBracket') {\r\n if (vxStart && !vxEnd) {\r\n vxEnd = vxStart;\r\n } else if (vxEnd && !vxStart) {\r\n vxStart = vxEnd;\r\n }\r\n if (vxStart && vxEnd) {\r\n const smoBracket = (modifier as SmoStaffTextBracket);\r\n const bracket = new VF.TextBracket({\r\n start: vxStart, stop: vxEnd, text: smoBracket.text, superscript: smoBracket.superscript, position: smoBracket.position\r\n });\r\n bracket.setLine(smoBracket.line).setContext(this.context.getContext()).draw();\r\n }\r\n }\r\n\r\n this.context.getContext().closeGroup();\r\n if (xoffset) {\r\n const slurBox = this.context.svg.getElementById('vf-' + artifactId) as SVGSVGElement;\r\n if (slurBox) {\r\n SvgHelpers.translateElement(slurBox, xoffset, 0);\r\n }\r\n }\r\n modifier.element = group;\r\n }\r\n\r\n renderEndings(scroller: SuiScroller) {\r\n let j = 0;\r\n let i = 0;\r\n if (this.staves.length < 1) {\r\n return;\r\n }\r\n const voltas = this.staves[0].getVoltaMap(this.minMeasureIndex, this.maxMeasureIndex);\r\n voltas.forEach((ending) => {\r\n ending.elements.forEach((element: SVGSVGElement) => {\r\n element.remove();\r\n });\r\n ending.elements = [];\r\n });\r\n for (j = 0; j < this.smoMeasures.length; ++j) {\r\n let pushed = false;\r\n const smoMeasure = this.smoMeasures[j];\r\n // Only draw volta on top staff of system\r\n if (smoMeasure.svg.rowInSystem > 0) {\r\n continue;\r\n }\r\n const vxMeasure = this.getVxMeasure(smoMeasure);\r\n const voAr: VoltaInfo[] = [];\r\n for (i = 0; i < voltas.length && vxMeasure !== null; ++i) {\r\n const ending = voltas[i];\r\n const mix = smoMeasure.measureNumber.measureIndex;\r\n if ((ending.startBar <= mix) && (ending.endBar >= mix) && vxMeasure.stave !== null) {\r\n const group = this.context.getContext().openGroup(null, ending.attrs.id);\r\n group.classList.add(ending.attrs.id);\r\n group.classList.add(ending.endingId);\r\n ending.elements.push(group);\r\n const vtype = toVexVolta(ending, smoMeasure.measureNumber.measureIndex);\r\n const vxVolta = new VF.Volta(vtype, ending.number.toString(), smoMeasure.staffX + ending.xOffsetStart, ending.yOffset);\r\n vxVolta.setContext(this.context.getContext()).draw(vxMeasure.stave, -1 * ending.xOffsetEnd);\r\n this.context.getContext().closeGroup();\r\n const height = parseInt(vxVolta.getFontSize(), 10) * 2;\r\n const width = smoMeasure.staffWidth;\r\n const y = smoMeasure.svg.logicalBox.y - (height + ending.yOffset);\r\n ending.logicalBox = { x: smoMeasure.svg.staffX, y, width, height };\r\n if (!pushed) {\r\n voAr.push({ smoMeasure, ending });\r\n pushed = true;\r\n }\r\n vxMeasure.stave.getModifiers().push(vxVolta);\r\n }\r\n }\r\n // Adjust real height of measure to match volta height\r\n for (i = 0; i < voAr.length; ++i) {\r\n const mm = voAr[i].smoMeasure;\r\n const ending = voAr[i].ending;\r\n if (ending.logicalBox !== null) {\r\n const delta = mm.svg.logicalBox.y - ending.logicalBox.y;\r\n if (delta > 0) {\r\n mm.setBox(SvgHelpers.boxPoints(\r\n mm.svg.logicalBox.x, mm.svg.logicalBox.y - delta, mm.svg.logicalBox.width, mm.svg.logicalBox.height + delta),\r\n 'vxSystem adjust for volta');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n getMeasureByIndex(measureIndex: number, staffId: number) {\r\n let i = 0;\r\n for (i = 0; i < this.smoMeasures.length; ++i) {\r\n const mm = this.smoMeasures[i];\r\n if (measureIndex === mm.measureNumber.measureIndex && staffId === mm.measureNumber.staffId) {\r\n return mm;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n // ## renderMeasure\r\n // ## Description:\r\n // Create the graphical (VX) notes and render them on svg. Also render the tuplets and beam\r\n // groups\r\n renderMeasure(smoMeasure: SmoMeasure, printing: boolean) {\r\n if (smoMeasure.svg.hideMultimeasure) {\r\n return;\r\n }\r\n const measureIndex = smoMeasure.measureNumber.measureIndex;\r\n if (this.minMeasureIndex < 0 || this.minMeasureIndex > measureIndex) {\r\n this.minMeasureIndex = measureIndex;\r\n }\r\n if (this.maxMeasureIndex < measureIndex) {\r\n this.maxMeasureIndex = measureIndex;\r\n }\r\n let brackets = false;\r\n const staff = this.score.staves[smoMeasure.measureNumber.staffId];\r\n const staffId = staff.staffId;\r\n const systemIndex = smoMeasure.measureNumber.systemIndex;\r\n const selection = SmoSelection.measureSelection(this.score, staff.staffId, smoMeasure.measureNumber.measureIndex);\r\n this.smoMeasures.push(smoMeasure);\r\n if (this.staves.length <= staffId) {\r\n this.staves.push(staff);\r\n }\r\n if (selection === null) {\r\n return;\r\n }\r\n let softmax = selection.measure.format.proportionality;\r\n if (softmax === SmoMeasureFormat.defaultProportionality) {\r\n softmax = this.score.layoutManager?.getGlobalLayout().proportionality ?? 0;\r\n }\r\n const vxMeasure: VxMeasure = new VxMeasure(this.context, selection, printing, softmax);\r\n\r\n // create the vex notes, beam groups etc. for the measure\r\n vxMeasure.preFormat();\r\n this.vxMeasures.push(vxMeasure);\r\n\r\n const lastStaff = (staffId === this.score.staves.length - 1);\r\n const smoGroupMap: Record = {};\r\n const adjXMap: Record = {};\r\n const vxMeasures = this.vxMeasures.filter((mm) => !mm.smoMeasure.svg.hideEmptyMeasure);\r\n // If this is the last staff in the column, render the column with justification\r\n if (lastStaff) {\r\n vxMeasures.forEach((mm) => {\r\n if (typeof(adjXMap[mm.smoMeasure.measureNumber.systemIndex]) === 'undefined') {\r\n adjXMap[mm.smoMeasure.measureNumber.systemIndex] = mm.smoMeasure.svg.adjX;\r\n }\r\n adjXMap[mm.smoMeasure.measureNumber.systemIndex] = Math.max(adjXMap[mm.smoMeasure.measureNumber.systemIndex], mm.smoMeasure.svg.adjX);\r\n });\r\n vxMeasures.forEach((vv: VxMeasure) => {\r\n if (!vv.rendered && !vv.smoMeasure.svg.hideEmptyMeasure && vv.stave) {\r\n vv.stave.setNoteStartX(vv.stave.getNoteStartX() + adjXMap[vv.smoMeasure.measureNumber.systemIndex] - vv.smoMeasure.svg.adjX);\r\n const systemGroup = this.score.getSystemGroupForStaff(vv.selection);\r\n const justifyGroup: string = (systemGroup && vv.smoMeasure.format.autoJustify) ? systemGroup.attrs.id : vv.selection.staff.attrs.id;\r\n if (!smoGroupMap[justifyGroup]) {\r\n smoGroupMap[justifyGroup] = { firstMeasure: vv, voices: [] };\r\n }\r\n smoGroupMap[justifyGroup].voices =\r\n smoGroupMap[justifyGroup].voices.concat(vv.voiceAr);\r\n if (vv.tabVoice) {\r\n smoGroupMap[justifyGroup].voices.concat(vv.tabVoice);\r\n }\r\n }\r\n });\r\n }\r\n const keys = Object.keys(smoGroupMap);\r\n keys.forEach((key) => {\r\n smoGroupMap[key].firstMeasure.format(smoGroupMap[key].voices);\r\n });\r\n if (lastStaff) {\r\n vxMeasures.forEach((vv) => {\r\n if (!vv.rendered) {\r\n vv.render();\r\n }\r\n });\r\n }\r\n // Keep track of the y coordinate for the nth staff\r\n const renderedConnection: Record = {};\r\n\r\n if (systemIndex === 0 && lastStaff) {\r\n if (staff.bracketMap[this.lineIndex]) {\r\n staff.bracketMap[this.lineIndex].forEach((element) => {\r\n element.remove();\r\n });\r\n }\r\n staff.bracketMap[this.lineIndex] = [];\r\n const group = this.context.getContext().openGroup();\r\n group.classList.add('lineBracket-' + this.lineIndex);\r\n group.classList.add('lineBracket');\r\n staff.bracketMap[this.lineIndex].push(group);\r\n vxMeasures.forEach((vv) => {\r\n const systemGroup = this.score.getSystemGroupForStaff(vv.selection);\r\n if (systemGroup && !renderedConnection[systemGroup.attrs.id] && \r\n !vv.smoMeasure.svg.hideEmptyMeasure) {\r\n renderedConnection[systemGroup.attrs.id] = 1;\r\n const startSel = this.vxMeasures[systemGroup.startSelector.staff];\r\n const endSel = this.vxMeasures[systemGroup.endSelector.staff];\r\n if (startSel && startSel.rendered && \r\n endSel && endSel.rendered) {\r\n const c1 = new VF.StaveConnector(startSel.stave!, endSel.stave!)\r\n .setType(leftConnectorVx(systemGroup));\r\n c1.setContext(this.context.getContext()).draw();\r\n brackets = true;\r\n }\r\n }\r\n });\r\n if (!brackets && vxMeasures.length > 1) {\r\n const c2 = new VF.StaveConnector(vxMeasures[0].stave!, vxMeasures[vxMeasures.length - 1].stave!);\r\n c2.setType(VF.StaveConnector.type.SINGLE_RIGHT);\r\n c2.setContext(this.context.getContext()).draw();\r\n }\r\n // draw outer brace on parts with multiple staves (e.g. keyboards)\r\n vxMeasures.forEach((vv) => {\r\n if (vv.selection.staff.partInfo.stavesAfter > 0) {\r\n if (this.vxMeasures.length > vv.selection.selector.staff + 1) {\r\n const endSel = this.vxMeasures[vv.selection.selector.staff + 1];\r\n const startSel = vv;\r\n if (startSel && startSel.rendered && \r\n endSel && endSel.rendered) {\r\n const c1 = new VF.StaveConnector(startSel.stave!, endSel.stave!)\r\n .setType(VF.StaveConnector.type.BRACE);\r\n c1.setContext(this.context.getContext()).draw(); \r\n }\r\n }\r\n };\r\n });\r\n this.context.getContext().closeGroup();\r\n } else if (lastStaff && smoMeasure.measureNumber.measureIndex + 1 < staff.measures.length) {\r\n if (staff.measures[smoMeasure.measureNumber.measureIndex + 1].measureNumber.systemIndex === 0) {\r\n const endMeasure = vxMeasure;\r\n const startMeasure = vxMeasures.find((vv) => vv.selection.selector.staff === 0 &&\r\n vv.selection.selector.measure === vxMeasure.selection.selector.measure && \r\n vv.smoMeasure.svg.hideEmptyMeasure === false);\r\n if (endMeasure && endMeasure.stave && startMeasure && startMeasure.stave) {\r\n const group = this.context.getContext().openGroup();\r\n group.classList.add('endBracket-' + this.lineIndex);\r\n group.classList.add('endBracket');\r\n staff.bracketMap[this.lineIndex].push(group);\r\n const c2 = new VF.StaveConnector(startMeasure.stave, endMeasure.stave)\r\n .setType(VF.StaveConnector.type.SINGLE_RIGHT);\r\n c2.setContext(this.context.getContext()).draw();\r\n this.context.getContext().closeGroup();\r\n }\r\n }\r\n }\r\n // keep track of left-hand side for system connectors\r\n if (systemIndex === 0) {\r\n if (staffId === 0) {\r\n this.leftConnector[0] = vxMeasure.stave;\r\n } else if (staffId > this.maxStaffIndex) {\r\n this.maxStaffIndex = staffId;\r\n this.leftConnector[1] = vxMeasure.stave;\r\n }\r\n } else if (smoMeasure.measureNumber.systemIndex > this.maxSystemIndex) {\r\n this.maxSystemIndex = smoMeasure.measureNumber.systemIndex;\r\n }\r\n this.measures.push(vxMeasure);\r\n }\r\n}\r\n","/**\r\n * definitions shared by all SMO types\r\n * @module /smo/data/common\r\n */\r\n/**\r\n * Same as attrs object in Vex objects.\r\n * @param id - unique identifier, can be used in DOM elements\r\n * @param type - a little bit redundate with `ctor` in `SmoObjectParams`\r\n */\r\nexport interface SmoAttrs {\r\n id: string,\r\n type: string\r\n}\r\nexport const smoXmlNs = 'https://aarondavidnewman.github.io/Smoosic';\r\n\r\n// export abstract class SmoXmlSerializable {\r\n// abstract serializeXml(namespace: string, parentElement: Element, tagName: string): Element\r\n// }\r\nexport interface SmoXmlSerializable {\r\n serializeXml: (namespace: string, parentElement: Element, tag: string) => Element;\r\n ctor: string\r\n}\r\nexport function createXmlAttributes(element: Element, obj: any) {\r\n Object.keys(obj).forEach((key) => {\r\n const attr = element.ownerDocument.createAttribute(key);\r\n attr.value = obj[key];\r\n element.setAttributeNode(attr);\r\n });\r\n}\r\nexport function createXmlAttribute(element: Element, name: string, value: any) {\r\n const obj: any = {};\r\n obj[name] = value;\r\n createXmlAttributes(element, obj);\r\n}\r\n\r\nvar nextId = 32768;\r\nexport const getId = () => `smo` + (nextId++).toString();\r\n/**\r\n * All note, measure, staff, and score objects have\r\n * a serialize method and are deserializable with constructor `ctor`\r\n */\r\nexport interface SmoObjectParams {\r\n ctor: string,\r\n attrs?: SmoAttrs\r\n}\r\n\r\n/**\r\n * Note duration. The same abstraction used by vex, except here denominator is\r\n * always 1. remainder is used to reconstruct non-tuplets from tuplets.\r\n * @param numerator - duration, 4096 is 1/4 note\r\n * @param denominator - always 1 for SMO objects\r\n * @param remainder - used for tuplets whose duration doesn't divide evenly\r\n */\r\nexport interface Ticks {\r\n numerator: number,\r\n denominator: number,\r\n remainder: number\r\n}\r\n\r\n/**\r\n * constraint for SmoPitch.letter value, in lower case\r\n */\r\nexport type PitchLetter = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g';\r\n\r\nexport function IsPitchLetter(letter: PitchLetter | string): letter is PitchLetter {\r\n return letter.length === 1 && letter[0] >= 'a' && letter[0] <= 'g';\r\n}\r\n\r\n/**\r\n * PitchKey is a SmoPitch, without the octave\r\n * @param letter - letter note\r\n * @param accidental - an accidental or microtone\r\n */\r\nexport interface PitchKey {\r\n letter: PitchLetter,\r\n accidental: string\r\n}\r\n/**\r\n * Represents a single pitch in Smo object model.\r\n * @param letter - letter note\r\n * @param accidental - an accidental or microtone\r\n * @param octave - standard octave\r\n * @param cautionary? - can be used for courtesy accidental\r\n */\r\nexport interface Pitch {\r\n letter: PitchLetter,\r\n accidental: string,\r\n octave: number,\r\n cautionary?: boolean,\r\n forced?: boolean,\r\n role?: string\r\n}\r\n\r\n/**\r\n * A tuple indicating measure location in the score:\r\n * @param measureIndex - the actual offset from the first measure\r\n * @param localIndex - the index as shown to the user, considers renumbering\r\n * @param sytemIndex - which bar (column) of a system this measure is\r\n * @param staffId - which staff (row) of a system this measure is\r\n */\r\nexport interface MeasureNumber {\r\n measureIndex: number,\r\n localIndex: number,\r\n systemIndex: number,\r\n staffId: number\r\n}\r\n/**\r\n * musical artifacts can contain temporary svg information for\r\n * mapping the UI.\r\n */\r\nexport class SvgPoint {\r\n x: number;\r\n y: number;\r\n static get default() {\r\n return { x: 0, y: 0 };\r\n }\r\n constructor() {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n}\r\n/**\r\n * musical artifacts can contain temporary svg information for\r\n * mapping the UI.\r\n */\r\n export class SvgBox {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n static get default(): SvgBox {\r\n return { x: 0, y: 0, width: -1, height: -1 };\r\n }\r\n constructor() {\r\n this.x = 0;\r\n this.y = 0;\r\n this.width = -1;\r\n this.height = -1;\r\n }\r\n}\r\n/**\r\n * kind of a pointless class...\r\n */\r\nexport interface SvgDimensions {\r\n width: number,\r\n height: number\r\n}\r\n/**\r\n * A `Transposable` is an abstraction of a note.\r\n * Can be passed into methods that transform pitches for both\r\n * grace notes and normal notes.\r\n * @param pitches - SMO pitch type\r\n * @param noteType - same convention as VexFlow, 'n' for note, 'r' for rest\r\n * @param renderId - ID for the containing SVG group, used to map UI elements\r\n * @param renderedBox - bounding box in client coordinates\r\n * @param logicalBox - bounding box in SVG coordinates\r\n */\r\nexport interface Transposable {\r\n pitches: Pitch[],\r\n noteType: string,\r\n renderId: string | null,\r\n logicalBox: SvgBox | null\r\n}\r\n\r\n\r\n/**\r\n * All note, measure etc. modifiers have these attributes. The SVG info\r\n * is for the tracker to track the artifacts in the UI (mouse events, etc)\r\n * @param ctor - constructor name for deserialize\r\n * @param logicalBox - bounding box in SVG coordinates\r\n * @param attr - unique ID, simlar to vex object attrs field\r\n */\r\nexport interface SmoModifierBase {\r\n ctor: string,\r\n logicalBox: SvgBox | null,\r\n attrs: SmoAttrs,\r\n serialize: () => any;\r\n}\r\n\r\nexport function serializeXmlModifierArray(object: SmoXmlSerializable[], namespace: string, parentElement: Element, tag: string) {\r\n if (object.length === 0) {\r\n return parentElement;\r\n }\r\n const arEl = parentElement.ownerDocument.createElementNS(namespace, `${tag}-array`);\r\n parentElement.appendChild(arEl);\r\n createXmlAttribute(arEl, 'container', 'array');\r\n createXmlAttribute(arEl, 'name', `${tag}`);\r\n for (var j = 0; j < object.length; ++j) {\r\n const instEl = parentElement.ownerDocument.createElementNS(namespace, `${tag}-instance`);\r\n arEl.appendChild(instEl);\r\n object[j].serializeXml(namespace, instEl, object[j].ctor);\r\n }\r\n return arEl;\r\n}\r\n\r\n/**\r\n * Renderable is just a thing that has a bounding box\r\n */\r\nexport interface Renderable {\r\n logicalBox: SvgBox | null | undefined\r\n}\r\n/**\r\n * Restriction from string to supported clefs\r\n */\r\nexport type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n | 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n\r\nexport var Clefs: Clef[] = ['treble' , 'bass' , 'tenor' , 'alto' , 'soprano' , 'percussion'\r\n, 'mezzo-soprano' , 'baritone-c' , 'baritone-f' , 'subbass' , 'french'];\r\n\r\nexport function IsClef(clef: Clef | string): clef is Clef {\r\n return Clefs.findIndex((x) => clef === x) >= 0;\r\n}\r\n\r\n/**\r\n * Most event handling in SMO is an 'any' from jquery, but\r\n * key events are sometimes narrowed to the common browser key event\r\n */\r\nexport interface KeyEvent {\r\n type: string,\r\n shiftKey: boolean,\r\n ctrlKey: boolean,\r\n altKey: boolean,\r\n key: string,\r\n keyCode: string,\r\n code: string,\r\n event: string | null\r\n}\r\n\r\nexport interface TickAccidental {\r\n duration: number,\r\n pitch: Pitch\r\n}\r\n\r\n/**\r\n * Used to create {@link MeasureTickmaps}\r\n */\r\nexport interface AccidentalArray {\r\n duration: string | number,\r\n pitches: Record\r\n}\r\n\r\nexport interface AccidentalDisplay {\r\n symbol: string,\r\n courtesy: boolean,\r\n forced: boolean\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Contains definition and supporting classes for {@link SmoMeasure}.\r\n * Most of the engraving is done at the measure level. Measure contains multiple (at least 1)\r\n * voices, which in turn contain notes. Each measure also contains formatting information. This\r\n * is mostly serialized outside of measure (in score), since columns and often an entire region\r\n * share measure formatting. Measures also contain modifiers like barlines. Tuplets and beam groups\r\n * are contained at the measure level.\r\n * @module /smo/data/measure\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMusic } from './music';\r\nimport {\r\n SmoBarline, SmoMeasureModifierBase, SmoRepeatSymbol, SmoTempoText, SmoMeasureFormat,\r\n SmoVolta, SmoRehearsalMarkParams, SmoRehearsalMark, SmoTempoTextParams, TimeSignature,\r\n TimeSignatureParametersSer, SmoMeasureFormatParamsSer, SmoTempoTextParamsSer\r\n} from './measureModifiers';\r\nimport { SmoNote, NoteType, SmoNoteParamsSer } from './note';\r\nimport { SmoTuplet, SmoTupletParamsSer, SmoTupletParams } from './tuplet';\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { TickMap } from '../xform/tickMap';\r\nimport { MeasureNumber, SvgBox, SmoAttrs, Pitch, PitchLetter, Clef, \r\n TickAccidental, AccidentalArray, getId } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\n/**\r\n * Voice is just a container for {@link SmoNote}\r\n */\r\nexport interface SmoVoice {\r\n notes: SmoNote[]\r\n}\r\n\r\nexport interface SmoVoiceSer {\r\n notes: SmoNoteParamsSer[]\r\n}\r\n/**\r\n * TickMappable breaks up a circular dependency on modifiers\r\n * like @SmoDuration\r\n */\r\nexport interface TickMappable {\r\n voices: SmoVoice[],\r\n keySignature: string\r\n}\r\n\r\nexport interface MeasureTick {\r\n voiceIndex: number,\r\n tickIndex: number\r\n}\r\n\r\n/**\r\n * Break up a circlar dependency with {@link SmoBeamGroup}\r\n */\r\nexport interface ISmoBeamGroup {\r\n notes: SmoNote[],\r\n voice: number,\r\n attrs: SmoAttrs\r\n}\r\n/**\r\n * geometry information about the current measure for rendering and\r\n * score layout.\r\n * @internal\r\n */\r\nexport interface MeasureSvg {\r\n staffWidth: number,\r\n unjustifiedWidth: number,\r\n adjX: number, // The start point of the music in the stave (after time sig, etc)\r\n maxColumnStartX: number,\r\n staffX: number, // The left-most x position of the staff\r\n staffY: number,\r\n logicalBox: SvgBox,\r\n yTop: number,\r\n adjRight: number,\r\n history: string[],\r\n lineIndex: number,\r\n pageIndex: number,\r\n rowInSystem: number,\r\n forceClef: boolean,\r\n forceKeySignature: boolean,\r\n forceTimeSignature: boolean,\r\n forceTempo: boolean,\r\n hideEmptyMeasure: boolean,\r\n hideMultimeasure: boolean,\r\n multimeasureLength: number,\r\n multimeasureEndBarline: number,\r\n element: SVGSVGElement | null,\r\n tabStaveBox?: SvgBox,\r\n tabElement?: SVGSVGElement\r\n}\r\n\r\n/**\r\n * Interface for a {@link TickMap} for each voice\r\n * for formatting\r\n */\r\nexport interface MeasureTickmaps {\r\n tickmaps: TickMap[],\r\n accidentalMap: Record>,\r\n accidentalArray: AccidentalArray[]\r\n}\r\n/**\r\n * Column-mapped modifiers, managed by the {@link SmoScore}\r\n */\r\nexport interface ColumnMappedParams {\r\n // ['timeSignature', 'keySignature', 'tempo']\r\n timeSignature: any,\r\n keySignature: string,\r\n tempo: any\r\n}\r\n// @internal\r\nexport type SmoMeasureNumberParam = 'transposeIndex' | 'activeVoice' | 'lines' | 'repeatCount';\r\n// @internal\r\nexport const SmoMeasureNumberParams: SmoMeasureNumberParam[] = ['transposeIndex', 'activeVoice', 'lines', 'repeatCount'];\r\n// @internal\r\nexport type SmoMeasureStringParam = 'keySignature';\r\n// @internal\r\nexport const SmoMeasureStringParams: SmoMeasureStringParam[] = ['keySignature'];\r\n/**\r\n * constructor parameters for a {@link SmoMeasure}. Usually you will call\r\n * {@link SmoMeasure.defaults}, and modify the parameters you need to change.\r\n *\r\n * @param timeSignature\r\n * @param keySignature\r\n * @param tuplets\r\n * @param transposeIndex calculated from {@link SmoPartInfo} for non-concert-key instruments\r\n * @param lines number of lines in the stave\r\n * @param staffY Y coordinate (UL corner) of the measure stave\r\n * @param measureNumber combination configured/calculated measure number\r\n * @param clef\r\n * @param voices\r\n * @param activeVoice the active voice in the editor\r\n * @param tempo\r\n * @param format measure format, is managed by the score\r\n * @param modifiers All measure modifiers that5 aren't format, timeSignature or tempo\r\n * @category SmoParameters\r\n */\r\nexport interface SmoMeasureParams {\r\n timeSignature: TimeSignature,\r\n keySignature: string,\r\n tuplets: SmoTuplet[],\r\n transposeIndex: number,\r\n lines: number,\r\n // bars: [1, 1], // follows enumeration in VF.Barline\r\n measureNumber: MeasureNumber,\r\n clef: Clef,\r\n voices: SmoVoice[],\r\n activeVoice: number,\r\n tempo: SmoTempoText,\r\n format: SmoMeasureFormat | null,\r\n modifiers: SmoMeasureModifierBase[],\r\n repeatSymbol: boolean,\r\n repeatCount: number\r\n}\r\n\r\n/**\r\n * The serializeable bits of SmoMeasure. Some parameters are \r\n * mapped by the stave if the don't change every measure, e.g.\r\n * time signature.\r\n * @category serialization\r\n */\r\nexport interface SmoMeasureParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n /**\r\n * a list of tuplets (serialized)\r\n */\r\n tuplets: SmoTupletParamsSer[],\r\n /**\r\n * transpose the notes up/down. TODO: this should not be serialized\r\n * as its part of the instrument parameters\r\n */\r\n transposeIndex: number,\r\n /**\r\n * lines in the staff (e.g. percussion)\r\n */\r\n lines: number,\r\n /**\r\n * measure number, absolute and relative/remapped\r\n */\r\n measureNumber: MeasureNumber,\r\n /**\r\n * start clef\r\n */\r\n clef: Clef,\r\n /**\r\n * voices contain notes\r\n */\r\n voices: SmoVoiceSer[],\r\n /**\r\n * all other modifiers (barlines, etc)\r\n */\r\n modifiers: SmoMeasureModifierBase[],\r\n // the next 3 are not serialized as part of the measure in most cases, since they are\r\n // mapped to specific measures in the score/system\r\n /**\r\n * key signature\r\n */\r\n keySignature?: string,\r\n /**\r\n * time signature serialization\r\n */\r\n timeSignature?: TimeSignatureParametersSer,\r\n /**\r\n * tempo at this point\r\n */\r\n tempo: SmoTempoTextParamsSer\r\n \r\n}\r\n\r\n/**\r\n * Only arrays and measure numbers are serilialized with default values.\r\n * @param params - result of serialization\r\n * @returns \r\n */\r\nfunction isSmoMeasureParamsSer(params: Partial):params is SmoMeasureParamsSer {\r\n if (!Array.isArray(params.voices) || \r\n !Array.isArray(params.tuplets) || !Array.isArray(params.modifiers) ||\r\n typeof(params?.measureNumber?.measureIndex) !== 'number') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Data for a measure of music. Many rules of musical engraving are\r\n * enforced at a measure level: the duration of notes, accidentals, etc.\r\n * \r\n * Measures contain {@link SmoNote}, {@link SmoTuplet}, and {@link SmoBeamGroup}\r\n * Measures are contained in {@link SmoSystemStaff}\r\n * @category SmoObject\r\n */\r\nexport class SmoMeasure implements SmoMeasureParams, TickMappable {\r\n static get timeSignatureDefault(): TimeSignature {\r\n return new TimeSignature(TimeSignature.defaults);\r\n }\r\n static defaultDupleDuration: number = 4096;\r\n static defaultTripleDuration: number = 2048 * 3;\r\n // @internal\r\n static readonly _defaults: SmoMeasureParams = {\r\n timeSignature: SmoMeasure.timeSignatureDefault,\r\n keySignature: 'C',\r\n tuplets: [],\r\n transposeIndex: 0,\r\n modifiers: [],\r\n // bars: [1, 1], // follows enumeration in VF.Barline\r\n measureNumber: {\r\n localIndex: 0,\r\n systemIndex: 0,\r\n measureIndex: 0,\r\n staffId: 0\r\n },\r\n clef: 'treble',\r\n lines: 5,\r\n voices: [],\r\n format: new SmoMeasureFormat(SmoMeasureFormat.defaults),\r\n activeVoice: 0,\r\n tempo: new SmoTempoText(SmoTempoText.defaults),\r\n repeatSymbol: false,\r\n repeatCount: 0 \r\n }\r\n\r\n /**\r\n * Default constructor parameters. Defaults are always copied so the\r\n * caller can modify them to create a new measure.\r\n * @returns constructor params for a new measure\r\n */\r\n static get defaults(): SmoMeasureParams {\r\n const proto: any = JSON.parse(JSON.stringify(SmoMeasure._defaults));\r\n proto.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n proto.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n proto.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.start,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n proto.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n return proto;\r\n }\r\n // @ignore\r\n static convertLegacyTimeSignature(ts: string) {\r\n const rv = new TimeSignature(TimeSignature.defaults);\r\n rv.timeSignature = ts;\r\n return rv;\r\n }\r\n timeSignature: TimeSignature = SmoMeasure.timeSignatureDefault;\r\n /**\r\n * Overrides display of actual time signature, in the case of\r\n * pick-up notes where the actual and displayed durations are different\r\n */\r\n keySignature: string = '';\r\n canceledKeySignature: string = '';\r\n tuplets: SmoTuplet[] = [];\r\n repeatSymbol: boolean = false;\r\n repeatCount: number = 0;\r\n ctor: string='SmoMeasure';\r\n /**\r\n * Adjust for non-concert pitch intstruments\r\n */\r\n transposeIndex: number = 0;\r\n modifiers: SmoMeasureModifierBase[] = [];\r\n /**\r\n * Row, column, and custom numbering information about this measure.\r\n */\r\n measureNumber: MeasureNumber = {\r\n localIndex: 0,\r\n systemIndex: 0,\r\n measureIndex: 0,\r\n staffId: 0\r\n };\r\n clef: Clef = 'treble';\r\n voices: SmoVoice[] = [];\r\n /**\r\n * the active voice in the editor, if there are multiple voices\r\n * */\r\n activeVoice: number = 0;\r\n tempo: SmoTempoText;\r\n beamGroups: ISmoBeamGroup[] = [];\r\n lines: number = 5;\r\n /**\r\n * Runtime information about rendering\r\n */\r\n svg: MeasureSvg;\r\n /**\r\n * Measure-specific formatting parameters.\r\n */\r\n format: SmoMeasureFormat;\r\n /**\r\n * Information for identifying this object\r\n */\r\n id: string;\r\n\r\n /**\r\n * Fill in components. We assume the modifiers are already constructed,\r\n * e.g. by deserialize or the calling function.\r\n * @param params\r\n */\r\n constructor(params: SmoMeasureParams) {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n this.svg = {\r\n staffWidth: 0,\r\n unjustifiedWidth: 0,\r\n staffX: 0,\r\n staffY: 0,\r\n logicalBox: {\r\n x: 0, y: 0, width: 0, height: 0\r\n },\r\n yTop: 0,\r\n adjX: 0,\r\n maxColumnStartX: 0,\r\n adjRight: 0,\r\n history: [],\r\n lineIndex: 0,\r\n pageIndex: 0,\r\n rowInSystem: 0,\r\n forceClef: false,\r\n forceKeySignature: false,\r\n forceTimeSignature: false,\r\n forceTempo: false,\r\n hideEmptyMeasure: false,\r\n hideMultimeasure: false,\r\n multimeasureLength: 0,\r\n multimeasureEndBarline: SmoBarline.barlines['singleBar'],\r\n element: null\r\n };\r\n\r\n const defaults = SmoMeasure.defaults;\r\n SmoMeasureNumberParams.forEach((param) => {\r\n if (typeof (params[param]) !== 'undefined') {\r\n this[param] = params[param];\r\n }\r\n });\r\n SmoMeasureStringParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defaults[param];\r\n });\r\n this.clef = params.clef;\r\n this.repeatSymbol = params.repeatSymbol;\r\n this.measureNumber = JSON.parse(JSON.stringify(params.measureNumber));\r\n if (params.tempo) {\r\n this.tempo = new SmoTempoText(params.tempo);\r\n }\r\n // Handle legacy time signature format\r\n if (params.timeSignature) {\r\n const tsAny = params.timeSignature as any;\r\n if (typeof (tsAny) === 'string') {\r\n this.timeSignature = SmoMeasure.convertLegacyTimeSignature(tsAny);\r\n } else {\r\n this.timeSignature = TimeSignature.createFromPartial(tsAny);\r\n }\r\n }\r\n this.voices = params.voices ? params.voices : [];\r\n this.tuplets = params.tuplets ? params.tuplets : [];\r\n this.modifiers = params.modifiers ? params.modifiers : defaults.modifiers;\r\n this.setDefaultBarlines();\r\n this.keySignature = SmoMusic.vexKeySigWithOffset(this.keySignature, this.transposeIndex);\r\n\r\n if (!(params.format)) {\r\n this.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n this.format.measureIndex = this.measureNumber.measureIndex;\r\n } else {\r\n this.format = new SmoMeasureFormat(params.format);\r\n }\r\n this.id = getId().toString();\r\n this.updateClefChangeNotes();\r\n }\r\n\r\n // @internal\r\n // used for serialization\r\n static get defaultAttributes() {\r\n return [\r\n 'keySignature', \r\n 'measureNumber',\r\n 'activeVoice', 'clef', 'transposeIndex',\r\n 'format', 'rightMargin', 'lines', 'repeatSymbol', 'repeatCount'\r\n ];\r\n }\r\n\r\n // @internal\r\n // used for serialization\r\n static get formattingOptions() {\r\n return ['customStretch', 'customProportion', 'autoJustify', 'systemBreak',\r\n 'pageBreak', 'padLeft'];\r\n }\r\n // @internal\r\n // used for serialization\r\n static get columnMappedAttributes() {\r\n return ['timeSignature', 'keySignature', 'tempo'];\r\n }\r\n static get serializableAttributes() {\r\n const rv: any = [];\r\n SmoMeasure.defaultAttributes.forEach((attr) => {\r\n if (SmoMeasure.columnMappedAttributes.indexOf(attr) < 0 && attr !== 'format') {\r\n rv.push(attr);\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n // Return true if the time signatures are the same, for display purposes (e.g. if a time sig change\r\n // is required)\r\n */\r\n static timeSigEqual(o1: TimeSignature, o2: TimeSignature) {\r\n return o1.timeSignature === o2.timeSignature && o1.useSymbol === o2.useSymbol;\r\n }\r\n /**\r\n * If there is a clef change mid-measure, update the actual clefs of the notes\r\n * so they display correctly.\r\n */\r\n updateClefChangeNotes() {\r\n let changed = false;\r\n let curTick = 0;\r\n let clefChange = this.clef;\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n curTick = 0;\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const smoNote = voice.notes[j];\r\n smoNote.clef = this.clef;\r\n if (smoNote.clefNote && smoNote.clefNote.clef !== this.clef) {\r\n clefChange = smoNote.clefNote.clef;\r\n curTick += smoNote.tickCount;\r\n changed = true;\r\n break;\r\n }\r\n curTick += smoNote.tickCount;\r\n }\r\n if (changed) {\r\n break;\r\n }\r\n }\r\n if (!changed) {\r\n return;\r\n }\r\n // clefChangeTick is where the change goes. We only support\r\n // one per measure, others are ignored.\r\n const clefChangeTick = curTick;\r\n\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n curTick = 0;\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const smoNote = voice.notes[j];\r\n const noteTicks = smoNote.tickCount;\r\n if (curTick + noteTicks >= clefChangeTick) {\r\n smoNote.clef = clefChange;\r\n }\r\n // Remove any redundant clef changes later in the measure\r\n if (curTick + noteTicks > clefChangeTick) {\r\n if (smoNote.clefNote && smoNote.clefNote.clef === clefChange) {\r\n smoNote.clefNote = null;\r\n }\r\n }\r\n curTick += noteTicks;\r\n }\r\n }\r\n }\r\n /**\r\n * @internal\r\n * @returns column mapped parameters, serialized. caller will\r\n * decide if the parameters need to be persisted\r\n */\r\n serializeColumnMapped(): ColumnMappedParams {\r\n //\r\n return {\r\n timeSignature: this.timeSignature.serialize(),\r\n keySignature: this.keySignature,\r\n tempo: this.tempo.serialize()\r\n };\r\n }\r\n getColumnMapped(): ColumnMappedParams {\r\n return {\r\n timeSignature: this.timeSignature,\r\n keySignature: this.keySignature,\r\n tempo: this.tempo\r\n };\r\n }\r\n\r\n /**\r\n * Convert this measure object to a JSON object, recursively serializing all the notes,\r\n * note modifiers, etc.\r\n */\r\n serialize(): SmoMeasureParamsSer {\r\n const params: Partial = { \"ctor\": \"SmoMeasure\" };\r\n let ser = true;\r\n smoSerialize.serializedMergeNonDefault(SmoMeasure.defaults, SmoMeasure.serializableAttributes, this, params);\r\n // Don't serialize default things\r\n const fmt = this.format.serialize();\r\n // measure number can't be defaulted b/c tempos etc. can map to default measure\r\n params.measureNumber = JSON.parse(JSON.stringify(this.measureNumber));\r\n params.tuplets = [];\r\n params.voices = [];\r\n params.modifiers = [];\r\n\r\n this.tuplets.forEach((tuplet) => {\r\n params.tuplets!.push(tuplet.serialize());\r\n });\r\n\r\n this.voices.forEach((voice) => {\r\n const obj: any = {\r\n\r\n notes: []\r\n };\r\n voice.notes.forEach((note) => {\r\n obj.notes.push(note.serialize());\r\n });\r\n params.voices!.push(obj);\r\n });\r\n\r\n this.modifiers.forEach((modifier) => {\r\n ser = true;\r\n /* don't serialize default modifiers */\r\n if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === SmoBarline.positions.start &&\r\n (modifier as SmoBarline).barline === SmoBarline.barlines.singleBar) {\r\n ser = false;\r\n } else if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === SmoBarline.positions.end\r\n && (modifier as SmoBarline).barline === SmoBarline.barlines.singleBar) {\r\n ser = false;\r\n } else if (modifier.ctor === 'SmoTempoText') {\r\n // we don't save tempo text as a modifier anymore\r\n ser = false;\r\n } else if ((modifier as SmoRepeatSymbol).ctor === 'SmoRepeatSymbol' && (modifier as SmoRepeatSymbol).position === SmoRepeatSymbol.positions.start\r\n && (modifier as SmoRepeatSymbol).symbol === SmoRepeatSymbol.symbols.None) {\r\n ser = false;\r\n }\r\n if (ser) {\r\n params.modifiers!.push(modifier.serialize());\r\n }\r\n });\r\n // ['timeSignature', 'keySignature', 'tempo']\r\n if (!isSmoMeasureParamsSer(params)) {\r\n throw 'invalid measure';\r\n }\r\n return params;\r\n }\r\n /**\r\n * restore a serialized measure object. Usually called as part of deserializing a score,\r\n * but can also be used to restore a measure due to an undo operation. Recursively\r\n * deserialize all the notes and modifiers to construct a new measure.\r\n * @param jsonObj the serialized SmoMeasure\r\n * @returns\r\n */\r\n static deserialize(jsonObj: SmoMeasureParamsSer): SmoMeasure {\r\n let j = 0;\r\n let i = 0;\r\n const voices: SmoVoice[] = [];\r\n const noteSum = [];\r\n for (j = 0; j < jsonObj.voices.length; ++j) {\r\n const voice = jsonObj.voices[j];\r\n const notes: SmoNote[] = [];\r\n voices.push({\r\n notes\r\n });\r\n for (i = 0; i < voice.notes.length; ++i) {\r\n const noteParams = voice.notes[i];\r\n const smoNote = SmoNote.deserialize(noteParams);\r\n notes.push(smoNote);\r\n noteSum.push(smoNote);\r\n }\r\n }\r\n\r\n const tuplets = [];\r\n for (j = 0; j < jsonObj.tuplets.length; ++j) {\r\n const tupJson = jsonObj.tuplets[j];\r\n const tupParams = SmoTuplet.defaults;\r\n // Legacy schema had attrs.id, now it is just id\r\n if ((tupJson as any).attrs && (tupJson as any).attrs.id) {\r\n tupParams.id = (tupJson as any).attrs.id;\r\n }\r\n smoSerialize.serializedMerge(SmoTuplet.parameterArray, jsonObj.tuplets[j], tupParams);\r\n const noteAr = noteSum.filter((nn: SmoNote) =>\r\n nn.isTuplet && nn.tupletId === tupParams.id);\r\n\r\n // Bug fix: A tuplet with no notes may be been overwritten\r\n // in a copy/paste operation\r\n if (noteAr.length > 0) {\r\n tupParams.notes = noteAr;\r\n const tuplet = new SmoTuplet(tupParams);\r\n tuplets.push(tuplet);\r\n }\r\n }\r\n\r\n const modifiers: SmoMeasureModifierBase[] = [];\r\n jsonObj.modifiers.forEach((modParams: any) => {\r\n const modifier: SmoMeasureModifierBase = SmoMeasureModifierBase.deserialize(modParams);\r\n modifiers.push(modifier);\r\n });\r\n const params: SmoMeasureParams = SmoMeasure.defaults;\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, jsonObj, params);\r\n\r\n // explode column-mapped\r\n if (jsonObj.tempo) {\r\n params.tempo = SmoTempoText.deserialize(jsonObj.tempo);\r\n } else {\r\n params.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n\r\n // timeSignatureString is now part of timeSignature. upconvert old scores\r\n let timeSignatureString = '';\r\n const jsonLegacy = (jsonObj as any);\r\n if (typeof(jsonLegacy.timeSignatureString) === 'string' && jsonLegacy.timeSignatureString.length > 0) {\r\n timeSignatureString = jsonLegacy.timeSignatureString;\r\n }\r\n if (jsonObj.timeSignature) {\r\n if (timeSignatureString.length) {\r\n jsonObj.timeSignature.displayString = timeSignatureString; \r\n }\r\n params.timeSignature = TimeSignature.deserialize(jsonObj.timeSignature);\r\n } else {\r\n const tparams = TimeSignature.defaults;\r\n if (timeSignatureString.length) {\r\n tparams.displayString = timeSignatureString;\r\n }\r\n params.timeSignature = new TimeSignature(tparams);\r\n }\r\n params.keySignature = jsonObj.keySignature ?? 'C';\r\n params.voices = voices;\r\n params.tuplets = tuplets;\r\n params.modifiers = modifiers;\r\n const rv = new SmoMeasure(params);\r\n // Handle migration for measure-mapped parameters\r\n rv.modifiers.forEach((mod) => {\r\n if (mod.ctor === 'SmoTempoText') {\r\n rv.tempo = (mod as SmoTempoText);\r\n }\r\n });\r\n if (!rv.tempo) {\r\n rv.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the default pitch\r\n * for a clef (appears on 3rd line)\r\n */\r\n static get defaultPitchForClef(): Record {\r\n return {\r\n 'treble': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'bass': {\r\n letter: 'd',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'tenor': {\r\n letter: 'a',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'alto': {\r\n letter: 'c',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'soprano': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'percussion': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'mezzo-soprano': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'baritone-c': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'baritone-f': {\r\n letter: 'e',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'subbass': {\r\n letter: 'd',\r\n accidental: '',\r\n octave: 2\r\n },\r\n 'french': {\r\n letter: 'b',\r\n accidental: '',\r\n octave: 4\r\n } // no idea\r\n };\r\n }\r\n static _emptyMeasureNoteType: NoteType = 'r';\r\n static set emptyMeasureNoteType(tt: NoteType) {\r\n SmoMeasure._emptyMeasureNoteType = tt;\r\n }\r\n static get emptyMeasureNoteType(): NoteType {\r\n return SmoMeasure._emptyMeasureNoteType;\r\n }\r\n static timeSignatureNotes(timeSignature: TimeSignature, clef: Clef) {\r\n const pitch = SmoMeasure.defaultPitchForClef[clef];\r\n const maxTicks = SmoMusic.timeSignatureToTicks(timeSignature.timeSignature);\r\n const noteTick = 8192 / (timeSignature.beatDuration / 2);\r\n let ticks = 0;\r\n const pnotes: SmoNote[] = [];\r\n while (ticks < maxTicks) {\r\n const nextNote = SmoNote.defaults;\r\n nextNote.pitches = [JSON.parse(JSON.stringify(pitch))];\r\n nextNote.noteType = 'r';\r\n nextNote.clef = clef;\r\n nextNote.ticks.numerator = noteTick;\r\n pnotes.push(new SmoNote(nextNote));\r\n ticks += noteTick;\r\n }\r\n if (timeSignature.beatDuration === 8 && (timeSignature.actualBeats % 3 === 0 || timeSignature.actualBeats % 2 !== 0)) {\r\n let ix = 0;\r\n pnotes.forEach((pnote) => {\r\n if ((ix + 1) % 3 === 0) {\r\n pnote.endBeam = true;\r\n }\r\n pnote.beamBeats = 2048 * 3;\r\n ix += 1;\r\n });\r\n }\r\n return pnotes;\r\n }\r\n /**\r\n * Get a measure full of default notes for a given timeSignature/clef.\r\n * returns 8th notes for triple-time meters, etc.\r\n * @param params \r\n * @returns \r\n */\r\n static getDefaultNotes(params: SmoMeasureParams): SmoNote[] {\r\n return SmoMeasure.timeSignatureNotes(new TimeSignature(params.timeSignature), params.clef);\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the defaults from the\r\n * parameters that are passed in, which could be another measure in the score.\r\n * This version returns params with no notes, for callers that want to use their own notes.\r\n * If you want the default notes, see {@link getDefaultMeasureWithNotes}\r\n * \r\n * @param params\r\n * @returns \r\n */\r\n static getDefaultMeasure(params: SmoMeasureParams): SmoMeasure {\r\n const obj: any = {};\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, SmoMeasure.defaults, obj);\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, params, obj);\r\n // Don't copy column-formatting options to new measure in new column\r\n smoSerialize.serializedMerge(SmoMeasure.formattingOptions, SmoMeasure.defaults, obj);\r\n obj.timeSignature = new TimeSignature(params.timeSignature);\r\n // The measure expects to get concert KS in constructor and adjust for instrument. So do the\r\n // opposite.\r\n obj.keySignature = SmoMusic.vexKeySigWithOffset(obj.keySignature, -1 * obj.transposeIndex);\r\n // Don't redisplay tempo for a new measure\r\n const rv = new SmoMeasure(obj);\r\n if (rv.tempo && rv.tempo.display) {\r\n rv.tempo.display = false;\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the defaults from the\r\n * parameters that are passed in, which could be another measure in the score.\r\n * \r\n * @param params \r\n * @returns \r\n */\r\n static getDefaultMeasureWithNotes(params: SmoMeasureParams): SmoMeasure {\r\n var measure = SmoMeasure.getDefaultMeasure(params);\r\n measure.voices.push({\r\n notes: SmoMeasure.getDefaultNotes(params)\r\n });\r\n // fix a bug.\r\n // new measures only have 1 voice, make sure active voice is 0\r\n measure.activeVoice = 0;\r\n return measure;\r\n }\r\n /**\r\n * used by xml export \r\n * @internal\r\n * @param val \r\n */\r\n getForceSystemBreak() {\r\n return this.format.systemBreak;\r\n }\r\n // @internal\r\n setDefaultBarlines() {\r\n if (!this.getStartBarline()) {\r\n this.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.start,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n if (!this.getEndBarline()) {\r\n this.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n }\r\n\r\n get containsSound(): boolean {\r\n let i = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n let j = 0;\r\n const voice = this.voices[i];\r\n for (j = 0; j < this.voices.length; ++j) {\r\n if (voice.notes[j].noteType === 'n') {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * The rendered width of the measure, or estimate of same\r\n */\r\n get staffWidth() {\r\n return this.svg.staffWidth;\r\n }\r\n\r\n /**\r\n * set the rendered width of the measure, or estimate of same\r\n */\r\n setWidth(width: number, description: string) {\r\n if (layoutDebug.flagSet(layoutDebug.values.measureHistory)) {\r\n this.svg.history.push('setWidth ' + this.staffWidth + '=> ' + width + ' ' + description);\r\n }\r\n if (isNaN(width)) {\r\n throw ('NAN in setWidth');\r\n }\r\n this.svg.staffWidth = width;\r\n }\r\n\r\n /**\r\n * Get rendered or estimated start x\r\n */\r\n get staffX(): number {\r\n return this.svg.staffX;\r\n }\r\n\r\n /**\r\n * Set rendered or estimated start x\r\n */\r\n setX(x: number, description: string) {\r\n if (isNaN(x)) {\r\n throw ('NAN in setX');\r\n }\r\n layoutDebug.measureHistory(this, 'staffX', x, description);\r\n this.svg.staffX = Math.round(x);\r\n }\r\n /**\r\n * A time signature has possibly changed. add/remove notes to\r\n * match the new length\r\n */\r\n alignNotesWithTimeSignature() {\r\n const tsTicks = SmoMusic.timeSignatureToTicks(this.timeSignature.timeSignature);\r\n if (tsTicks === this.getMaxTicksVoice()) {\r\n return;\r\n }\r\n const replaceNoteWithDuration = (target: number, ar: SmoNote[], note: SmoNote) => {\r\n const fitNote = new SmoNote(SmoNote.defaults);\r\n const duration = SmoMusic.closestDurationTickLtEq(target);\r\n if (duration > 128) {\r\n fitNote.ticks = { numerator: duration, denominator: 1, remainder: 0 };\r\n fitNote.pitches = note.pitches;\r\n fitNote.noteType = note.noteType;\r\n fitNote.clef = note.clef;\r\n ar.push(fitNote);\r\n }\r\n }\r\n const voices: SmoVoice[] = [];\r\n const tuplets: SmoTuplet[] = [];\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n const newNotes: SmoNote[] = [];\r\n let voiceTicks = 0;\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const note = voice.notes[j];\r\n // if a tuplet, make sure the whole tuplet fits.\r\n if (note.isTuplet) {\r\n const tuplet = this.getTupletForNote(note);\r\n if (tuplet) {\r\n // remaining notes of an approved tuplet, just add them\r\n if (tuplet.startIndex !== j) {\r\n newNotes.push(note);\r\n continue;\r\n }\r\n else if (tuplet.tickCount + voiceTicks <= tsTicks) {\r\n // first note of the tuplet, it fits, add it\r\n voiceTicks += tuplet.tickCount;\r\n newNotes.push(note);\r\n tuplets.push(tuplet);\r\n } else {\r\n // tuplet will not fit. Make a note as close to remainder as possible and add it\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n break;\r\n }\r\n } else { // missing tuplet, now what?\r\n console.warn('missing tuplet info');\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n }\r\n } else {\r\n if (note.tickCount + voiceTicks <= tsTicks) {\r\n newNotes.push(note);\r\n voiceTicks += note.tickCount;\r\n } else {\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n break;\r\n }\r\n }\r\n }\r\n if (tsTicks - voiceTicks > 128) {\r\n const np = SmoNote.defaults;\r\n np.clef = this.clef;\r\n const nnote = new SmoNote(np);\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, nnote);\r\n }\r\n voices.push({ notes: newNotes });\r\n }\r\n this.voices = voices;\r\n this.tuplets = tuplets;\r\n }\r\n get measureNumberDbg(): string {\r\n return `${this.measureNumber.measureIndex}/${this.measureNumber.systemIndex}/${this.measureNumber.staffId}`;\r\n }\r\n /**\r\n * Get rendered or estimated start y\r\n */\r\n get staffY(): number {\r\n return this.svg.staffY;\r\n }\r\n\r\n /**\r\n * Set rendered or estimated start y\r\n */\r\n setY(y: number, description: string) {\r\n if (isNaN(y)) {\r\n throw ('NAN in setY');\r\n }\r\n layoutDebug.measureHistory(this, 'staffY', y, description);\r\n this.svg.staffY = Math.round(y);\r\n }\r\n\r\n /**\r\n * Return actual or estimated highest point in score\r\n */\r\n get yTop(): number {\r\n return this.svg.yTop;\r\n }\r\n /**\r\n * return the lowest y (highest value) in this measure svg\r\n *\r\n * @readonly\r\n */\r\n get lowestY(): number {\r\n if (this.svg.tabStaveBox) {\r\n return this.svg.tabStaveBox.y + this.svg.tabStaveBox.height;\r\n } else {\r\n return this.svg.logicalBox.y + this.svg.logicalBox.height;\r\n }\r\n }\r\n /**\r\n * adjust the y for the render boxes to account for the page and margins\r\n */\r\n adjustY(yOffset: number) {\r\n this.svg.logicalBox.y += yOffset;\r\n if (this.svg.tabStaveBox) {\r\n this.svg.tabStaveBox.y += yOffset;\r\n }\r\n }\r\n /**\r\n * WHen setting an instrument, offset the pitches to match the instrument key\r\n * @param offset \r\n * @param newClef \r\n */\r\n transposeToOffset(offset: number, targetKey: string, newClef?: Clef) {\r\n const diff = offset - this.transposeIndex;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n const pitches: number[] = [...Array(note.pitches.length).keys()];\r\n // when the note is a rest, preserve the rest but match the new clef.\r\n if (newClef && note.noteType === 'r') {\r\n const defp = JSON.parse(JSON.stringify(SmoMeasure.defaultPitchForClef[newClef]));\r\n note.pitches = [defp];\r\n } else {\r\n note.transpose(pitches, diff, this.keySignature, targetKey);\r\n note.getGraceNotes().forEach((gn) => {\r\n const gpitch: number[] = [...Array(gn.pitches.length).keys()];\r\n const xpose = SmoNote.transpose(gn, gpitch, diff, this.keySignature, targetKey);\r\n gn.pitches = xpose.pitches;\r\n });\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * Return actual or estimated highest point in score\r\n */\r\n setYTop(y: number, description: string) {\r\n layoutDebug.measureHistory(this, 'yTop', y, description);\r\n this.svg.yTop = y;\r\n }\r\n\r\n /**\r\n * Return actual or estimated bounding box\r\n */\r\n setBox(box: SvgBox, description: string) {\r\n layoutDebug.measureHistory(this, 'logicalBox', box, description);\r\n this.svg.logicalBox = SvgHelpers.smoBox(box);\r\n }\r\n /**\r\n * @returns the DOM identifier for this measure when rendered\r\n */\r\n getClassId() {\r\n return 'mm-' + this.measureNumber.staffId + '-' + this.measureNumber.measureIndex;\r\n }\r\n /**\r\n * \r\n * @param id \r\n * @returns \r\n */\r\n getRenderedNote(id: string) {\r\n let j = 0;\r\n let i = 0;\r\n for (j = 0; j < this.voices.length; ++j) {\r\n const voice = this.voices[j];\r\n for (i = 0; i < voice.notes.length; ++i) {\r\n const note = voice.notes[i];\r\n if (note.renderId === id) {\r\n return {\r\n smoNote: note,\r\n voice: j,\r\n tick: i\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getNotes() {\r\n return this.voices[this.activeVoice].notes;\r\n }\r\n\r\n getActiveVoice() {\r\n return this.activeVoice;\r\n }\r\n\r\n setActiveVoice(vix: number) {\r\n if (vix >= 0 && vix < this.voices.length) {\r\n this.activeVoice = vix;\r\n }\r\n }\r\n\r\n tickmapForVoice(voiceIx: number) {\r\n return new TickMap(this, voiceIx);\r\n }\r\n\r\n // ### createMeasureTickmaps\r\n // A tickmap is a map of notes to ticks for the measure. It is speciifc per-voice\r\n // since each voice may have different numbers of ticks. The accidental map is\r\n // overall since accidentals in one voice apply to accidentals in the other\r\n // voices. So we return the tickmaps and the overall accidental map.\r\n createMeasureTickmaps(): MeasureTickmaps {\r\n let i = 0;\r\n const tickmapArray: TickMap[] = [];\r\n const accidentalMap: Record> =\r\n {} as Record>;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n tickmapArray.push(this.tickmapForVoice(i));\r\n }\r\n\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const tickmap: TickMap = tickmapArray[i];\r\n const durationKeys: string[] = Object.keys((tickmap.durationAccidentalMap));\r\n\r\n durationKeys.forEach((durationKey: string) => {\r\n if (!accidentalMap[durationKey]) {\r\n accidentalMap[durationKey] = tickmap.durationAccidentalMap[durationKey];\r\n } else {\r\n const amap = accidentalMap[durationKey];\r\n const tickable: Record = tickmap.durationAccidentalMap[durationKey];\r\n const letterKeys: PitchLetter[] = Object.keys(tickable) as Array;\r\n letterKeys.forEach((pitchKey) => {\r\n if (!amap[pitchKey]) {\r\n amap[pitchKey] = tickmap.durationAccidentalMap[durationKey][pitchKey];\r\n }\r\n });\r\n }\r\n });\r\n }\r\n // duration: duration, pitches: Record\r\n const accidentalArray: AccidentalArray[] = [];\r\n Object.keys(accidentalMap).forEach((durationKey) => {\r\n accidentalArray.push({ duration: durationKey, pitches: accidentalMap[durationKey] });\r\n });\r\n return {\r\n tickmaps: tickmapArray,\r\n accidentalMap,\r\n accidentalArray\r\n };\r\n }\r\n // ### createRestNoteWithDuration\r\n // pad some duration of music with rests.\r\n static createRestNoteWithDuration(duration: number, clef: Clef): SmoNote {\r\n const pitch: Pitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[clef]));\r\n const note = new SmoNote(SmoNote.defaults);\r\n note.pitches = [pitch];\r\n note.noteType = 'r';\r\n note.hidden = true;\r\n note.ticks = { numerator: duration, denominator: 1, remainder: 0 };\r\n return note;\r\n }\r\n\r\n /**\r\n * Count the number of ticks in each voice and return max\r\n * @returns \r\n */\r\n getMaxTicksVoice() {\r\n let i = 0;\r\n let max = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const voiceTicks = this.getTicksFromVoice(i);\r\n max = Math.max(voiceTicks, max);\r\n }\r\n return max;\r\n }\r\n\r\n /**\r\n * Count the number of ticks in a specific voice\r\n * @param voiceIndex \r\n * @returns \r\n */\r\n getTicksFromVoice(voiceIndex: number): number {\r\n let ticks = 0;\r\n this.voices[voiceIndex].notes.forEach((note) => {\r\n ticks += note.tickCount;\r\n });\r\n return ticks;\r\n }\r\n\r\n getClosestTickCountIndex(voiceIndex: number, tickCount: number): number {\r\n let i = 0;\r\n let rv = 0;\r\n for (i = 0; i < this.voices[voiceIndex].notes.length; ++i) {\r\n const note = this.voices[voiceIndex].notes[i];\r\n if (note.tickCount + rv > tickCount) {\r\n return rv;\r\n }\r\n rv += note.tickCount;\r\n }\r\n return rv;\r\n }\r\n\r\n isPickup(): boolean {\r\n const ticks = this.getTicksFromVoice(0);\r\n const goal = SmoMusic.timeSignatureToTicks(this.timeSignature.timeSignature);\r\n return (ticks < goal);\r\n }\r\n\r\n clearBeamGroups() {\r\n this.beamGroups = [];\r\n }\r\n\r\n // ### updateLyricFont\r\n // Update the lyric font, which is the same for all lyrics.\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setLyricFont(fontInfo);\r\n });\r\n });\r\n }\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n });\r\n }\r\n\r\n // ### updateLyricFont\r\n // Update the lyric font, which is the same for all lyrics.\r\n setChordFont(fontInfo: FontInfo) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setChordFont(fontInfo);\r\n });\r\n });\r\n }\r\n\r\n // ### tuplet methods.\r\n //\r\n // #### tupletNotes\r\n tupletNotes(tuplet: SmoTuplet) {\r\n let j = 0;\r\n let i = 0;\r\n const tnotes = [];\r\n for (j = 0; j < this.voices.length; ++j) {\r\n const vnotes = this.voices[j].notes;\r\n for (i = 0; i < vnotes.length; ++i) {\r\n const note = vnotes[i] as SmoNote;\r\n if (note.tupletId && note.tupletId === tuplet.id) {\r\n tnotes.push(vnotes[i]);\r\n }\r\n }\r\n }\r\n return tnotes;\r\n }\r\n\r\n // #### tupletIndex\r\n // return the index of the given tuplet\r\n tupletIndex(tuplet: SmoTuplet) {\r\n let j = 0;\r\n let i = 0;\r\n for (j = 0; j < this.voices.length; ++j) {\r\n const notes = this.voices[j].notes;\r\n for (i = 0; i < notes.length; ++i) {\r\n const note = notes[i] as SmoNote;\r\n if (note.tupletId && note.tupletId === tuplet.id) {\r\n return i;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n // #### getTupletForNote\r\n // Finds the tuplet for a given note, or null if there isn't one.\r\n getTupletForNote(note: SmoNote | null): SmoTuplet | null {\r\n let i = 0;\r\n if (!note) {\r\n return null;\r\n }\r\n if (!note.isTuplet) {\r\n return null;\r\n }\r\n for (i = 0; i < this.tuplets.length; ++i) {\r\n const tuplet = this.tuplets[i];\r\n if (typeof(note.tupletId) === 'string' && note.tupletId === tuplet.id) {\r\n return tuplet;\r\n }\r\n }\r\n return null;\r\n }\r\n getNoteById(id: string): SmoNote | null {\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const note = voice.notes[j];\r\n if (note.attrs.id === id) {\r\n return note;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n removeTupletForNote(note: SmoNote) {\r\n let i = 0;\r\n const tuplets = [];\r\n for (i = 0; i < this.tuplets.length; ++i) {\r\n const tuplet = this.tuplets[i];\r\n if (typeof(note.tupletId) === 'string' && note.tupletId !== tuplet.id) {\r\n tuplets.push(tuplet);\r\n }\r\n }\r\n this.tuplets = tuplets;\r\n }\r\n setClef(clef: Clef) {\r\n const oldClef = this.clef;\r\n this.clef = clef;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.clef = clef;\r\n });\r\n });\r\n }\r\n /**\r\n * Get the clef that this measure ends with.\r\n * @returns \r\n */\r\n getLastClef() {\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const note = voice.notes[j];\r\n if (note.clefNote && note.clefNote.clef !== this.clef) {\r\n return note.clefNote.clef;\r\n }\r\n }\r\n }\r\n return this.clef;\r\n }\r\n isRest() {\r\n let i = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n if (!voice.notes[j].isRest()) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n // ### populateVoice\r\n // Create a new voice in this measure, and populate it with the default note\r\n // for this measure/key/clef\r\n populateVoice(index: number) {\r\n if (index !== this.voices.length) {\r\n return;\r\n }\r\n this.voices.push({ notes: SmoMeasure.getDefaultNotes(this) });\r\n this.activeVoice = index;\r\n }\r\n private _removeSingletonModifier(name: string) {\r\n const ar = this.modifiers.filter(obj => obj.attrs.type !== name);\r\n this.modifiers = ar;\r\n }\r\n\r\n addRehearsalMark(parameters: SmoRehearsalMarkParams) {\r\n this._removeSingletonModifier('SmoRehearsalMark');\r\n this.modifiers.push(new SmoRehearsalMark(parameters));\r\n }\r\n removeRehearsalMark() {\r\n this._removeSingletonModifier('SmoRehearsalMark');\r\n }\r\n getRehearsalMark(): SmoMeasureModifierBase | undefined {\r\n return this.modifiers.find(obj => obj.attrs.type === 'SmoRehearsalMark');\r\n }\r\n getModifiersByType(type: string) {\r\n return this.modifiers.filter((mm) => type === mm.attrs.type);\r\n }\r\n\r\n setTempo(params: SmoTempoTextParams) {\r\n this.tempo = new SmoTempoText(params);\r\n }\r\n /**\r\n * Set measure tempo to the default {@link SmoTempoText}\r\n */\r\n resetTempo() {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n getTempo() {\r\n if (typeof (this.tempo) === 'undefined') {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n return this.tempo;\r\n }\r\n /**\r\n * Measure text is deprecated, and may not be supported in the future.\r\n * Better to use SmoTextGroup and attach to the measure.\r\n * @param mod \r\n * @returns \r\n */\r\n addMeasureText(mod: SmoMeasureModifierBase) {\r\n var exist = this.modifiers.filter((mm) =>\r\n mm.attrs.id === mod.attrs.id\r\n );\r\n if (exist.length) {\r\n return;\r\n }\r\n this.modifiers.push(mod);\r\n }\r\n\r\n getMeasureText() {\r\n return this.modifiers.filter(obj => obj.ctor === 'SmoMeasureText');\r\n }\r\n\r\n removeMeasureText(id: string) {\r\n var ar = this.modifiers.filter(obj => obj.attrs.id !== id);\r\n this.modifiers = ar;\r\n }\r\n\r\n setRepeatSymbol(rs: SmoRepeatSymbol) {\r\n const ar: SmoMeasureModifierBase[] = [];\r\n let toAdd = true;\r\n const exSymbol = this.getRepeatSymbol();\r\n if (exSymbol && exSymbol.symbol === rs.symbol) {\r\n toAdd = false;\r\n }\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoRepeatSymbol') {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n if (toAdd) {\r\n ar.push(rs);\r\n }\r\n }\r\n getRepeatSymbol(): SmoRepeatSymbol | null {\r\n const rv = this.modifiers.filter(obj => obj.ctor === 'SmoRepeatSymbol');\r\n if (rv.length > 0) {\r\n return rv[0] as SmoRepeatSymbol;\r\n }\r\n return null;\r\n }\r\n clearRepeatSymbols() {\r\n const ar: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoRepeatSymbol') {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n }\r\n\r\n setBarline(barline: SmoBarline) {\r\n var ar: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoBarline') {\r\n const o = modifier as SmoBarline;\r\n if (o.position !== barline.position) {\r\n ar.push(o);\r\n }\r\n } else {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n ar.push(barline);\r\n }\r\n\r\n private _getBarline(pos: number): SmoBarline {\r\n let rv = null;\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === pos) {\r\n rv = modifier;\r\n }\r\n });\r\n if (rv === null) {\r\n return new SmoBarline(SmoBarline.defaults);\r\n }\r\n return rv;\r\n }\r\n\r\n getEndBarline(): SmoBarline { \r\n return this._getBarline(SmoBarline.positions.end);\r\n }\r\n getStartBarline(): SmoBarline {\r\n return this._getBarline(SmoBarline.positions.start);\r\n }\r\n\r\n addNthEnding(ending: SmoVolta) {\r\n const mods = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoVolta' || (modifier as SmoVolta).startBar !== ending.startBar ||\r\n (modifier as SmoVolta).endBar !== ending.endBar) {\r\n mods.push(modifier);\r\n }\r\n });\r\n mods.push(ending);\r\n this.modifiers = mods;\r\n }\r\n\r\n removeNthEnding(ending: SmoVolta) {\r\n const mods: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoVolta') {\r\n const volta = modifier as SmoVolta;\r\n if (ending.startSelector === null || ending.endSelector === null || volta.startSelector === null || volta.endSelector === null) {\r\n return;\r\n }\r\n if (!SmoSelector.sameMeasure(ending.startSelector, volta.startSelector) || !SmoSelector.sameMeasure(ending.endSelector, volta.endSelector)\r\n && ending.number !== volta.number) {\r\n mods.push(modifier);\r\n }\r\n } else {\r\n mods.push(modifier);\r\n }\r\n });\r\n this.modifiers = mods;\r\n }\r\n\r\n getNthEndings(): SmoVolta[] {\r\n const rv: SmoVolta[] = [];\r\n this.modifiers.forEach((modifier: SmoMeasureModifierBase) => {\r\n if (modifier.ctor === 'SmoVolta') {\r\n rv.push(modifier as SmoVolta);\r\n }\r\n });\r\n return rv;\r\n }\r\n setKeySignature(sig: string) {\r\n this.keySignature = sig;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.keySignature = sig;\r\n });\r\n });\r\n }\r\n setMeasureNumber(num: MeasureNumber) {\r\n this.measureNumber = num;\r\n }\r\n getBeamGroupForNote(note: SmoNote) {\r\n let i = 0;\r\n let j = 0;\r\n for (i = 0; i < this.beamGroups.length; ++i) {\r\n const bg = this.beamGroups[i];\r\n for (j = 0; j < bg.notes.length; ++j) {\r\n if (bg.notes[j].attrs.id === note.attrs.id) {\r\n return bg;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * @module /smo/data/measureModifiers\r\n * **/\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMusic } from './music';\r\nimport { SmoAttrs, MeasureNumber, SmoObjectParams, SvgBox, SmoModifierBase, getId } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\n\r\n/**\r\n * Measure modifiers are attached to the measure itself. Each instance has a\r\n * `serialize()` method and a `ctor` attribute for deserialization.\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoMeasureModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n logicalBox: SvgBox | null = null;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n static deserialize(jsonObj: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n abstract serialize(): any;\r\n}\r\n\r\nexport type SmoMeasureFormatNumberAttributes = 'customStretch' | 'proportionality' | 'padLeft' | 'measureIndex';\r\nexport const SmoMeasureFormatNumberKeys: SmoMeasureFormatNumberAttributes[] =\r\n ['customStretch', 'proportionality', 'padLeft', 'measureIndex'];\r\nexport type SmoMeasueFormatBooleanAttributes = 'autoJustify' | 'systemBreak' | 'skipMeasureCount' | 'pageBreak' | 'padAllInSystem' | 'restBreak' | 'forceRest';\r\nexport const SmoMeasureFormatBooleanKeys: SmoMeasueFormatBooleanAttributes[] = ['autoJustify','skipMeasureCount', 'systemBreak', 'pageBreak', 'padAllInSystem', 'restBreak', 'forceRest'];\r\n/**\r\n * Constructor parameter for measure formatting object\r\n */\r\nexport interface SmoMeasureFormatParams {\r\n /**\r\n * additional pixels to a measure (plus or minus)\r\n */\r\n customStretch: number | null,\r\n /**\r\n * softmax factor, controls how tightly rhythms are formatted\r\n */\r\n proportionality: number | null,\r\n /**\r\n * break justification for this column\r\n */\r\n autoJustify: boolean | null,\r\n /**\r\n * create a new system before this measure\r\n */\r\n systemBreak: boolean | null,\r\n /**\r\n * create a new system before this page\r\n */\r\n pageBreak: boolean | null,\r\n /**\r\n * force a break in multi-measure rest\r\n */\r\n restBreak: boolean | null,\r\n /**\r\n * treat this measure like a whole rest\r\n */\r\n forceRest: boolean | null,\r\n /**\r\n * if score is grouping measures per system, skip this measure in the count\r\n * (used for short measures, or pickups)\r\n */\r\n skipMeasureCount: boolean | null,\r\n /**\r\n * pad left, e.g. for the first stave in a system\r\n */\r\n padLeft: number | null,\r\n /**\r\n * if padding left, pad all the measures in the column\r\n */\r\n padAllInSystem: boolean | null,\r\n /**\r\n * renumber measures\r\n */\r\n measureIndex: number | null,\r\n}\r\n/**\r\n * Serialization for measure formatting customization, like system break\r\n * @category serialization\r\n */\r\nexport interface SmoMeasureFormatParamsSer extends SmoMeasureFormatParams{\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string\r\n }\r\n function isSmoMeasureParamsSer(params: Partial):params is SmoMeasureFormatParamsSer {\r\n return typeof(params.ctor) === 'string';\r\n }\r\n/**\r\n * ISmoMeasureFormatMgr is the DI interface to the\r\n * format manager. Measure formats are often the same to multiple measures\r\n * so we don't serialize each one - instead we map them with this interface\r\n */\r\nexport interface ISmoMeasureFormatMgr {\r\n format: SmoMeasureFormatParams,\r\n measureNumber: MeasureNumber\r\n}\r\n/**\r\n * Measure format holds parameters about the automatic formatting of the measure itself, such as the witch and\r\n * how the durations are proportioned. Note that measure formatting is also controlled by the justification\r\n * between voices and staves. For instance, 2 measures in different staves will have to have the same width\r\n * @category SmoModifier\r\n */\r\nexport class SmoMeasureFormat extends SmoMeasureModifierBase implements SmoMeasureFormatParams {\r\n static get attributes() {\r\n return ['customStretch', 'proportionality', 'autoJustify', 'systemBreak', 'pageBreak', \r\n 'padLeft', 'measureIndex', 'padAllInSystem', 'skipMeasureCount', 'restBreak', 'forceRest'];\r\n }\r\n static get formatAttributes() {\r\n return ['customStretch', 'skipMeasureCount', 'proportionality', 'autoJustify', 'systemBreak', 'pageBreak', 'padLeft'];\r\n }\r\n static get defaultProportionality() {\r\n return 0;\r\n }\r\n static get legacyProportionality() {\r\n return 0;\r\n }\r\n static fromLegacyMeasure(measure: any) {\r\n const o: any = {};\r\n SmoMeasureFormat.formatAttributes.forEach((attr: string | number) => {\r\n if (typeof (measure[attr]) !== 'undefined') {\r\n o[attr] = measure[attr];\r\n } else {\r\n const rhs = (SmoMeasureFormat.defaults as any)[attr];\r\n o[attr] = rhs;\r\n }\r\n o.measureIndex = measure.measureNumber.measureIndex;\r\n });\r\n return new SmoMeasureFormat(o);\r\n }\r\n static get defaults(): SmoMeasureFormatParams {\r\n return JSON.parse(JSON.stringify({\r\n customStretch: 0,\r\n proportionality: SmoMeasureFormat.defaultProportionality,\r\n systemBreak: false,\r\n pageBreak: false,\r\n restBreak: false,\r\n forceRest: false,\r\n padLeft: 0,\r\n padAllInSystem: true,\r\n skipMeasureCount: false,\r\n autoJustify: true,\r\n measureIndex: 0,\r\n }));\r\n }\r\n customStretch: number = SmoMeasureFormat.defaultProportionality;\r\n proportionality: number = 0;\r\n systemBreak: boolean = false;\r\n pageBreak: boolean = false;\r\n restBreak: boolean = false;\r\n skipMeasureCount: boolean = false;\r\n forceRest: boolean = false;\r\n padLeft: number = 0;\r\n padAllInSystem: boolean = true;\r\n autoJustify: boolean = true;\r\n measureIndex: number = 0;\r\n eq(o: SmoMeasureFormatParams) {\r\n let rv = true;\r\n SmoMeasureFormatBooleanKeys.forEach((attr) => {\r\n if (o[attr] !== this[attr]) {\r\n rv = false;\r\n }\r\n });\r\n SmoMeasureFormatNumberKeys.forEach((attr) => {\r\n if (o[attr] !== this[attr] && attr !== 'measureIndex') {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n get isDefault() {\r\n return this.eq(SmoMeasureFormat.defaults);\r\n }\r\n constructor(parameters: SmoMeasureFormatParams) {\r\n super('SmoMeasureFormat');\r\n const def = SmoMeasureFormat.defaults;\r\n SmoMeasureFormatNumberKeys.forEach((param) => {\r\n this[param] = parameters[param] ? parameters[param] : (def as any)[param];\r\n });\r\n SmoMeasureFormatBooleanKeys.forEach((param) => {\r\n this[param] = parameters[param] ? parameters[param] : (def as any)[param];\r\n });\r\n }\r\n formatMeasure(mm: ISmoMeasureFormatMgr) {\r\n mm.format = new SmoMeasureFormat(this);\r\n mm.format.measureIndex = mm.measureNumber.measureIndex;\r\n }\r\n serialize(): SmoMeasureFormatParamsSer {\r\n const params: Partial = { ctor: 'SmoMeasureFormat' };\r\n smoSerialize.serializedMergeNonDefault(SmoMeasureFormat.defaults, SmoMeasureFormat.attributes, this, params);\r\n if (!isSmoMeasureParamsSer(params)) {\r\n throw('bad type SmoMeasureFormatParamsSer');\r\n }\r\n return params;\r\n }\r\n}\r\n/**\r\n * Used to create a {@link SmoBarline}\r\n */\r\nexport interface SmoBarlineParams {\r\n position: number | null,\r\n barline: number | null\r\n}\r\n\r\nexport interface SmoBarlineParamsSer extends SmoBarlineParams {\r\n ctor: string,\r\n position: number | null,\r\n barline: number | null\r\n}\r\n/**\r\n * Barline is just that, there is a start and end in each measure, which defaults to 'single'.\r\n * @category SmoModifier\r\n */\r\nexport class SmoBarline extends SmoMeasureModifierBase {\r\n static readonly positions: Record = {\r\n start: 0,\r\n end: 1\r\n };\r\n\r\n static readonly barlines: Record = {\r\n singleBar: 0,\r\n doubleBar: 1,\r\n endBar: 2,\r\n startRepeat: 3,\r\n endRepeat: 4,\r\n noBar: 5\r\n }\r\n\r\n static get _barlineToString() {\r\n return ['singleBar', 'doubleBar', 'endBar', 'startRepeat', 'endRepeat', 'noBar'];\r\n }\r\n static barlineString(inst: SmoBarline) {\r\n return SmoBarline._barlineToString[inst.barline];\r\n }\r\n\r\n static get defaults(): SmoBarlineParams {\r\n return JSON.parse(JSON.stringify({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n\r\n static get attributes() {\r\n return ['position', 'barline'];\r\n }\r\n serialize(): SmoBarlineParamsSer {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoBarline.defaults, SmoBarline.attributes, this, params);\r\n params.ctor = 'SmoBarline';\r\n return params;\r\n }\r\n constructor(parameters: SmoBarlineParams | null) {\r\n super('SmoBarline');\r\n let ops = parameters as any;\r\n if (typeof (parameters) === 'undefined' || parameters === null) {\r\n ops = {};\r\n }\r\n smoSerialize.serializedMerge(SmoBarline.attributes, SmoBarline.defaults, this);\r\n smoSerialize.serializedMerge(SmoBarline.attributes, ops, this);\r\n }\r\n barline: number = SmoBarline.barlines.singleBar;\r\n position: number = SmoBarline.positions.start;\r\n}\r\n\r\n/**\r\n * Constructor for SmoRepeatSymbol\r\n */\r\nexport interface SmoRepeatSymbolParams {\r\n /**\r\n * The symbol enumeration\r\n */\r\n symbol: number,\r\n /**\r\n * x offset for DC, sign etc.\r\n */\r\n xOffset: number,\r\n /**\r\n * y offset for DC, sign etc.\r\n */\r\n yOffset: number,\r\n /**\r\n * position, above or below\r\n */\r\n position: number\r\n}\r\n\r\n/**\r\n * @category serialization\r\n */\r\nexport interface SmoRepeatSymbolParamsSer extends SmoRepeatSymbolParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string\r\n}\r\nfunction isSmoRepeatSymbolParamsSer(params: Partial):params is SmoRepeatSymbolParamsSer {\r\n return typeof(params.ctor) === 'string' && params.ctor === 'SmoRepeatSymbol';\r\n }\r\n/**\r\n * Repeat symbols like DC, Fine etc. Note: voltas are their own thing,\r\n * and repeats are types of barlines.\r\n * @category SmoModifier\r\n */\r\nexport class SmoRepeatSymbol extends SmoMeasureModifierBase {\r\n static readonly symbols: Record = {\r\n None: 0,\r\n Coda: 1,\r\n Segno: 2,\r\n Dc: 3,\r\n ToCoda: 1,\r\n DcAlCoda: 4,\r\n DcAlFine: 5,\r\n Ds: 6,\r\n DsAlCoda: 7,\r\n DsAlFine: 8,\r\n Fine: 9\r\n }\r\n\r\n static readonly defaultXOffset: number[] = [0, 0, 0, -20, -60, -60, -50, -60, -50, -40]\r\n\r\n static readonly positions: Record = {\r\n start: 0,\r\n end: 1\r\n }\r\n static get defaults(): SmoRepeatSymbolParams {\r\n return JSON.parse(JSON.stringify({\r\n symbol: SmoRepeatSymbol.symbols.Coda,\r\n xOffset: 0,\r\n yOffset: 30,\r\n position: SmoRepeatSymbol.positions.end\r\n }));\r\n }\r\n static get attributes() {\r\n return ['symbol', 'xOffset', 'yOffset', 'position'];\r\n }\r\n symbol: number = SmoRepeatSymbol.symbols.Coda;\r\n xOffset: number = 0;\r\n yOffset: number = 30;\r\n position: number = SmoRepeatSymbol.positions.end;\r\n\r\n serialize(): SmoRepeatSymbolParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoRepeatSymbol.defaults, SmoRepeatSymbol.attributes, this, params);\r\n params.ctor = 'SmoRepeatSymbol';\r\n if (!isSmoRepeatSymbolParamsSer(params)) {\r\n throw 'bad type SmoRepeatSymbolParamsSer';\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoRepeatSymbolParams) {\r\n super('SmoRepeatSymbol');\r\n if (!parameters.symbol) {\r\n parameters.symbol = SmoRepeatSymbol.symbols.Coda;\r\n }\r\n smoSerialize.serializedMerge(SmoRepeatSymbol.attributes, SmoRepeatSymbol.defaults, this);\r\n this.xOffset = SmoRepeatSymbol.defaultXOffset[parameters.symbol];\r\n smoSerialize.serializedMerge(SmoRepeatSymbol.attributes, parameters, this);\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link SmoVolta} (2nd ending)\r\n * @category SmoParameters\r\n */\r\nexport interface SmoVoltaParams {\r\n /**\r\n * start bar of ending\r\n */\r\n startBar: number,\r\n /**\r\n * end bar (how long it stretches)\r\n */\r\n endBar: number,\r\n /**\r\n * xoffset for start, for collisions\r\n */\r\n xOffsetStart: number,\r\n /**\r\n * xoffset for end, for collisions\r\n */\r\n xOffsetEnd: number,\r\n /**\r\n * yOffset, for collisions\r\n */\r\n yOffset: number,\r\n /**\r\n * 2nd ending, 3rd etc.\r\n */\r\n number: number\r\n}\r\n/**\r\n * serializable bits of volta/endings\r\n * @category serialization\r\n */\r\nexport interface SmoVoltaParamsSer extends SmoVoltaParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Voltas (2nd endings) behave more like staff modifiers, but they are associated with the measure\r\n * since each measure has it's own rules for displaying part of the volta.\r\n * @category SmoModifier\r\n */\r\nexport class SmoVolta extends SmoMeasureModifierBase {\r\n startBar: number = 1;\r\n endBar: number = 1;\r\n xOffsetStart: number = 0;\r\n xOffsetEnd: number = 0;\r\n yOffset: number = 20;\r\n number: number = 1;\r\n endingId: string | null = null;\r\n startSelector: SmoSelector | null = null;\r\n endSelector: SmoSelector | null = null;\r\n elements: SVGSVGElement[] = [];\r\n constructor(parameters: SmoVoltaParams) {\r\n super('SmoVolta');\r\n smoSerialize.serializedMerge(SmoVolta.attributes, SmoVolta.defaults, this);\r\n smoSerialize.serializedMerge(SmoVolta.attributes, parameters, this);\r\n }\r\n get id() {\r\n return this.attrs.id;\r\n }\r\n get type() {\r\n return this.attrs.type;\r\n }\r\n static get attributes() {\r\n return ['startBar', 'endBar', 'endingId', 'startSelector', 'endSelector', 'xOffsetStart', 'xOffsetEnd', 'yOffset', 'number'];\r\n }\r\n static get editableAttributes() {\r\n return ['xOffsetStart', 'xOffsetEnd', 'yOffset', 'number'];\r\n }\r\n\r\n serialize(): SmoVoltaParamsSer {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoVolta.defaults, SmoVolta.attributes, this, params);\r\n params.ctor = 'SmoVolta';\r\n return params;\r\n }\r\n static get defaults(): SmoVoltaParams {\r\n return JSON.parse(JSON.stringify({\r\n startBar: 1,\r\n endBar: 1,\r\n xOffsetStart: 0,\r\n xOffsetEnd: 0,\r\n yOffset: 20,\r\n number: 1\r\n }));\r\n }\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoMeasureText}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoMeasureTextParams {\r\n position: number,\r\n fontInfo: FontInfo,\r\n text: string,\r\n adjustX: number,\r\n adjustY: number,\r\n justification: number\r\n}\r\n/**\r\n * Serialized fields of SmoMeasureTextParams\r\n */\r\nexport interface SmoMeasureTextParamsSer extends SmoMeasureTextParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string\r\n}\r\n/**\r\n * Measure text is just that. Now that score text can be associated with musical elements, this\r\n * class has falled into disrepair. It may be used for part notations in the score later.\r\n * @category SmoModifier\r\n */\r\nexport class SmoMeasureText extends SmoMeasureModifierBase {\r\n static readonly positions: Record = {\r\n above: 0, below: 1, left: 2, right: 3, none: 4\r\n }\r\n\r\n static readonly justifications: Record = {\r\n left: 0, right: 1, center: 2\r\n }\r\n\r\n static readonly _positionToString: string[] = ['above', 'below', 'left', 'right']\r\n\r\n static get attributes() {\r\n return ['position', 'fontInfo', 'text', 'adjustX', 'adjustY', 'justification'];\r\n }\r\n\r\n static readonly defaults: SmoMeasureTextParams = {\r\n position: SmoMeasureText.positions.above,\r\n fontInfo: {\r\n size: 9,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n text: 'Smo',\r\n adjustX: 0,\r\n adjustY: 0,\r\n justification: SmoMeasureText.justifications.center\r\n }\r\n justification: number = SmoMeasureText.justifications.center;\r\n position: number = SmoMeasureText.positions.above;\r\n text: string = '';\r\n adjustX: number = 0;\r\n adjustY: number = 0;\r\n fontInfo: FontInfo = {\r\n size: 9,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n serialize(): SmoMeasureTextParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoMeasureText.defaults, SmoMeasureText.attributes, this, params);\r\n params.ctor = 'SmoMeasureText';\r\n return params as SmoMeasureTextParamsSer; // trivial class, no 'is'\r\n }\r\n constructor(parameters: SmoMeasureTextParams | null) {\r\n super('SmoMeasureText');\r\n let pobj = parameters as any;\r\n if (pobj === null) {\r\n pobj = SmoMeasureText.defaults;\r\n }\r\n smoSerialize.serializedMerge(SmoMeasureText.attributes, SmoMeasureText.defaults, this);\r\n smoSerialize.serializedMerge(SmoMeasureText.attributes, pobj, this);\r\n\r\n // right-justify left text and left-justify right text by default\r\n if (!pobj.justification) {\r\n // eslint-disable-next-line\r\n this.justification = (this.position === SmoMeasureText.positions.left) ? SmoMeasureText.justifications.right :\r\n (this.position === SmoMeasureText.positions.right ? SmoMeasureText.justifications.left : this.justification);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Used to construct {@link SmoRehearsalMark}\r\n * @category SmoParams\r\n * */\r\nexport interface SmoRehearsalMarkParams {\r\n /**\r\n * cardinal position\r\n */\r\n position: number,\r\n /**\r\n * Symbol. by default, letters that auto-increment\r\n */\r\n symbol: string,\r\n /**\r\n * future, define how increment works\r\n */\r\n cardinality: string,\r\n /**\r\n * disable to make your own symbols for each new one.\r\n */\r\n increment: boolean\r\n}\r\n\r\n/**\r\n * Serialized fields for rehearsal mark\r\n * @category serialization\r\n */\r\nexport interface SmoRehearsalMarkParamsSer extends SmoRehearsalMarkParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Rehearsal marks are some type of auto-incrementing markers on a measure index.\r\n * @category SmoModifier\r\n */\r\nexport class SmoRehearsalMark extends SmoMeasureModifierBase {\r\n static readonly cardinalities: Record = {\r\n capitals: 'capitals', lowerCase: 'lowerCase', numbers: 'numbers'\r\n }\r\n static readonly positions: Record = {\r\n above: 0, below: 1, left: 2, right: 3\r\n }\r\n\r\n static get _positionToString(): string[] {\r\n return ['above', 'below', 'left', 'right'];\r\n }\r\n\r\n // TODO: positions don't work.\r\n static get defaults(): SmoRehearsalMarkParams {\r\n return JSON.parse(JSON.stringify({\r\n position: SmoRehearsalMark.positions.above,\r\n cardinality: SmoRehearsalMark.cardinalities.capitals,\r\n symbol: 'A',\r\n increment: true\r\n }));\r\n }\r\n static get attributes() {\r\n return ['cardinality', 'symbol', 'position', 'increment'];\r\n }\r\n position: number = SmoRehearsalMark.positions.above;\r\n cardinality: string = SmoRehearsalMark.cardinalities.capitals;\r\n symbol: string = 'A';\r\n increment: boolean = true;\r\n\r\n getIncrement() {\r\n if (this.cardinality !== 'number') {\r\n const code = this.symbol.charCodeAt(0) + 1;\r\n const symbol = String.fromCharCode(code);\r\n return symbol;\r\n } else {\r\n return (parseInt(this.symbol, 10) + 1).toString();\r\n }\r\n }\r\n getInitial() {\r\n // eslint-disable-next-line\r\n return this.cardinality === SmoRehearsalMark.cardinalities.capitals ? 'A' :\r\n (this.cardinality === SmoRehearsalMark.cardinalities.lowerCase ? 'a' : '1');\r\n }\r\n serialize(): SmoRehearsalMarkParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoRehearsalMark.defaults, SmoRehearsalMark.attributes, this, params);\r\n params.ctor = 'SmoRehearsalMark';\r\n return params as SmoRehearsalMarkParamsSer;\r\n }\r\n constructor(parameters: SmoRehearsalMarkParams) {\r\n super('SmoRehearsalMark');\r\n let pobj = parameters;\r\n if (typeof (pobj) === 'undefined' || pobj === null) {\r\n pobj = SmoRehearsalMark.defaults;\r\n }\r\n smoSerialize.serializedMerge(SmoRehearsalMark.attributes, SmoRehearsalMark.defaults, this);\r\n smoSerialize.serializedMerge(SmoRehearsalMark.attributes, pobj, this);\r\n if (!pobj.symbol) {\r\n this.symbol = this.getInitial();\r\n }\r\n }\r\n}\r\n\r\nexport type SmoTempoNumberAttribute = 'bpm' | 'beatDuration' | 'yOffset';\r\nexport type SmoTempoStringAttribute = 'tempoMode' | 'tempoText' | 'customText';\r\nexport type SmoTempoBooleanAttribute = 'display';\r\n\r\nexport type SmoTempoMode = 'duration' | 'text' | 'custom';\r\n/**\r\n * constructor parameters for {@link SmoTempoText}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTempoTextParams {\r\n /**\r\n * text (e.g. Allegro) or bpm\r\n */\r\n tempoMode: string,\r\n /**\r\n * playback bpm\r\n */\r\n bpm: number,\r\n /**\r\n * note type for a metronome beat\r\n */\r\n beatDuration: number,\r\n /**\r\n * if text mode, the text\r\n */\r\n tempoText: string,\r\n /**\r\n * move the text to keep it from colliding with other things\r\n */\r\n yOffset: number,\r\n /**\r\n * indicate if we are displaying, false if only affects playback\r\n */\r\n display: boolean,\r\n /**\r\n * text taht is not a standards notation\r\n */\r\n customText: string\r\n}\r\n/**\r\n * serialized tempo parameters\r\n * @category serialization\r\n */\r\nexport interface SmoTempoTextParamsSer extends SmoTempoTextParams {\r\n ctor: string;\r\n}\r\nexport interface VexTempoTextParams {\r\n duration?: string, dots?: number, bpm?: number, name?: string \r\n}\r\n\r\n/**\r\n * Information about both playback tempo and how the tempo is notated.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTempoText extends SmoMeasureModifierBase implements SmoTempoTextParams {\r\n static get tempoModes(): Record {\r\n return {\r\n durationMode: 'duration',\r\n textMode: 'text',\r\n customMode: 'custom'\r\n };\r\n }\r\n static get tempoTexts(): Record {\r\n return {\r\n larghissimo: 'Larghissimo',\r\n grave: 'Grave',\r\n lento: 'Lento',\r\n largo: 'Largo',\r\n larghetto: 'Larghetto',\r\n adagio: 'Adagio',\r\n adagietto: 'Adagietto',\r\n andante_moderato: 'Andante moderato',\r\n andante: 'Andante',\r\n andantino: 'Andantino',\r\n moderator: 'Moderato',\r\n allegretto: 'Allegretto',\r\n allegro: 'Allegro',\r\n vivace: 'Vivace',\r\n presto: 'Presto',\r\n prestissimo: 'Prestissimo'\r\n };\r\n }\r\n\r\n /**\r\n * create defaults for tempo initialization\r\n */\r\n static get defaults(): SmoTempoTextParams {\r\n return JSON.parse(JSON.stringify({\r\n tempoMode: SmoTempoText.tempoModes.durationMode,\r\n bpm: 120,\r\n beatDuration: 4096,\r\n tempoText: SmoTempoText.tempoTexts.allegro,\r\n yOffset: 0,\r\n display: false,\r\n customText: ''\r\n }));\r\n }\r\n static get attributes() {\r\n return ['tempoMode', 'bpm', 'display', 'beatDuration', 'tempoText', 'yOffset', 'customText'];\r\n }\r\n tempoMode: SmoTempoMode = SmoTempoText.tempoModes.durationMode\r\n bpm: number = 120;\r\n beatDuration: number = 4096;\r\n tempoText: string = 'Allegro';\r\n yOffset: number = 0;\r\n display: boolean = false;\r\n customText: string = '';\r\n\r\n _toVexTextTempo(): VexTempoTextParams {\r\n return { name: this.tempoText };\r\n }\r\n\r\n /**\r\n * Return equality wrt the tempo marking, e.g. 2 allegro in textMode will be equal but\r\n * an allegro and duration 120bpm will not.\r\n * @param t1 \r\n * @param t2 \r\n * @returns \r\n */\r\n static eq(t1: SmoTempoText, t2: SmoTempoText) {\r\n if (t1.tempoMode !== t2.tempoMode) {\r\n return false;\r\n }\r\n if (t1.tempoMode === SmoTempoText.tempoModes.durationMode) {\r\n return t1.bpm === t2.bpm && t1.beatDuration === t2.beatDuration;\r\n }\r\n if (t1.tempoMode === SmoTempoText.tempoModes.textMode) {\r\n return t1.tempoText === t2.tempoText;\r\n } else {\r\n return t1.bpm === t2.bpm && t1.beatDuration === t2.beatDuration &&\r\n t1.tempoText === t2.tempoText;\r\n }\r\n }\r\n\r\n static get bpmFromText(): Record {\r\n const rv: any = {};\r\n rv[SmoTempoText.tempoTexts.larghissimo] = 24;\r\n rv[SmoTempoText.tempoTexts.grave] = 40;\r\n rv[SmoTempoText.tempoTexts.lento] = 45;\r\n rv[SmoTempoText.tempoTexts.largo] = 40;\r\n rv[SmoTempoText.tempoTexts.larghetto] = 60;\r\n rv[SmoTempoText.tempoTexts.adagio] = 72;\r\n rv[SmoTempoText.tempoTexts.adagietto] = 72;\r\n rv[SmoTempoText.tempoTexts.andante_moderato] = 72;\r\n rv[SmoTempoText.tempoTexts.andante] = 84;\r\n rv[SmoTempoText.tempoTexts.andantino] = 92;\r\n rv[SmoTempoText.tempoTexts.moderator] = 96;\r\n rv[SmoTempoText.tempoTexts.allegretto] = 96;\r\n rv[SmoTempoText.tempoTexts.allegro] = 120;\r\n rv[SmoTempoText.tempoTexts.vivace] = 144;\r\n rv[SmoTempoText.tempoTexts.presto] = 168;\r\n rv[SmoTempoText.tempoTexts.prestissimo] = 240;\r\n\r\n return rv as Record;\r\n }\r\n\r\n _toVexDurationTempo(): VexTempoTextParams {\r\n var vd = SmoMusic.ticksToDuration[this.beatDuration];\r\n var dots = (vd.match(/d/g) || []).length;\r\n vd = vd.replace(/d/g, '');\r\n const rv: any = { duration: vd, dots, bpm: this.bpm };\r\n if (this.customText.length) {\r\n rv.name = this.customText;\r\n }\r\n return rv;\r\n }\r\n toVexTempo(): VexTempoTextParams {\r\n if (this.tempoMode === SmoTempoText.tempoModes.durationMode ||\r\n this.tempoMode === SmoTempoText.tempoModes.customMode) {\r\n return this._toVexDurationTempo();\r\n }\r\n return this._toVexTextTempo();\r\n }\r\n serialize(): SmoTempoTextParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoTempoText.defaults, SmoTempoText.attributes, this, params);\r\n params.ctor = 'SmoTempoText';\r\n return params as SmoTempoTextParamsSer;\r\n }\r\n constructor(parameters: SmoTempoTextParams | null) {\r\n super('SmoTempoText');\r\n let pobj: any = parameters;\r\n if (typeof (pobj) === 'undefined' || pobj === null) {\r\n pobj = {};\r\n }\r\n smoSerialize.serializedMerge(SmoTempoText.attributes, SmoTempoText.defaults, this);\r\n smoSerialize.serializedMerge(SmoTempoText.attributes, pobj, this);\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for a time signature\r\n * @category SmoParameters\r\n */\r\nexport interface TimeSignatureParameters {\r\n /**\r\n * numerator\r\n */\r\n actualBeats: number,\r\n /**\r\n * denominator, always power of 2\r\n */\r\n beatDuration: number,\r\n /**\r\n * indicates cut time/common time\r\n */\r\n useSymbol: boolean,\r\n /**\r\n * display, else just affects measure lengths.\r\n */\r\n display: boolean,\r\n /**\r\n * for pickups, display the non-pickup value\r\n */\r\n displayString: string\r\n}\r\n\r\n/**\r\n * serialized time signature\r\n * @category serialization\r\n */\r\nexport interface TimeSignatureParametersSer extends TimeSignatureParameters {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Time signatures contain duration information for a measure, and information\r\n * about the display of the time signature.\r\n * @category SmoModifier\r\n */\r\nexport class TimeSignature extends SmoMeasureModifierBase {\r\n static get defaults(): TimeSignatureParameters {\r\n return {\r\n actualBeats: 4,\r\n beatDuration: 4,\r\n useSymbol: false,\r\n display: true,\r\n displayString: ''\r\n };\r\n }\r\n static equal(ts1: TimeSignature, ts2: TimeSignature): boolean {\r\n return (ts1.actualBeats === ts2.actualBeats && ts1.beatDuration === ts2.beatDuration);\r\n }\r\n static createFromPartial(value: Partial) {\r\n const params = TimeSignature.defaults;\r\n smoSerialize.serializedMerge(TimeSignature.parameters, value, params);\r\n return new TimeSignature(params);\r\n }\r\n // timeSignature: string = '4/4';\r\n actualBeats: number = 4;\r\n beatDuration: number = 4;\r\n useSymbol: boolean = false;\r\n display: boolean = true;\r\n displayString: string = '';\r\n get timeSignature() {\r\n return this.actualBeats.toString() + '/' + this.beatDuration.toString();\r\n }\r\n static get parameters() {\r\n return ['actualBeats', 'beatDuration', 'useSymbol', 'display', 'displayString'];\r\n }\r\n static get boolParameters() {\r\n return [];\r\n }\r\n set timeSignature(value: string) {\r\n const ar = value.split('/');\r\n this.actualBeats = parseInt(ar[0], 10);\r\n this.beatDuration = parseInt(ar[1], 10);\r\n }\r\n serialize(): TimeSignatureParametersSer {\r\n const rv: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(TimeSignature.defaults, TimeSignature.parameters, this, rv);\r\n rv.ctor = 'TimeSignature';\r\n return rv as TimeSignatureParametersSer;\r\n }\r\n constructor(params: TimeSignatureParameters) {\r\n super('TimeSignature');\r\n this.actualBeats = params.actualBeats;\r\n this.beatDuration = params.beatDuration;\r\n this.useSymbol = params.useSymbol;\r\n this.display = params.display;\r\n this.displayString = params.displayString;\r\n }\r\n}\r\n\r\n","/**\r\n * shared music theory and audio frequency routines, helper functions etc.\r\n * @module /smo/data/music\r\n */\r\n\r\n// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoNote } from './note';\r\nimport { Pitch, PitchKey, Clef, PitchLetter, TickAccidental, \r\n AccidentalArray, AccidentalDisplay } from './common';\r\nimport { SmoMicrotone } from './noteModifiers';\r\nimport { VexFlow, pitchToLedgerLine, vexCanonicalNotes } from '../../common/vex';\r\n\r\n/**\r\n * Used for xml clef conversion\r\n */\r\nexport interface ClefSign {\r\n sign: string,\r\n line?: number,\r\n octave?: number\r\n}\r\n\r\n/**\r\n * calculate the pitch frequency, just temperment a=440, etc.\r\n * @category SmoUtilities\r\n */\r\nexport class SmoAudioPitch {\r\n // ### _frequencies\r\n // Compute the equal-temperment frequencies of the notes.\r\n static _computeFrequencies() {\r\n const map: Record = {};\r\n let lix = 0;\r\n const octaves = [1, 2, 3, 4, 5, 6, 7];\r\n const letters = ['cn', 'c#', 'dn', 'd#', 'en', 'fn', 'f#', 'gn', 'g#', 'an', 'a#', 'bn'];\r\n\r\n const just = Math.pow(2, (1.0 / 12));\r\n const baseFrequency = (440 / 16) * Math.pow(just, 3);\r\n\r\n octaves.forEach((octave) => {\r\n const base = baseFrequency * Math.pow(2, octave - 1);\r\n lix = 0;\r\n letters.forEach((letter) => {\r\n const freq = base * Math.pow(just, lix);\r\n var enharmonics = SmoMusic.getEnharmonics(letter);\r\n enharmonics.forEach((en) => {\r\n // Adjust for B4 higher than C4\r\n const adjOctave = (letter[0] === 'b' && en[0] === 'c') ?\r\n octave + 1 : octave;\r\n map[en + adjOctave.toString()] = freq;\r\n });\r\n lix += 1;\r\n });\r\n });\r\n\r\n return map;\r\n }\r\n static frequencies: Record | null = null;\r\n\r\n static get pitchFrequencyMap() {\r\n if (!SmoAudioPitch.frequencies) {\r\n SmoAudioPitch.frequencies = SmoAudioPitch._computeFrequencies();\r\n }\r\n\r\n return SmoAudioPitch.frequencies;\r\n }\r\n\r\n static _rawPitchToFrequency(smoPitch: Pitch, offset: number): number {\r\n const npitch = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(smoPitch) + offset);\r\n const vx = npitch.letter.toLowerCase() + npitch.accidental + npitch.octave.toString();\r\n return SmoAudioPitch.pitchFrequencyMap[vx];\r\n }\r\n /**\r\n * \r\n * @param smoPitch - pitch from the SMO object\r\n * @param offset - transpose 1/2 steps, 0 means no transpose\r\n * @param tone - optional transpose microtone\r\n * @returns \r\n */\r\n static smoPitchToFrequency(smoPitch: Pitch, offset: number, tone: SmoMicrotone | null) {\r\n let pitchInt = 0;\r\n let rv = SmoAudioPitch._rawPitchToFrequency(smoPitch, offset);\r\n if (tone) {\r\n const coeff = tone.toPitchCoeff;\r\n pitchInt = SmoMusic.smoPitchToInt(smoPitch);\r\n pitchInt += (coeff > 0) ? 1 : -1;\r\n const otherSmo = SmoMusic.smoIntToPitch(pitchInt);\r\n const otherPitch = SmoAudioPitch._rawPitchToFrequency(otherSmo, offset);\r\n rv += Math.abs(rv - otherPitch) * coeff;\r\n }\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * interface for valid non-tuplet duration value (all the\r\n * base note lengths + dots)\r\n */\r\nexport interface SimpleDuration {\r\n index: number, \r\n ticks: number,\r\n baseTicks: number,\r\n dots: number\r\n}\r\n/**\r\n * description of a scale entry, from vex theory routines\r\n */\r\nexport interface VexNoteValue {\r\n root_index: number,\r\n int_val: number\r\n};\r\n/**\r\n * Describe the music theory role of an accidental vs. the key signature. \r\n * Used to determine default enharmonic spelling.\r\n * @category SmoUtilities\r\n */\r\nexport interface KeySignatureRole {\r\n letter: PitchLetter,\r\n accidental: string,\r\n role: string\r\n};\r\n\r\n/**\r\n * Helper functions that build on the VX music theory routines, and other\r\n * utilities I wish were in VF.Music but aren't\r\n * ## Note on pitch and duration format\r\n * We use some VEX music theory routines and frequently need to convert\r\n * formats from SMO format. We also use the same 'ticks' abstraction for\r\n * durations.\r\n * \r\n * `Smo` uses pitch JSON:\r\n * ```javascript\r\n * {note:'c',accidental:'#',octave:4}\r\n * ```\r\n * \r\n * `Vex` usually uses a canonical string:\r\n * \r\n * `'c#/4'`\r\n * \r\n * Depending on the operation, the octave might be omitted\r\n * \r\n * `Smo` uses a JSON for duration always:\r\n * ```javascript\r\n * {numerator:4096,denominator:1,remainder:0}\r\n * ```\r\n * `Vex` uses a letter duration (`'4'` or `'q'`for 1/4 note) and `'d'` for dot.\r\n * \r\n * I try to indicate whether I am using vex or smo notation in the function name.\r\n * Duration methods start around line 1100\r\n * @category SmoUtilities\r\n */\r\nexport class SmoMusic {\r\n /**\r\n * Ported from vex, used to convert pitches to numerical values\r\n * */\r\n static get noteValues(): Record {\r\n return {\r\n c: { root_index: 0, int_val: 0 },\r\n cn: { root_index: 0, int_val: 0 },\r\n 'c#': { root_index: 0, int_val: 1 },\r\n 'c##': { root_index: 0, int_val: 2 },\r\n cb: { root_index: 0, int_val: 11 },\r\n cbb: { root_index: 0, int_val: 10 },\r\n d: { root_index: 1, int_val: 2 },\r\n dn: { root_index: 1, int_val: 2 },\r\n 'd#': { root_index: 1, int_val: 3 },\r\n 'd##': { root_index: 1, int_val: 4 },\r\n db: { root_index: 1, int_val: 1 },\r\n dbb: { root_index: 1, int_val: 0 },\r\n e: { root_index: 2, int_val: 4 },\r\n en: { root_index: 2, int_val: 4 },\r\n 'e#': { root_index: 2, int_val: 5 },\r\n 'e##': { root_index: 2, int_val: 6 },\r\n eb: { root_index: 2, int_val: 3 },\r\n ebb: { root_index: 2, int_val: 2 },\r\n f: { root_index: 3, int_val: 5 },\r\n fn: { root_index: 3, int_val: 5 },\r\n 'f#': { root_index: 3, int_val: 6 },\r\n 'f##': { root_index: 3, int_val: 7 },\r\n fb: { root_index: 3, int_val: 4 },\r\n fbb: { root_index: 3, int_val: 3 },\r\n g: { root_index: 4, int_val: 7 },\r\n gn: { root_index: 4, int_val: 7 },\r\n 'g#': { root_index: 4, int_val: 8 },\r\n 'g##': { root_index: 4, int_val: 9 },\r\n gb: { root_index: 4, int_val: 6 },\r\n gbb: { root_index: 4, int_val: 5 },\r\n a: { root_index: 5, int_val: 9 },\r\n an: { root_index: 5, int_val: 9 },\r\n 'a#': { root_index: 5, int_val: 10 },\r\n 'a##': { root_index: 5, int_val: 11 },\r\n ab: { root_index: 5, int_val: 8 },\r\n abb: { root_index: 5, int_val: 7 },\r\n b: { root_index: 6, int_val: 11 },\r\n bn: { root_index: 6, int_val: 11 },\r\n 'b#': { root_index: 6, int_val: 0 },\r\n 'b##': { root_index: 6, int_val: 1 },\r\n bb: { root_index: 6, int_val: 10 },\r\n bbb: { root_index: 6, int_val: 9 },\r\n };\r\n }\r\n static accidentalDisplay(pitch: Pitch, keySignature: string, duration: number, accArray: AccidentalArray[]):\r\n AccidentalDisplay | null {\r\n const keyAccidental = SmoMusic.getAccidentalForKeySignature(pitch, keySignature);\r\n const pitchOctave = pitch.letter + '-' + pitch.octave;\r\n const accidentals = accArray.filter((ar) =>\r\n (ar.duration as number) < duration && ar.pitches[pitchOctave]);\r\n const acLen = accidentals.length;\r\n const declared = acLen > 0 ?\r\n accidentals[acLen - 1].pitches[pitchOctave].pitch.accidental : keyAccidental;\r\n if ((declared !== pitch.accidental\r\n || pitch.cautionary)) { \r\n const rv: AccidentalDisplay = {\r\n symbol: pitch.accidental,\r\n courtesy: pitch.cautionary ?? false,\r\n forced: pitch.forced ?? false\r\n }\r\n return rv;\r\n }\r\n return null;\r\n }\r\n /**\r\n * return Vex canonical note enharmonic - e.g. Bb to A#\r\n * */\r\n static vexToCannonical(vexKey: string): string {\r\n vexKey = SmoMusic.stripVexOctave(vexKey);\r\n return vexCanonicalNotes()[SmoMusic.noteValues[vexKey].int_val];\r\n }\r\n\r\n /**\r\n * A note array (sans octave) in key-signature order\r\n */\r\n static get circleOfFifths(): PitchKey[] {\r\n return [{\r\n letter: 'c',\r\n accidental: 'n'\r\n }, {\r\n letter: 'g',\r\n accidental: 'n'\r\n }, {\r\n letter: 'd',\r\n accidental: 'n'\r\n }, {\r\n letter: 'a',\r\n accidental: 'n'\r\n }, {\r\n letter: 'e',\r\n accidental: 'n'\r\n }, {\r\n letter: 'b',\r\n accidental: 'n'\r\n }, {\r\n letter: 'f',\r\n accidental: '#'\r\n }, {\r\n letter: 'c',\r\n accidental: '#'\r\n }, {\r\n letter: 'a',\r\n accidental: 'b'\r\n }, {\r\n letter: 'e',\r\n accidental: 'b'\r\n }, {\r\n letter: 'b',\r\n accidental: 'b'\r\n }, {\r\n letter: 'f',\r\n accidental: 'n'\r\n }\r\n ];\r\n }\r\n /**\r\n * Return the number of lines above first ledger line below the staff.\r\n * e.g. middle c in treble clef returns 0. Top line f in treble returns 5.\r\n * @param clef\r\n * @param pitch\r\n * @returns number where 0 is the first ledger line below\r\n */\r\n static pitchToStaffLine(clef: string, smoPitch: Pitch): number {\r\n const octave = smoPitch.octave * 7 - 4 * 7;\r\n const keyTable = smoPitch.letter + smoPitch.accidental;\r\n let line = (SmoMusic.noteValues[keyTable].root_index + octave) / 2;\r\n line += SmoMusic.clefLedgerShift[clef]\r\n return line;\r\n }\r\n /**\r\n * gives the index into circle-of-fifths array for a pitch, considering enharmonics.\r\n * */\r\n static circleOfFifthsIndex(smoPitch: Pitch) {\r\n const en1 = SmoMusic.vexToSmoKey(SmoMusic.getEnharmonic(SmoMusic.pitchToVexKey(smoPitch)));\r\n const en2 = SmoMusic.vexToSmoKey(SmoMusic.getEnharmonic(SmoMusic.getEnharmonic(SmoMusic.pitchToVexKey(smoPitch))));\r\n const ix = SmoMusic.circleOfFifths.findIndex((el) =>\r\n (el.letter === smoPitch.letter && el.accidental === smoPitch.accidental) ||\r\n (el.letter === en1.letter && el.accidental === en1.accidental) ||\r\n (el.letter === en2.letter && el.accidental === en2.accidental)\r\n );\r\n return ix;\r\n }\r\n\r\n /**\r\n * Get pitch to the right in circle of fifths\r\n * */\r\n static addSharp(smoPitch: Pitch): Pitch {\r\n const rv: PitchKey = SmoMusic.circleOfFifths[\r\n (SmoMusic.circleOfFifthsIndex(smoPitch) + 1) % SmoMusic.circleOfFifths.length];\r\n return { letter: rv.letter, accidental: rv.accidental, octave: smoPitch.octave };\r\n }\r\n\r\n /**\r\n * Get pitch to the left in circle of fifths\r\n */\r\n static addFlat(smoPitch: Pitch): Pitch {\r\n const rv: PitchKey = SmoMusic.circleOfFifths[\r\n ((SmoMusic.circleOfFifths.length - 1) + SmoMusic.circleOfFifthsIndex(smoPitch)) % SmoMusic.circleOfFifths.length];\r\n return { letter: rv.letter, accidental: rv.accidental, octave: smoPitch.octave };\r\n }\r\n\r\n /**\r\n * Add @param {number} - sharps\r\n */\r\n static addSharps(smoPitch: Pitch, distance: number): Pitch {\r\n let i = 0;\r\n let rv: Pitch = {} as Pitch;\r\n if (distance === 0) {\r\n return JSON.parse(JSON.stringify(smoPitch));\r\n }\r\n rv = SmoMusic.addSharp(smoPitch);\r\n for (i = 1; i < distance; ++i) {\r\n rv = SmoMusic.addSharp(rv);\r\n }\r\n const octaveAdj = SmoMusic.letterPitchIndex[smoPitch.letter] > SmoMusic.letterPitchIndex[rv.letter] ? 1 : 0;\r\n rv.octave += octaveAdj;\r\n return rv;\r\n }\r\n\r\n /**\r\n * Add *distance* sharps/flats to given key\r\n */\r\n static addFlats(smoPitch: Pitch, distance: number): Pitch {\r\n let i = 0;\r\n let rv: Pitch = {} as Pitch;\r\n if (distance === 0) {\r\n return JSON.parse(JSON.stringify(smoPitch));\r\n }\r\n rv = SmoMusic.addFlat(smoPitch);\r\n for (i = 1; i < distance; ++i) {\r\n rv = SmoMusic.addFlat(rv);\r\n }\r\n const octaveAdj = SmoMusic.letterPitchIndex[smoPitch.letter] > SmoMusic.letterPitchIndex[rv.letter] ? 1 : 0;\r\n rv.octave += octaveAdj;\r\n return rv;\r\n }\r\n\r\n /**\r\n * Convert array of smo pitches to vex keys, with adjustment for transpose and notehead\r\n * @param pitchAr\r\n * @param keyOffset\r\n * @param noteHead\r\n * @returns {string[]} - array of vex keyx\r\n */\r\n static smoPitchesToVexKeys(pitchAr: Pitch[], keyOffset: number, noteHead: string | null): string[] {\r\n const noopFunc = keyOffset > 0 ? 'addSharps' : 'addFlats';\r\n\r\n const rv: string[] = [];\r\n pitchAr.forEach((pitch) => {\r\n rv.push(SmoMusic.pitchToVexKey(SmoMusic[noopFunc](pitch, keyOffset), noteHead));\r\n });\r\n return rv;\r\n }\r\n\r\n static get scaleIntervals(): Record {\r\n return {\r\n up: [2, 2, 1, 2, 2, 2, 1],\r\n down: [1, 2, 2, 2, 1, 2, 2]\r\n };\r\n }\r\n\r\n /**\r\n * return true if the pitches match, except for octave.\r\n * `{ letter: 'a', accidental: '#'}, { letter: 'a', accidental: '#'}` returns true\r\n * `{ letter: 'a', accidental: '#'}, { letter: 'b', accidental: 'b'}` returns false\r\n * */\r\n static smoScalePitchMatch(p1: Pitch, p2: Pitch): boolean {\r\n const pp1 = JSON.parse(JSON.stringify(p1));\r\n const pp2 = JSON.parse(JSON.stringify(p2));\r\n pp1.octave = 0;\r\n pp2.octave = 0;\r\n\r\n return SmoMusic.smoPitchToInt(pp1) === SmoMusic.smoPitchToInt(pp2);\r\n }\r\n\r\n /**\r\n * Return the number of ledger lines, or 0 if none. positive if\r\n * below the staff, negative if above\r\n * @param clef\r\n * @param pitch\r\n * @returns number where 0 is the top staff line\r\n */\r\n static pitchToLedgerLine(clef: Clef, pitch: Pitch): number {\r\n // return the distance from the top ledger line, as 0.5 per line/space\r\n const line = SmoMusic.pitchToStaffLine(clef, pitch);\r\n if (line > 5) {\r\n return -1 * (line - 5);\r\n }\r\n if (line <= 0) {\r\n return -1 * (line - 1);\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * return flag state (up === 1 or down === 2) based on pitch and clef if auto\r\n * */\r\n static flagStateFromNote(clef: Clef, note: SmoNote) {\r\n let fs = note.flagState;\r\n if (fs === SmoNote.flagStates.auto) {\r\n fs = SmoMusic.pitchToStaffLine(clef, note.pitches[0])\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n }\r\n return fs;\r\n }\r\n\r\n /**\r\n * an array of clefs and the xml information they map to\r\n */\r\n static clefSigns: Record = {\r\n 'treble': { sign: 'G', line: 2 },\r\n 'bass': { sign: 'F', line: 4 },\r\n 'tenor': { sign: 'C', line: 4 },\r\n 'alto': { sign: 'C', line: 3 },\r\n 'soprano': { sign: 'C', line: 1 },\r\n 'percussion': { sign: 'percussion' },\r\n 'mezzo-soprano': { sign: 'C', line: 2 },\r\n 'baritone-c': { sign: 'C', line: 5 },\r\n 'baritone-f': { sign: 'F', line: 3 },\r\n 'subbass': { sign: 'F', line: 3, octave: -1 },\r\n 'french': { sign: 'G', line: 1 },\r\n 'vocal-tenor': { sign: 'G', line: 2, octave: -1 }\r\n }\r\n \r\n /**\r\n * an array of clefs and the xml information they map to\r\n */\r\n static clefLedgerShift: Record = {\r\n 'treble': 0,\r\n 'bass': 6,\r\n 'tenor': 4,\r\n 'alto': 3,\r\n 'soprano': 1,\r\n 'percussion': 0,\r\n 'mezzo-soprano': 2,\r\n 'baritone-c': 5,\r\n 'baritone-f': 5,\r\n 'subbass': 7,\r\n 'french': -1\r\n }\r\n static scaleTones: string[] = ['tonic', '2', '3', '4', '5', '6', '7'];\r\n static getScaleTonesForKey(keySignature: string): Record {\r\n const key = SmoMusic.enharmonicRoles[keySignature];\r\n const rv: Record = {};\r\n key.forEach((role) => {\r\n if (SmoMusic.scaleTones.indexOf(role.role) >= 0) {\r\n rv[role.letter] = role.letter + role.accidental;\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * The purpose of this table is to keep consistent enharmonic spelling when transposing \r\n * instruments in different keys. It is not theoritically complete, e.g.\r\n * there is no reason to distinguish between #5 used as a leading tone for vi- or\r\n * as an augmented chord, the spelling is the same. It does not show a preference\r\n * for notes that don't have an obvious purpose in the key, e.g. it does not try to compute the\r\n * equivalent to 'e#' in the key of 'c'. The computation of the 'intended key area' is\r\n * beyond the scope of a music program to interpret.\r\n */\r\n static get enharmonicRoles(): Record {\r\n const tbl: Record =\r\n { 'c' : [\r\n { letter: 'c', accidental: 'n', role: 'tonic' },\r\n { letter: 'c', accidental: '#', role: '7/2' },\r\n { letter: 'd', accidental: 'b', role: 'b9' },\r\n { letter: 'd', accidental: 'n', role: '2' },\r\n { letter: 'd', accidental: '#', role: '7/3'},\r\n { letter: 'e', accidental: 'b', role: 'b3'},\r\n { letter: 'e', accidental: 'n', role: '3'},\r\n { letter: 'f', accidental: 'n', role: '4'},\r\n { letter: 'f', accidental: '#', role: '#11'},\r\n { letter: 'g', accidental: 'b', role: 'b5'},\r\n { letter: 'g', accidental: 'n', role: '5'},\r\n { letter: 'g', accidental: '#', role: '7/6'},\r\n { letter: 'a', accidental: 'b', role: 'b6'},\r\n { letter: 'a', accidental: 'n', role: '6'},\r\n { letter: 'a', accidental: '#', role: '7/7'},\r\n { letter: 'b', accidental: 'b', role: 'b7'},\r\n { letter: 'b', accidental: 'n', role: '7'}\r\n ], 'c#': [\r\n { letter: 'c', accidental: '#', role: 'tonic' },\r\n { letter: 'c', accidental: '##', role: '7/2' },\r\n { letter: 'd', accidental: 'n', role: 'b9' },\r\n { letter: 'd', accidental: '#', role: '2' },\r\n { letter: 'd', accidental: '##', role: '#2'},\r\n { letter: 'f', accidental: 'b', role: 'b3'},\r\n { letter: 'e', accidental: '#', role: '3'},\r\n { letter: 'f', accidental: '#', role: '4'},\r\n { letter: 'f', accidental: '##', role: '#11'},\r\n { letter: 'g', accidental: 'n', role: 'b5'},\r\n { letter: 'g', accidental: '#', role: '5'},\r\n { letter: 'g', accidental: '##', role: '7/6'},\r\n { letter: 'a', accidental: 'n', role: 'b6'},\r\n { letter: 'a', accidental: '#', role: '6'},\r\n { letter: 'a', accidental: '##', role: '7/7'},\r\n { letter: 'b', accidental: 'n', role: 'b7'},\r\n { letter: 'b', accidental: '#', role: '7'}\r\n ], 'db': [\r\n { letter: 'd', accidental: 'b', role: 'tonic' },\r\n { letter: 'd', accidental: 'n', role: '7/2' },\r\n { letter: 'e', accidental: 'bb', role: 'b9' },\r\n { letter: 'e', accidental: 'b', role: '2' },\r\n { letter: 'e', accidental: 'n', role: '7/3'},\r\n { letter: 'f', accidental: 'b', role: 'b3'},\r\n { letter: 'f', accidental: 'n', role: '3'},\r\n { letter: 'g', accidental: 'b', role: '4'},\r\n { letter: 'g', accidental: 'n', role: '#11'},\r\n { letter: 'a', accidental: 'bb', role: 'b5'},\r\n { letter: 'a', accidental: 'b', role: '5'},\r\n { letter: 'a', accidental: 'n', role: '7/6'},\r\n { letter: 'b', accidental: 'bb', role: 'b6'},\r\n { letter: 'b', accidental: 'b', role: '6'},\r\n { letter: 'b', accidental: 'n', role: '7/7'},\r\n { letter: 'c', accidental: 'b', role: 'b7'},\r\n { letter: 'b', accidental: '#', role: '7'}\r\n ], 'd': [\r\n { letter: 'd', accidental: 'n', role: 'tonic' },\r\n { letter: 'd', accidental: '#', role: '7/2' },\r\n { letter: 'e', accidental: 'b', role: 'b9' },\r\n { letter: 'e', accidental: 'n', role: '2' },\r\n { letter: 'e', accidental: '#', role: '7/3'},\r\n { letter: 'f', accidental: 'n', role: 'b3'},\r\n { letter: 'f', accidental: '#', role: '3'},\r\n { letter: 'g', accidental: 'n', role: '4'},\r\n { letter: 'g', accidental: '#', role: '#11'},\r\n { letter: 'a', accidental: 'b', role: 'b5'},\r\n { letter: 'a', accidental: 'n', role: '5'},\r\n { letter: 'a', accidental: '#', role: '7/6'},\r\n { letter: 'b', accidental: 'b', role: 'b6'},\r\n { letter: 'b', accidental: 'n', role: '6'},\r\n { letter: 'b', accidental: '#', role: '7/7'},\r\n { letter: 'c', accidental: 'n', role: 'b7'},\r\n { letter: 'c', accidental: '#', role: '7'}\r\n ], 'eb': [\r\n { letter: 'e', accidental: 'b', role: 'tonic' },\r\n { letter: 'e', accidental: 'n', role: '7/2' },\r\n { letter: 'f', accidental: 'b', role: 'b9' },\r\n { letter: 'f', accidental: 'n', role: '2' },\r\n { letter: 'f', accidental: '#', role: '7/3'},\r\n { letter: 'g', accidental: 'b', role: 'b3'},\r\n { letter: 'g', accidental: 'n', role: '3'},\r\n { letter: 'a', accidental: 'b', role: '4'},\r\n { letter: 'a', accidental: 'n', role: '#11'},\r\n { letter: 'b', accidental: 'bb', role: 'b5'},\r\n { letter: 'b', accidental: 'b', role: '5'},\r\n { letter: 'b', accidental: 'n', role: '7/6'},\r\n { letter: 'c', accidental: 'b', role: '6'},\r\n { letter: 'c', accidental: 'n', role: '6'},\r\n { letter: 'c', accidental: '#', role: '7/7'},\r\n { letter: 'd', accidental: 'b', role: 'b7'},\r\n { letter: 'd', accidental: 'n', role: '7'}\r\n ], 'e': [\r\n { letter: 'e', accidental: 'n', role: 'tonic' },\r\n { letter: 'e', accidental: '#', role: '7/2' },\r\n { letter: 'f', accidental: 'n', role: 'b9' },\r\n { letter: 'f', accidental: '#', role: '2' },\r\n { letter: 'f', accidental: '##', role: '7/3'},\r\n { letter: 'g', accidental: 'n', role: 'b3'},\r\n { letter: 'g', accidental: '#', role: '3'},\r\n { letter: 'a', accidental: 'n', role: '4'},\r\n { letter: 'a', accidental: '#', role: '#11'},\r\n { letter: 'b', accidental: 'b', role: 'b5'},\r\n { letter: 'b', accidental: 'n', role: '5'},\r\n { letter: 'b', accidental: '#', role: '7/6'},\r\n { letter: 'c', accidental: 'n', role: 'b6'},\r\n { letter: 'c', accidental: '#', role: '6'},\r\n { letter: 'c', accidental: '##', role: '7/7'},\r\n { letter: 'd', accidental: 'n', role: 'b7'},\r\n { letter: 'd', accidental: '#', role: '7'}\r\n ], 'f': [\r\n { letter: 'f', accidental: 'n', role: 'tonic' },\r\n { letter: 'f', accidental: '#', role: '7/2' },\r\n { letter: 'g', accidental: 'b', role: 'b9' },\r\n { letter: 'g', accidental: 'n', role: '2' },\r\n { letter: 'g', accidental: '#', role: '7/3'},\r\n { letter: 'a', accidental: 'b', role: 'b3'},\r\n { letter: 'a', accidental: 'n', role: '3'},\r\n { letter: 'b', accidental: 'b', role: '4'},\r\n { letter: 'b', accidental: 'n', role: '#11'},\r\n { letter: 'c', accidental: 'b', role: 'b5'},\r\n { letter: 'c', accidental: 'n', role: '5'},\r\n { letter: 'c', accidental: '#', role: '7/6'},\r\n { letter: 'd', accidental: 'b', role: 'b6'},\r\n { letter: 'd', accidental: 'n', role: '6'},\r\n { letter: 'd', accidental: '#', role: '7/7'},\r\n { letter: 'e', accidental: 'b', role: 'b7'},\r\n { letter: 'e', accidental: 'n', role: '7'}\r\n ], 'f#': [\r\n { letter: 'f', accidental: '#', role: 'tonic' },\r\n { letter: 'f', accidental: '##', role: '7/2' },\r\n { letter: 'g', accidental: 'n', role: 'b9' },\r\n { letter: 'g', accidental: '#', role: '2' },\r\n { letter: 'g', accidental: '##', role: '#2'},\r\n { letter: 'a', accidental: 'n', role: 'b3'},\r\n { letter: 'a', accidental: '#', role: '3'},\r\n { letter: 'b', accidental: 'n', role: '4'},\r\n { letter: 'b', accidental: '#', role: '#11'},\r\n { letter: 'c', accidental: 'n', role: 'b5'},\r\n { letter: 'c', accidental: '#', role: '5'},\r\n { letter: 'c', accidental: '##', role: '7/6'},\r\n { letter: 'd', accidental: 'n', role: 'b6'},\r\n { letter: 'd', accidental: '#', role: '6'},\r\n { letter: 'd', accidental: '##', role: '7/7'},\r\n { letter: 'e', accidental: 'n', role: 'b7'},\r\n { letter: 'e', accidental: '#', role: '7'}\r\n ], 'gb': [\r\n { letter: 'g', accidental: 'b', role: 'tonic' },\r\n { letter: 'g', accidental: 'n', role: '7/2' },\r\n { letter: 'a', accidental: 'bb', role: 'b9' },\r\n { letter: 'a', accidental: 'b', role: '2' },\r\n { letter: 'a', accidental: 'n', role: '7/3'},\r\n { letter: 'a', accidental: 'bb', role: 'b3'},\r\n { letter: 'b', accidental: 'b', role: '3'},\r\n { letter: 'c', accidental: 'b', role: '4'},\r\n { letter: 'c', accidental: 'n', role: '#11'},\r\n { letter: 'd', accidental: 'bb', role: 'b5'},\r\n { letter: 'd', accidental: 'b', role: '5'},\r\n { letter: 'd', accidental: 'n', role: '7/6'},\r\n { letter: 'e', accidental: 'bb', role: 'b6'},\r\n { letter: 'e', accidental: 'b', role: '6'},\r\n { letter: 'e', accidental: 'n', role: '7/7'},\r\n { letter: 'f', accidental: 'b', role: 'b7'},\r\n { letter: 'f', accidental: 'n', role: '7'}\r\n ], 'g': [\r\n { letter: 'g', accidental: 'n', role: 'tonic' },\r\n { letter: 'g', accidental: '#', role: '7/2' },\r\n { letter: 'g', accidental: 'b', role: 'b9' },\r\n { letter: 'a', accidental: 'n', role: '2' },\r\n { letter: 'a', accidental: '#', role: '7/3'},\r\n { letter: 'b', accidental: 'b', role: 'b3'},\r\n { letter: 'b', accidental: 'n', role: '3'},\r\n { letter: 'c', accidental: 'n', role: '4'},\r\n { letter: 'c', accidental: '#', role: '#11'},\r\n { letter: 'd', accidental: 'b', role: 'b5'},\r\n { letter: 'd', accidental: 'n', role: '5'},\r\n { letter: 'd', accidental: '#', role: '7/6'},\r\n { letter: 'e', accidental: 'b', role: 'b6'},\r\n { letter: 'e', accidental: 'n', role: '6'},\r\n { letter: 'e', accidental: '#', role: '7/7'},\r\n { letter: 'f', accidental: 'n', role: 'b7'},\r\n { letter: 'f', accidental: '#', role: '7'}\r\n ],'ab': [\r\n { letter: 'a', accidental: 'b', role: 'tonic' },\r\n { letter: 'a', accidental: 'n', role: '7/2' },\r\n { letter: 'b', accidental: 'bb', role: 'b9' },\r\n { letter: 'b', accidental: 'b', role: '2' },\r\n { letter: 'b', accidental: 'n', role: '7/3' },\r\n { letter: 'b', accidental: 'bb', role: 'b3' },\r\n { letter: 'c', accidental: 'n', role: '3' },\r\n { letter: 'd', accidental: 'b', role: '4' },\r\n { letter: 'd', accidental: 'n', role: '#11' },\r\n { letter: 'e', accidental: 'bb', role: 'b5' },\r\n { letter: 'e', accidental: 'b', role: '5' },\r\n { letter: 'e', accidental: 'n', role: '7/6' },\r\n { letter: 'f', accidental: 'b', role: 'b6' },\r\n { letter: 'f', accidental: 'n', role: '6' },\r\n { letter: 'f', accidental: '#', role: '7/7' },\r\n { letter: 'g', accidental: 'b', role: 'b7' },\r\n { letter: 'g', accidental: 'n', role: '7' }\r\n ], 'a': [\r\n { letter: 'a', accidental: 'n', role: 'tonic' },\r\n { letter: 'a', accidental: '#', role: '7/2' },\r\n { letter: 'b', accidental: 'b', role: 'b9' },\r\n { letter: 'b', accidental: 'n', role: '2' },\r\n { letter: 'b', accidental: '#', role: '7/3'},\r\n { letter: 'c', accidental: 'n', role: 'b3'},\r\n { letter: 'c', accidental: '#', role: '3'},\r\n { letter: 'd', accidental: 'n', role: '4'},\r\n { letter: 'd', accidental: '#', role: '#11'},\r\n { letter: 'e', accidental: 'b', role: 'b5'},\r\n { letter: 'e', accidental: 'n', role: '5'},\r\n { letter: 'e', accidental: '#', role: '7/6'},\r\n { letter: 'f', accidental: 'n', role: 'b6'},\r\n { letter: 'f', accidental: '#', role: '6'},\r\n { letter: 'f', accidental: '##', role: '7/7'},\r\n { letter: 'g', accidental: 'n', role: 'b7'},\r\n { letter: 'g', accidental: '#', role: '7'}\r\n ], 'bb': [\r\n { letter: 'b', accidental: 'b', role: 'tonic' },\r\n { letter: 'b', accidental: 'n', role: '7/2' },\r\n { letter: 'c', accidental: 'b', role: 'b9' },\r\n { letter: 'c', accidental: 'n', role: '2' },\r\n { letter: 'c', accidental: '#', role: '7/3'},\r\n { letter: 'd', accidental: 'b', role: 'b3'},\r\n { letter: 'd', accidental: 'n', role: '3'},\r\n { letter: 'e', accidental: 'b', role: '4'},\r\n { letter: 'e', accidental: 'n', role: '#11'},\r\n { letter: 'f', accidental: 'b', role: 'b5'},\r\n { letter: 'f', accidental: 'n', role: '5'},\r\n { letter: 'f', accidental: '#', role: '7/6'},\r\n { letter: 'g', accidental: 'b', role: 'b6'},\r\n { letter: 'g', accidental: 'n', role: '6'},\r\n { letter: 'g', accidental: '#', role: '7/7'},\r\n { letter: 'a', accidental: 'b', role: 'b7'},\r\n { letter: 'a', accidental: 'n', role: '7'}\r\n ], 'b': [\r\n { letter: 'b', accidental: 'n', role: 'tonic' },\r\n { letter: 'b', accidental: '#', role: '7/2' },\r\n { letter: 'c', accidental: 'n', role: 'b9' },\r\n { letter: 'c', accidental: '#', role: '2' },\r\n { letter: 'c', accidental: '##', role: '7/3'},\r\n { letter: 'd', accidental: 'n', role: 'b3'},\r\n { letter: 'd', accidental: '#', role: '3'},\r\n { letter: 'e', accidental: 'n', role: '4'},\r\n { letter: 'e', accidental: '#', role: '#11'},\r\n { letter: 'f', accidental: 'n', role: 'b5'},\r\n { letter: 'f', accidental: '#', role: '5'},\r\n { letter: 'f', accidental: '##', role: '7/6'},\r\n { letter: 'g', accidental: 'n', role: 'b6'},\r\n { letter: 'g', accidental: '#', role: '6'},\r\n { letter: 'g', accidental: '##', role: '7/7'},\r\n { letter: 'a', accidental: 'n', role: 'b7'},\r\n { letter: 'a', accidental: '#', role: '7'}\r\n ]};\r\n return tbl;\r\n }\r\n /**\r\n * Find the harmonic role for the given pitch\r\n * @param smoPitch \r\n * @param keySignature \r\n * @returns \r\n */\r\n static findRoleOfPitch(smoPitch: Pitch, keySignature: string) {\r\n const keyRoles = SmoMusic.enharmonicRoles[keySignature];\r\n if (!keyRoles) {\r\n return '';\r\n }\r\n const keyRole = keyRoles.find((x) => x.letter === smoPitch.letter.toLocaleLowerCase() && x.accidental === smoPitch.accidental.toLowerCase());\r\n if (!keyRole) {\r\n return '';\r\n }\r\n return keyRole.role;\r\n }\r\n /**\r\n * Given a harmonic role, find the pitch that matches it. If there is no one, just\r\n * return the raw transposition\r\n * @param role \r\n * @param keySignature \r\n * @param transposedPitch \r\n * @returns \r\n */\r\n static findPitchForRole(role: string, keySignature: string, transposedPitch: Pitch): Pitch {\r\n const keyRoles = SmoMusic.enharmonicRoles[keySignature];\r\n if (!keyRoles) {\r\n return JSON.parse(JSON.stringify(transposedPitch));\r\n }\r\n const keyRole = keyRoles.find((x) => x.role === role);\r\n if (!keyRole) {\r\n return JSON.parse(JSON.stringify(transposedPitch));\r\n }\r\n let octave = transposedPitch.octave;\r\n if ((transposedPitch.letter === 'a' || transposedPitch.letter === 'b') && keyRole.letter === 'c') {\r\n octave += 1;\r\n }\r\n return { letter: keyRole.letter, accidental: keyRole.accidental, octave };\r\n }\r\n static rawTranspose(pitch: Pitch, offset: number) {\r\n return SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(pitch) + offset);\r\n }\r\n static transposePitchForKey(pitch: Pitch, originalKey: string, destinationKey: string, offset: number): Pitch {\r\n const transposedPitch = SmoMusic.getEnharmonicInKey(SmoMusic.rawTranspose(pitch, offset), destinationKey);\r\n const role = SmoMusic.findRoleOfPitch(pitch, originalKey);\r\n if (role.length) {\r\n return SmoMusic.findPitchForRole(role, destinationKey, transposedPitch);\r\n }\r\n return transposedPitch;\r\n }\r\n\r\n /**\r\n * convert from SMO to VEX format so we can use the VexFlow tables and methods\r\n * example:\r\n * `{letter,octave,accidental}` object to vexKey string `'f#'`\r\n * */\r\n static _pitchToVexKey(smoPitch: Pitch): string {\r\n // Convert to vex keys, where f# is a string like 'f#'.\r\n let vexKey = smoPitch.letter.toLowerCase();\r\n if (smoPitch.accidental.length === 0) {\r\n vexKey = vexKey + 'n';\r\n } else {\r\n vexKey = vexKey + smoPitch.accidental;\r\n }\r\n if (smoPitch.octave) {\r\n vexKey = vexKey + '/' + smoPitch.octave;\r\n }\r\n return vexKey;\r\n }\r\n\r\n /**\r\n * convert smo pitch to easy score (vex) format. Mostly used\r\n * for debugging and generating Vex test cases\r\n * @param smoPitch\r\n * @returns - a string that can be converted to a VEX routine, with some difficulty\r\n */\r\n static pitchToEasyScore(smoPitch: Pitch): string {\r\n let vexKey = smoPitch.letter.toLowerCase();\r\n vexKey = vexKey + smoPitch.accidental;\r\n return vexKey + smoPitch.octave;\r\n }\r\n /**\r\n * convert a pitch to a format expected by the MIDI writer\r\n * @param smoPitch pitch to convert\r\n * @returns pitch in MIDI string format.\r\n */\r\n static smoPitchToMidiString(smoPitch: Pitch): string {\r\n const midiPitch = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(smoPitch));\r\n let rv = midiPitch.letter.toUpperCase();\r\n if (midiPitch.accidental !== 'n') {\r\n rv += midiPitch.accidental;\r\n }\r\n rv += midiPitch.octave;\r\n return rv;\r\n }\r\n static smoPitchesToMidiStrings(smoPitches: Pitch[]): string[] {\r\n const rv: string[] = [];\r\n smoPitches.forEach((pitch) => {\r\n rv.push(SmoMusic.smoPitchToMidiString(pitch));\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * filled in from the midi routines borrowed from \r\n * // https://github.com/grimmdude/MidiWriterJS\r\n * @param midiPitch pitch from MIDIwrite\r\n * @returns SMO pitch\r\n */\r\n static midiPitchToSmoPitch(midiPitch: string): Pitch {\r\n const smoPitch: Pitch = {} as Pitch;\r\n smoPitch.letter = midiPitch[0].toLowerCase() as PitchLetter;\r\n if (isNaN(parseInt(midiPitch[1], 10))) {\r\n smoPitch.accidental = midiPitch[1];\r\n smoPitch.octave = parseInt(midiPitch[2], 10);\r\n } else {\r\n smoPitch.accidental = 'n';\r\n smoPitch.octave = parseInt(midiPitch[1], 10);\r\n }\r\n return smoPitch;\r\n }\r\n static midiPitchToMidiNumber(midiPitch: string): number {\r\n return SmoMusic.smoPitchToInt(SmoMusic.midiPitchToSmoPitch(midiPitch)) + 12;\r\n }\r\n\r\n static pitchToVexKey(smoPitch: Pitch, head: string | null = null): string {\r\n if (!head) {\r\n return SmoMusic._pitchToVexKey(smoPitch);\r\n }\r\n return SmoMusic._pitchToVexKey(smoPitch) + '/' + head;\r\n }\r\n\r\n /**\r\n * Turns vex pitch string into smo pitch, e.g.\r\n * `cn/4 => {'c','n',4}`\r\n * @param vexPitch\r\n * @returns SmoPitch\r\n * */\r\n static vexToSmoPitch(vexPitch: string): Pitch {\r\n let octave = 0;\r\n const po = vexPitch.split('/');\r\n const rv = SmoMusic.vexToSmoKey(po[0]);\r\n if (po.length > 1) {\r\n octave = parseInt(po[1], 10);\r\n octave = isNaN(octave) ? 4 : octave;\r\n } else {\r\n octave = 4;\r\n }\r\n (rv as Pitch).octave = octave;\r\n return rv as Pitch;\r\n }\r\n\r\n /**\r\n * Convert to smo pitch, without octave\r\n * ``['f#'] => [{letter:'f',accidental:'#'}]``\r\n * */\r\n static vexToSmoKey(vexPitch: string): PitchKey {\r\n const accidental = vexPitch.length < 2 ? 'n' : vexPitch.substring(1, vexPitch.length);\r\n const pp = vexPitch.split('/')[0];\r\n return {\r\n letter: pp[0].toLowerCase() as PitchLetter,\r\n accidental\r\n };\r\n }\r\n\r\n // {letter:'f',accidental:'#'} => [f#/\r\n static smoPitchesToVex(pitchAr: Pitch[]): string[] {\r\n var rv: string[] = [];\r\n pitchAr.forEach((p) => {\r\n rv.push(SmoMusic.pitchToVexKey(p));\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * @param vexKey - pitch in vex format\r\n * @returns pitch in vex format, sans octave\r\n */\r\n static stripVexOctave(vexKey: string): string {\r\n if (vexKey.indexOf('/') > 0) {\r\n vexKey = vexKey.substring(0, vexKey.indexOf('/'));\r\n }\r\n return vexKey;\r\n }\r\n /**\r\n * compare pitches for frequency match\r\n */\r\n static pitchArraysMatch(ar1: Pitch[], ar2: Pitch[]): boolean {\r\n let matches = 0;\r\n const ir1 = SmoMusic.smoPitchesToIntArray(ar1);\r\n const ir2 = SmoMusic.smoPitchesToIntArray(ar2);\r\n if (ir1.length !== ir2.length) {\r\n return false;\r\n }\r\n ir1.forEach((num) => {\r\n if (ir2.indexOf(num) >= 0) {\r\n matches += 1;\r\n }\r\n });\r\n return matches === ir1.length;\r\n }\r\n /**\r\n * convert pitches to integer pitch representations\r\n * by calling smoPitchToInt\r\n * @param pitches Smo pitches\r\n * @returns \r\n */\r\n static smoPitchesToIntArray(pitches: Pitch[]): number[] {\r\n const rv: number[] = [];\r\n pitches.forEach((pitch) => {\r\n rv.push(SmoMusic.smoPitchToInt(pitch));\r\n });\r\n return rv.sort();\r\n }\r\n\r\n /**\r\n * convert a pitch to an integer value, used for transpositions, intervals, etc.\r\n * @param pitch \r\n * @returns \r\n */\r\n static smoPitchToInt(pitch: Pitch): number {\r\n if (typeof (pitch.octave) === 'undefined') {\r\n pitch.octave = 0;\r\n }\r\n const intVal = SmoMusic.noteValues[\r\n SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(pitch))].int_val;\r\n const octave = (pitch.letter === 'c' && pitch.accidental === 'b' && pitch.octave > 0) ?\r\n pitch.octave - 1 : pitch.octave;\r\n return octave * 12 + intVal;\r\n }\r\n\r\n /**\r\n * Convert a number to a SMO pitch\r\n * @param intValue - number of 1/2 steps from `c0`\r\n * @returns \r\n */\r\n static smoIntToPitch(intValue: number): Pitch {\r\n let octave = 0;\r\n let accidental = '';\r\n let noteKey: PitchLetter | null = null;\r\n const letterInt = intValue >= 0 ? intValue % 12 :\r\n 12 - (Math.abs(intValue) % 12);\r\n noteKey = (Object.keys(SmoMusic.noteValues).find((key) =>\r\n SmoMusic.noteValues[key].int_val === letterInt && key.length === 1\r\n )) as PitchLetter | null;\r\n if (!noteKey) {\r\n noteKey = (Object.keys(SmoMusic.noteValues).find((key) =>\r\n SmoMusic.noteValues[key].int_val === letterInt && key.length === 2\r\n )) as PitchLetter;\r\n }\r\n octave = Math.floor(intValue / 12);\r\n octave = octave >= 0 ? octave : 0;\r\n accidental = noteKey.substring(1, noteKey.length);\r\n // eslint-disable-next-line\r\n accidental = accidental ? accidental : 'n';\r\n return {\r\n letter: noteKey[0] as PitchLetter,\r\n accidental,\r\n octave\r\n };\r\n }\r\n static pitchKeyToPitch(pk: PitchKey): Pitch {\r\n return { letter: pk.letter, accidental: pk.accidental, octave: 1 };\r\n }\r\n\r\n /**\r\n * Consider instrument transpose when setting key -\r\n * e.g. Eb for Bb instruments is F. Note: return value is not\r\n * a valid VEX key signature. Use vexKeySignatureTranspose for that.\r\n */\r\n static vexKeySigWithOffset(vexKey: string, offset: number): string {\r\n const pk: PitchKey = SmoMusic.vexToSmoKey(vexKey);\r\n const pi: number = SmoMusic.smoPitchToInt(SmoMusic.pitchKeyToPitch(pk)) + offset;\r\n let newKey: string = SmoMusic.toValidKeySignature(SmoMusic.pitchToVexKey(SmoMusic.smoIntToPitch(pi)));\r\n // handle equivalent ks\r\n if (newKey === 'c#' && vexKey.indexOf('b') >= 0) {\r\n newKey = 'db';\r\n }\r\n return newKey;\r\n }\r\n static _enharmonics: Record | null = null;\r\n /**\r\n * return a map of enharmonics for choosing or cycling. notes are in vexKey form.\r\n */\r\n static get enharmonics(): Record {\r\n let i = 0;\r\n if (SmoMusic._enharmonics !== null) {\r\n return SmoMusic._enharmonics;\r\n }\r\n const rv: Record = {};\r\n const keys = Object.keys(SmoMusic.noteValues);\r\n for (i = 0; i < keys.length; ++i) {\r\n const key = keys[i];\r\n const int_val: number = SmoMusic.noteValues[key].int_val;\r\n if (typeof (rv[int_val.toString()]) === 'undefined') {\r\n rv[int_val.toString()] = [];\r\n }\r\n // only consider natural note 1 time. It is in the list twice for some reason.\r\n if (key.indexOf('n') === -1) {\r\n rv[int_val.toString()].push(key);\r\n }\r\n }\r\n SmoMusic._enharmonics = rv;\r\n return rv;\r\n }\r\n /**\r\n * Get enharmonic equivalent of given notes for cycle/choose\r\n * @param vexKey\r\n * @returns\r\n */\r\n static getEnharmonics(vexKey: string): string[] {\r\n const proto = SmoMusic.stripVexOctave(vexKey);\r\n const rv: string[] = [];\r\n let ne = SmoMusic.getEnharmonic(vexKey);\r\n rv.push(proto);\r\n while (ne[0] !== proto[0]) {\r\n rv.push(ne);\r\n ne = SmoMusic.getEnharmonic(ne);\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * return the next note from the cycle in `getEnharmonics`\r\n */\r\n static getEnharmonic(vexKey: string): string {\r\n vexKey = SmoMusic.stripVexOctave(vexKey);\r\n const intVal = SmoMusic.noteValues[vexKey.toLowerCase()].int_val;\r\n const ar = SmoMusic.enharmonics[intVal.toString()];\r\n const len = ar.length;\r\n // 'n' for natural in key but not in value\r\n vexKey = vexKey.length > 1 && vexKey[1] === 'n' ? vexKey[0] : vexKey;\r\n const ix = ar.indexOf(vexKey);\r\n vexKey = ar[(ix + 1) % len];\r\n return vexKey;\r\n }\r\n\r\n /**\r\n * Return a pitch a diatonic step away from SmoPitch in vexKey\r\n * @param smoPitch\r\n * @param vexKey\r\n * @param direction\r\n * @returns\r\n */\r\n static closestTonic(smoPitch: Pitch, vexKey: string, direction: number): Pitch {\r\n direction = Math.sign(direction) < 0 ? -1 : 1;\r\n const tonic = SmoMusic.vexToSmoKey(vexKey);\r\n const rv = SmoMusic.pitchKeyToPitch(tonic);\r\n rv.octave = smoPitch.octave;\r\n const iix = SmoMusic.smoPitchToInt(smoPitch);\r\n const smint = SmoMusic.smoPitchToInt(rv);\r\n if (Math.sign(smint - iix) !== direction) {\r\n rv.octave += direction;\r\n }\r\n return rv;\r\n }\r\n\r\n // ### toValidKeySignature\r\n // When transposing, make sure key signature is valid, e.g. g# should be\r\n // Ab\r\n static toValidKeySignature(vexKey: string): string {\r\n let strlen = 0;\r\n const map: Record = { 'a#': 'bb', 'g#': 'ab', 'cb': 'b', 'd#': 'eb' };\r\n strlen = (vexKey.length > 2 ? 2 : vexKey.length);\r\n // Vex doesn't like 'n' in key signatures.\r\n if (strlen === 2 && vexKey[1].toLowerCase() === 'n') {\r\n strlen = 1;\r\n }\r\n const rv = vexKey.substr(0, strlen);\r\n if (map[rv.toLowerCase()]) {\r\n return map[rv.toLowerCase()];\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * When transposing, get the enharmonic that most closely fits the key\r\n * `getEnharmonicInKey` returns an alternate to the given pitch, or the same pitch.\r\n * `getKeyFriendlyEnharmonic` return a pitch for a given key, given the letter name only\r\n * @param smoPitch\r\n * @param keySignature\r\n * @returns\r\n */\r\n static getEnharmonicInKey(smoPitch: Pitch, keySignature: string): Pitch {\r\n let match = false;\r\n let rv = '';\r\n if (typeof (smoPitch.octave) === 'undefined') {\r\n smoPitch.octave = 1;\r\n }\r\n const sharpKey = keySignature.indexOf('#') >= 0;\r\n const flatKey = keySignature.indexOf('b') >= 0;\r\n const ar = SmoMusic.getEnharmonics(SmoMusic.pitchToVexKey(smoPitch));\r\n rv = SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(smoPitch));\r\n const scaleMap: Record = SmoMusic.getScaleTonesForKey(keySignature);\r\n // new VF.Music().createScaleMap(keySignature);\r\n ar.forEach((vexKey) => {\r\n if (vexKey.length === 1) {\r\n vexKey += 'n';\r\n }\r\n if (vexKey === scaleMap[vexKey[0]]) {\r\n rv = vexKey;\r\n match = true;\r\n } else if (!match) {\r\n // In the absence of a match of a key tone, we bias towards more\r\n // 'common', like Bb is more common than A#, esp. as a chord. This maybe\r\n // just be my horn player bias towards flat keys\r\n if (vexKey === 'a#' && !sharpKey) {\r\n rv = 'bb';\r\n } else if (vexKey === 'g#' && !sharpKey) {\r\n rv = 'ab';\r\n } else if (vexKey === 'c#' && !sharpKey) {\r\n rv = 'db';\r\n } else if (vexKey === 'd#' && !sharpKey) {\r\n rv = 'eb';\r\n } else if (vexKey === 'f#' && flatKey) {\r\n rv = 'gb';\r\n }\r\n }\r\n });\r\n const smoRv: Pitch = SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(rv));\r\n smoRv.octave = smoPitch.octave;\r\n const rvi = SmoMusic.smoPitchToInt(smoRv);\r\n const ori = SmoMusic.smoPitchToInt(smoPitch);\r\n // handle the case of c0 < b0, pitch-wise\r\n smoRv.octave += Math.sign(ori - rvi);\r\n return smoRv;\r\n }\r\n /**\r\n * fix the enharmonic to match the key, if possible\r\n * @example\r\n * `getKeyFriendlyEnharmonic('b','eb'); => returns 'bb'\r\n * return vex string\r\n * `getEnharmonicInKey` returns an alternate to the given pitch, or the same pitch.\r\n * `getKeyFriendlyEnharmonic` return a pitch for a given key, given the letter name only\r\n */\r\n static getKeyFriendlyEnharmonic(letter: string, keySignature: string): string {\r\n let rv: string = letter;\r\n let i = 0;\r\n const scale: string[] = Object.values(SmoMusic.getScaleTonesForKey(keySignature));\r\n let prop: string = SmoMusic.getEnharmonic(letter.toLowerCase());\r\n while (prop.toLowerCase() !== letter.toLowerCase()) {\r\n for (i = 0; i < scale.length; ++i) {\r\n const skey: string = scale[i];\r\n if ((skey[0] === prop && skey[1] === 'n') ||\r\n (skey.toLowerCase() === prop.toLowerCase())) {\r\n rv = skey;\r\n break;\r\n }\r\n }\r\n prop = (prop[1] === 'n' ? prop[0] : prop);\r\n prop = SmoMusic.getEnharmonic(prop);\r\n }\r\n return rv;\r\n }\r\n /**\r\n // given a letter pitch (a,b,c etc.), and a key signature, return the actual note\r\n // that you get without accidentals\r\n // `SmoMusic.getKeySignatureKey('F','G'); // returns f#`\r\n * @param letter\r\n * @param keySignature\r\n * @returns\r\n */\r\n static getKeySignatureKey(letter: PitchLetter, keySignature: string): string {\r\n const scaleMap = SmoMusic.getScaleTonesForKey(keySignature);\r\n return scaleMap[letter];\r\n }\r\n\r\n static getAccidentalForKeySignature(smoPitch: Pitch, keySignature: string): string {\r\n const vexKey = SmoMusic.getKeySignatureKey(smoPitch.letter, keySignature);\r\n return vexKey.length === 1 ? 'n' : vexKey.substr(1, vexKey.length - 1);\r\n }\r\n\r\n // ### isPitchInKeySignature\r\n // Return true if the pitch is not an accidental in the give key, e.g.\r\n // f# in 'g' or c in 'Bb'\r\n static isPitchInKeySignature(smoPitch: Pitch, keySignature: string): boolean {\r\n const vexKey = SmoMusic.getKeySignatureKey(smoPitch.letter, keySignature);\r\n return (vexKey.length === 1 && smoPitch.accidental === 'n' ||\r\n (vexKey[1] === smoPitch.accidental));\r\n }\r\n\r\n // ### getIntervalInKey\r\n // give a pitch and a key signature, return another pitch at the given\r\n // diatonic interval. Similar to getKeyOffset but diatonic.\r\n static getIntervalInKey(pitch: Pitch, keySignature: string, interval: number): Pitch {\r\n let scaleIx = 0;\r\n let diatonicIx = 0;\r\n if (interval === 0) {\r\n return JSON.parse(JSON.stringify(pitch));\r\n }\r\n\r\n const delta = interval > 0 ? 1 : -1;\r\n const inv = -1 * delta;\r\n const tonic = SmoMusic.closestTonic(pitch, keySignature, inv);\r\n const intervals = delta > 0 ? SmoMusic.scaleIntervals.up : SmoMusic.scaleIntervals.down;\r\n const pitchInt = SmoMusic.smoPitchToInt(pitch);\r\n let nkey = tonic;\r\n let nkeyInt = SmoMusic.smoPitchToInt(nkey);\r\n while (Math.sign(nkeyInt - pitchInt) !== delta && Math.sign(nkeyInt - pitchInt) !== 0) {\r\n nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(nkey) + delta * intervals[scaleIx]);\r\n scaleIx = (scaleIx + 1) % 7;\r\n nkeyInt = SmoMusic.smoPitchToInt(nkey);\r\n }\r\n while (diatonicIx !== interval) {\r\n nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(nkey) + delta * intervals[scaleIx]);\r\n scaleIx = (scaleIx + 1) % 7;\r\n diatonicIx += delta;\r\n }\r\n return SmoMusic.getEnharmonicInKey(nkey, keySignature);\r\n }\r\n\r\n static getLetterNotePitch(prevPitch: Pitch, letter: PitchLetter, key: string): Pitch {\r\n const pitch: Pitch = JSON.parse(JSON.stringify(prevPitch));\r\n pitch.letter = letter;\r\n\r\n // Make the key 'a' make 'Ab' in the key of Eb, for instance\r\n const vexKsKey = SmoMusic.getKeySignatureKey(letter, key);\r\n if (vexKsKey.length > 1) {\r\n pitch.accidental = vexKsKey[1];\r\n } else {\r\n pitch.accidental = 'n';\r\n }\r\n\r\n // make the octave of the new note as close to previous (or next) note as possible.\r\n const upv = ['bc', 'ac', 'bd', 'da', 'be', 'gc'];\r\n const downv = ['cb', 'ca', 'db', 'da', 'eb', 'cg'];\r\n const delta = prevPitch.letter + pitch.letter;\r\n if (upv.indexOf(delta) >= 0) {\r\n pitch.octave += 1;\r\n }\r\n if (downv.indexOf(delta) >= 0) {\r\n pitch.octave -= 1;\r\n }\r\n return pitch;\r\n }\r\n\r\n /**\r\n * return the key signature, transposed a number of 1/2 steps in Vex key format\r\n * @param key start key\r\n * @param transposeIndex number of 1/2 steps\r\n * @returns {string} - vex key\r\n */\r\n static vexKeySignatureTranspose(key: string, transposeIndex: number): string {\r\n let rv = key;\r\n if (key.length < 1) {\r\n return key;\r\n }\r\n rv = this.vexKeySigWithOffset(key, transposeIndex);\r\n if (rv.length === 1) {\r\n return rv[0].toUpperCase();\r\n }\r\n return rv[0].toUpperCase() + rv.substring(1);\r\n /* const pitch: Pitch = SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(key));\r\n key = SmoMusic.smoPitchesToVexKeys([pitch], transposeIndex, null)[0];\r\n key = SmoMusic.stripVexOctave(key);\r\n key = key[0].toUpperCase() + key.substring(1, key.length);\r\n if (key.length > 1 && key[1] === 'n') {\r\n key = key[0];\r\n }\r\n return key; */\r\n }\r\n static get frequencyMap() {\r\n return SmoAudioPitch.pitchFrequencyMap;\r\n }\r\n\r\n // ### get letterPitchIndex\r\n // Used to adjust octave when transposing.\r\n // Pitches are measured from c, so that b0 is higher than c0, c1 is 1 note higher etc.\r\n static get letterPitchIndex(): Record {\r\n return {\r\n 'c': 0,\r\n 'd': 1,\r\n 'e': 2,\r\n 'f': 3,\r\n 'g': 4,\r\n 'a': 5,\r\n 'b': 6\r\n };\r\n }\r\n\r\n /**\r\n * Indicate if a change from letter note 'one' to 'two' needs us to adjust the\r\n * octave due to the `SmoMusic.letterPitchIndex` (b0 is higher than c0)\r\n * */\r\n static letterChangedOctave(one: PitchLetter, two: PitchLetter): number {\r\n const p1 = SmoMusic.letterPitchIndex[one];\r\n const p2 = SmoMusic.letterPitchIndex[two];\r\n if (p1 < p2 && p2 - p1 > 2) {\r\n return -1;\r\n }\r\n if (p1 > p2 && p1 - p2 > 2) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Transpose a `Pitch` `offset` 1/2 steps\r\n * @param pitch\r\n * @param offset\r\n * @returns\r\n */\r\n static getKeyOffset(pitch: Pitch, offset: number): Pitch {\r\n const canon = vexCanonicalNotes();\r\n // Convert to vex keys, where f# is a string like 'f#'.\r\n let vexKey = SmoMusic.pitchToVexKey(pitch);\r\n vexKey = SmoMusic.vexToCannonical(vexKey);\r\n const rootIndex = canon.indexOf(vexKey);\r\n let octave = pitch.octave;\r\n if (Math.abs(offset) >= 12) {\r\n const octaveOffset = Math.sign(offset) * Math.floor(Math.abs(offset) / 12);\r\n octave += octaveOffset;\r\n offset = offset - (12 * octaveOffset);\r\n if (offset < 0) {\r\n offset = 12 + offset;\r\n }\r\n }\r\n if (rootIndex + offset >= canon.length) {\r\n octave += 1;\r\n }\r\n if (rootIndex + offset < 0) {\r\n octave -= 1;\r\n }\r\n const rv = JSON.parse(JSON.stringify(pitch));\r\n const index = (rootIndex + canon.length + offset) % canon.length;\r\n vexKey = canon[index];\r\n if (vexKey.length > 1) {\r\n rv.accidental = vexKey.substring(1);\r\n vexKey = vexKey[0];\r\n } else {\r\n rv.accidental = '';\r\n }\r\n rv.letter = vexKey;\r\n rv.octave = octave;\r\n return rv;\r\n }\r\n\r\n // ### keySignatureLength\r\n // return the number of sharp/flat in a key signature for sizing guess.\r\n static get keySignatureLength(): Record {\r\n return {\r\n 'C': 0,\r\n 'B': 5,\r\n 'A': 3,\r\n 'F#': 6,\r\n 'Bb': 2,\r\n 'Ab': 4,\r\n 'Gg': 6,\r\n 'G': 1,\r\n 'F': 1,\r\n 'Eb': 3,\r\n 'Db': 5,\r\n 'Cb': 7,\r\n 'C#': 7,\r\n 'E': 4,\r\n 'D': 2\r\n };\r\n }\r\n\r\n static getSharpsInKeySignature(key: string): number {\r\n const sharpKeys = ['G', 'D', 'A', 'E', 'B', 'F#', 'C#'];\r\n if (sharpKeys.indexOf(key.toUpperCase()) < 0) {\r\n return 0;\r\n }\r\n return SmoMusic.keySignatureLength[key.toUpperCase()];\r\n }\r\n\r\n static getFlatsInKeySignature(key: string): number {\r\n const flatKeys = ['F', 'Bb', 'Eb', 'Ab', 'Db', 'Gb', 'Cb'];\r\n let caseKey = key[0].toUpperCase();\r\n if (key.length > 0) {\r\n caseKey += key.substr(1, key.length);\r\n }\r\n if (flatKeys.indexOf(caseKey) < 0) {\r\n return 0;\r\n }\r\n return SmoMusic.keySignatureLength[caseKey];\r\n }\r\n static midiKeyToVexKey(midiKey: number): string {\r\n const sharpKeys = ['G', 'D', 'A', 'E', 'B', 'F#', 'C#'];\r\n const flatKeys = ['F', 'Bb', 'Eb', 'Ab', 'Db', 'Gb', 'Cb'];\r\n if (midiKey === 0) {\r\n return 'C';\r\n }\r\n const flat = midiKey < 0;\r\n let ix = Math.abs(midiKey) - 1;\r\n if (ix > 6) {\r\n return 'C';\r\n }\r\n if (flat) {\r\n return flatKeys[ix];\r\n } else {\r\n return sharpKeys[ix];\r\n }\r\n }\r\n static highestDuration = 32768;\r\n static lowestDuration = 32768 / 256;\r\n static durationsDescending = [\r\n SmoMusic.highestDuration, // breve?\r\n SmoMusic.highestDuration / 2, // whole\r\n SmoMusic.highestDuration / 4, // 1/2\r\n SmoMusic.highestDuration / 8, // 1/4 \r\n SmoMusic.highestDuration / 16, // 8th\r\n SmoMusic.highestDuration / 32, // 16th\r\n SmoMusic.highestDuration / 64, // 32nd\r\n SmoMusic.highestDuration / 128 // 64th \r\n ];\r\n static durationsAscending = [\r\n SmoMusic.highestDuration / 256, // 128th\r\n SmoMusic.highestDuration / 128, // 64th\r\n SmoMusic.highestDuration / 64, // 32nd \r\n SmoMusic.highestDuration / 32, // 16th\r\n SmoMusic.highestDuration / 16, // 8th\r\n SmoMusic.highestDuration / 8, // 1/4\r\n SmoMusic.highestDuration / 4, // 1/2 \r\n SmoMusic.highestDuration / 2, // whole\r\n SmoMusic.highestDuration / 1 // breve\r\n ];\r\n static ticksFromSmoDuration(duration: SimpleDuration): number {\r\n let rv = duration.baseTicks;\r\n let dotValue = duration.baseTicks / 2;\r\n for (var i = 0; i < duration.dots && i < 4; ++i) {\r\n rv += dotValue;\r\n dotValue = dotValue / 2; \r\n }\r\n return rv;\r\n }\r\n static _validDurations: Record | null = null;\r\n static _validDurationKeys: number[] = [];\r\n static get validDurations():Record {\r\n const computeDots = (tt: number, dots: number) => {\r\n let dottedValue = tt;\r\n let dotValue = tt / 2;\r\n let minDot = 0;\r\n for (var xxx = 0; xxx < dots; ++xxx) {\r\n dottedValue += dotValue;\r\n minDot = dotValue;\r\n dotValue = dotValue / 2;\r\n }\r\n return { dottedValue, minDot };\r\n }\r\n if (SmoMusic._validDurations === null) {\r\n SmoMusic._validDurations = {};\r\n let index = 0;\r\n for (var i = 0; i < SmoMusic.durationsDescending.length; ++i) {\r\n const baseTicks = SmoMusic.durationsDescending[i];\r\n for (var j = 3; j >= 1; --j) {\r\n const { dottedValue, minDot } = computeDots(baseTicks, j);\r\n if (dottedValue < SmoMusic.highestDuration && minDot > SmoMusic.lowestDuration) {\r\n SmoMusic._validDurations[dottedValue] = {\r\n index: SmoMusic._validDurationKeys.length,\r\n ticks: dottedValue,\r\n baseTicks,\r\n dots: j\r\n }\r\n SmoMusic._validDurationKeys.push(dottedValue);\r\n }\r\n }\r\n SmoMusic._validDurations[baseTicks] = {\r\n index: SmoMusic._validDurationKeys.length,\r\n ticks: baseTicks,\r\n baseTicks,\r\n dots: 0\r\n };\r\n SmoMusic._validDurationKeys.push(baseTicks);\r\n }\r\n }\r\n return SmoMusic._validDurations;\r\n }\r\n /**\r\n * Get the closest duration from ticks\r\n * @param ticks \r\n * @returns \r\n */\r\n static closestSmoDurationFromTicks(ticks: number): SimpleDuration | null {\r\n if (SmoMusic.validDurations[ticks]) {\r\n return SmoMusic.validDurations[ticks];\r\n }\r\n for (var i = 0; i < SmoMusic._validDurationKeys.length; ++i) {\r\n if (SmoMusic._validDurationKeys[i] < ticks) {\r\n return SmoMusic.validDurations[SmoMusic._validDurationKeys[i]];\r\n }\r\n }\r\n return null;\r\n }\r\n static _ticksToDuration: Record = {};\r\n\r\n // ### ticksToDuration\r\n // Frequently we double/halve a note duration, and we want to find the vex tick duration that goes with that.\r\n static get ticksToDuration(): Record {\r\n let i = 0;\r\n const durations = ['1/2', '1', '2', '4', '8', '16', '32', '64', '128', '256'];\r\n const _ticksToDurationsF = () => {\r\n for (i = 0; i < SmoMusic.durationsDescending.length - 1; ++i) {\r\n let j = 0;\r\n let dots = '';\r\n let ticks = 0;\r\n\r\n // We support up to 4 'dots'\r\n for (j = 0; j <= 4 && j + i < SmoMusic.durationsDescending.length; ++j) {\r\n ticks += SmoMusic.durationsDescending[i + j];\r\n SmoMusic._ticksToDuration[ticks.toString()] = durations[i] + dots;\r\n dots += 'd';\r\n }\r\n }\r\n };\r\n if (Object.keys(SmoMusic._ticksToDuration).length < 1) {\r\n _ticksToDurationsF();\r\n }\r\n return SmoMusic._ticksToDuration;\r\n } \r\n // static closestSmoDuration(ticks: number): SmoDuration {\r\n // if ()\r\n // }\r\n static timeSignatureToTicks(timeSignature: string): number {\r\n const nd = timeSignature.split('/');\r\n const num = parseInt(nd[0], 10);\r\n const den = parseInt(nd[1], 10);\r\n const base = 2048 * (8 / den);\r\n return base * num;\r\n }\r\n static smoTicksToVexDots(ticks: number) {\r\n const vd = SmoMusic.ticksToDuration[ticks];\r\n if (!vd) {\r\n return 0;\r\n }\r\n const dots = (vd.match(/d/g) || []).length;\r\n return dots;\r\n }\r\n static midiTicksForQuantizeTo(ticks: number) {\r\n const oneDot = ticks * 2;\r\n const twoDots = ticks * 4;\r\n const threeDots = ticks * 8;\r\n const dCount = (str: string) => {\r\n const re = /d/g\r\n return ((str || '').match(re) || []).length\r\n }\r\n return Object.keys(SmoMusic.ticksToDuration).filter((key) => {\r\n const keyInt = parseInt(key, 10);\r\n if (keyInt < ticks) {\r\n return false;\r\n }\r\n const dots = dCount(SmoMusic.ticksToDuration[key]);\r\n if (dots > 0 && keyInt < oneDot) {\r\n return false;\r\n }\r\n if (dots > 1 && keyInt < twoDots) {\r\n return false;\r\n }\r\n if (dots > 2 && keyInt < threeDots) {\r\n return false;\r\n }\r\n if (dots > 3) {\r\n return false;\r\n }\r\n return true;\r\n })\r\n .map((key) => parseInt(key, 10));\r\n // return Object.keys(SmoMusic.ticksToDuration).map((key) => parseInt(key, 10)); \r\n }\r\n static get midiTicksForQuantizeMap(): Record {\r\n return {\r\n 512: SmoMusic.midiTicksForQuantizeTo(1024),\r\n 1024: SmoMusic.midiTicksForQuantizeTo(1024),\r\n 2048: SmoMusic.midiTicksForQuantizeTo(2048)\r\n };\r\n }\r\n static midiTicksForQuantize(ticks: number) {\r\n return SmoMusic.midiTicksForQuantizeMap[ticks];\r\n }\r\n static binarySearch(target: number, ix: number, partition: number, input: number[]) {\r\n const test = input[ix];\r\n const cost = Math.abs(target - test);\r\n if (cost < 1) {\r\n return ({ cost, result: test, newIx: ix, oldIx: ix, partition: 0, input })\r\n }\r\n partition = Math.round(partition / 2) + 1;\r\n const step = Math.round(partition / 2);\r\n if (input[ix] > target) {\r\n return ({ cost, result: input[ix], newIx: ix - step, partition, input });\r\n } else {\r\n return ({ cost, result: input[ix], newIx: ix + step, partition, input });\r\n }\r\n }\r\n static midiTickSearch(target: number, quantize: number) {\r\n const tickSet = SmoMusic.midiTicksForQuantize(quantize);\r\n let partition = Math.round(tickSet.length / 2);\r\n let ix = partition;\r\n let best = { cost: Math.abs(tickSet[ix] - target), result: tickSet[ix], ix };\r\n let result = SmoMusic.binarySearch(target, ix, partition, tickSet);\r\n while (best.cost > 1) {\r\n if (best.cost > result.cost) {\r\n best.cost = result.cost;\r\n best.result = result.result;\r\n best.ix = ix;\r\n }\r\n ix = result.newIx;\r\n if (result.partition <= 3) {\r\n break;\r\n }\r\n result = SmoMusic.binarySearch(target, result.newIx, result.partition, tickSet);\r\n }\r\n if (result.cost > 1 && result.partition > 0) {\r\n let i = 0;\r\n const ix = best.ix;\r\n const step = best.result > target ? -1 : 1;\r\n for (i = 0; i < (result.partition + 2) && (i * step) + ix < tickSet.length && (i * step) + ix >= 0; ++i) {\r\n const newIx = (i * step) + ix;\r\n const cost = Math.abs(target - tickSet[newIx]);\r\n if (best.cost > cost) {\r\n best.cost = cost;\r\n best.ix = (i * step) + ix;\r\n best.result = tickSet[(i * step) + ix];\r\n }\r\n }\r\n }\r\n return { cost: best.cost, result: best.result };\r\n }\r\n // ## closestVexDuration\r\n // ## Description:\r\n // return the closest vex duration >= to the actual number of ticks. Used in beaming\r\n // triplets which have fewer ticks then their stem would normally indicate.\r\n static closestVexDuration(ticks: number): string {\r\n let stemTicks = SmoMusic.highestDuration;\r\n\r\n // The stem value is the type on the non-tuplet note, e.g. 1/8 note\r\n // for a triplet.\r\n while (ticks <= stemTicks) {\r\n stemTicks = stemTicks / 2;\r\n }\r\n stemTicks = stemTicks * 2;\r\n return SmoMusic.ticksToDuration[stemTicks];\r\n }\r\n\r\n // ### closestDurationTickLtEq\r\n // Price is right style, closest tick value without going over. Used to pad\r\n // rests when reading musicXML.\r\n static closestDurationTickLtEq(ticks: number): number {\r\n const sorted = Object.keys(SmoMusic.ticksToDuration)\r\n .map((key) => parseInt(key, 10))\r\n .filter((key) => key <= ticks);\r\n return sorted[sorted.length - 1];\r\n }\r\n /**\r\n * Return array of valid note-lengths from an odd number of ticks,\r\n * so we can come as close as possible to representing the ticks with notes\r\n * @param ticks\r\n * @returns\r\n */\r\n static splitIntoValidDurations(ticks: number): number[] {\r\n const rv = [];\r\n let closest = 0;\r\n while (ticks > 128) {\r\n closest = SmoMusic.closestDurationTickLtEq(ticks);\r\n ticks -= closest;\r\n rv.push(closest);\r\n }\r\n return rv;\r\n }\r\n // ### vexStemType\r\n // return the vex stem type (no dots)\r\n static vexStemType(ticks: number): string {\r\n const str = SmoMusic.ticksToDuration[SmoMusic.splitIntoValidDurations(ticks)[0]];\r\n if (str.indexOf('d') >= 0) {\r\n return str.substr(0, str.indexOf('d'));\r\n }\r\n return str;\r\n }\r\n\r\n // ### Description:\r\n // Get ticks for this note with an added dot. Return\r\n // identity if that is not a supported value.\r\n static getNextDottedLevel(ticks: number): number {\r\n const ticksOrNull = SmoMusic.closestSmoDurationFromTicks(ticks);\r\n if (ticksOrNull && ticksOrNull.index > 0) {\r\n return SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index - 1]].ticks;\r\n }\r\n return ticks;\r\n }\r\n\r\n // ### Description:\r\n // Get ticks for this note with one fewer dot. Return\r\n // identity if that is not a supported value.\r\n static getPreviousDottedLevel(ticks: number): number {\r\n const ticksOrNull = SmoMusic.closestSmoDurationFromTicks(ticks);\r\n if (ticksOrNull && ticksOrNull.index < SmoMusic._validDurationKeys.length + 1) {\r\n return SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index + 1]].ticks;\r\n }\r\n return ticks;\r\n }\r\n\r\n /**\r\n * break the duration up into an array of durations, to split a long\r\n * note up between bars when pasting.\r\n * @param duration\r\n * @returns\r\n */\r\n static gcdMap(duration: number): number[] {\r\n let k = 0;\r\n const keys = Object.keys(SmoMusic.ticksToDuration).map((x) => parseInt(x, 10));\r\n const dar = [];\r\n const gcd = (td: number) => {\r\n let rv = keys[0];\r\n for (k = 1; k < keys.length; ++k) {\r\n if (td % keys[k] === 0) {\r\n rv = keys[k];\r\n }\r\n }\r\n return rv;\r\n };\r\n while (duration > 0 && !SmoMusic.ticksToDuration[duration]) {\r\n const div = gcd(duration);\r\n duration = duration - div;\r\n dar.push(div);\r\n }\r\n if (duration > 0) {\r\n dar.push(duration);\r\n }\r\n return dar.sort((a, b) => a > b ? -1 : 1);\r\n }\r\n\r\n static notesFromLetters(startPitch: Pitch, clef: Clef, keySignature: string, duration: number, letters: string): SmoNote[] {\r\n const rv: SmoNote[] = [];\r\n let curPitch = startPitch;\r\n letters.split('').forEach((letter) => {\r\n curPitch = SmoMusic.getLetterNotePitch(curPitch, letter as PitchLetter, keySignature);\r\n const defs = SmoNote.defaults;\r\n defs.ticks = { numerator: duration, denominator: 1, remainder: 0 };\r\n defs.pitches = [curPitch];\r\n defs.clef = clef;\r\n rv.push(new SmoNote(defs));\r\n });\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoNote}. Notes have pitches and a duration, and other\r\n * modifiers that can affect display or playback.\r\n * @module /smo/data/note\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoNoteModifierBase, SmoArticulation, SmoLyric, SmoGraceNote, SmoMicrotone, SmoOrnament, SmoDynamicText, \r\n SmoArpeggio, SmoArticulationParametersSer, GraceNoteParamsSer, SmoOrnamentParamsSer, SmoMicrotoneParamsSer,\r\n SmoClefChangeParamsSer, SmoClefChange, SmoLyricParamsSer, SmoDynamicTextSer, SmoTabNote,\r\n SmoTabNoteParamsSer, \r\n SmoTabNoteParams} from './noteModifiers';\r\nimport { SmoMusic } from './music';\r\nimport { Ticks, Pitch, SmoAttrs, Transposable, PitchLetter, SvgBox, getId, \r\n createXmlAttribute, serializeXmlModifierArray} from './common';\r\nimport { FontInfo, vexCanonicalNotes } from '../../common/vex';\r\n\r\n// @internal\r\nexport type NoteType = 'n' | 'r' | '/';\r\n// @internal\r\nexport type NoteStringParam = 'noteHead' | 'clef';\r\n// @internal\r\nexport const NoteStringParams: NoteStringParam[] = ['noteHead', 'clef'];\r\n// @internal\r\nexport type NoteNumberParam = 'beamBeats' | 'flagState';\r\n// @internal\r\nexport const NoteNumberParams: NoteNumberParam[] = ['beamBeats', 'flagState'];\r\n// @internal\r\nexport type NoteBooleanParam = 'hidden' | 'endBeam' | 'isCue';\r\n// @internal\r\nexport const NoteBooleanParams: NoteBooleanParam[] = ['hidden', 'endBeam', 'isCue'];\r\n/**\r\n * Constructor parameters for a note. Usually you will call\r\n * {@link SmoNote.defaults}, and modify the parameters you need to change.\r\n * @param noteType\r\n * @param noteHead is non-empty, a Vex notehead code TODO make a record<>\r\n * @param clef determines how the pitch is placed on the staff\r\n * @param textModifiers are lyrics, chords, dynamics\r\n * @param articulations\r\n * @param graceNotes\r\n * @param ornaments\r\n * @param tones\r\n * @param tuplet tuplet info, if the note is part of a tuplet\r\n * @param endBeam true if this is the last note in a beam\r\n * @param fillStyle for special effects, for instance to highlight active voice\r\n * @param hidden indicates the note (usually a rest) is invisible (transparent)\r\n * @param beamBeats how many ticks to use before beaming a group\r\n * @param flagState up down auto\r\n * @param ticks duration\r\n * @param pitches SmoPitch array\r\n * @param isCue tiny notes\r\n * @category SmoParameters\r\n */\r\nexport interface SmoNoteParams {\r\n /** note, rest, slash */\r\n noteType: NoteType,\r\n /**\r\n * custom note head, defaults to black or open (based on duration)\r\n */\r\n noteHead: string,\r\n /**\r\n * clef of this note, determines leger lines and sound\r\n */\r\n clef: string,\r\n /**\r\n * lyrics, annotations\r\n */\r\n textModifiers: SmoNoteModifierBase[],\r\n /**\r\n * articulations attached to the note\r\n */\r\n articulations: SmoArticulation[],\r\n /**\r\n * grace notes before the note\r\n */\r\n graceNotes: SmoGraceNote[],\r\n /**\r\n * ornaments attached to the note\r\n */\r\n ornaments: SmoOrnament[],\r\n /**\r\n * microtones attached to the note\r\n */\r\n tones: SmoMicrotone[],\r\n /**\r\n * arpeggio on the note\r\n */\r\n arpeggio?: SmoArpeggio,\r\n /**\r\n * if this note is part of a tuplet\r\n */\r\n tupletId: string | null,\r\n /*\r\n * If a custom tab note is assigned to this note\r\n */\r\n tabNote?: SmoTabNote,\r\n /**\r\n * does this note force the end of a beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * fill, for the pretty\r\n */\r\n fillStyle: string | null,\r\n /**\r\n * indicates 'hidden' note. Useful for padding beginning/end of partial measures\r\n */\r\n hidden: boolean,\r\n /**\r\n * how many notes to beam before creating a new beam group\r\n */\r\n beamBeats: number,\r\n /**\r\n * up, down, auto\r\n */\r\n flagState: number,\r\n /**\r\n * note duration\r\n */\r\n ticks: Ticks,\r\n /**\r\n * pitch for leger lines and sounds\r\n */\r\n pitches: Pitch[],\r\n /**\r\n * draw cue sized\r\n */\r\n isCue: boolean,\r\n /**\r\n * indicates this note goes with a clef change\r\n */\r\n clefNote: SmoClefChangeParamsSer\r\n}\r\n\r\nexport type SmoNoteTextModifierSer = SmoLyricParamsSer | SmoDynamicTextSer;\r\n/**\r\n * The serializable bits of a Note. Notes will always \r\n * have a type, and if a sounded note, can contain pitches. It will always\r\n * contains ticks.\r\n * @category serialization\r\n */\r\nexport interface SmoNoteParamsSer {\r\n /** constructor */\r\n ctor: string;\r\n /** attributes for identity */\r\n attrs: SmoAttrs;\r\n /** note, rest, slash */\r\n noteType: NoteType,\r\n /**\r\n * custom note head, defaults to black or open (based on duration)\r\n */\r\n noteHead: string,\r\n /**\r\n * clef of this note, determines leger lines and sound\r\n */\r\n clef: string,\r\n /**\r\n * lyrics, annotations\r\n */\r\n textModifiers: SmoNoteTextModifierSer[],\r\n /**\r\n * articulations attached to the note\r\n */\r\n articulations: SmoArticulationParametersSer,\r\n /**\r\n * grace notes before the note\r\n */\r\n graceNotes: GraceNoteParamsSer[],\r\n /**\r\n * ornaments attached to the note\r\n */\r\n ornaments: SmoOrnamentParamsSer[],\r\n /**\r\n * microtones attached to the note\r\n */\r\n tones: SmoMicrotoneParamsSer[],\r\n /**\r\n * arpeggio on the note\r\n */\r\n arpeggio?: SmoArticulationParametersSer,\r\n /**\r\n * if this note is part of a tuplet\r\n */\r\n tupletId?: string,\r\n /**\r\n * If a custom tab note is here, keep track of it\r\n */\r\n tabNote?: SmoTabNoteParamsSer,\r\n /**\r\n * does this note force the end of a beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * fill, for the pretty\r\n */\r\n fillStyle: string | null,\r\n /**\r\n * indicates 'hidden' note. Useful for padding beginning/end of partial measures\r\n */\r\n hidden: boolean,\r\n /**\r\n * how many notes to beam before creating a new beam group\r\n */\r\n beamBeats: number,\r\n /**\r\n * up, down, auto\r\n */\r\n flagState: number,\r\n /**\r\n * note duration\r\n */\r\n ticks: Ticks,\r\n /**\r\n * pitch for leger lines and sounds\r\n */\r\n pitches: Pitch[],\r\n /**\r\n * draw cue sized\r\n */\r\n isCue: boolean,\r\n /**\r\n * indicates this note goes with a clef change\r\n */\r\n clefNote? : SmoClefChangeParamsSer\r\n}\r\n\r\nexport interface SmoTupletNote {\r\n ticks: Ticks,\r\n noteId: string,\r\n tupletId: string\r\n}\r\nfunction isSmoNoteParamsSer(params: Partial): params is SmoNoteParamsSer {\r\n if (params.ctor && params.ctor === 'SmoNote') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * SmoNote contains the pitch and duration of a note or chord.\r\n * It can also contain arrays of modifiers like lyrics, articulations etc.\r\n * Also information about the beaming, flag etc.\r\n * @category SmoObject\r\n * */\r\nexport class SmoNote implements Transposable {\r\n constructor(params: SmoNoteParams) {\r\n const defs = SmoNote.defaults;\r\n NoteStringParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n this.tupletId = params.tupletId;\r\n this.noteType = params.noteType ? params.noteType : defs.noteType;\r\n NoteNumberParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n NoteBooleanParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n if (params.clefNote) {\r\n this.clefNote = new SmoClefChange(params.clefNote);\r\n }\r\n if (params.tabNote) {\r\n this.tabNote = new SmoTabNote(params.tabNote);\r\n }\r\n const ticks = params.ticks ? params.ticks : defs.ticks;\r\n const pitches = params.pitches ? params.pitches : defs.pitches;\r\n this.ticks = JSON.parse(JSON.stringify(ticks));\r\n this.pitches = JSON.parse(JSON.stringify(pitches));\r\n this.clef = params.clef ? params.clef : defs.clef;\r\n this.fillStyle = params.fillStyle ? params.fillStyle : '';\r\n // legacy tuplet, now we just need the tuplet id\r\n if ((params as any).tuplet) {\r\n this.tupletId = (params as any).tuplet.id;\r\n }\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoNote'\r\n }; // else inherit\r\n }\r\n static get flagStates() {\r\n return { auto: 0, up: 1, down: 2 };\r\n }\r\n // Note type and ID\r\n attrs: SmoAttrs;\r\n flagState: number = SmoNote.flagStates.auto;\r\n textModifiers: SmoNoteModifierBase[] = [];\r\n articulations: SmoArticulation[] = [];\r\n ornaments: SmoOrnament[] = [];\r\n pitches: Pitch[] = [];\r\n noteHead: string = '';\r\n arpeggio?: SmoArpeggio;\r\n tabNote?: SmoTabNote;\r\n clef: string = 'treble';\r\n clefNote: SmoClefChange | null = null;\r\n graceNotes: SmoGraceNote[] = [];\r\n noteType: NoteType = 'n';\r\n fillStyle: string = '';\r\n hidden: boolean = false;\r\n tupletId: string | null = null;\r\n tones: SmoMicrotone[] = [];\r\n endBeam: boolean = false;\r\n ticks: Ticks = { numerator: 4096, denominator: 1, remainder: 0 };\r\n beamBeats: number = 4096;\r\n beam_group: SmoAttrs | null = null;\r\n renderId: string | null = null;\r\n keySignature: string = 'c';\r\n logicalBox: SvgBox | null = null;\r\n isCue: boolean = false;\r\n accidentalsRendered: string[] = [];// set by renderer if accidental is to display\r\n /**\r\n * used in serialization\r\n * @internal\r\n */\r\n static get parameterArray() {\r\n return ['ticks', 'pitches', 'noteType', 'tuplet', 'clef', 'isCue',\r\n 'endBeam', 'beamBeats', 'flagState', 'noteHead', 'fillStyle', 'hidden', 'arpeggio', 'clefNote'\r\n , 'tupletId'];\r\n }\r\n /**\r\n * Default constructor parameters. We always return a copy so the caller can modify it\r\n */\r\n static get defaults(): SmoNoteParams {\r\n return JSON.parse(JSON.stringify({\r\n noteType: 'n',\r\n noteHead: 'n',\r\n clef: 'treble',\r\n textModifiers: [],\r\n articulations: [],\r\n graceNotes: [],\r\n ornaments: [],\r\n tones: [],\r\n endBeam: false,\r\n fillStyle: '',\r\n hidden: false,\r\n beamBeats: 4096,\r\n isCue: false,\r\n flagState: SmoNote.flagStates.auto,\r\n ticks: {\r\n numerator: 4096,\r\n denominator: 1,\r\n remainder: 0\r\n },\r\n pitches: [{\r\n letter: 'b',\r\n octave: 4,\r\n accidental: 'n'\r\n }],\r\n }));\r\n }\r\n /**\r\n * Up, down auto (tri-state)\r\n */\r\n toggleFlagState() {\r\n this.flagState = (this.flagState + 1) % 3;\r\n }\r\n\r\n get dots() {\r\n if (this.isTuplet) {\r\n return 0;\r\n }\r\n const vexDuration = SmoMusic.closestSmoDurationFromTicks(this.tickCount);\r\n if (!vexDuration) {\r\n return 0;\r\n }\r\n return vexDuration.dots;\r\n }\r\n\r\n private _addModifier(dynamic: SmoDynamicText, toAdd: boolean) {\r\n var tms = [];\r\n this.textModifiers.forEach((tm) => {\r\n if (tm.attrs.type !== dynamic.attrs.type) {\r\n tms.push(tm);\r\n }\r\n });\r\n if (toAdd) {\r\n tms.push(dynamic);\r\n }\r\n this.textModifiers = tms;\r\n }\r\n\r\n private _addArticulation(articulation: SmoArticulation, toAdd: boolean) {\r\n var tms = [];\r\n this.articulations.forEach((tm) => {\r\n if (tm.articulation !== articulation.articulation) {\r\n tms.push(tm);\r\n }\r\n });\r\n if (toAdd) {\r\n tms.push(articulation);\r\n }\r\n this.articulations = tms;\r\n }\r\n\r\n /**\r\n * Add a new dynamic to thisnote\r\n * @param dynamic\r\n */\r\n addDynamic(dynamic: SmoDynamicText) {\r\n this._addModifier(dynamic, true);\r\n }\r\n /**\r\n * Remove the dynamic from this note.\r\n * @param dynamic \r\n */\r\n removeDynamic(dynamic: SmoDynamicText) {\r\n this._addModifier(dynamic, false);\r\n }\r\n /**\r\n * Get all note modifiers of a type, either a lyric or a dynamic\r\n * @param type ctor\r\n * @returns \r\n */\r\n getModifiers(type: string) {\r\n var ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === type\r\n );\r\n return ms;\r\n }\r\n setArpeggio(arp: SmoArpeggio) {\r\n this.arpeggio = arp;\r\n }\r\n /**\r\n * \r\n * @returns the longest lyric, used for formatting\r\n */\r\n longestLyric(): SmoLyric | null {\r\n const tms: SmoNoteModifierBase[] = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.lyric\r\n );\r\n if (!tms.length) {\r\n return null;\r\n }\r\n return tms.reduce((m1, m2) =>\r\n (m1 as SmoLyric).getText().length > (m2 as SmoLyric).getText().length ? m1 : m2\r\n ) as SmoLyric;\r\n }\r\n /** Add a lyric to this note, replacing another in the same verse */\r\n addLyric(lyric: SmoLyric) {\r\n const tms = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type !== 'SmoLyric' || (mod as SmoLyric).parser !== lyric.parser ||\r\n (mod as SmoLyric).verse !== lyric.verse\r\n );\r\n tms.push(lyric);\r\n this.textModifiers = tms;\r\n }\r\n\r\n /**\r\n * @returns array of lyrics that are lyrics\r\n */\r\n getTrueLyrics(): SmoLyric[] {\r\n const ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.lyric);\r\n ms.sort((a, b) => (a as SmoLyric).verse - (b as SmoLyric).verse);\r\n return (ms as SmoLyric[]);\r\n }\r\n /**\r\n * \r\n * @returns array of SmoLyric whose parsers are chord\r\n */\r\n getChords(): SmoLyric[] {\r\n const ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.chord\r\n );\r\n return ms as SmoLyric[];\r\n }\r\n /**\r\n * \r\n * @param lyric lyric to remove, find the best match if there are multiples\r\n */\r\n removeLyric(lyric: SmoLyric) {\r\n const tms = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type !== 'SmoLyric' || (mod as SmoLyric).verse !== lyric.verse || (mod as SmoLyric).parser !== lyric.parser\r\n );\r\n this.textModifiers = tms;\r\n }\r\n /**\r\n * \r\n * @param verse \r\n * @param parser \r\n * @returns \r\n */\r\n getLyricForVerse(verse: number, parser: number) {\r\n return this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === parser && (mod as SmoLyric).verse === verse\r\n );\r\n }\r\n\r\n /**\r\n * \r\n * @param fontInfo\r\n */\r\n setLyricFont(fontInfo: FontInfo) {\r\n const lyrics = this.getTrueLyrics();\r\n\r\n lyrics.forEach((lyric) => {\r\n lyric.fontInfo = JSON.parse(JSON.stringify(fontInfo));\r\n });\r\n }\r\n\r\n /**\r\n * @param adjustNoteWidth if true, vex will consider the lyric width when formatting the measure\r\n */\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n const lyrics = this.getTrueLyrics();\r\n lyrics.forEach((lyric) => {\r\n lyric.adjustNoteWidth = adjustNoteWidth;\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n const chords = this.getChords();\r\n chords.forEach((chord) => {\r\n chord.adjustNoteWidth = adjustNoteWidth;\r\n });\r\n }\r\n\r\n setChordFont(fontInfo: FontInfo) {\r\n const chords = this.getChords();\r\n chords.forEach((chord) => {\r\n chord.fontInfo = JSON.parse(JSON.stringify(fontInfo));\r\n });\r\n }\r\n\r\n getOrnaments() {\r\n return this.ornaments.filter((oo) => oo.isJazz() === false\r\n && typeof(SmoOrnament.textNoteOrnaments[oo.ornament]) !== 'string');\r\n }\r\n\r\n getJazzOrnaments() {\r\n return this.ornaments.filter((oo) => oo.isJazz());\r\n }\r\n\r\n getTextOrnaments() {\r\n return this.ornaments.filter((oo) => typeof(SmoOrnament.textNoteOrnaments[oo.ornament]) === 'string');\r\n }\r\n\r\n /**\r\n * Toggle the ornament up/down/off\r\n * @param ornament\r\n */\r\n toggleOrnament(ornament: SmoOrnament) {\r\n const aix = this.ornaments.filter((a) =>\r\n a.attrs.type === 'SmoOrnament' && a.ornament === ornament.ornament\r\n );\r\n if (!aix.length) {\r\n this.ornaments.push(ornament);\r\n } else {\r\n this.ornaments = [];\r\n }\r\n }\r\n setTabNote(params: SmoTabNoteParams) {\r\n this.tabNote = new SmoTabNote(params);\r\n this.tabNote.isAssigned = true;\r\n }\r\n clearTabNote() {\r\n this.tabNote = undefined;\r\n }\r\n /**\r\n * Toggle the ornament up/down/off\r\n * @param articulation\r\n */\r\n toggleArticulation(articulation: SmoArticulation) {\r\n var aix = this.articulations.findIndex((a) =>\r\n a.articulation === articulation.articulation\r\n );\r\n if (aix >= 0) {\r\n const cur = this.articulations[aix];\r\n if (cur.position === SmoArticulation.positions.above) {\r\n cur.position = SmoArticulation.positions.below;\r\n return;\r\n } else {\r\n this._addArticulation(articulation, false);\r\n return;\r\n }\r\n }\r\n this._addArticulation(articulation, true);\r\n }\r\n\r\n /**\r\n * Sort pitches in pitch order, Vex likes to receive pitches in order\r\n * @param note \r\n */\r\n static sortPitches(note: Transposable) {\r\n const canon = vexCanonicalNotes();\r\n const keyIndex = ((pitch: Pitch) =>\r\n canon.indexOf(pitch.letter) + pitch.octave * 12\r\n );\r\n note.pitches.sort((a, b) => keyIndex(a) - keyIndex(b));\r\n }\r\n setNoteHead(noteHead: string) {\r\n if (this.noteHead === noteHead) {\r\n this.noteHead = '';\r\n } else {\r\n this.noteHead = noteHead;\r\n }\r\n }\r\n /**\r\n * \r\n * @param graceNote\r\n * @param offset the index from the first grace note\r\n */\r\n addGraceNote(graceNote: SmoGraceNote, offset: number) {\r\n if (typeof(offset) === 'undefined') {\r\n offset = 0;\r\n }\r\n graceNote.clef = this.clef;\r\n this.graceNotes.push(graceNote);\r\n }\r\n removeGraceNote(offset: number) {\r\n if (offset >= this.graceNotes.length) {\r\n return;\r\n }\r\n this.graceNotes.splice(offset, 1);\r\n }\r\n getGraceNotes() {\r\n return this.graceNotes;\r\n }\r\n /**\r\n * Add another pitch to this note at `offset` 1/2 steps\r\n * @param note\r\n * @param offset\r\n */\r\n static addPitchOffset(note: Transposable, offset: number): void {\r\n if (note.pitches.length === 0) {\r\n return;\r\n }\r\n note.noteType = 'n';\r\n const pitch = note.pitches[0];\r\n note.pitches.push(SmoMusic.getKeyOffset(pitch, offset));\r\n SmoNote.sortPitches(note);\r\n }\r\n /**\r\n * Add another pitch to this note at `offset` 1/2 steps\r\n * @param offset\r\n * @returns \r\n */\r\n addPitchOffset(offset: number) {\r\n if (this.pitches.length === 0) {\r\n return;\r\n }\r\n this.noteType = 'n';\r\n const pitch = this.pitches[0];\r\n this.pitches.push(SmoMusic.getKeyOffset(pitch, offset));\r\n SmoNote.sortPitches(this);\r\n }\r\n toggleRest() {\r\n this.noteType = (this.noteType === 'r' ? 'n' : 'r');\r\n }\r\n toggleSlash() {\r\n this.noteType = (this.noteType === '/' ? 'n' : '/');\r\n }\r\n makeSlash() {\r\n this.noteType = '/';\r\n }\r\n makeRest() {\r\n this.noteType = 'r';\r\n }\r\n isRest() {\r\n return this.noteType === 'r';\r\n }\r\n isSlash() {\r\n return this.noteType === '/';\r\n }\r\n isHidden() {\r\n return this.hidden;\r\n }\r\n\r\n makeNote() {\r\n this.noteType = 'n';\r\n // clear fill style if we were hiding rests\r\n this.fillStyle = '';\r\n this.hidden = false;\r\n }\r\n /**\r\n * set note opacity on/off\r\n * @param val\r\n */\r\n makeHidden(val: boolean) {\r\n this.hidden = val;\r\n this.fillStyle = val ? '#aaaaaa7f' : '';\r\n }\r\n\r\n /**\r\n * Return true if this note is part of a tuplet\r\n */\r\n get isTuplet(): boolean {\r\n return typeof(this.tupletId) !== 'undefined' && this.tupletId !== null && this.tupletId.length > 0;\r\n }\r\n\r\n addMicrotone(tone: SmoMicrotone) {\r\n const ar = this.tones.filter((tn: SmoMicrotone) => tn.pitchIndex !== tone.pitchIndex);\r\n ar.push(tone);\r\n this.tones = ar;\r\n }\r\n removeMicrotone(tone: SmoMicrotone) {\r\n const ar = this.tones.filter((tn) => tn.pitchIndex !== tone.pitchIndex\r\n && tn.pitchIndex <= this.pitches.length // also remove tones for removed pitches\r\n && tone.tone !== tn.tone);\r\n this.tones = ar;\r\n }\r\n getMicrotone(toneIndex: number) {\r\n return this.tones.find((tn) => tn.pitchIndex === toneIndex);\r\n }\r\n\r\n getMicrotones() {\r\n return this.tones;\r\n }\r\n /**\r\n * cycle through the list of enharmonics for this note.\r\n * @param pitch\r\n * @returns \r\n */\r\n static toggleEnharmonic(pitch: Pitch) {\r\n const lastLetter = pitch.letter;\r\n let vexPitch = SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(pitch));\r\n vexPitch = SmoMusic.getEnharmonic(vexPitch);\r\n\r\n pitch.letter = vexPitch[0] as PitchLetter;\r\n pitch.accidental = vexPitch.length > 1 ?\r\n vexPitch.substring(1, vexPitch.length) : 'n';\r\n pitch.octave += SmoMusic.letterChangedOctave(lastLetter, pitch.letter);\r\n return pitch;\r\n }\r\n /**\r\n * transpose a note or grace note to a key-friendly enharmonic\r\n * @param pitchArray\r\n * @param offset\r\n * @param originalKey - keySignature from original note\r\n * @param destinationKey - keySignature we are transposing into\r\n * @returns \r\n */\r\n transpose(pitchArray: number[], offset: number, originalKey: string, destinationKey: string): Transposable {\r\n return SmoNote.transpose(this, pitchArray, offset, originalKey, destinationKey);\r\n }\r\n /**\r\n * used to add chord and pitch by piano widget\r\n * @param pitch\r\n */\r\n toggleAddPitch(pitch: Pitch) {\r\n const pitches: Pitch[] = [];\r\n let exists = false;\r\n this.pitches.forEach((o) => {\r\n if (o.letter !== pitch.letter ||\r\n o.octave !== pitch.octave ||\r\n o.accidental !== pitch.accidental) {\r\n pitches.push(o);\r\n } else {\r\n exists = true;\r\n }\r\n });\r\n this.pitches = pitches;\r\n if (!exists) {\r\n this.pitches.push(JSON.parse(JSON.stringify(pitch)));\r\n this.noteType = 'n';\r\n }\r\n SmoNote.sortPitches(this);\r\n }\r\n /**\r\n * @param note note to transpose\r\n * @param pitchArray an array of indices (not pitches) that indicate which pitches get altered if a chord\r\n * @param offset in 1/2 step\r\n * @param originalKey original key for enharmonic-friendly key\r\n * @param destinationKey destination key signature\r\n * @returns \r\n */\r\n static transpose(note: Transposable, pitchArray: number[], offset: number, originalKey: string, destinationKey: string): Transposable {\r\n let index: number = 0;\r\n let j: number = 0;\r\n if (offset === 0 && originalKey === destinationKey) {\r\n return note;\r\n }\r\n // If no specific pitch, use all the pitches\r\n if (pitchArray.length === 0) {\r\n pitchArray = Array.from(note.pitches.keys());\r\n }\r\n for (j = 0; j < pitchArray.length; ++j) {\r\n index = pitchArray[j];\r\n if (index + 1 > note.pitches.length) {\r\n SmoNote.addPitchOffset(note, offset);\r\n } else {\r\n const original = JSON.parse(JSON.stringify(note.pitches[index]));\r\n const pitch = SmoMusic.transposePitchForKey(original, originalKey, destinationKey, offset);\r\n note.pitches[index] = pitch;\r\n }\r\n } \r\n SmoNote.sortPitches(note);\r\n return note;\r\n }\r\n get tickCount() {\r\n return this.ticks.numerator / this.ticks.denominator + this.ticks.remainder;\r\n }\r\n\r\n /**\r\n * Copy the note, give it unique id\r\n * @param note\r\n * @returns \r\n */\r\n static clone(note: SmoNote) {\r\n var rv = SmoNote.deserialize(note.serialize());\r\n\r\n // make sure id is unique\r\n rv.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoNote'\r\n };\r\n return rv;\r\n }\r\n\r\n /**\r\n * @param note\r\n * @param ticks\r\n * @returns A note identical to `note` but with different duration\r\n */\r\n static cloneWithDuration(note: SmoNote, ticks: Ticks | number) {\r\n if (typeof(ticks) === 'number') {\r\n ticks = { numerator: ticks, denominator: 1, remainder: 0 };\r\n }\r\n const rv = SmoNote.clone(note);\r\n rv.ticks = ticks;\r\n return rv;\r\n }\r\n static serializeModifier(modifiers: SmoNoteModifierBase[]) : object[] {\r\n const rv: object[] = [];\r\n modifiers.forEach((modifier: SmoNoteModifierBase) => {\r\n rv.push(modifier.serialize());\r\n });\r\n return rv;\r\n }\r\n\r\n private _serializeModifiers(params: any) {\r\n params.textModifiers = SmoNote.serializeModifier(this.textModifiers);\r\n params.graceNotes = SmoNote.serializeModifier(this.graceNotes);\r\n params.articulations = SmoNote.serializeModifier(this.articulations);\r\n params.ornaments = SmoNote.serializeModifier(this.ornaments);\r\n params.tones = SmoNote.serializeModifier(this.tones);\r\n if (this.arpeggio) {\r\n params.arpeggio = this.arpeggio.serialize();\r\n }\r\n }\r\n /**\r\n * @returns a JSON object that can be used to create this note\r\n */\r\n serialize(): SmoNoteParamsSer {\r\n var params: Partial = { ctor: 'SmoNote' };\r\n smoSerialize.serializedMergeNonDefault(SmoNote.defaults, SmoNote.parameterArray, this, params);\r\n if (this.tabNote) {\r\n params.tabNote = this.tabNote.serialize();\r\n }\r\n if (this.clefNote) {\r\n params.clefNote = this.clefNote.serialize();\r\n }\r\n if (params.ticks) {\r\n params.ticks = JSON.parse(JSON.stringify(params.ticks));\r\n }\r\n if (this.tupletId) {\r\n params.tupletId = this.tupletId;\r\n }\r\n this._serializeModifiers(params);\r\n if (!isSmoNoteParamsSer(params)) {\r\n throw 'bad note ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n /**\r\n * restore note modifiers and create a SmoNote object\r\n * @param jsonObj\r\n * @returns \r\n */\r\n static deserialize(jsonObj: any) {\r\n var note = new SmoNote(jsonObj);\r\n if (jsonObj.textModifiers) {\r\n jsonObj.textModifiers.forEach((mod: any) => {\r\n note.textModifiers.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.graceNotes) {\r\n jsonObj.graceNotes.forEach((mod: any) => {\r\n note.graceNotes.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.ornaments) {\r\n jsonObj.ornaments.forEach((mod: any) => {\r\n note.ornaments.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.articulations) {\r\n jsonObj.articulations.forEach((mod: any) => {\r\n note.articulations.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.tones) {\r\n jsonObj.tones.forEach((mod: any) => {\r\n note.tones.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n // Due to a bug, text modifiers were serialized into noteModifiers array\r\n if (jsonObj.noteModifiers) {\r\n jsonObj.noteModifiers.forEach((mod: any) => {\r\n note.textModifiers.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.arpeggio) {\r\n note.arpeggio = SmoNoteModifierBase.deserialize(jsonObj.arpeggio);\r\n }\r\n if (jsonObj.clefNote) {\r\n note.clefNote = SmoNoteModifierBase.deserialize(jsonObj.clefNote);\r\n }\r\n return note;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * A note modifier is anything that is mapped to the note, but not part of the\r\n * pitch itself. This includes grace notes, and note-text like lyrics.\r\n * @module /smo/data/noteModifiers\r\n */\r\nimport { SmoAttrs, Ticks, Pitch, getId, SmoObjectParams, Transposable, SvgBox, SmoModifierBase, \r\n Clef, IsClef } from './common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMusic } from './music';\r\nimport { defaultNoteScale, FontInfo, getChordSymbolGlyphFromCode } from '../../common/vex';\r\n// const Smo = eval('globalThis.Smo');\r\n\r\n/**\r\n * A note modifier is anything that is mapped to the note, but not part of the\r\n * pitch itself. This includes grace notes, and note-text like lyrics.\r\n * All note modifiers have a serialize method and a 'ctor' parameter or deserialization\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoNoteModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n logicalBox: SvgBox | null = null;\r\n element: SVGSVGElement | null = null;\r\n constructor(ctor: string) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n this.ctor = ctor;\r\n }\r\n static deserialize(jsonObj: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n // Handle backwards-compatibility thing\r\n if (jsonObj.ctor === 'SmoMicrotone' && typeof ((jsonObj as any).pitch) === 'number') {\r\n (jsonObj as any).pitchIndex = (jsonObj as any).pitch;\r\n }\r\n if (jsonObj.ctor === 'SmoLyric') {\r\n if (typeof((jsonObj as any)._text) === 'string') {\r\n (jsonObj as any).text = (jsonObj as any)._text;\r\n }\r\n }\r\n if (typeof (ctor) === 'undefined') {\r\n console.log('ouch bad ctor for ' + jsonObj.ctor);\r\n }\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n abstract serialize(): any;\r\n}\r\n\r\n\r\nexport function isClefChangeParamsSer(params: Partial): params is SmoClefChangeParamsSer {\r\n if (typeof(params.clef) === 'string' && params.ctor === 'SmoClefChange') {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexport interface SmoClefChangeParams {\r\n clef: string\r\n}\r\n\r\nexport interface SmoClefChangeParamsSer extends SmoClefChangeParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs;\r\n}\r\n\r\nexport class SmoClefChange extends SmoNoteModifierBase {\r\n clef: Clef;\r\n static get defaults() {\r\n const rv: SmoClefChangeParamsSer = JSON.parse(JSON.stringify({\r\n clef: 'treble',\r\n ctor: 'SmoClefChange',\r\n attrs: {\r\n id: getId(),\r\n type: 'SmoClefChange'\r\n }\r\n }));\r\n return rv;\r\n }\r\n constructor(clefParams: SmoClefChangeParams) {\r\n super('SmoClefChange');\r\n const clef = clefParams.clef;\r\n if (!IsClef(clef)) {\r\n this.clef = 'treble';\r\n } else {\r\n this.clef = clef as Clef;\r\n }\r\n }\r\n serialize(): SmoClefChangeParamsSer {\r\n const params: Partial = { ctor: 'SmoClefChange' };\r\n params.clef = this.clef;\r\n if (!isClefChangeParamsSer(params)) {\r\n throw('corrupt clef change');\r\n }\r\n return params;\r\n }\r\n}\r\n/**\r\n * used to construct {@link SmoGraceNote}\r\n * beam group.\r\n * @category SmoParameters\r\n */\r\nexport interface GraceNoteParams extends SmoModifierBase {\r\n /**\r\n * up, down, or auto\r\n */\r\n flagState: number,\r\n /**\r\n * same as for {@link SmoNote}\r\n */\r\n noteType: string,\r\n /**\r\n * same as for {@link SmoNote}\r\n */\r\n beamBeats: number,\r\n /**\r\n * same as for {@link SmoNote}. Indicates break in beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * should be same as note?\r\n */\r\n clef: string,\r\n /**\r\n * there's probably a name for this...\r\n */\r\n slash: boolean,\r\n /**\r\n * only used for beaming\r\n */\r\n ticks: Ticks,\r\n /**\r\n * Pitch, same as for {@link SmoNote}\r\n */\r\n pitches: Pitch[],\r\n}\r\n\r\n/**\r\n * serialized grace note\r\n * @category serialization\r\n */\r\nexport interface GraceNoteParamsSer extends GraceNoteParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs;\r\n}\r\n\r\nfunction isGraceNoteParamsSer(params: Partial): params is GraceNoteParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoGraceNote') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A grace notes has many of the things an 'actual' note can have, but it doesn't take up\r\n * time against the time signature\r\n * @category SmoModifier\r\n */\r\nexport class SmoGraceNote extends SmoNoteModifierBase implements Transposable {\r\n static get flagStates() {\r\n return { auto: 0, up: 1, down: 2 };\r\n }\r\n static get defaults(): GraceNoteParams {\r\n return JSON.parse(JSON.stringify({\r\n flagState: SmoGraceNote.flagStates.auto,\r\n noteType: 'n',\r\n beamBeats: 4096,\r\n endBeam: false,\r\n clef: 'treble',\r\n slash: false,\r\n ticks: {\r\n numerator: 4096,\r\n denominator: 1,\r\n remainder: 0\r\n },\r\n pitches: [{\r\n letter: 'b',\r\n octave: 4,\r\n accidental: ''\r\n }]\r\n }));\r\n }\r\n // TODO: Matches SmoNote - move to SmoMusic?\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoGraceNote.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n ticks: Ticks = SmoGraceNote.defaults.ticks;\r\n pitches: Pitch[] = [];\r\n slash: boolean = false;\r\n clef: string = 'treble';\r\n noteType: string = 'n';\r\n renderId: string | null = null;\r\n\r\n tickCount() {\r\n return this.ticks.numerator / this.ticks.denominator + this.ticks.remainder;\r\n }\r\n\r\n toVexGraceNote() {\r\n const p = SmoMusic.smoPitchesToVex(this.pitches);\r\n const rv = { duration: SmoMusic.closestVexDuration(this.tickCount()), keys: p, slash: this.slash };\r\n return rv;\r\n }\r\n\r\n serialize(): GraceNoteParamsSer {\r\n const params: Partial = { ctor: 'SmoGraceNote' };\r\n smoSerialize.serializedMergeNonDefault(SmoGraceNote.defaults,\r\n SmoGraceNote.parameterArray, this, params);\r\n if (!isGraceNoteParamsSer(params)) {\r\n throw 'bad grace note ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: Partial) {\r\n super('SmoGraceNote');\r\n smoSerialize.serializedMerge(SmoGraceNote.parameterArray, SmoGraceNote.defaults, this);\r\n smoSerialize.serializedMerge(SmoGraceNote.parameterArray, parameters, this);\r\n }\r\n}\r\nexport type SmoArpeggioType = 'directionless' | 'rasquedo_up' | 'rasquedo_down' \r\n | 'roll_up' | 'roll_down' | 'brush_up' | 'brush_down' | 'none';\r\nexport const SmoArpeggioTypes = ['directionless', 'rasquedo_up', 'rasquedo_down',\r\n 'roll_up', 'roll_down', 'brush_up', 'brush_down', 'none'];\r\n\r\n /**\r\n * @category SmoParameters\r\n */\r\nexport interface SmoArpeggioParams {\r\n type: SmoArpeggioType\r\n}\r\n/**\r\n * @category serialization\r\n */\r\nexport interface SmoArpeggioParamsSer {\r\n ctor: string;\r\n /**\r\n * stringified arpeggion enumeration\r\n */\r\n type: string;\r\n}\r\nfunction isSmoArpeggionParamsSer(params: Partial): params is SmoArpeggioParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoArpeggio') {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport function isArpeggioType(tp: SmoArpeggioType | string): tp is SmoArpeggioType {\r\n return SmoArpeggioTypes.indexOf(tp) >= 0;\r\n}\r\n/**\r\n * A 'splatter' symbol next to a chord.\r\n */\r\nexport class SmoArpeggio extends SmoNoteModifierBase {\r\n static _types: Record = {};\r\n static get types() {\r\n if (typeof(SmoArpeggio._types['directionless']) === 'undefined') {\r\n SmoArpeggio._types['directionless'] = 7;\r\n SmoArpeggio._types['rasquedo_up'] = 6;\r\n SmoArpeggio._types['rasquedo_down'] = 5;\r\n SmoArpeggio._types['roll_up'] = 4;\r\n SmoArpeggio._types['roll_down'] = 3;\r\n SmoArpeggio._types['brush_up'] = 2;\r\n SmoArpeggio._types['brush_down'] = 1;\r\n SmoArpeggio._types['none'] = 0;\r\n }\r\n return SmoArpeggio._types;\r\n } \r\n typeCode: number;\r\n constructor(params: SmoArpeggioParams) {\r\n super('SmoArpeggio');\r\n this.typeCode = SmoArpeggio.types[params.type];\r\n }\r\n get typeString(): SmoArpeggioType {\r\n const str = SmoArpeggioTypes.find((x) => SmoArpeggio.types[x] === this.typeCode);\r\n const type = str ? str : 'none';\r\n return type as SmoArpeggioType;\r\n }\r\n serialize(): SmoArpeggioParamsSer {\r\n const rv: Partial = { ctor: 'SmoArpeggio' }\r\n const str = SmoArpeggioTypes.find((x) => SmoArpeggio.types[x] === this.typeCode);\r\n rv.type = str ? str : 'none';\r\n if (!isSmoArpeggionParamsSer(rv)) {\r\n throw 'bad arpeggio ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoMicrotone}\r\n * @category SmoParams\r\n */\r\nexport interface SmoMicrotoneParams extends SmoObjectParams {\r\n /**\r\n * indicates which modifier to alter the tone (e.g. 1/4 sharp)\r\n */\r\n tone: string,\r\n /**\r\n * the index of the pitch to alter\r\n */\r\n pitch: number\r\n}\r\n/**\r\n * serialized microtones.\r\n * @category serialization\r\n */\r\nexport interface SmoMicrotoneParamsSer extends SmoMicrotoneParams {\r\n ctor: string,\r\n attrs: SmoAttrs\r\n}\r\nfunction isSmoMicrotoneParamsSer(params: Partial): params is SmoMicrotoneParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoMicrotone') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Microtones are treated similarly to ornaments. There are not\r\n * rules for persisting throughout a measure, cancel etc.\r\n * @category SmoModifier\r\n*/\r\nexport class SmoMicrotone extends SmoNoteModifierBase {\r\n tone: string;\r\n pitchIndex: number = 0;\r\n\r\n // This is how VexFlow notates them\r\n static readonly smoToVex: Record = {\r\n flat75sz: 'db',\r\n flat25sz: 'd',\r\n flat25ar: 'bs',\r\n flat125ar: 'afhf',\r\n sharp75: '++',\r\n sharp125: 'ashs',\r\n sharp25: '+',\r\n sori: 'o',\r\n koron: 'k'\r\n }\r\n\r\n // The audio frequency offsets\r\n static readonly pitchCoeff: Record = {\r\n flat75sz: -1.5,\r\n flat25sz: -0.5,\r\n flat25ar: -0.5,\r\n flat125ar: -2.5,\r\n sharp75: 1.5,\r\n sharp125: 2.5,\r\n sharp25: 0.5,\r\n sori: 0.5,\r\n koron: -0.5\r\n }\r\n\r\n get toPitchCoeff(): number {\r\n return SmoMicrotone.pitchCoeff[this.tone];\r\n }\r\n\r\n get toVex(): string {\r\n return SmoMicrotone.smoToVex[this.tone];\r\n }\r\n static readonly defaults: SmoMicrotoneParams = {\r\n ctor: 'SmoMicrotone',\r\n tone: 'flat25sz',\r\n pitch: 0\r\n }\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoMicrotone.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n serialize(): SmoMicrotoneParamsSer {\r\n const params: Partial = { ctor: 'SmoMicrotone' };\r\n smoSerialize.serializedMergeNonDefault(SmoMicrotone.defaults,\r\n SmoMicrotone.parameterArray, this, params);\r\n if (!isSmoMicrotoneParamsSer(params)) {\r\n throw 'bad microtone ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoMicrotoneParams) {\r\n super(parameters.ctor);\r\n this.pitchIndex = parameters.pitch;\r\n this.tone = parameters.tone;\r\n }\r\n}\r\n\r\n/**\r\n * Constructor for {@link SmoOrnament}\r\n * @category SmoParams\r\n */\r\nexport interface SmoOrnamentParams {\r\n /**\r\n * postition, above or below\r\n */\r\n position?: string,\r\n /**\r\n * horizontal offset from note head\r\n */ \r\n offset?: string,\r\n /**\r\n * code for the ornament\r\n */\r\n ornament: string,\r\n}\r\n/**\r\n * serializable ornament\r\n * @category serialization\r\n */\r\nexport interface SmoOrnamentParamsSer extends SmoOrnamentParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoOrnamentParamsSer(params: Partial): params is SmoOrnamentParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoOrnament') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Ornaments map to vex ornaments. articulations vs. ornaments\r\n * is kind of arbitrary\r\n * @category SmoModifier\r\n */\r\nexport class SmoOrnament extends SmoNoteModifierBase {\r\n static readonly ornaments: Record = {\r\n mordent: 'mordent',\r\n mordentInverted: 'mordent_inverted',\r\n turn: 'turn',\r\n turnInverted: 'turn_inverted',\r\n trill: 'tr',\r\n upprall: 'upprall',\r\n prallup: 'prallup',\r\n pralldown: 'pralldown',\r\n upmordent: 'upmordent',\r\n downmordent: 'downmordent',\r\n lineprall: 'lineprall',\r\n prallprall: 'prallprall',\r\n scoop: 'scoop',\r\n fall_short: 'fall',\r\n dropLong: 'fallLong',\r\n doit: 'doit',\r\n doitLong: 'doitLong',\r\n flip: 'flip',\r\n smear: 'smear'\r\n }\r\n\r\n static readonly xmlOrnaments: Record = {\r\n mordent: 'mordent',\r\n mordent_inverted: 'inverted-mordent',\r\n turn: 'turn',\r\n turn_inverted: 'inverted-turn',\r\n upmordent: 'mordent',\r\n downmordent: 'mordent',\r\n lineprall: 'schleifer',\r\n prallprall: 'schleifer',\r\n prallup: 'schleifer',\r\n tr: 'trill-mark'\r\n }\r\n static readonly textNoteOrnaments: Record = {\r\n breath: 'breath',\r\n caesura: 'caesura_straight',\r\n pedalOpen: 'pedal_open',\r\n pedalClosed: 'pedal_close'\r\n }\r\n // jazz ornaments in vex are articulations in music xml\r\n static readonly xmlJazz: Record = {\r\n doit: 'doit',\r\n scoop: 'scoop',\r\n dropLong: 'falloff',\r\n drop: 'plop'\r\n }\r\n static get jazzOrnaments(): string[] {\r\n return ['SCOOP', 'FALL_SHORT', 'FALL_LONG', 'DOIT', 'LIFT', 'FLIP', 'SMEAR'];\r\n }\r\n toVex() {\r\n return SmoOrnament.ornaments[this.ornament.toLowerCase()];\r\n }\r\n isJazz() {\r\n return SmoOrnament.jazzOrnaments.indexOf(this.ornament) >= 0;\r\n }\r\n position: string = SmoOrnament.positions.above;\r\n offset: string = 'on';\r\n ornament: string = SmoOrnament.ornaments.mordent;\r\n\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoOrnament.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n\r\n static get positions() {\r\n return {\r\n above: 'above',\r\n below: 'below'\r\n };\r\n }\r\n static get offsets() {\r\n return {\r\n on: 'on',\r\n after: 'after'\r\n };\r\n }\r\n static get defaults(): SmoOrnamentParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoOrnament',\r\n ornament: SmoOrnament.ornaments.mordent,\r\n position: SmoOrnament.positions.above,\r\n offset: SmoOrnament.offsets.on\r\n }));\r\n }\r\n serialize(): SmoOrnamentParamsSer {\r\n var params: Partial = { ctor: 'SmoOrnament' };\r\n smoSerialize.serializedMergeNonDefault(SmoOrnament.defaults,\r\n SmoOrnament.parameterArray, this, params);\r\n if (!isSmoOrnamentParamsSer(params)) {\r\n throw 'bad ornament ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoOrnamentParams) {\r\n super('SmoOrnament');\r\n smoSerialize.serializedMerge(SmoOrnament.parameterArray, SmoOrnament.defaults, this);\r\n smoSerialize.serializedMerge(SmoOrnament.parameterArray, parameters, this);\r\n // this.selector = parameters.selector;\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link SmoArticulation}\r\n * @category SmoParams\r\n */\r\nexport interface SmoArticulationParameters {\r\n /**\r\n * position, above or below\r\n */\r\n position?: string,\r\n /**\r\n * x offset\r\n */\r\n offset?: number,\r\n /**\r\n * articulation code\r\n */\r\n articulation: string\r\n}\r\n/**\r\n * \r\n */\r\nexport interface SmoArticulationParametersSer extends SmoArticulationParameters {\r\n ctor: string;\r\n}\r\nfunction isSmoArticulationParametersSer(params: Partial): params is SmoArticulationParametersSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoArticulation') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Articulations map to notes, can be placed above/below\r\n * @category SmoModifier\r\n */\r\nexport class SmoArticulation extends SmoNoteModifierBase {\r\n static get articulations() {\r\n return {\r\n accent: 'accent',\r\n staccato: 'staccato',\r\n marcato: 'marcato',\r\n tenuto: 'tenuto',\r\n upStroke: 'upStroke',\r\n downStroke: 'downStroke',\r\n pizzicato: 'pizzicato',\r\n fermata: 'fermata'\r\n };\r\n }\r\n static readonly xmlArticulations: Record = {\r\n accent: 'accent',\r\n staccato: 'staccato',\r\n tenuto: 'tenuto',\r\n marcato: 'strong-accent'\r\n }\r\n static get positions() {\r\n return {\r\n above: 'above',\r\n below: 'below'\r\n };\r\n }\r\n static get articulationToVex(): Record {\r\n return {\r\n accent: 'a>',\r\n staccato: 'a.',\r\n marcato: 'a^',\r\n tenuto: 'a-',\r\n upStroke: 'a|',\r\n downStroke: 'am',\r\n pizzicato: 'ao',\r\n fermata: 'a@a'\r\n };\r\n }\r\n\r\n static get vexToArticulation(): Record {\r\n return {\r\n 'a>': 'accent',\r\n 'a.': 'staccato',\r\n 'a^': 'marcato',\r\n 'a-': 'tenuto',\r\n 'a|': 'upStroke',\r\n 'am': 'downStroke',\r\n 'ao': 'pizzicato',\r\n 'a@a': 'fermata'\r\n };\r\n }\r\n static get parameterArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoArticulation.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n\r\n static get positionToVex(): Record {\r\n return {\r\n 'above': 3,\r\n 'below': 4\r\n };\r\n }\r\n static get defaults(): SmoArticulationParameters {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoArticulation',\r\n position: SmoArticulation.positions.above,\r\n articulation: SmoArticulation.articulations.accent\r\n }));\r\n }\r\n position: string = SmoOrnament.positions.above;\r\n offset: number = 0;\r\n articulation: string = SmoArticulation.articulations.accent;\r\n adjX: number = 0;\r\n\r\n serialize(): SmoArticulationParametersSer {\r\n var params: Partial = { ctor: 'SmoArticulation'};\r\n smoSerialize.serializedMergeNonDefault(SmoArticulation.defaults,\r\n SmoArticulation.parameterArray, this, params);\r\n if (!isSmoArticulationParametersSer(params)) {\r\n throw 'bad articulation ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoArticulationParameters) {\r\n super('SmoArticulation');\r\n smoSerialize.serializedMerge(SmoArticulation.parameterArray, SmoArticulation.defaults, this);\r\n smoSerialize.serializedMerge(SmoArticulation.parameterArray, parameters, this);\r\n // this.selector = parameters.selector;\r\n }\r\n}\r\n\r\nexport interface VexAnnotationParams {\r\n glyph?: string,\r\n symbolModifier?: number,\r\n text?: string\r\n}\r\n\r\n/**\r\n * The persist-y parts of {@link SmoLyricParams}. We don't persist the selector\r\n * since that can change based on the position of the parent note\r\n * @category serialization\r\n */\r\nexport interface SmoLyricParamsSer extends SmoObjectParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string,\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs,\r\n /**\r\n * the lyric font\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * classes for styling\r\n */\r\n classes: string,\r\n /**\r\n * which verse the lyric goes with\r\n */\r\n verse: number,\r\n /**\r\n * lyrics are used for chord changes or annotations, parser is different for each\r\n */\r\n parser: number,\r\n /**\r\n * indicates we should format for the width of the lyric\r\n */\r\n adjustNoteWidthLyric: boolean,\r\n /**\r\n * indicates we should format for the width of the chord\r\n */\r\n adjustNoteWidthChord: boolean,\r\n /**\r\n * fill color for text\r\n */\r\n fill: string,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateX: number,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateY: number,\r\n /**\r\n * the actual text\r\n */\r\n text: string | null\r\n}\r\n\r\nfunction isSmoLyricPersist(params: Partial): params is SmoLyricParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoLyric') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Used to construct a {@link SmoLyric} for both chords and lyrics\r\n * @category SmoParameters\r\n */\r\nexport interface SmoLyricParams {\r\n /**\r\n * the lyric font\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * classes for styling\r\n */\r\n classes: string,\r\n /**\r\n * which verse the lyric goes with\r\n */\r\n verse: number,\r\n /**\r\n * lyrics are used for chord changes or annotations, parser is different for each\r\n */\r\n parser: number,\r\n /**\r\n * indicates we should format for the width of the lyric\r\n */\r\n adjustNoteWidthLyric: boolean,\r\n /**\r\n * indicates we should format for the width of the chord\r\n */\r\n adjustNoteWidthChord: boolean,\r\n /**\r\n * fill color for text\r\n */\r\n fill: string,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateX: number,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateY: number,\r\n /**\r\n * the actual text\r\n */\r\n text: string | null\r\n}\r\n\r\n/**\r\n * SmoLyric covers both chords and lyrics. The parser tells you which\r\n * one you get.\r\n * @category SmoModifier\r\n */\r\nexport class SmoLyric extends SmoNoteModifierBase {\r\n static readonly parsers: Record = {\r\n lyric: 0, anaylysis: 1, chord: 2\r\n }\r\n static get defaults(): SmoLyricParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoLyric',\r\n text: '\\xa0',\r\n endChar: '',\r\n verse: 0,\r\n fontInfo: {\r\n size: 12,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n fill: 'black',\r\n classes: 'score-text',\r\n translateX: 0,\r\n translateY: 0,\r\n adjustNoteWidthLyric: true,\r\n adjustNoteWidthChord: false,\r\n parser: SmoLyric.parsers.lyric\r\n }));\r\n }\r\n static get symbolPosition() {\r\n return {\r\n SUPERSCRIPT: 1,\r\n SUBSCRIPT: 2,\r\n NORMAL: 3\r\n };\r\n }\r\n static get persistArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoLyric.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n static get parameterArray(): string[] {\r\n const rv = SmoLyric.persistArray;\r\n rv.push('selector', 'text');\r\n return rv;\r\n }\r\n\r\n ctor: string = 'SmoLyric';\r\n text: string = '';\r\n fontInfo: FontInfo = {\r\n size: 12,\r\n family: 'Merriweather',\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n parser: number = SmoLyric.parsers.lyric;\r\n selector: string | null = null; // used by UI\r\n adjustNoteWidthLyric: boolean = true;\r\n adjustNoteWidthChord: boolean = false;\r\n verse: number = 0;\r\n skipRender: boolean = false;\r\n fill: string = '';\r\n translateX: number = 0;\r\n translateY: number = 0;\r\n classes: string = '';\r\n // used by the renderer to calculate offsets for aligning lyrics\r\n adjX: number = 0;\r\n adjY: number = 0;\r\n // used by the renderer to calculate the y offset for music that goes below the staff\r\n musicYOffset: number = 0;\r\n hyphenX: number = 0;\r\n deleted: boolean = false;\r\n\r\n serialize(): SmoLyricParamsSer {\r\n var params: Partial = { ctor: 'SmoLyric' };\r\n smoSerialize.serializedMergeNonDefault(SmoLyric.defaults,\r\n SmoLyric.persistArray, this, params);\r\n if (!isSmoLyricPersist(params)) {\r\n throw 'bad lyric ' + JSON.stringify('params');\r\n }\r\n return params;\r\n }\r\n // For lyrics, we default to adjust note width on lyric size. For chords, this is almost never what\r\n // you want, so it is off by default.\r\n get adjustNoteWidth() {\r\n return (this.parser === SmoLyric.parsers.lyric) ? this.adjustNoteWidthLyric : this.adjustNoteWidthChord;\r\n }\r\n set adjustNoteWidth(val) {\r\n if (this.parser === SmoLyric.parsers.lyric) {\r\n this.adjustNoteWidthLyric = val;\r\n } else {\r\n this.adjustNoteWidthChord = val;\r\n }\r\n }\r\n\r\n // ### getClassSelector\r\n // returns a selector used to find this text block within a note.\r\n getClassSelector(): string {\r\n var parser = (this.parser === SmoLyric.parsers.lyric ? 'lyric' : 'chord');\r\n return 'g.' + parser + '-' + this.verse;\r\n }\r\n\r\n setText(text: string) {\r\n // For chords, trim all whitespace\r\n if (this.parser !== SmoLyric.parsers.lyric) {\r\n if (text.trim().length) {\r\n text.replace(/\\s/g, '');\r\n }\r\n }\r\n this.text = text;\r\n }\r\n\r\n isHyphenated() {\r\n const text = this.text.trim();\r\n return this.parser === SmoLyric.parsers.lyric &&\r\n text.length &&\r\n text[text.length - 1] === '-';\r\n }\r\n\r\n getText() {\r\n const text = this.text.trim();\r\n if (this.isHyphenated()) {\r\n return smoSerialize.tryParseUnicode(text.substr(0, text.length - 1)).trim();\r\n }\r\n return smoSerialize.tryParseUnicode(text);\r\n }\r\n\r\n isDash() {\r\n return this.getText().length === 0 && this.isHyphenated();\r\n }\r\n\r\n static _chordGlyphFromCode(code: string) {\r\n return getChordSymbolGlyphFromCode(code);\r\n }\r\n static _tokenizeChordString(str: string) {\r\n // var str = this._text;\r\n const reg = /^([A-Z|a-z|0-9|]+)/g;\r\n let mmm = str.match(reg);\r\n let tokeType = '';\r\n let toke = '';\r\n const tokens = [];\r\n while (str.length) {\r\n if (!mmm) {\r\n tokeType = str[0];\r\n tokens.push(tokeType);\r\n str = str.slice(1, str.length);\r\n } else {\r\n toke = mmm[0].substr(0, mmm[0].length);\r\n str = str.slice(toke.length, str.length);\r\n tokens.push(toke);\r\n tokeType = '';\r\n toke = '';\r\n }\r\n mmm = str.match(reg);\r\n }\r\n return tokens;\r\n }\r\n\r\n\r\n\r\n constructor(parameters: SmoLyricParams) {\r\n super('SmoLyric');\r\n smoSerialize.serializedMerge(SmoLyric.parameterArray, SmoLyric.defaults, this);\r\n smoSerialize.serializedMerge(SmoLyric.parameterArray, parameters, this);\r\n if (typeof(this.fontInfo.size) !== 'number') {\r\n this.fontInfo.size = SmoLyric.defaults.fontInfo.size;\r\n }\r\n // backwards-compatibility for lyric text\r\n if (parameters.text) {\r\n this.text = parameters.text;\r\n }\r\n\r\n // calculated adjustments for alignment purposes\r\n this.adjY = 0;\r\n this.adjX = 0;\r\n // this.verse = parseInt(this.verse, 10);\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoLyric'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The persisted bits of {@link SmoDynamicTextParams}\r\n * @category SmoParams\r\n */\r\nexport interface SmoDynamicTextSer extends SmoObjectParams {\r\n ctor: string,\r\n xOffset: number,\r\n fontSize: number,\r\n yOffsetLine: number,\r\n yOffsetPixels: number,\r\n text: string\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoDynamicText}\r\n * @category SmoParams\r\n */\r\nexport interface SmoDynamicTextParams extends SmoDynamicTextSer {\r\n ctor: string,\r\n xOffset: number,\r\n fontSize: number,\r\n yOffsetLine: number,\r\n yOffsetPixels: number,\r\n text: string\r\n}\r\n\r\n/**\r\n * Dynamic text tells you how loud not to play.\r\n * @category SmoModifier\r\n */\r\nexport class SmoDynamicText extends SmoNoteModifierBase {\r\n static get dynamics(): Record {\r\n // matches VF.modifier\r\n return {\r\n PP: 'pp',\r\n P: 'p',\r\n MP: 'mp',\r\n MF: 'mf',\r\n F: 'f',\r\n FF: 'ff',\r\n SFZ: 'sfz'\r\n };\r\n }\r\n static get defaults(): SmoDynamicTextParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoDynamicText',\r\n xOffset: 0,\r\n fontSize: defaultNoteScale,\r\n yOffsetLine: 11,\r\n yOffsetPixels: 0,\r\n text: SmoDynamicText.dynamics.MP,\r\n }));\r\n }\r\n static get persistArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoDynamicText.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n static get parameterArray(): string[] {\r\n const rv = SmoDynamicText.persistArray;\r\n rv.push('selector');\r\n return rv;\r\n }\r\n text: string = '';\r\n yOffsetLine: number = 11;\r\n yOffsetPixels: number = 0;\r\n xOffset: number = 0;\r\n fontSize: number = defaultNoteScale;\r\n serialize(): object {\r\n var params = {};\r\n smoSerialize.serializedMergeNonDefault(SmoDynamicText.defaults,\r\n SmoDynamicText.persistArray, this, params);\r\n return params;\r\n }\r\n constructor(parameters: SmoDynamicTextParams) {\r\n super('SmoDynamicText');\r\n smoSerialize.vexMerge(this, SmoDynamicText.defaults);\r\n smoSerialize.filteredMerge(SmoDynamicText.parameterArray, parameters, this);\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoDynamicText'\r\n };\r\n }\r\n }\r\n}\r\n\r\nexport interface SmoTabBend {\r\n bendType: number,\r\n release: boolean,\r\n text: string\r\n}\r\nexport interface SmoFretPosition {\r\n string: number,\r\n fret: number\r\n}\r\nexport interface SmoTabNoteParams {\r\n positions: SmoFretPosition[]\r\n noteId: string,\r\n flagState: number,\r\n flagThrough: boolean,\r\n noteHead: number,\r\n isAssigned: boolean\r\n}\r\n\r\nexport interface SmoTabNoteParamsSer extends SmoTabNoteParams {\r\n ctor: string\r\n}\r\n\r\nfunction isSmoTabNoteParamsSer(params: Partial): params is SmoTabNoteParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoTabNote') {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport class SmoTabNote extends SmoNoteModifierBase {\r\n static get defaults(): SmoTabNoteParams {\r\n return JSON.parse(JSON.stringify({\r\n positions: [],\r\n noteId: '',\r\n isAssigned: false,\r\n flagState: SmoTabNote.flagStates.None,\r\n flagThrough: false,\r\n noteHead: SmoTabNote.noteHeads.number\r\n }));\r\n }\r\n positions: SmoFretPosition[];\r\n noteId: string;\r\n isAssigned: boolean;\r\n noteHead: number;\r\n flagState: number;\r\n flagThrough: boolean;\r\n static get flagStates() {\r\n return { None: 0, Up: 1, Down: -1 };\r\n }\r\n static get noteHeads() {\r\n return { number: 0, x: 1 };\r\n }\r\n constructor(params: SmoTabNoteParams) {\r\n super('SmoTabNote');\r\n this.positions = params.positions\r\n this.noteId = params.noteId;\r\n this.isAssigned = params.isAssigned;\r\n this.noteHead = params.noteHead;\r\n this.flagState = params.flagState;\r\n this.flagThrough = params.flagThrough;\r\n }\r\n serialize(): SmoTabNoteParamsSer {\r\n var params = { ctor: 'SmoTabNote' };\r\n smoSerialize.serializedMergeNonDefault(SmoTabNote.defaults,\r\n ['positions', 'noteId', 'isAssigned', 'noteHead', 'flagState', 'flagThrough'], this, params);\r\n if (!isSmoTabNoteParamsSer(params)) {\r\n throw 'bad params in SmoTabNote';\r\n }\r\n return params;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support partsInfo class, for part extraction. \r\n * Parts is parts.\r\n * @module /smo/data/partInfo\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { createXmlAttribute } from './common';\r\nimport { SmoMeasureFormat, SmoMeasureFormatParamsSer, SmoMeasureModifierBase } from './measureModifiers';\r\nimport { SmoLayoutManager, SmoLayoutManagerParamsSer, SmoLayoutManagerParams, SmoPageLayout } from './scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupParamsSer } from './scoreText';\r\nimport { StaffModifierBase } from './staffModifiers';\r\n\r\nexport type SmoPartInfoStringType = 'partName' | 'partAbbreviation';\r\nexport const SmoPartInfoStringTypes: SmoPartInfoStringType[] = ['partName', 'partAbbreviation'];\r\nexport type SmoPartInfoNumType = 'stavesAfter' | 'stavesBefore';\r\nexport const SmoPartInfoNumTypes: SmoPartInfoNumType[] = ['stavesAfter', 'stavesBefore'];\r\nexport type SmoPartInfoBooleanType = 'preserveTextGroups' | 'cueInScore' | 'expandMultimeasureRests';\r\nexport const SmoPartInfoBooleanTypes: SmoPartInfoBooleanType[] = ['preserveTextGroups', 'cueInScore', 'expandMultimeasureRests'];\r\n\r\nexport const SmoPartAttributesBasic = ['partName', 'partAbbreviation', 'stavesAfter', 'stavesBefore', 'preserveTextGroups', 'cueInScore', 'expandMultimeasureRests'];\r\nexport interface SmoMidiInstrument {\r\n channel: number,\r\n program: number,\r\n volume: number,\r\n pan: number\r\n}\r\n/**\r\n * Data contained in a part. A part has its own text, measure formatting and page layouts,\r\n * and contains the notes from the score. It can be comprised of 1 or 2 adjacent staves.\r\n * Usually you will call\r\n * {@link SmoPartInfo.defaults}, and modify the parameters you need to change.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoPartInfoParams {\r\n /**\r\n * Name of the part, can be used in headers\r\n */\r\n partName: string,\r\n /**\r\n * abbrevation of part name\r\n */\r\n partAbbreviation: string,\r\n /**\r\n * indicates that this part include the next stave (e.g. piano part)\r\n */\r\n stavesAfter: number,\r\n /**\r\n * indicates that this part include the previous stave (e.g. piano part)\r\n */\r\n stavesBefore: number,\r\n /**\r\n * parts can have their own page settings, zoom settings, etc.\r\n */\r\n layoutManager?: SmoLayoutManager;\r\n /**\r\n * parts can have their own measure formatting\r\n */\r\n measureFormatting?: Record,\r\n /**\r\n * for part-specific text\r\n */\r\n textGroups: SmoTextGroup[],\r\n /**\r\n * indicates a part has its own text, not inherited from the score\r\n */\r\n preserveTextGroups: boolean,\r\n /**\r\n * indicates the part appears as cue size in the score\r\n */\r\n cueInScore: boolean,\r\n /**\r\n * future, for playback. TODO: Note staves contain instruments that compete with this.\r\n * maybe this will be removed\r\n */\r\n midiDevice: string | null,\r\n /**\r\n * see midiDevice\r\n */\r\n midiInstrument: SmoMidiInstrument | null,\r\n /**\r\n * indicates multimeasure rests in parts should be expanded.\r\n */\r\n expandMultimeasureRests: boolean \r\n}\r\n\r\n/**\r\n * Serialized part information\r\n * @category serialization\r\n */\r\nexport interface SmoPartInfoParamsSer {\r\n /** constructor */\r\n ctor: string;\r\n /**\r\n * Name of the part, can be used in headers\r\n */\r\n partName: string,\r\n /**\r\n * abbrevation of part name\r\n */\r\n partAbbreviation: string,\r\n /**\r\n * indicates that this part include the next stave (e.g. piano part)\r\n */\r\n stavesAfter: number,\r\n /**\r\n * indicates that this part include the previous stave (e.g. piano part)\r\n */\r\n stavesBefore: number,\r\n /**\r\n * parts can have their own page settings, zoom settings, etc.\r\n */\r\n layoutManager?: SmoLayoutManagerParamsSer;\r\n /**\r\n * parts can have their own measure formatting\r\n */\r\n measureFormatting?: Record,\r\n /**\r\n * for part-specific text\r\n */\r\n textGroups: SmoTextGroupParamsSer[],\r\n /**\r\n * indicates a part has its own text, not inherited from the score\r\n */\r\n preserveTextGroups: boolean,\r\n /**\r\n * indicates the part appears as cue size in the score\r\n */\r\n cueInScore: boolean,\r\n /**\r\n * future, for playback. TODO: Note staves contain instruments that compete with this.\r\n * maybe this will be removed\r\n */\r\n midiDevice: string | null,\r\n /**\r\n * see midiDevice\r\n */\r\n midiInstrument: SmoMidiInstrument | null,\r\n /**\r\n * indicates multimeasure rests in parts should be expanded.\r\n */\r\n expandMultimeasureRests: boolean \r\n}\r\nfunction isSmoPartInfoParamsSer(params: Partial): params is SmoPartInfoParamsSer {\r\n if (params.ctor && params.ctor === 'SmoPartInfo') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Part info contains information that group 1 or 2 adjacent staves.\r\n * Parts can have formatting that is indepenedent of the score\r\n * @category SmoModifier\r\n */\r\nexport class SmoPartInfo extends StaffModifierBase {\r\n partName: string = '';\r\n partAbbreviation: string = '';\r\n layoutManager: SmoLayoutManager;\r\n measureFormatting: Record = {};\r\n textGroups: SmoTextGroup[] = [];\r\n stavesAfter: number = 0;\r\n stavesBefore: number = 0;\r\n preserveTextGroups: boolean = false;\r\n cueInScore: boolean = false;\r\n displayCues: boolean = false;\r\n expandMultimeasureRests: boolean = false;\r\n midiInstrument: SmoMidiInstrument| null;\r\n midiDevice: string | null;\r\n static get defaults(): SmoPartInfoParams {\r\n return JSON.parse(JSON.stringify({\r\n partName: 'Staff ',\r\n partAbbreviation: '',\r\n globalLayout: SmoLayoutManager.defaultLayout,\r\n textGroups: [],\r\n preserveTextGroups: false,\r\n pageLayoutMap: {},\r\n stavesAfter: 0,\r\n stavesBefore: 0,\r\n cueInScore: false,\r\n midiDevice: null,\r\n midiInstrument: null,\r\n expandMultimeasureRests: false\r\n }));\r\n }\r\n constructor(params: SmoPartInfoParams) {\r\n super('SmoPartInfo');\r\n if (!params.layoutManager) {\r\n this.layoutManager = new SmoLayoutManager(SmoLayoutManager.defaults);\r\n } else {\r\n this.layoutManager = new SmoLayoutManager(params.layoutManager);\r\n }\r\n if (typeof(params.measureFormatting) !== 'undefined') {\r\n const formatKeys = Object.keys(params.measureFormatting);\r\n formatKeys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n this.measureFormatting[numKey] = new SmoMeasureFormat(params.measureFormatting![numKey]);\r\n });\r\n }\r\n if (params.textGroups) {\r\n this.textGroups = params.textGroups;\r\n }\r\n SmoPartInfoStringTypes.forEach((st) => {\r\n this[st] = params[st];\r\n });\r\n SmoPartInfoNumTypes.forEach((st) => {\r\n this[st] = params[st];\r\n });\r\n SmoPartInfoBooleanTypes.forEach((st) => {\r\n this[st] = params[st] ?? false;\r\n });\r\n this.midiDevice = params.midiDevice;\r\n if (params.midiInstrument) {\r\n this.midiInstrument = JSON.parse(JSON.stringify(params.midiInstrument));\r\n } else {\r\n this.midiInstrument = null;\r\n }\r\n }\r\n static deserialize(jsonObj: SmoPartInfoParamsSer): SmoPartInfo {\r\n const params = SmoPartInfo.defaults;\r\n smoSerialize.serializedMerge(SmoPartAttributesBasic, jsonObj, params);\r\n jsonObj.textGroups.forEach((tg) => {\r\n params.textGroups.push(SmoTextGroup.deserialize(tg));\r\n });\r\n params.midiInstrument = jsonObj.midiInstrument;\r\n params.midiDevice = jsonObj.midiDevice;\r\n params.measureFormatting = {};\r\n if (jsonObj.layoutManager) {\r\n const layoutManagerParams: SmoLayoutManagerParams = {\r\n globalLayout: jsonObj.layoutManager.globalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: []\r\n }\r\n jsonObj.layoutManager.pageLayouts.forEach((pl) => {\r\n const pageLayout = new SmoPageLayout(pl);\r\n layoutManagerParams.pageLayouts.push(pageLayout);\r\n });\r\n params.layoutManager = new SmoLayoutManager(layoutManagerParams);\r\n }\r\n if (jsonObj.measureFormatting) {\r\n const mfkeys = Object.keys(jsonObj.measureFormatting);\r\n mfkeys.forEach((mfkey) => {\r\n const mfnum = parseInt(mfkey, 10);\r\n params.measureFormatting![mfnum] = SmoMeasureModifierBase.deserialize(jsonObj.measureFormatting![mfnum]);\r\n });\r\n }\r\n return new SmoPartInfo(params);\r\n \r\n }\r\n serialize(): SmoPartInfoParamsSer {\r\n const rv: Partial = { ctor: 'SmoPartInfo' };\r\n smoSerialize.serializedMergeNonDefault(SmoPartInfo.defaults, SmoPartAttributesBasic, this, rv);\r\n rv.layoutManager = this.layoutManager.serialize();\r\n rv.textGroups = [];\r\n this.textGroups.forEach((tg) => {\r\n rv.textGroups!.push(tg.serialize());\r\n });\r\n rv.measureFormatting = {};\r\n if (this.midiInstrument) {\r\n rv.midiInstrument = JSON.parse(JSON.stringify(this.midiInstrument));\r\n }\r\n if (this.midiDevice) {\r\n rv.midiDevice = this.midiDevice;\r\n }\r\n Object.keys(this.measureFormatting).forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n rv.measureFormatting![numKey] = this.measureFormatting[numKey];\r\n });\r\n if (!isSmoPartInfoParamsSer(rv)) {\r\n throw 'bad part info ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n updateTextGroup(textGroup: SmoTextGroup, toAdd: boolean) {\r\n const tgid = typeof (textGroup) === 'string' ? textGroup :\r\n textGroup.attrs.id;\r\n const ar = this.textGroups.filter((tg) => tg.attrs.id !== tgid);\r\n this.textGroups = ar;\r\n if (toAdd) {\r\n this.textGroups.push(textGroup);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoScore}\r\n * @module /smo/data/score\r\n */\r\nimport { SmoMusic } from './music';\r\nimport { Clef, SvgDimensions, smoXmlNs } from './common';\r\nimport { SmoMeasure, SmoMeasureParams, ColumnMappedParams, SmoMeasureParamsSer } from './measure';\r\nimport { SmoNoteModifierBase } from './noteModifiers';\r\nimport {\r\n SmoTempoText, SmoMeasureFormat, SmoMeasureModifierBase, TimeSignature, TimeSignatureParameters,\r\n SmoMeasureFormatParamsSer\r\n} from './measureModifiers';\r\nimport { StaffModifierBase, SmoInstrument } from './staffModifiers';\r\nimport {\r\n SmoSystemGroup, SmoSystemGroupParamsSer, SmoScoreModifierBase, SmoPageLayout,\r\n SmoFormattingManager, SmoAudioPlayerSettings, SmoAudioPlayerParameters, SmoLayoutManagerParamsSer,\r\n SmoLayoutManager, FontPurpose,\r\n SmoScoreInfo, SmoScoreInfoKeys, ScoreMetadataSer, SmoScorePreferences, SmoPageLayoutParams,\r\n SmoLayoutManagerParams, SmoFormattingManagerParams\r\n} from './scoreModifiers';\r\nimport { SmoTextGroup, SmoScoreText, SmoTextGroupParamsSer } from './scoreText';\r\nimport { SmoSystemStaff, SmoSystemStaffParams, SmoSystemStaffParamsSer } from './systemStaff';\r\nimport { SmoSelector, SmoSelection } from '../xform/selections';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\n\r\n/**\r\n * List of engraving fonts available in Smoosic\r\n */\r\nexport type engravingFontType = 'Bravura' | 'Gonville' | 'Petaluma' | 'Leland';\r\n/**\r\n * Arrary of engraving fonts available in Smoosic\r\n */\r\nexport const engravingFontTypes: engravingFontType[] = ['Bravura', 'Gonville', 'Petaluma', 'Leland'];\r\n\r\nexport function isEngravingFont(et: engravingFontType | string): et is engravingFontType {\r\n return (engravingFontTypes as any[]).indexOf(et) >= 0;\r\n}\r\n\r\n/**\r\n * Constructor parameters. Usually you will call\r\n * {@link SmoScore.defaults}, and modify the parameters you need to change.\r\n * A new score with the defaults will create a single, empty measure.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoScoreParams {\r\n /**\r\n * global font defaults for this score\r\n */\r\n fonts: FontPurpose[],\r\n /**\r\n * identifying information about the score\r\n */\r\n scoreInfo: SmoScoreInfo,\r\n /**\r\n * customized editor behavior\r\n */\r\n preferences: SmoScorePreferences,\r\n /**\r\n * contained {@link SmoSystemStaffParams} objects\r\n */\r\n staves: SmoSystemStaffParams[],\r\n activeStaff?: number,\r\n /**\r\n * score text, not part of specific music\r\n */\r\n textGroups: SmoTextGroup[],\r\n /**\r\n * System groups for formatting/justification\r\n */\r\n systemGroups: SmoSystemGroup[],\r\n /**\r\n * future: global audio settings\r\n */\r\n audioSettings: SmoAudioPlayerParameters,\r\n /**\r\n * layout manager, for svg and div geometry, page sizes, header sizes etc.\r\n */\r\n layoutManager?: SmoLayoutManager,\r\n /**\r\n * measure-specific formatting\r\n */\r\n formattingManager?: SmoFormattingManager\r\n}\r\nfunction isSmoScoreParams(params: Partial): params is SmoScoreParams {\r\n if (params.fonts && params.fonts.length) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Serialization structure for the entire score. Score is deserialized from this\r\n * @category serialization\r\n */\r\nexport interface SmoScoreParamsSer {\r\n /**\r\n * some information about the score, mostly non-musical\r\n */\r\n metadata: ScoreMetadataSer,\r\n /**\r\n * contained {@link SmoSystemStaffParams} objects\r\n */\r\n staves: SmoSystemStaffParamsSer[],\r\n /**\r\n * score text, not part of specific music\r\n */\r\n textGroups: SmoTextGroupParamsSer[],\r\n /**\r\n * System groups for formatting/justification\r\n */\r\n systemGroups: SmoSystemGroupParamsSer[],\r\n /**\r\n * future: global audio settings\r\n */\r\n audioSettings: SmoAudioPlayerParameters,\r\n /**\r\n * layout manager, for svg and div geometry, page sizes, header sizes etc.\r\n */\r\n layoutManager?: SmoLayoutManagerParamsSer,\r\n /**\r\n * map of measure formats to measure\r\n */\r\n measureFormats: SmoMeasureFormatParamsSer[],\r\n /**\r\n * tempo, key and other column-mapped parameters\r\n */\r\n columnAttributeMap: ColumnParamsMapType,\r\n /**\r\n * dictionary compression for serialization\r\n */\r\n dictionary: Record\r\n}\r\n\r\nexport interface SmoScoreSerializeOptions {\r\n skipStaves: boolean,\r\n useDictionary: boolean\r\n}\r\n// dont' deserialize trivial text blocks saved by mistake\r\nexport function isEmptyTextBlock(params: Partial): params is SmoTextGroupParamsSer {\r\n if (Array.isArray(params?.textBlocks) || Array.isArray((params as any)?.blocks)) {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport interface ColumnParamsMapType {\r\n keySignature: Record,\r\n tempo: Record,\r\n timeSignature: Record,\r\n renumberingMap: Record\r\n}\r\n\r\n// SmoScoreParemsSer\r\nexport function isSmoScoreParemsSer(params: Partial): params is SmoScoreParamsSer {\r\n if (Array.isArray(params.staves)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Union of modifier types Smo modifier types\r\n */\r\nexport type SmoModifier = SmoNoteModifierBase | SmoMeasureModifierBase | StaffModifierBase | SmoScoreModifierBase;\r\n\r\n/**\r\n * Score is a container of staves, and metadata about the score. Serializing the score serializes the \r\n * child object. It is the highest-level object in Smoosic.\r\n */\r\nexport class SmoScore {\r\n /**\r\n * Map of instruments to staves, used in serialization.\r\n *\r\n * @type {any[]}\r\n * @memberof SmoScore\r\n */\r\n instrumentMap: any[] = [];\r\n /**\r\n * Default fonts in this score, for each type of text (lyrics, etc)\r\n *\r\n * @type {FontPurpose[]}\r\n * @memberof SmoScore\r\n */\r\n fonts: FontPurpose[] = [];\r\n /**\r\n * General info about the score, used for export and library\r\n *\r\n * @type {SmoScoreInfo}\r\n * @memberof SmoScore\r\n */\r\n scoreInfo: SmoScoreInfo = SmoScore.scoreInfoDefaults;\r\n /**\r\n * Default behavior for this score. Indicates some global behavior like whether to advance the cursor.\r\n *\r\n * @type {SmoScorePreferences}\r\n * @memberof SmoScore\r\n */\r\n preferences: SmoScorePreferences = new SmoScorePreferences(SmoScorePreferences.defaults);\r\n /**\r\n * The staves that make up the music of the score\r\n *\r\n * @type {SmoSystemStaff[]}\r\n * @memberof SmoScore\r\n */\r\n staves: SmoSystemStaff[] = [];\r\n /**\r\n * The active staff, used for some types of selections. Not serialized.\r\n *\r\n * @type {number}\r\n * @memberof SmoScore\r\n */\r\n activeStaff: number = 0;\r\n /**\r\n * Text associated with the score, but not a specific musical element (e.g. lyrics are contains by notes)\r\n *\r\n * @type {SmoTextGroup[]}\r\n * @memberof SmoScore\r\n */\r\n textGroups: SmoTextGroup[] = [];\r\n /**\r\n * A logical grouping of staves for justification\r\n *\r\n * @type {SmoSystemGroup[]}\r\n * @memberof SmoScore\r\n */\r\n systemGroups: SmoSystemGroup[] = [];\r\n /**\r\n * some audio player defaults\r\n *\r\n * @type {SmoAudioPlayerSettings}\r\n * @memberof SmoScore\r\n */\r\n audioSettings: SmoAudioPlayerSettings;\r\n /**\r\n * Preserve a map of measures to their actual measure numbers\r\n *\r\n * @type {Record}\r\n * @memberof SmoScore\r\n */\r\n renumberingMap: Record = {};\r\n /**\r\n * page and rendering layout of the score, including the ppi and scaling of the pages.\r\n *\r\n * @type {SmoLayoutManager}\r\n * @memberof SmoScore\r\n */\r\n layoutManager?: SmoLayoutManager;\r\n /**\r\n * per-measure formatting customizations.\r\n *\r\n * @type {SmoFormattingManager}\r\n * @memberof SmoScore\r\n */\r\n formattingManager?: SmoFormattingManager\r\n constructor(params: SmoScoreParams) {\r\n smoSerialize.vexMerge(this, SmoScore.defaults);\r\n smoSerialize.vexMerge(this, params);\r\n if (!this.layoutManager) {\r\n this.layoutManager = new SmoLayoutManager(SmoLayoutManager.defaults);\r\n }\r\n if (!this.formattingManager) {\r\n this.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n }\r\n if (this.staves.length) {\r\n this.numberStaves();\r\n }\r\n if (typeof (this.preferences.showPiano) === 'undefined') {\r\n this.preferences.showPiano = true;\r\n }\r\n this.audioSettings = new SmoAudioPlayerSettings(params.audioSettings);\r\n this.updateMeasureFormats();\r\n this.updateSystemGroups();\r\n }\r\n static get engravingFonts(): Record {\r\n return { Bravura: 'Bravura', Gonville: 'Gonville', Petaluma: 'Petaluma' };\r\n }\r\n static get fontPurposes(): Record {\r\n return { ENGRAVING: 1, SCORE: 2, CHORDS: 3, LYRICS: 4 };\r\n }\r\n static get scoreInfoDefaults(): SmoScoreInfo {\r\n return JSON.parse(JSON.stringify({\r\n name: 'Smoosical',\r\n title: 'Smoosical',\r\n subTitle: '(Op. 1)',\r\n composer: 'Me',\r\n copyright: '',\r\n version: 1\r\n }));\r\n }\r\n static get scoreMetadataDefaults(): ScoreMetadataSer {\r\n return JSON.parse(JSON.stringify({\r\n fonts: [{ name: 'engraving', purpose: SmoScore.fontPurposes.ENGRAVING, family: 'Bravura', size: 1, custom: false },\r\n { name: 'score', purpose: SmoScore.fontPurposes.SCORE, family: 'Merriweather', size: 14, custom: false },\r\n { name: 'chords', purpose: SmoScore.fontPurposes.CHORDS, family: 'Roboto Slab', size: 14, custom: false },\r\n { name: 'lyrics', purpose: SmoScore.fontPurposes.LYRICS, family: 'Merriweather', size: 12, custom: false } ],\r\n scoreInfo: SmoScore.scoreInfoDefaults,\r\n renumberingMap: {},\r\n preferences: new SmoScorePreferences(SmoScorePreferences.defaults)\r\n }));\r\n }\r\n static get defaults(): SmoScoreParams {\r\n return {\r\n // legacy layout structure. Now we use pages.\r\n fonts: [\r\n { name: 'engraving', purpose: SmoScore.fontPurposes.ENGRAVING, family: 'Bravura', size: 1, custom: false },\r\n { name: 'score', purpose: SmoScore.fontPurposes.SCORE, family: 'Merriweather', size: 14, custom: false },\r\n { name: 'chords', purpose: SmoScore.fontPurposes.CHORDS, family: 'Roboto Slab', size: 14, custom: false },\r\n { name: 'lyrics', purpose: SmoScore.fontPurposes.LYRICS, family: 'Merriweather', size: 12, custom: false }\r\n ],\r\n scoreInfo: SmoScore.scoreInfoDefaults,\r\n audioSettings: new SmoAudioPlayerSettings(SmoAudioPlayerSettings.defaults),\r\n preferences: new SmoScorePreferences(SmoScorePreferences.defaults),\r\n staves: [],\r\n activeStaff: 0,\r\n textGroups: [],\r\n systemGroups: []\r\n };\r\n }\r\n static get pageSizes(): string[] {\r\n return ['letter', 'tabloid', 'A4', 'A4Landscape', 'custom'];\r\n }\r\n static get pageDimensions(): Record {\r\n return {\r\n 'letter': { width: 8 * 96 + 48, height: 11 * 96 },\r\n 'letterLandscape': { width: 11 * 96, height: 8 * 96 + 48 },\r\n 'tabloid': { width: 1632, height: 1056 },\r\n 'A4': { width: 794, height: 1122 },\r\n 'A4Landscape': { width: 1122, height: 794 },\r\n 'custom': { width: 1, height: 1 }\r\n };\r\n }\r\n static pageSizeFromDimensions(width: number, height: number): string | null {\r\n const rv =\r\n SmoScore.pageSizes.find((sz) => SmoScore.pageDimensions[sz].width === width && SmoScore.pageDimensions[sz].height === height)\r\n ?? null;\r\n return rv;\r\n }\r\n\r\n static get preferences() {\r\n return ['preferences', 'fonts', 'scoreInfo', 'audioSettings'];\r\n }\r\n /**\r\n * serialize the keySignature, tempo and time signature, which are mapped\r\n * to a column at a measure index\r\n * @returns \r\n */\r\n serializeColumnMapped(func: (measure: SmoMeasure) => ColumnMappedParams) {\r\n const keySignature: Record = {};\r\n const tempo: Record = {};\r\n const timeSignature: Record = {};\r\n const renumberingMap: Record = {};\r\n let previous: ColumnMappedParams | null = null;\r\n this.staves[0].measures.forEach((measure) => {\r\n const current = func(measure);\r\n const ix = measure.measureNumber.measureIndex;\r\n const currentInstrument = this.staves[0].getStaffInstrument(ix);\r\n current.keySignature = SmoMusic.vexKeySigWithOffset(current.keySignature, -1 * currentInstrument.keyOffset);\r\n if (ix === 0) {\r\n keySignature[0] = current.keySignature;\r\n tempo[0] = current.tempo;\r\n timeSignature[0] = current.timeSignature;\r\n renumberingMap[0] = 0;\r\n previous = current;\r\n } else {\r\n if (typeof (this.renumberingMap[measure.measureNumber.measureIndex]) === 'number') {\r\n renumberingMap[measure.measureNumber.measureIndex] = this.renumberingMap[measure.measureNumber.measureIndex];\r\n }\r\n if (current.keySignature !== previous!.keySignature) {\r\n previous!.keySignature = current.keySignature;\r\n keySignature[ix] = current.keySignature;\r\n }\r\n if (!(TimeSignature.equal(current.timeSignature, previous!.timeSignature))) {\r\n previous!.timeSignature = current.timeSignature;\r\n timeSignature[ix] = current.timeSignature;\r\n }\r\n if (!(SmoTempoText.eq(current.tempo, previous!.tempo))) {\r\n previous!.tempo = current.tempo;\r\n tempo[ix] = current.tempo;\r\n }\r\n }\r\n });\r\n return { keySignature, tempo, timeSignature, renumberingMap };\r\n }\r\n\r\n /**\r\n * Column-mapped attributes stay the same in each measure until\r\n * changed, like key-signatures. We don't store each measure value to\r\n * make the files smaller\r\n * @param scoreObj - the json blob that contains the score data\r\n * @returns \r\n */\r\n static deserializeColumnMapped(scoreObj: any) {\r\n let curValue: any;\r\n let mapIx: number = 0;\r\n if (!scoreObj.columnAttributeMap) {\r\n return;\r\n }\r\n const attrs = Object.keys(scoreObj.columnAttributeMap);\r\n scoreObj.staves.forEach((staff: any) => {\r\n const attrIxMap: any = {};\r\n attrs.forEach((attr) => {\r\n attrIxMap[attr] = 0;\r\n });\r\n\r\n staff.measures.forEach((measure: any) => {\r\n attrs.forEach((attr) => {\r\n mapIx = attrIxMap[attr];\r\n const curHash = scoreObj.columnAttributeMap[attr];\r\n const attrKeys: any = Object.keys(curHash);\r\n curValue = curHash[attrKeys[mapIx.toString()]];\r\n attrKeys.sort((a: string, b: string) => parseInt(a, 10) > parseInt(b, 10) ? 1 : -1);\r\n if (attrKeys.length > mapIx + 1) {\r\n if (measure.measureNumber.measureIndex >= attrKeys[mapIx + 1]) {\r\n mapIx += 1;\r\n curValue = curHash[attrKeys[mapIx.toString()]];\r\n }\r\n }\r\n // legacy timeSignature format was just a string 2/4, 3/8 etc.\r\n if (attr === 'timeSignature') {\r\n const ts = new TimeSignature(TimeSignature.defaults);\r\n if (typeof (curValue) === 'string') {\r\n ts.timeSignature = curValue;\r\n measure[attr] = ts;\r\n } else {\r\n measure[attr] = TimeSignature.createFromPartial(curValue);\r\n }\r\n } else {\r\n measure[attr] = curValue;\r\n }\r\n attrIxMap[attr] = mapIx;\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Serialize the entire score.\r\n * @returns JSON object\r\n */\r\n serialize(options?: SmoScoreSerializeOptions): SmoScoreParamsSer {\r\n const skipStaves = options?.skipStaves ?? false;\r\n const useDictionary = options?.skipStaves ?? true;\r\n let obj: Partial = {\r\n layoutManager: { ctor: 'SmoLayoutManager', ...SmoLayoutManager.defaults },\r\n audioSettings: {},\r\n measureFormats: [],\r\n staves: [],\r\n textGroups: [],\r\n systemGroups: [],\r\n metadata: SmoScore.scoreMetadataDefaults\r\n };\r\n if (this.layoutManager) {\r\n obj.layoutManager = this.layoutManager.serialize();\r\n }\r\n obj.metadata!.fonts = JSON.parse(JSON.stringify(this.fonts));\r\n obj.metadata!.renumberingMap = JSON.parse(JSON.stringify(this.renumberingMap));\r\n obj.metadata!.preferences = this.preferences.serialize();\r\n obj.metadata!.scoreInfo = JSON.parse(JSON.stringify(this.scoreInfo));\r\n if (typeof (obj?.metadata?.scoreInfo?.version) !== 'number') {\r\n obj.metadata!.scoreInfo.version = 0;\r\n }\r\n if (this.formattingManager) {\r\n obj.measureFormats = this.formattingManager.serialize();\r\n }\r\n\r\n obj.audioSettings = this.audioSettings.serialize();\r\n if (!skipStaves) {\r\n this.staves.forEach((staff: SmoSystemStaff) => {\r\n obj.staves!.push(staff.serialize({ skipMaps: true }));\r\n });\r\n } else {\r\n obj.staves = [];\r\n }\r\n // Score text is not part of text group, so don't save separately.\r\n this.textGroups.forEach((tg) => {\r\n if (tg.isTextVisible()) {\r\n obj.textGroups!.push(tg.serialize());\r\n }\r\n });\r\n this.systemGroups.forEach((gg) => {\r\n obj.systemGroups!.push(gg.serialize());\r\n });\r\n const getSerMeasure = (measure: SmoMeasure): ColumnMappedParams => {\r\n return measure.serializeColumnMapped();\r\n }\r\n obj.columnAttributeMap = this.serializeColumnMapped(getSerMeasure);\r\n if (useDictionary) {\r\n smoSerialize.jsonTokens(obj);\r\n obj = smoSerialize.detokenize(obj, smoSerialize.tokenValues);\r\n obj.dictionary = smoSerialize.tokenMap;\r\n }\r\n return obj as SmoScoreParamsSer;\r\n }\r\n\r\n updateScorePreferences(pref: SmoScorePreferences) {\r\n this.preferences = pref;\r\n SmoMeasure.defaultDupleDuration = pref.defaultDupleDuration;\r\n SmoMeasure.defaultTripleDuration = pref.defaultTripleDuration;\r\n }\r\n get engravingFont(): engravingFontType {\r\n const efont = this.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (efont) {\r\n const val: engravingFontType | undefined = engravingFontTypes.find((x) => x === efont.family);\r\n if (val) {\r\n return val;\r\n }\r\n }\r\n return 'Bravura';\r\n }\r\n set engravingFont(value: engravingFontType) {\r\n const efont = this.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (efont && isEngravingFont(value)) {\r\n efont.family = value;\r\n }\r\n }\r\n static upConvertGlobalLayout(jsonObj: any) {\r\n // upconvert global layout, which used to be directly on layoutManager\r\n if (typeof (jsonObj.layoutManager.globalLayout) === 'undefined') {\r\n jsonObj.layoutManager.globalLayout = {\r\n svgScale: jsonObj.layoutManager.svgScale,\r\n zoomScale: jsonObj.layoutManager.zoomScale,\r\n pageWidth: jsonObj.layoutManager.pageWidth,\r\n pageHeight: jsonObj.layoutManager.pageHeight,\r\n noteSpacing: jsonObj.layoutManager.noteSpacing\r\n };\r\n if (!jsonObj.layoutManager.globalLayout.noteSpacing) {\r\n jsonObj.layoutManager.globalLayout.noteSpacing = 1.0;\r\n }\r\n }\r\n }\r\n /**\r\n * Convert legacy score layout to layoutManager object parameters\r\n * @param jsonObj \r\n */\r\n static upConvertLayout(jsonObj: any) {\r\n let i = 0;\r\n jsonObj.layoutManager = {};\r\n SmoLayoutManager.attributes.forEach((attr) => {\r\n jsonObj.layoutManager[attr] = jsonObj.score.layout[attr];\r\n });\r\n jsonObj.layoutManager.pageLayouts = [];\r\n for (i = 0; i < jsonObj.score.layout.pages; ++i) {\r\n const pageSetting = JSON.parse(JSON.stringify(SmoPageLayout.defaults));\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n if (typeof (jsonObj.score.layout[attr]) !== 'undefined') {\r\n pageSetting[attr] = jsonObj.score.layout[attr];\r\n }\r\n });\r\n jsonObj.layoutManager.pageLayouts.push(pageSetting);\r\n }\r\n SmoScore.upConvertGlobalLayout(jsonObj);\r\n }\r\n\r\n /**\r\n * Hack: for the case of a score containing only a single part, use the text from the \r\n * part.\r\n * @param jsonObj \r\n * @returns \r\n */\r\n static fixTextGroupSinglePart(jsonObj: any) {\r\n if (jsonObj.staves.length !== 1) {\r\n return;\r\n }\r\n if (!jsonObj.staves[0].partInfo) {\r\n return;\r\n }\r\n if (!jsonObj.staves[0].partInfo.textGroups || jsonObj.staves[0].partInfo.textGroups.length < 1) {\r\n return;\r\n }\r\n jsonObj.textGroups = JSON.parse(JSON.stringify(jsonObj.staves[0].partInfo.textGroups));\r\n }\r\n /**\r\n * Deserialize an entire score\r\n * @param jsonString \r\n * @returns SmoScore\r\n */\r\n static deserialize(jsonString: string): SmoScore {\r\n let jsonObj: Partial = JSON.parse(jsonString);\r\n let upconvertFormat = false;\r\n let formattingManager = null;\r\n if (jsonObj.dictionary) {\r\n jsonObj = smoSerialize.detokenize(jsonObj, jsonObj.dictionary);\r\n }\r\n SmoScore.fixTextGroupSinglePart(jsonObj);\r\n upconvertFormat = typeof (jsonObj.measureFormats) === 'undefined';\r\n const params: Partial = {};\r\n const staves: SmoSystemStaff[] = [];\r\n jsonObj.textGroups = jsonObj.textGroups ? jsonObj.textGroups : [];\r\n\r\n // Explode the sparse arrays of attributes into the measures\r\n SmoScore.deserializeColumnMapped(jsonObj);\r\n // 'score' attribute name changes to 'metadata'\r\n if (typeof ((jsonObj as any).score) !== 'undefined') {\r\n jsonObj.metadata = (jsonObj as any).score;\r\n }\r\n // meaning of customProportion has changed, backwards-compatiblity\r\n if (typeof (jsonObj.metadata) === 'undefined') {\r\n jsonObj.metadata = SmoScore.scoreMetadataDefaults;\r\n }\r\n // upconvert old proportion operator\r\n const jsonPropUp = jsonObj.metadata.preferences as any;\r\n if (typeof (jsonPropUp) !== 'undefined' && typeof (jsonPropUp.customProportion) === 'number') {\r\n SmoMeasureFormat.defaults.proportionality = jsonPropUp.customProportion;\r\n if (SmoMeasureFormat.defaults.proportionality === SmoMeasureFormat.legacyProportionality) {\r\n SmoMeasureFormat.defaults.proportionality = SmoMeasureFormat.defaultProportionality;\r\n }\r\n }\r\n // up-convert legacy layout data\r\n if ((jsonObj.metadata as any).layout) {\r\n SmoScore.upConvertLayout(jsonObj);\r\n }\r\n if (jsonObj.layoutManager && !jsonObj.layoutManager.globalLayout) {\r\n SmoScore.upConvertGlobalLayout(jsonObj);\r\n }\r\n if (!jsonObj.layoutManager) {\r\n jsonObj.layoutManager = { ctor: \"SmoLayoutManager\", ...SmoLayoutManager.defaults };\r\n }\r\n const layoutManagerParams: SmoLayoutManagerParams = {\r\n globalLayout: jsonObj.layoutManager.globalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: []\r\n }\r\n jsonObj.layoutManager.pageLayouts.forEach((pl) => {\r\n const pageLayout = new SmoPageLayout(pl);\r\n layoutManagerParams.pageLayouts.push(pageLayout);\r\n });\r\n const layoutManager = new SmoLayoutManager(layoutManagerParams);\r\n\r\n\r\n // params.layout = JSON.parse(JSON.stringify(SmoScore.defaults.layout));\r\n smoSerialize.serializedMerge(\r\n ['renumberingMap', 'fonts'],\r\n SmoScore.scoreMetadataDefaults, params);\r\n smoSerialize.serializedMerge(\r\n ['renumberingMap', 'fonts'],\r\n jsonObj.metadata, params);\r\n if (jsonObj.metadata.preferences) {\r\n params.preferences = new SmoScorePreferences(jsonObj.metadata.preferences);\r\n } else {\r\n params.preferences = new SmoScorePreferences(SmoScorePreferences.defaults);\r\n }\r\n if (jsonObj.metadata.scoreInfo) {\r\n const scoreInfo: Partial = {};\r\n smoSerialize.serializedMerge(SmoScoreInfoKeys, SmoScore.scoreInfoDefaults, scoreInfo);\r\n smoSerialize.serializedMerge(SmoScoreInfoKeys, jsonObj.metadata.scoreInfo, scoreInfo);\r\n params.scoreInfo = (scoreInfo as SmoScoreInfo);\r\n } else {\r\n params.scoreInfo = SmoScore.scoreInfoDefaults;\r\n }\r\n if (!jsonObj.audioSettings) {\r\n params.audioSettings = new SmoAudioPlayerSettings(SmoAudioPlayerSettings.defaults);\r\n } else {\r\n params.audioSettings = SmoScoreModifierBase.deserialize(jsonObj.audioSettings);\r\n }\r\n params.preferences.transposingScore = params.preferences.transposingScore ?? false;\r\n params.preferences.hideEmptyLines = params.preferences.hideEmptyLines ?? false;\r\n let renumberingMap: Record = { 0: 0 };\r\n if (jsonObj.columnAttributeMap && jsonObj.columnAttributeMap.renumberingMap) {\r\n renumberingMap = jsonObj.columnAttributeMap.renumberingMap;\r\n }\r\n if (!jsonObj.staves) {\r\n throw 'bad score, no staves: ' + JSON.stringify(jsonObj);\r\n }\r\n jsonObj.staves.forEach((staffObj: any, staffIx: number) => {\r\n staffObj.staffId = staffIx;\r\n staffObj.renumberingMap = renumberingMap;\r\n const staff = SmoSystemStaff.deserialize(staffObj);\r\n staves.push(staff);\r\n });\r\n\r\n const textGroups: SmoTextGroup[] = [];\r\n jsonObj.textGroups.forEach((tg: any) => {\r\n if (!isEmptyTextBlock(tg)) {\r\n textGroups.push(SmoTextGroup.deserializePreserveId(tg));\r\n }\r\n });\r\n\r\n const systemGroups: SmoSystemGroup[] = [];\r\n if (jsonObj.systemGroups) {\r\n jsonObj.systemGroups.forEach((tt: any) => {\r\n var st = SmoScoreModifierBase.deserialize(tt);\r\n st.autoLayout = false; // since this has been layed out, presumably, before save\r\n systemGroups.push(st);\r\n });\r\n }\r\n params.staves = staves;\r\n if (upconvertFormat) {\r\n formattingManager = SmoScore.measureFormatFromLegacyScore(params as any, jsonObj);\r\n } else {\r\n const measureParams: SmoFormattingManagerParams = {\r\n measureFormats: [],\r\n partIndex: -1\r\n }\r\n if (jsonObj.measureFormats) {\r\n jsonObj.measureFormats.forEach((mf: SmoMeasureFormatParamsSer) => {\r\n const mfObj = new SmoMeasureFormat(mf);\r\n measureParams.measureFormats?.push(mfObj);\r\n });\r\n }\r\n params.formattingManager = new SmoFormattingManager(measureParams);\r\n }\r\n params.layoutManager = layoutManager;\r\n if (!isSmoScoreParams(params)) {\r\n throw 'Bad score, missing params: ' + JSON.stringify(params, null, ' ');\r\n }\r\n const score = new SmoScore(params);\r\n score.textGroups = textGroups;\r\n score.systemGroups = systemGroups;\r\n score.scoreInfo.version += 1;\r\n return score;\r\n }\r\n /**\r\n * Convert measure formatting from legacy scores, that had the formatting\r\n * per measure, to the new way that has a separate formatting object.\r\n * **/\r\n static measureFormatFromLegacyScore(score: SmoScore, jsonObj: any): SmoFormattingManager | null {\r\n let current: SmoMeasureFormat | null = null;\r\n let previous: SmoMeasureFormat | null = null;\r\n const measureFormats: SmoMeasureFormat[] = [];\r\n score.staves[0].measures.forEach((measure: SmoMeasure) => {\r\n if (current === null) {\r\n current = SmoMeasureFormat.fromLegacyMeasure(jsonObj.staves[0].measures[measure.measureNumber.measureIndex]);\r\n measureFormats[measure.measureNumber.measureIndex] = current;\r\n } else {\r\n previous = current;\r\n current = SmoMeasureFormat.fromLegacyMeasure(jsonObj.staves[0].measures[measure.measureNumber.measureIndex]);\r\n if (!current.eq(previous)) {\r\n measureFormats[measure.measureNumber.measureIndex] = current;\r\n }\r\n }\r\n });\r\n return new SmoFormattingManager({ measureFormats });\r\n }\r\n\r\n /**\r\n * Return a default score with no notes or staves\r\n * @param scoreDefaults \r\n * @param measureDefaults \r\n * @returns \r\n */\r\n static getDefaultScore(scoreDefaults: SmoScoreParams, measureDefaults: SmoMeasureParams | null) {\r\n measureDefaults = measureDefaults !== null ? measureDefaults : SmoMeasure.defaults;\r\n const score = new SmoScore(scoreDefaults);\r\n score.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n score.addStaff(SmoSystemStaff.defaults);\r\n const measure: SmoMeasure = SmoMeasure.getDefaultMeasure(measureDefaults as SmoMeasureParams);\r\n score.addMeasure(0);\r\n measure.voices.push({\r\n notes: SmoMeasure.getDefaultNotes(measureDefaults as SmoMeasureParams)\r\n });\r\n return score;\r\n }\r\n\r\n /**\r\n * Return an 'empty' score, with one measure of rests\r\n * @param scoreDefaults \r\n * @returns \r\n */\r\n static getEmptyScore(scoreDefaults: SmoScoreParams) {\r\n const score = new SmoScore(scoreDefaults);\r\n score.addStaff(SmoSystemStaff.defaults);\r\n return score;\r\n }\r\n /**\r\n * We have deleted a measure, update the renumber index to\r\n * shuffle back.\r\n * @param indexToDelete \r\n */\r\n updateRenumberForAddDelete(indexToDelete: number, toAdd: boolean) {\r\n if (!toAdd && indexToDelete === 0) {\r\n return;\r\n }\r\n const maxIndex = this.staves[0].measures.length - 1;\r\n const increment = toAdd ? 1 : -1;\r\n for (var i = indexToDelete; i < maxIndex; ++i) {\r\n if (typeof (this.renumberingMap[i]) === 'number') {\r\n this.renumberingMap[i] = this.renumberingMap[i] + increment;\r\n }\r\n }\r\n if (typeof (this.renumberingMap[maxIndex]) === 'number' && !toAdd) {\r\n delete this.renumberingMap[maxIndex];\r\n }\r\n }\r\n\r\n updateRenumberingMap(measureIndex: number, localIndex: number) {\r\n if (measureIndex === 0) {\r\n this.renumberingMap[0] = localIndex;\r\n } else if (typeof (this.renumberingMap[measureIndex]) === 'number') {\r\n if (measureIndex === localIndex) {\r\n delete this.renumberingMap[measureIndex];\r\n } else {\r\n this.renumberingMap[measureIndex] = localIndex;\r\n }\r\n } else {\r\n this.renumberingMap[measureIndex] = localIndex;\r\n }\r\n this.staves.forEach((staff) => {\r\n staff.renumberingMap = this.renumberingMap;\r\n });\r\n this.numberStaves();\r\n }\r\n /**\r\n * Iteratively number the staves, like when adding a measure\r\n */\r\n numberStaves() {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n const stave = this.staves[i];\r\n stave.staffId = i;\r\n stave.numberMeasures();\r\n }\r\n }\r\n\r\n /**\r\n * determine if the measure at this index could be a multi-measure rest\r\n * @param measureIndex - the measure index we are considering to add\r\n * @param start - the measure index would be the start of the rest \r\n * @returns \r\n */\r\n isMultimeasureRest(measureIndex: number, start: boolean, forceRest: boolean) {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n if (!forceRest && !this.staves[i].isRest(measureIndex)) {\r\n return false;\r\n }\r\n if (this.staves[i].getVoltasForMeasure(measureIndex).length > 0) {\r\n return false;\r\n }\r\n if (this.staves[i].isRepeatSymbol(measureIndex)) {\r\n return false;\r\n }\r\n if (!start && measureIndex > 0 && this.staves[i].isRepeat(measureIndex - 1)) {\r\n return false;\r\n }\r\n if (this.staves[i].isRehearsal(measureIndex)) {\r\n return false;\r\n }\r\n // instrument change other than the initial measure\r\n if (this.staves[i].measureInstrumentMap[measureIndex] && i > 0) {\r\n return false;\r\n }\r\n }\r\n if (measureIndex > 0) {\r\n const measure = this.staves[0].measures[measureIndex];\r\n const prev = this.staves[0].measures[measureIndex - 1];\r\n if (!start && !TimeSignature.equal(measure.timeSignature, prev.timeSignature)) {\r\n return false;\r\n }\r\n if (!start && measure.keySignature !== prev.keySignature) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Restore measure formats stored when a score is serialized\r\n */\r\n updateMeasureFormats() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n (this.formattingManager as SmoFormattingManager).updateFormat(measure);\r\n });\r\n });\r\n }\r\n /**\r\n * Add a measure to the score with the supplied parameters at the supplied index.\r\n * The defaults per staff may be different depending on the clef, key of the staff.\r\n */\r\n addDefaultMeasureWithNotes(measureIndex: number, parameters: SmoMeasureParams) {\r\n this.updateRenumberForAddDelete(measureIndex, true);\r\n this.staves.forEach((staff) => {\r\n const defaultMeasure =\r\n SmoMeasure.getDefaultMeasureWithNotes(parameters);\r\n staff.addMeasure(measureIndex, defaultMeasure);\r\n });\r\n }\r\n getLocalMeasureIndex(measureIndex: number) {\r\n let maxKey = -1;\r\n const keys = Object.keys(this.updateRenumberForAddDelete);\r\n keys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n if (numKey <= measureIndex && numKey > maxKey) {\r\n maxKey = numKey;\r\n }\r\n });\r\n if (maxKey < 0) {\r\n return measureIndex;\r\n }\r\n return this.renumberingMap[maxKey] + (measureIndex - maxKey);\r\n }\r\n\r\n /**\r\n * delete the measure at the supplied index in all the staves\r\n */\r\n deleteMeasure(measureIndex: number) {\r\n this.staves.forEach((staff) => {\r\n staff.deleteMeasure(measureIndex);\r\n });\r\n // adjust offset if text was attached to any missing measures after the deleted one.\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n if (tg.attachToSelector && (tg.selector as SmoSelector).measure >= measureIndex && (tg.selector as SmoSelector).measure > 0) {\r\n (tg.selector as SmoSelector).measure -= 1;\r\n }\r\n });\r\n this.updateRenumberForAddDelete(measureIndex, false);\r\n }\r\n /**\r\n * get a measure 'compatible' with the measure at the given index, in terms\r\n * of key, time signature etc.\r\n * @param measureIndex \r\n * @param staffIndex \r\n * @returns \r\n */\r\n getPrototypeMeasure(measureIndex: number, staffIndex: number) {\r\n const staff = this.staves[staffIndex];\r\n let protomeasure: SmoMeasureParams = {} as SmoMeasureParams;\r\n\r\n // Since this staff may already have instrument settings, use the\r\n // immediately preceeding or post-ceding measure if it exists.\r\n if (measureIndex < staff.measures.length) {\r\n protomeasure = staff.measures[measureIndex];\r\n } else if (staff.measures.length) {\r\n protomeasure = staff.measures[staff.measures.length - 1];\r\n } else {\r\n protomeasure = SmoMeasure.defaults;\r\n }\r\n return SmoMeasure.getDefaultMeasureWithNotes(protomeasure);\r\n }\r\n\r\n /**\r\n * Give a measure prototype, create a new measure and add it to each staff, with the\r\n * correct settings for current time signature/clef.\r\n * @param measureIndex \r\n */\r\n addMeasure(measureIndex: number) {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n const staff = this.staves[i];\r\n const nmeasure = this.getPrototypeMeasure(measureIndex, i);\r\n if (nmeasure.voices.length <= nmeasure.getActiveVoice()) {\r\n nmeasure.setActiveVoice(0);\r\n }\r\n staff.addMeasure(measureIndex, nmeasure);\r\n }\r\n // Update offsets for score modifiers that have a selector\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n if (typeof (tg.selector) === 'undefined') {\r\n return;\r\n }\r\n if (tg.attachToSelector && tg.selector.measure >= measureIndex && tg.selector.measure < this.staves[0].measures.length) {\r\n tg.selector.measure += 1;\r\n }\r\n });\r\n this.updateRenumberForAddDelete(measureIndex, true);\r\n this.numberStaves();\r\n }\r\n\r\n /**\r\n * Replace the measure at the given location. Probably due to an undo operation or paste.\r\n * @param selector \r\n * @param measure \r\n */\r\n replaceMeasure(selector: SmoSelector, measure: SmoMeasure) {\r\n var staff = this.staves[selector.staff];\r\n staff.measures[selector.measure] = measure;\r\n }\r\n\r\n getSystemGroupForStaff(selection: SmoSelection) {\r\n const staffId: number = selection.staff.staffId;\r\n const measureIndex: number = selection.measure.measureNumber.measureIndex;\r\n const exist = this.systemGroups.find((sg: SmoSystemGroup) =>\r\n sg.startSelector.staff <= staffId &&\r\n sg.endSelector.staff >= staffId &&\r\n (sg.mapType === SmoSystemGroup.mapTypes.allMeasures ||\r\n (sg.startSelector.measure <= measureIndex &&\r\n sg.endSelector.measure >= measureIndex))\r\n );\r\n return exist;\r\n }\r\n\r\n getStavesForGroup(group: SmoSystemGroup) {\r\n return this.staves.filter((staff) => staff.staffId >= group.startSelector.staff &&\r\n staff.staffId <= group.endSelector.staff);\r\n }\r\n\r\n // ### addOrReplaceSystemGroup\r\n // Add a new staff grouping, or replace it if it overlaps and is different, or\r\n // remove it if it is identical (toggle)\r\n addOrReplaceSystemGroup(newGroup: SmoSystemGroup) {\r\n // Replace this group for any groups that overlap it.\r\n this.systemGroups = this.systemGroups.filter((sg) => !sg.overlaps(newGroup));\r\n this.systemGroups.push(newGroup);\r\n }\r\n\r\n isPartExposed(): boolean {\r\n if (this.staves.length > 2) {\r\n return false;\r\n }\r\n const staff = this.staves[0];\r\n const staveCount = staff.partInfo.stavesAfter + staff.partInfo.stavesBefore + 1;\r\n return staveCount === this.staves.length\r\n && staff.partInfo.stavesBefore === 0;\r\n }\r\n\r\n /**\r\n * Probably due to an undo operation, replace the staff at the given index.\r\n * @param index \r\n * @param staff \r\n */\r\n replaceStaff(index: number, staff: SmoSystemStaff) {\r\n const staves = [];\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n if (i !== index) {\r\n staves.push(this.staves[i]);\r\n } else {\r\n staves.push(staff);\r\n }\r\n }\r\n this.staves = staves;\r\n }\r\n /**\r\n * \r\n * @param measureIndex \r\n * @param key \r\n */\r\n addKeySignature(measureIndex: number, key: string) {\r\n this.staves.forEach((staff) => {\r\n // Consider transpose for key of instrument\r\n const netOffset = staff.measures[measureIndex].transposeIndex;\r\n const newKey = SmoMusic.vexKeySigWithOffset(key, netOffset);\r\n staff.addKeySignature(measureIndex, newKey);\r\n });\r\n }\r\n\r\n /**\r\n * If the part is a transposing part, remove the transposition from the notes/staff. This logic\r\n * assumes the measures previously had transposeIndex set up by the instrument map.\r\n */\r\n setTransposing() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n if (mm.transposeIndex !== 0) {\r\n const concert = SmoMusic.vexKeySigWithOffset(mm.keySignature, -1 * mm.transposeIndex);\r\n mm.transposeToOffset(0, concert);\r\n mm.transposeIndex = 0;\r\n mm.keySignature = concert;\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * If the score is switching from transposing to non-transposing, update the index\r\n * and pitches. This logic assumes we are changing from transposing to non-transposing.\r\n */\r\n setNonTransposing() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n const inst = staff.getStaffInstrument(mm.measureNumber.measureIndex);\r\n if (inst.keyOffset !== 0) {\r\n const concert = SmoMusic.vexKeySigWithOffset(mm.keySignature, inst.keyOffset);\r\n mm.transposeToOffset(inst.keyOffset, concert);\r\n mm.transposeIndex = inst.keyOffset;\r\n mm.keySignature = concert;\r\n }\r\n });\r\n });\r\n }\r\n\r\n // ### addInstrument\r\n // add a new staff (instrument) to the score\r\n addStaff(parameters: SmoSystemStaffParams): SmoSystemStaff {\r\n let i = 0;\r\n if (this.staves.length === 0) {\r\n const staff = new SmoSystemStaff(parameters);\r\n this.staves.push(staff);\r\n this.activeStaff = 0;\r\n // For part views, we renumber the staves even if there is only one staff.\r\n if (staff.measures.length) {\r\n this.numberStaves();\r\n }\r\n return staff;\r\n }\r\n if (!parameters) {\r\n parameters = SmoSystemStaff.defaults;\r\n }\r\n const proto = this.staves[0];\r\n const measures = [];\r\n for (i = 0; i < proto.measures.length; ++i) {\r\n const measure: SmoMeasure = proto.measures[i];\r\n const jsonObj: SmoMeasureParamsSer = measure.serialize();\r\n // Need to do this since score serialization doesn't include TS in each measure\r\n jsonObj.timeSignature = measure.timeSignature.serialize();\r\n jsonObj.tempo = measure.tempo.serialize();\r\n let newMeasure = SmoMeasure.deserialize(jsonObj);\r\n newMeasure.measureNumber = measure.measureNumber;\r\n newMeasure.clef = parameters.measureInstrumentMap[0].clef as Clef;\r\n newMeasure.modifiers = [];\r\n newMeasure.transposeIndex = 0;\r\n // Consider key change if the proto measure is non-concert pitch\r\n newMeasure.keySignature =\r\n SmoMusic.vexKeySigWithOffset(newMeasure.keySignature,\r\n newMeasure.transposeIndex - measure.transposeIndex);\r\n newMeasure.voices = [{ notes: SmoMeasure.getDefaultNotes(newMeasure) }];\r\n measure.modifiers.forEach((modifier) => {\r\n const nmod: SmoMeasureModifierBase = SmoMeasureModifierBase.deserialize(modifier);\r\n newMeasure.modifiers.push(nmod);\r\n });\r\n measures.push(newMeasure);\r\n }\r\n parameters.measures = measures;\r\n const staff = new SmoSystemStaff(parameters);\r\n this.staves.push(staff);\r\n this.activeStaff = this.staves.length - 1;\r\n this.numberStaves();\r\n return staff;\r\n }\r\n /**\r\n * delete any system groups that apply to deleted staves\r\n */\r\n updateSystemGroups() {\r\n const grpToKeep: SmoSystemGroup[] = [];\r\n this.systemGroups.forEach((grp) => {\r\n if (grp.startSelector.staff < this.staves.length &&\r\n grp.endSelector.staff < this.staves.length\r\n ) {\r\n grpToKeep.push(grp);\r\n }\r\n });\r\n this.systemGroups = grpToKeep;\r\n }\r\n // ### removeStaff\r\n // Remove stave at the given index\r\n removeStaff(index: number) {\r\n const staves: SmoSystemStaff[] = [];\r\n let ix = 0;\r\n this.staves.forEach((staff) => {\r\n if (ix !== index) {\r\n staves.push(staff);\r\n }\r\n ix += 1;\r\n });\r\n this.staves = staves;\r\n this.numberStaves();\r\n this.updateSystemGroups();\r\n }\r\n getStaffInstrument(selector: SmoSelector): SmoInstrument {\r\n const staff: SmoSystemStaff = this.staves[selector.staff];\r\n return staff.getStaffInstrument(selector.measure);\r\n }\r\n\r\n swapStaves(index1: number, index2: number): void {\r\n if (this.staves.length < index1 || this.staves.length < index2) {\r\n return;\r\n }\r\n const tmpStaff = this.staves[index1];\r\n this.staves[index1] = this.staves[index2];\r\n this.staves[index2] = tmpStaff;\r\n this.staves.forEach((staff) => {\r\n staff.mapStaffFromTo(index1, index2);\r\n staff.mapStaffFromTo(index2, index1);\r\n });\r\n this.numberStaves();\r\n }\r\n\r\n updateTextGroup(textGroup: SmoTextGroup, toAdd: boolean) {\r\n const tgid = typeof (textGroup) === 'string' ? textGroup :\r\n textGroup.attrs.id;\r\n const ar = this.textGroups.filter((tg) => tg.attrs.id !== tgid);\r\n this.textGroups = ar;\r\n if (toAdd) {\r\n this.textGroups.push(textGroup);\r\n }\r\n }\r\n addTextGroup(textGroup: SmoTextGroup) {\r\n this.updateTextGroup(textGroup, true);\r\n }\r\n getTextGroups() {\r\n return this.textGroups;\r\n }\r\n scaleTextGroups(scale: number) {\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n tg.scaleText(scale);\r\n });\r\n }\r\n\r\n removeTextGroup(textGroup: SmoTextGroup) {\r\n this.updateTextGroup(textGroup, false);\r\n }\r\n\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.staves.forEach((staff) => {\r\n staff.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.staves.forEach((staff) => {\r\n staff.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n // ### setLyricFont\r\n // set the font for lyrics, which are the same for all lyrics in the score\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.staves.forEach((staff) => {\r\n staff.setLyricFont(fontInfo);\r\n });\r\n const fontInst: FontPurpose | undefined = this.fonts.find((fn) => fn.purpose === SmoScore.fontPurposes.LYRICS);\r\n if (typeof (fontInst) === 'undefined') {\r\n return;\r\n }\r\n fontInst.family = fontInfo.family ?? '';\r\n fontInst.size = parseInt(SmoScoreText.fontPointSize(fontInfo.size).toString());\r\n fontInst.custom = true;\r\n }\r\n\r\n setChordFont(fontInfo: FontInfo) {\r\n this.staves.forEach((staff) => {\r\n staff.setChordFont(fontInfo);\r\n });\r\n }\r\n\r\n get measures() {\r\n if (this.staves.length === 0) {\r\n return [];\r\n }\r\n return this.staves[this.activeStaff].measures;\r\n }\r\n incrementActiveStaff(offset: number) {\r\n if (offset < 0) {\r\n offset = offset + this.staves.length;\r\n }\r\n const nextStaff = (this.activeStaff + offset) % this.staves.length;\r\n if (nextStaff >= 0 && nextStaff < this.staves.length) {\r\n this.activeStaff = nextStaff;\r\n }\r\n return this.activeStaff;\r\n }\r\n\r\n setActiveStaff(index: number) {\r\n this.activeStaff = index <= this.staves.length ? index : this.activeStaff;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * A score modifier is anything that isn't mapped specifically to a musical object.\r\n * This includes score text, layout information\r\n * @module /smo/data/scoreModifier\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMeasureFormat, SmoMeasureFormatParamsSer } from './measureModifiers';\r\nimport { SmoAttrs, getId, SmoModifierBase, SvgBox, \r\n createXmlAttribute } from './common';\r\nimport { SmoMeasure } from './measure';\r\nimport { SmoSelector } from '../xform/selections';\r\n\r\n/**\r\n * Base class for all {@link SmoScore} modifiers. \r\n * It is used to de/serialize the objects.\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoScoreModifierBase implements SmoModifierBase {\r\n /**\r\n * constructor\r\n *\r\n * @type {string}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n ctor: string;\r\n /**\r\n * When rendered, keep track of the box\r\n *\r\n * @type {(SvgBox | null)}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n logicalBox: SvgBox | null = null;\r\n /**\r\n * attributes for identification\r\n *\r\n * @type {SmoAttrs}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n attrs: SmoAttrs;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n abstract serialize(): any;\r\n static deserialize(jsonObj: any) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * For global/default font settings.\r\n * @param name to distinguish: chord, lyric etc.\r\n * @param family font family\r\n * @param size in points\r\n * @param custom used to distinguish a specific text is not the default\r\n */\r\nexport interface FontPurpose {\r\n /**\r\n * name of the purpose\r\n * { ENGRAVING: 1, SCORE: 2, CHORDS: 3, LYRICS: 4 }\r\n */\r\n name: string,\r\n /**\r\n * purpose enumeration\r\n */\r\n purpose: number,\r\n /**\r\n * font family\r\n */\r\n family: string,\r\n /**\r\n * default font size\r\n */\r\n size: number,\r\n /**\r\n * a flag that can be used to indicate if this is the global default, or a customization.\r\n * For lyrics for instance, most lyrics would use the custom font, this would be true if\r\n * it was overridden\r\n */\r\n custom: boolean\r\n}\r\n\r\n\r\n// @internal\r\nexport type SmoScoreInfoKey = 'name' | 'title' | 'subTitle' | 'composer' | 'copyright';\r\nexport const SmoScoreInfoKeys = ['name', 'title', 'subTitle', 'composer', 'copyright'];\r\n/**\r\n * Information about the score itself, like composer etc.\r\n * @category SmoModifier\r\n */\r\nexport interface SmoScoreInfo {\r\n /**\r\n * deprecated, now defaults to title\r\n */\r\n name: string,\r\n /**\r\n * name of score\r\n */\r\n title: string,\r\n /**\r\n * subtitle/opus\r\n */\r\n subTitle: string,\r\n /**\r\n * who wrote it\r\n */\r\n composer: string,\r\n /**\r\n * copyright information\r\n */\r\n copyright: string,\r\n /**\r\n * for version tracking\r\n */\r\n version: number\r\n}\r\n\r\n\r\nexport type SmoScorePreferenceBool = 'autoPlay' | 'autoAdvance' | 'showPiano' | 'hideEmptyLines' | 'transposingScore';\r\nexport type SmoScorePreferenceNumber = 'defaultDupleDuration' | 'defaultTripleDuration';\r\nexport const SmoScorePreferenceBools: SmoScorePreferenceBool[] = ['autoPlay', 'autoAdvance', 'showPiano', 'hideEmptyLines', 'transposingScore'];\r\nexport const SmoScorePreferenceNumbers: SmoScorePreferenceNumber[] = ['defaultDupleDuration', 'defaultTripleDuration'];\r\n/**\r\n * Global score/program behavior preferences, see below for parameters\r\n */\r\nexport interface SmoScorePreferencesParams {\r\n autoPlay: boolean;\r\n autoAdvance: boolean;\r\n defaultDupleDuration: number;\r\n defaultTripleDuration: number;\r\n showPiano: boolean;\r\n hideEmptyLines: boolean;\r\n transposingScore: boolean;\r\n}\r\n/**\r\n * Some default SMO behavior\r\n * @param autoPlay play a new note or chord\r\n * @param autoAdvance Sibelius-like behavior of advancing cursor when a letter note is placed\r\n * @param defaultDupleDuration in ticks, even metered measures\r\n * @param defaultTripleDuration in ticks, 6/8 etc.\r\n * @param showPiano show the piano widget in the score\r\n * @param hideEmptyLines Hide empty lines in full score\r\n * @param transposingScore Whether to show the score parts in concert key\r\n * @category SmoModifier\r\n */\r\nexport class SmoScorePreferences {\r\n autoPlay: boolean = true;\r\n autoAdvance: boolean = true;\r\n defaultDupleDuration: number = 4096;\r\n defaultTripleDuration: number = 6144;\r\n showPiano: boolean = true;\r\n hideEmptyLines: boolean = false;\r\n transposingScore: boolean = false;\r\n static get defaults(): SmoScorePreferencesParams {\r\n return {\r\n autoPlay: true,\r\n autoAdvance: true,\r\n defaultDupleDuration: 4096,\r\n defaultTripleDuration: 6144,\r\n showPiano: true,\r\n hideEmptyLines: false,\r\n transposingScore: false\r\n };\r\n }\r\n constructor(params: SmoScorePreferencesParams) {\r\n if (params) {\r\n SmoScorePreferenceBools.forEach((bb) => {\r\n this[bb] = params[bb];\r\n });\r\n SmoScorePreferenceNumbers.forEach((nn) => {\r\n this[nn] = params[nn];\r\n });\r\n }\r\n }\r\n serialize(): SmoScorePreferencesParams {\r\n return {\r\n ...this\r\n }\r\n }\r\n}\r\n/**\r\n * non-musical information about the score\r\n */\r\nexport interface ScoreMetadataSer {\r\n fonts: FontPurpose[],\r\n preferences: SmoScorePreferencesParams,\r\n renumberingMap: Record,\r\n scoreInfo: SmoScoreInfo\r\n}\r\n\r\n/**\r\n * Map of measure formatting to measure IDs. We only save non-default formats\r\n * @param measureFormats \r\n * @param partIndex \r\n */\r\nexport interface SmoFormattingManagerParams {\r\n /**\r\n * map of index to {@link SmoMeasureFormat} objects\r\n */\r\n measureFormats?: SmoMeasureFormat[],\r\n /**\r\n * the associated part, or -1 for the score\r\n */\r\n partIndex?: number\r\n}\r\n/**\r\n * A score can have different views - one for the score itself and one for each\r\n * part, and each part can have its own formatting and text.\r\n * *Note*: I may move this to part info module.\r\n * @param measureFormats map of index to {@link SmoMeasureFormat} objects\r\n * @param partIndex the associated part, or -1 for the score\r\n * @category SmoModifier\r\n */\r\nexport class SmoFormattingManager extends SmoScoreModifierBase {\r\n measureFormats: Record;\r\n partIndex: number = -1;\r\n static get forScore() {\r\n return -1;\r\n }\r\n static get defaults(): SmoFormattingManagerParams {\r\n return {\r\n measureFormats: [new SmoMeasureFormat(SmoMeasureFormat.defaults)],\r\n partIndex: -1\r\n };\r\n }\r\n\r\n constructor(params: SmoFormattingManagerParams) {\r\n super('SmoFormattingManager');\r\n if (typeof (params) === 'undefined') {\r\n params = {};\r\n }\r\n this.measureFormats = {};\r\n this.partIndex = SmoFormattingManager.forScore;\r\n if (typeof (params.partIndex) !== 'undefined') {\r\n this.partIndex = params.partIndex;\r\n }\r\n if (typeof (params.measureFormats) !== 'undefined' && params.measureFormats.length) {\r\n params.measureFormats.forEach((format) => {\r\n // 0 is default value, so fix case of first measure\r\n if (typeof(format.measureIndex) !== 'number') {\r\n format.measureIndex = 0;\r\n }\r\n this.measureFormats[format.measureIndex] = new SmoMeasureFormat(format);\r\n });\r\n }\r\n }\r\n /**\r\n * Update the measure format for the measure at the given index\r\n * @param format \r\n */\r\n updateMeasureFormat(format: SmoMeasureFormat) {\r\n this.measureFormats[format.measureIndex] = format;\r\n }\r\n /**\r\n * Update the measure format based on the format of a given measure\r\n * @param measure \r\n */\r\n updateFormat(measure: SmoMeasure) {\r\n if (this.measureFormats[measure.measureNumber.measureIndex]) {\r\n measure.format = this.measureFormats[measure.measureNumber.measureIndex];\r\n } else {\r\n measure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n }\r\n }\r\n serialize(): SmoMeasureFormatParamsSer[] {\r\n const rv: SmoMeasureFormatParamsSer[] = [];\r\n const keys = Object.keys(this.measureFormats);\r\n keys.forEach((key: any) => {\r\n if (!this.measureFormats[key].isDefault) {\r\n rv.push(this.measureFormats[key].serialize());\r\n }\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport type SmoAudioPlayerType = 'sampler' | 'synthesizer';\r\n/**\r\n * Constructor parameters for audio player\r\n */\r\nexport interface SmoAudioPlayerParameters {\r\n playerType?: SmoAudioPlayerType,\r\n waveform?: OscillatorType,\r\n reverbEnable?: boolean,\r\n reverbDelay?: number,\r\n reverbDecay?: number\r\n}\r\n\r\n/**\r\n * web audio API defines this\r\n * @param otype \r\n * @returns \r\n */\r\nexport function IsOscillatorType(otype: OscillatorType | string): otype is OscillatorType {\r\n return ['sine', 'square', 'sawtooth', 'triangle', 'custom'].findIndex((x) => x === otype) >= 0;\r\n}\r\n/**\r\n * Audio playback parameters. Just fun stuff.\r\n * @category SmoModifier\r\n */\r\nexport class SmoAudioPlayerSettings extends SmoScoreModifierBase {\r\n static get defaults(): SmoAudioPlayerParameters {\r\n return ({\r\n playerType: 'sampler',\r\n waveform: 'sine',\r\n reverbEnable: true,\r\n reverbDelay: 0.5,\r\n reverbDecay: 2\r\n });\r\n }\r\n static get attributes() {\r\n return ['playerType', 'waveform', 'reverbEnable', 'reverbDelay', 'reverbDecay'];\r\n }\r\n\r\n playerType: SmoAudioPlayerType = 'sampler';\r\n waveform: OscillatorType = 'sine';\r\n reverbEnable: boolean = true;\r\n reverbDelay: number = 0.2;\r\n reverbDecay: number = 0.5;\r\n constructor(params: SmoAudioPlayerParameters) {\r\n super('SmoAudioPlayerSettings');\r\n smoSerialize.serializedMerge(SmoAudioPlayerSettings.attributes, SmoAudioPlayerSettings.defaults, this);\r\n smoSerialize.serializedMerge(SmoAudioPlayerSettings.attributes, params, this);\r\n }\r\n serialize(): any {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoAudioPlayerSettings.defaults, SmoAudioPlayerSettings.attributes, this, params);\r\n params.ctor = 'SmoAudioPlayerSettings';\r\n return params;\r\n }\r\n}\r\nexport type ScaledPageAttributes = 'leftMargin' | 'rightMargin' | 'topMargin' | 'bottomMargin' | 'interGap' | 'intraGap';\r\n/**\r\n * Constructor parameters for {@link SmoPageLayout}, part of {@link SmoLayoutManager}\r\n * @category SmoParameters, serialization\r\n */\r\nexport interface SmoPageLayoutParams {\r\n leftMargin: number,\r\n rightMargin: number,\r\n topMargin: number,\r\n bottomMargin: number,\r\n interGap: number,\r\n intraGap: number\r\n}\r\nexport interface SmoPageLayoutParamsSer {\r\n\r\n}\r\n/**\r\n * Define margins and other layout information associated with a specific page, and may\r\n * be different on different pages.\r\n * @category SmoModifier\r\n */\r\nexport class SmoPageLayout extends SmoScoreModifierBase {\r\n static get defaults(): SmoPageLayoutParams {\r\n return JSON.parse(JSON.stringify({\r\n leftMargin: 30,\r\n rightMargin: 30,\r\n topMargin: 144,\r\n bottomMargin: 72,\r\n interGap: 30,\r\n intraGap: 10\r\n }));\r\n }\r\n static get attributes(): ScaledPageAttributes[] {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n leftMargin: number = 30;\r\n rightMargin: number = 30;\r\n topMargin: number = 40;\r\n bottomMargin: number = 40;\r\n interGap: number = 30;\r\n intraGap: number = 10;\r\n constructor(params: SmoPageLayoutParams) {\r\n super('SmoPageLayout');\r\n this.leftMargin = params.leftMargin;\r\n this.rightMargin = params.rightMargin;\r\n this.topMargin = params.topMargin;\r\n this.bottomMargin = params.bottomMargin;\r\n this.interGap = params.interGap;\r\n this.intraGap = params.intraGap;\r\n }\r\n serialize(): any {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoPageLayout.defaults, SmoPageLayout.attributes, this, params);\r\n params.ctor = 'SmoPageLayout';\r\n return params;\r\n }\r\n}\r\nexport type ScaledGlobalAttributes = 'pageWidth' | 'pageHeight';\r\nexport type GlobalLayoutAttributes = 'pageWidth' | 'pageHeight' | 'noteSpacing' | 'svgScale' | 'zoomScale' | 'proportionality' | 'maxMeasureSystem';\r\nexport const GlobalLayoutAttributesArray: GlobalLayoutAttributes[] = ['pageWidth', 'pageHeight', 'noteSpacing', 'svgScale', 'zoomScale', 'proportionality', 'maxMeasureSystem'];\r\n/**\r\n * Global layout are parameters that determine the layout of the whole score, because they affect the containing svg element\r\n * @category {SmoParams}\r\n */\r\nexport interface SmoGlobalLayout {\r\n svgScale: number;\r\n zoomScale: number;\r\n noteSpacing: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n proportionality: number,\r\n maxMeasureSystem: number\r\n}\r\n\r\n/**\r\n * Used to create {@link SmoLayoutManagerParams}\r\n * @category {SmoParams}\r\n */\r\nexport interface ScaledPageLayout {\r\n svgScale: number;\r\n zoomScale: number;\r\n noteSpacing: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n leftMargin: number;\r\n rightMargin: number;\r\n topMargin: number;\r\n bottomMargin: number;\r\n interGap: number;\r\n intraGap: number;\r\n pages: number;\r\n maxMeasureSystem: number;\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoLayoutManager}\r\n * @category {SmoParams}\r\n */\r\nexport interface SmoLayoutManagerParams {\r\n /**\r\n * global svg settings for zoom, page width/height\r\n */\r\n globalLayout: SmoGlobalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: SmoPageLayout[]\r\n}\r\nexport interface SmoLayoutManagerParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string; \r\n /**\r\n * global svg settings for zoom, page width/height\r\n */\r\n globalLayout: SmoGlobalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: SmoPageLayoutParams[]\r\n}\r\nfunction isSmoLayoutManagerParamsSer(params: Partial): params is SmoLayoutManagerParamsSer {\r\n if (!params.ctor || params.ctor !== 'SmoLayoutManager') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Storage and utilities for layout information in the score. Each\r\n * manager has one set of page height/width, since svg element\r\n * must have single length/width and viewbox.\r\n * Each page can have different margins.\r\n * @category SmoModifier\r\n */\r\nexport class SmoLayoutManager extends SmoScoreModifierBase {\r\n static get defaultLayout(): SmoGlobalLayout {\r\n return {\r\n svgScale: 0.55,\r\n zoomScale: 2.0,\r\n noteSpacing: 1.0,\r\n pageWidth: 8 * 96 + 48,\r\n pageHeight: 11 * 96,\r\n proportionality: 5,\r\n maxMeasureSystem: 0\r\n };\r\n }\r\n static get defaults(): SmoLayoutManagerParams {\r\n return {\r\n globalLayout: JSON.parse(JSON.stringify(SmoLayoutManager.defaultLayout)),\r\n pageLayouts: []\r\n };\r\n }\r\n static get attributes(): GlobalLayoutAttributes[] {\r\n return ['pageWidth', 'pageHeight', 'noteSpacing', 'svgScale', 'zoomScale', 'maxMeasureSystem'];\r\n }\r\n // Attributes that are scaled by svgScale\r\n /* static get scalableAttributes(): Global {\r\n return ['pageWidth', 'pageHeight'];\r\n }*/\r\n static get scaledPageAttributes(): ScaledPageAttributes[] {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n static get scaledGlobalAttributes(): ScaledGlobalAttributes[] {\r\n return ['pageWidth', 'pageHeight'];\r\n }\r\n static areLayoutsEqual(g1: SmoGlobalLayout, g2: SmoGlobalLayout) {\r\n let rv = true;\r\n GlobalLayoutAttributesArray.forEach((attr) => {\r\n if (g1[attr] !== g2[attr]) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n static isZoomChange(g1: SmoGlobalLayout, g2: SmoGlobalLayout) {\r\n let rv = true;\r\n GlobalLayoutAttributesArray.forEach((attr) => {\r\n if (g1[attr] !== g2[attr] && attr !== 'zoomScale') {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * Adjust zoom width so the score takes up the whole score area\r\n */\r\n zoomToWidth(screenWidth: number) {\r\n const curWidth = this.globalLayout.pageWidth * this.globalLayout.svgScale;\r\n this.globalLayout.zoomScale = ((screenWidth - 350) / curWidth) * this.globalLayout.svgScale; // magic 350 for left controls....TODO standardize this\r\n }\r\n static getScaledPageLayout(globalLayout: SmoGlobalLayout, pageLayout: SmoPageLayout, pages: number): ScaledPageLayout {\r\n const rv: Partial = {};\r\n SmoLayoutManager.scaledPageAttributes.forEach((attr: ScaledPageAttributes) => {\r\n rv[attr] = pageLayout[attr] / globalLayout.svgScale;\r\n });\r\n SmoLayoutManager.scaledGlobalAttributes.forEach((attr: ScaledGlobalAttributes) => {\r\n rv[attr] = globalLayout[attr] / globalLayout.svgScale;\r\n });\r\n // Note spacing is relative, so * it and not divide\r\n rv.noteSpacing = globalLayout.noteSpacing * globalLayout.svgScale;\r\n rv.svgScale = globalLayout.svgScale;\r\n rv.zoomScale = globalLayout.zoomScale;\r\n rv.maxMeasureSystem = globalLayout.maxMeasureSystem;\r\n \r\n return rv as ScaledPageLayout;\r\n }\r\n globalLayout: SmoGlobalLayout;\r\n pageLayouts: SmoPageLayout[] = [];\r\n constructor(params: SmoLayoutManagerParams) {\r\n super('SmoLayoutManager');\r\n if (typeof(params.globalLayout.maxMeasureSystem) === 'undefined') {\r\n params.globalLayout.maxMeasureSystem = SmoLayoutManager.defaultLayout.maxMeasureSystem;\r\n }\r\n this.globalLayout = JSON.parse(JSON.stringify(params.globalLayout));\r\n if (params.pageLayouts.length) {\r\n params.pageLayouts.forEach((plp) => {\r\n const pageParams: SmoPageLayoutParams = SmoPageLayout.defaults;\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n if (typeof (plp[attr]) !== 'undefined') {\r\n pageParams[attr] = plp[attr];\r\n }\r\n });\r\n this.pageLayouts.push(new SmoPageLayout(pageParams));\r\n });\r\n } else {\r\n this.pageLayouts.push(new SmoPageLayout(SmoPageLayout.defaults));\r\n }\r\n }\r\n trimPages(pageCount: number) {\r\n if (pageCount < this.pageLayouts.length - 1) {\r\n this.pageLayouts = this.pageLayouts.slice(0, pageCount + 1);\r\n }\r\n }\r\n getZoomScale() {\r\n return this.globalLayout.zoomScale;\r\n }\r\n serialize(): SmoLayoutManagerParamsSer {\r\n const rv: Partial = { ctor: 'SmoLayoutManager' };\r\n rv.pageLayouts = [];\r\n this.pageLayouts.forEach((pl) => {\r\n rv.pageLayouts!.push(pl.serialize());\r\n });\r\n rv.globalLayout = JSON.parse(JSON.stringify(this.globalLayout));\r\n if (!isSmoLayoutManagerParamsSer(rv)) {\r\n throw 'bad layout manager ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n updateGlobalLayout(params: SmoGlobalLayout) {\r\n SmoLayoutManager.attributes.forEach((attr: string) => {\r\n if (typeof ((params as any)[attr]) !== 'undefined') {\r\n (this.globalLayout as any)[attr] = (params as any)[attr];\r\n }\r\n });\r\n }\r\n // ### addToPageLayouts\r\n // Make sure the next page has a layout. If not, copy settings from\r\n // previous page.\r\n addToPageLayouts(pageNum: number) {\r\n const lastLayout = this.pageLayouts[this.pageLayouts.length - 1];\r\n if (this.pageLayouts.length <= pageNum) {\r\n this.pageLayouts.push(new SmoPageLayout(lastLayout));\r\n }\r\n }\r\n getGlobalLayout(): SmoGlobalLayout {\r\n return JSON.parse(JSON.stringify(this.globalLayout));\r\n }\r\n // Return a deep copy of the page parameters, adjusted for the global scale.\r\n getScaledPageLayout(pageIndex: number): ScaledPageLayout {\r\n return SmoLayoutManager.getScaledPageLayout(this.globalLayout, this.pageLayouts[pageIndex], this.pageLayouts.length);\r\n }\r\n getPageLayout(pageIndex: number): SmoPageLayout {\r\n return new SmoPageLayout(this.pageLayouts[pageIndex]);\r\n }\r\n getPageLayouts(): SmoPageLayout[] {\r\n const rv: SmoPageLayout[] = [];\r\n this.pageLayouts.forEach((pl) => {\r\n rv.push(new SmoPageLayout(pl));\r\n });\r\n return rv;\r\n }\r\n updatePage(pageLayout: SmoPageLayout, pageIndex: number) {\r\n if (this.pageLayouts.length > pageIndex) {\r\n this.pageLayouts[pageIndex] = new SmoPageLayout(pageLayout);\r\n }\r\n }\r\n}\r\n/**\r\n * constructor parameters for system groups (groupings of staves in the score)\r\n * @param leftConnector\r\n * @param rightConnector\r\n * @param mapType\r\n * @param text\r\n * @param shortText\r\n * @param justify\r\n * @param startSelector not used\r\n * @param endSelector not used\r\n * @category SmoParameters\r\n */\r\nexport interface SmoSystemGroupParams {\r\n /**\r\n * bracket etc.\r\n */\r\n leftConnector: number,\r\n /**\r\n * bracket etc.\r\n */\r\n rightConnector: number,\r\n /**\r\n * future, score groups can be different for different parts of the score\r\n */\r\n mapType: number,\r\n /**\r\n * whether to justify the notes in the group\r\n */\r\n justify: boolean,\r\n /**\r\n * if mapped to a range, start\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * if mapped to a range, end\r\n */\r\n endSelector: SmoSelector\r\n}\r\nexport interface SmoSystemGroupParamsSer extends SmoSystemGroupParams{\r\n /** \r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoSystemGroupParamsSer(params: Partial): params is SmoSystemGroupParamsSer {\r\n if (params.ctor === 'SmoSystemGroup') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * System group is the grouping of staves into a system.\r\n * @category SmoModifier\r\n * */\r\nexport class SmoSystemGroup extends SmoScoreModifierBase {\r\n static get connectorTypes(): Record {\r\n return { brace: 0, bracket: 1, single: 2, double: 3 };\r\n }\r\n static get mapTypes(): Record {\r\n return { allMeasures: 0, range: 1 };\r\n }\r\n static get attributes(): string[] {\r\n return ['leftConnector', 'rightConnector', 'text', 'shortText', 'justify',\r\n 'startSelector', 'endSelector', 'mapType'];\r\n }\r\n static get defaults(): SmoSystemGroupParams {\r\n return JSON.parse(JSON.stringify({\r\n leftConnector: SmoSystemGroup.connectorTypes.single,\r\n rightConnector: SmoSystemGroup.connectorTypes.single,\r\n mapType: SmoSystemGroup.mapTypes.allMeasures,\r\n justify: true,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static isSystemGroup(modifier: SmoSystemGroup | SmoModifierBase): modifier is SmoSystemGroup {\r\n return modifier.ctor === 'SmoSystemGroup';\r\n }\r\n leftConnector: number = SmoSystemGroup.connectorTypes.single;\r\n rightConnector: number = SmoSystemGroup.connectorTypes.single;\r\n mapType: number = SmoSystemGroup.mapTypes.allMeasures;\r\n text: string = '';\r\n shortText: string = '';\r\n justify: boolean = true;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n attrs: SmoAttrs;\r\n constructor(params: SmoSystemGroupParams) {\r\n super('SmoSystemGroup');\r\n smoSerialize.serializedMerge(SmoSystemGroup.attributes, SmoSystemGroup.defaults, this);\r\n smoSerialize.serializedMerge(SmoSystemGroup.attributes, params, this);\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSystemGroup'\r\n };\r\n }\r\n stavesOverlap(group: SmoSystemGroup) {\r\n return (this.startSelector.staff >= group.startSelector.staff && this.startSelector.staff <= group.endSelector.staff) ||\r\n (this.endSelector.staff >= group.startSelector.staff && this.endSelector.staff <= group.endSelector.staff);\r\n }\r\n measuresOverlap(group: SmoSystemGroup) {\r\n return this.stavesOverlap(group) &&\r\n ((this.startSelector.measure >= group.startSelector.measure && this.endSelector.measure <= group.startSelector.measure) ||\r\n (this.endSelector.measure >= group.startSelector.measure && this.endSelector.measure <= group.endSelector.measure));\r\n }\r\n overlaps(group: SmoSystemGroup) {\r\n return (this.stavesOverlap(group) && this.mapType === SmoSystemGroup.mapTypes.allMeasures) ||\r\n (this.measuresOverlap(group) && this.mapType === SmoSystemGroup.mapTypes.range);\r\n }\r\n serialize(): SmoSystemGroupParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoSystemGroup.defaults, SmoSystemGroup.attributes, this, params);\r\n params.ctor = 'SmoSystemGroup';\r\n if (!isSmoSystemGroupParamsSer(params)) {\r\n throw 'bad system group ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Score Text is anything that isn't mapped specifically to a musical object.\r\n * This includes score text, headers, footers. Score text is a single block of text.\r\n * TextGroup is 1 or more ScoreText blocks arranged in some way.\r\n * @module /smo/data/scoreModifier\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoScoreModifierBase, ScaledPageLayout } from './scoreModifiers';\r\nimport { SmoAttrs, SmoModifierBase } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\n\r\n/**\r\n * Parameters for a single text block. Text blocks make up a text group.\r\n * @category SmoParams\r\n */\r\nexport interface SmoScoreTextParams {\r\n /**\r\n * x location of font\r\n */\r\n x: number,\r\n /**\r\n * location of font\r\n */\r\n y: number,\r\n /**\r\n * In currently supported text groups, width and height comes from the text bounding box\r\n * and so isn't required.\r\n */\r\n width: number,\r\n /**\r\n * In currently supported text groups, width and height comes from the text bounding box\r\n * and so isn't required.\r\n */\r\n height: number,\r\n /**\r\n * The text content\r\n */\r\n text: string,\r\n /**\r\n * Font of the text\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * defaults to black\r\n */\r\n fill?: string,\r\n classes?: string,\r\n}\r\n/**\r\n * serialization\r\n */\r\nexport interface SmoScoreTextSer extends SmoScoreTextParams {\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string;\r\n}\r\n\r\nfunction isSmoScoreTextSer(params: Partial): params is SmoScoreTextSer {\r\n if (!(params?.ctor === 'SmoScoreText')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Identify some text in the score, not associated with any musical element, like page\r\n * decorations, titles etc.\r\n * Note: score text is always contained in a text group. So this isn't directly accessed\r\n * by score, but we keep the collection in score for backwards-compatibility\r\n * @category SmoModifier\r\n * @internal\r\n */\r\nexport class SmoScoreText extends SmoScoreModifierBase {\r\n // convert EM to a number, or leave as a number etc.\r\n static fontPointSize(size: string | number | undefined) {\r\n let rv: number = 12;\r\n if (typeof(size) !== 'number' && typeof(size) !== 'string') {\r\n return rv;\r\n }\r\n const szz: string | number = size ?? 14;\r\n if (typeof (szz) === 'number') {\r\n return szz;\r\n }\r\n const ptString = szz.substring(0, szz.length - 2);\r\n rv = parseFloat(ptString);\r\n if (szz.indexOf('em') > 0) {\r\n rv *= 14;\r\n } else if (szz.indexOf('px') > 0) {\r\n rv *= (96.0 / 72.0);\r\n }\r\n if (isNaN(rv)) {\r\n rv = 12;\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * Convert a numeric or string weight into either 'bold' or 'normal'\r\n * @param fontWeight \r\n * @returns \r\n */\r\n static weightString(fontWeight: string | number | undefined): string { \r\n let rv: string = 'normal';\r\n if (fontWeight) {\r\n const numForm = parseInt(fontWeight.toString(), 10);\r\n if (isNaN(numForm)) {\r\n rv = fontWeight.toString();\r\n } else if (numForm > 500) {\r\n rv = 'bold';\r\n }\r\n }\r\n return rv;\r\n }\r\n static familyString(fam: string | undefined): string {\r\n if (!fam) {\r\n return SmoScoreText.fontFamilies.sansSerif;\r\n }\r\n return fam;\r\n }\r\n static get fontFamilies(): Record {\r\n return {\r\n serif: 'Merriweather', sansSerif: 'Roboto,sans-serif', monospace: 'monospace', cursive: 'cursive',\r\n times: 'Merriweather', arial: 'Arial'\r\n };\r\n }\r\n static get parameters() {\r\n return ['x', 'y', 'width', 'height', 'text', 'fontInfo', 'fill', 'classes']\r\n }\r\n static get defaults(): SmoScoreTextParams {\r\n return JSON.parse(JSON.stringify({\r\n x: 15,\r\n y: 15,\r\n width: 0,\r\n height: 0,\r\n text: 'Text',\r\n fontInfo: {\r\n size: 14,\r\n family: SmoScoreText.fontFamilies.serif,\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n fill: 'black',\r\n classes: 'score-text',\r\n }));\r\n }\r\n static deserialize(jsonObj: SmoScoreTextSer) {\r\n const params = SmoScoreText.defaults;\r\n smoSerialize.serializedMerge(SmoScoreText.parameters, jsonObj, params);\r\n if (typeof (params.fontInfo.size === 'string')) {\r\n params.fontInfo.size = SmoScoreText.fontPointSize(params.fontInfo.size);\r\n }\r\n return new SmoScoreText(params);\r\n }\r\n x: number = 15;\r\n y: number = 15;\r\n width: number = 0;\r\n height: number = 0;\r\n text: string = 'Text';\r\n fontInfo: FontInfo = {\r\n size: 14,\r\n family: SmoScoreText.fontFamilies.serif,\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n fill: string = 'black';\r\n classes: string = 'score-text';\r\n scaleX: number = 1.0;\r\n scaleY: number = 1.0;\r\n\r\n getText() {\r\n return this.text;\r\n }\r\n estimateWidth(): number {\r\n let i = 0;\r\n let rv = 0;\r\n const textFont = TextFormatter.create({\r\n family: this.fontInfo.family,\r\n size: this.fontInfo.size,\r\n weight: this.fontInfo.weight,\r\n style: this.fontInfo.style\r\n });\r\n textFont.setFontSize(SmoScoreText.fontPointSize(this.fontInfo.size));\r\n for (i = 0; i < this.text.length; ++i) {\r\n rv += textFont.getWidthForTextInPx(this.text[i]);\r\n }\r\n return rv;\r\n }\r\n tryParseUnicode() {\r\n this.text = smoSerialize.tryParseUnicode(this.text);\r\n }\r\n\r\n offsetX(offset: number) {\r\n this.x += offset;\r\n }\r\n offsetY(offset: number) {\r\n this.y += offset;\r\n }\r\n\r\n serialize(): SmoScoreTextSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoScoreText.defaults, SmoScoreText.attributes, this, params);\r\n params.ctor = 'SmoScoreText';\r\n if (!isSmoScoreTextSer(params)) {\r\n throw ('bad score text ')\r\n }\r\n return params;\r\n }\r\n static get attributes(): string[] {\r\n return ['x', 'y', 'text', 'fontInfo', 'classes',\r\n 'fill', 'width', 'height', 'scaleX', 'scaleY'];\r\n }\r\n static get simpleAttributes(): string[] {\r\n return ['x', 'y', 'text', 'classes',\r\n 'fill', 'width', 'height', 'scaleX', 'scaleY'];\r\n }\r\n constructor(parameters: SmoScoreTextParams) {\r\n super('SmoScoreText');\r\n let rx = '';\r\n smoSerialize.serializedMerge(SmoScoreText.attributes, SmoScoreText.defaults, this);\r\n smoSerialize.serializedMerge(SmoScoreText.attributes, parameters, this);\r\n\r\n if (!this.classes) {\r\n this.classes = '';\r\n }\r\n if (this.classes.indexOf(this.attrs.id) < 0) {\r\n this.classes += ' ' + this.attrs.id;\r\n }\r\n const weight = parameters.fontInfo ? parameters.fontInfo.weight : 'normal';\r\n this.fontInfo.weight = SmoScoreText.weightString(weight ?? 'normal');\r\n if (this.text) {\r\n rx = smoSerialize.tryParseUnicode(this.text);\r\n this.text = rx;\r\n }\r\n }\r\n}\r\n/**\r\n * Each text block has the text data itself and some data about how it's placed\r\n */\r\nexport interface SmoTextBlock {\r\n /**\r\n * The score text\r\n */\r\n text: SmoScoreText,\r\n /**\r\n * position relative to other blocks\r\n */\r\n position: number,\r\n /**\r\n * run-time flag\r\n */\r\n activeText: boolean\r\n}\r\nexport interface SmoTextBlockSer {\r\n /**\r\n * The score text\r\n */\r\n text: SmoScoreTextSer,\r\n /**\r\n * position relative to other blocks\r\n */\r\n position: number\r\n}\r\n/**\r\n * Used to place text imported from other formats, e.g. music xml\r\n */\r\nexport interface SmoTextPlacement {\r\n fontFamily: string,\r\n fontSize: number,\r\n xPlacement: number,\r\n yOffset: number,\r\n}\r\n/**\r\n * Constructor parameters for a text group, a block of text in Smoosic\r\n * @param justification one of {@link SmoTextGroup.justifications}\r\n * @param relativePosition relative position to other text groups\r\n * @param pagination indicates if this text is paginated (goes on each page)\r\n * @param spacing distance between blocks\r\n * @param attachToSelector acts like 'note text' if attached to a note, otherwise\r\n * the position is based on score position, or page position if paginated\r\n * @param selector if attached, the selector in question\r\n * @param textBlocks the actual textBlocks of text - a score text along with a placement parameter\r\n * @category SmoParams\r\n */\r\nexport interface SmoTextGroupParams {\r\n justification: number,\r\n relativePosition: number,\r\n pagination: number,\r\n purpose: number,\r\n spacing: number,\r\n musicXOffset: number,\r\n musicYOffset: number,\r\n attachToSelector: boolean,\r\n selector: SmoSelector,\r\n textBlocks: SmoTextBlock[]\r\n}\r\n\r\n/**\r\n * The serializable parts of a text group.\r\n * @category serialization\r\n */\r\nexport interface SmoTextGroupParamsSer {\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string;\r\n /**\r\n * ID so we can identify which text this is in dialogs, UI\r\n */\r\n attrs: SmoAttrs;\r\n /**\r\n * justification within the block\r\n */\r\n justification?: number,\r\n /**\r\n * position (above, left, right etc)\r\n */\r\n relativePosition?: number,\r\n /**\r\n * pagination for headers, footers\r\n */\r\n pagination?: number,\r\n /**\r\n * spacing between blocks, future\r\n */\r\n spacing?: number,\r\n /**\r\n * true if the text is attached to a note.\r\n */\r\n attachToSelector?: boolean,\r\n /**\r\n * defined if the selector is attached to a note\r\n */\r\n selector?: SmoSelector,\r\n /**\r\n * the individual text blocks\r\n */\r\n textBlocks: SmoTextBlockSer[];\r\n}\r\nfunction isSmoTextGroupParamsSer(params: Partial): params is SmoTextGroupParamsSer {\r\n if (!(params?.ctor === 'SmoTextGroup')) {\r\n return false;\r\n }\r\n if (!(typeof(params.attrs?.id) === 'string')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction isTextBlockSer(params: Partial): params is SmoTextBlockSer {\r\n if (!params.text) {\r\n return false;\r\n }\r\n if (!params.text) {\r\n return false;\r\n }\r\n if (!(typeof(params.position) === 'number')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Suggestion for text purpose, maybe used to find a match..maybe not used at all\r\n */\r\nexport type SmoTextGroupPurpose = 'NONE' |'TITLE' | 'SUBTITLE' | 'COMPOSER' | 'COPYRIGHT';\r\n\r\n/**\r\n * A grouping of text that can be used as a block for\r\n * justification, alignment etc.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTextGroup extends SmoScoreModifierBase {\r\n static get justifications() {\r\n return {\r\n LEFT: 1,\r\n RIGHT: 2,\r\n CENTER: 3\r\n };\r\n }\r\n static get paginations() {\r\n return { EVERY: 1, EVENT: 2, ODD: 3, ONCE: 4, SUBSEQUENT: 5 };\r\n }\r\n\r\n // The position of block n relative to block n-1. Each block\r\n // has it's own position. Justification is inter-block.\r\n static get relativePositions() {\r\n return { ABOVE: 1, BELOW: 2, LEFT: 3, RIGHT: 4 };\r\n }\r\n\r\n static get purposes(): Record {\r\n return {\r\n NONE: 1, TITLE: 2, SUBTITLE: 3, COMPOSER: 4, COPYRIGHT: 5\r\n };\r\n }\r\n static get attributes() {\r\n return ['textBlocks', 'justification', 'relativePosition', 'spacing', 'pagination', \r\n 'attachToSelector', 'selector', 'musicXOffset', 'musicYOffset'];\r\n }\r\n static get nonTextAttributes() {\r\n return ['justification', 'relativePosition', 'spacing', 'pagination', \r\n 'attachToSelector', 'selector', 'musicXOffset', 'musicYOffset'];\r\n }\r\n static get simpleAttributes() {\r\n return ['justification', 'relativePosition', 'spacing', 'pagination', \r\n 'attachToSelector', 'musicXOffset', 'musicYOffset'];\r\n } \r\n static isTextGroup(modifier: SmoTextGroup | SmoModifierBase): modifier is SmoTextGroup {\r\n return modifier.ctor === 'SmoTextGroup';\r\n }\r\n static get purposeToFont(): Record {\r\n const rv: Record = {};\r\n rv[SmoTextGroup.purposes.TITLE] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 18,\r\n xPlacement: 0.5,\r\n yOffset: 4\r\n };\r\n rv[SmoTextGroup.purposes.SUBTITLE] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 16,\r\n xPlacement: 0.5,\r\n yOffset: 20,\r\n };\r\n rv[SmoTextGroup.purposes.COMPOSER] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 12,\r\n xPlacement: 0.8,\r\n yOffset: 10\r\n };\r\n rv[SmoTextGroup.purposes.COPYRIGHT] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 12,\r\n xPlacement: 0.5,\r\n yOffset: -12\r\n };\r\n return rv;\r\n }\r\n // ### createTextForLayout\r\n // Create a specific score text type (title etc.) based on the supplied\r\n // score layout\r\n static createTextForLayout(purpose: number, text: string, layout: ScaledPageLayout) {\r\n let x = 0;\r\n const textAttr = SmoTextGroup.purposeToFont[purpose];\r\n const pageWidth = layout.pageWidth;\r\n const pageHeight = layout.pageHeight;\r\n const bottomMargin = layout.bottomMargin;\r\n const topMargin = layout.topMargin;\r\n x = textAttr.xPlacement > 0 ? pageWidth * textAttr.xPlacement\r\n : pageWidth - (pageWidth * textAttr.xPlacement);\r\n const y = textAttr.yOffset > 0 ?\r\n topMargin + textAttr.yOffset :\r\n pageHeight + textAttr.yOffset - bottomMargin;\r\n const defaults: SmoScoreTextParams = SmoScoreText.defaults;\r\n const st = new SmoScoreText({\r\n text, x, y, width: defaults.width, height: defaults.height,\r\n fontInfo: { family: textAttr.fontFamily, size: textAttr.fontSize, weight: 'normal' }\r\n });\r\n const width = st.estimateWidth();\r\n x -= width / 2;\r\n const params = SmoTextGroup.defaults;\r\n params.textBlocks = [{ text: st, position: SmoTextGroup.relativePositions.RIGHT, activeText: false }];\r\n params.purpose = purpose;\r\n const tg = new SmoTextGroup(params);\r\n return tg;\r\n }\r\n\r\n static get defaults(): SmoTextGroupParams {\r\n return JSON.parse(JSON.stringify({\r\n textBlocks: [],\r\n justification: SmoTextGroup.justifications.LEFT,\r\n relativePosition: SmoTextGroup.relativePositions.RIGHT,\r\n pagination: SmoTextGroup.paginations.ONCE,\r\n purpose: SmoTextGroup.purposes.NONE,\r\n spacing: 0,\r\n attachToSelector: false,\r\n selector: null,\r\n musicXOffset: 0,\r\n musicYOffset: 0\r\n }));\r\n }\r\n justification: number = SmoTextGroup.justifications.LEFT;\r\n relativePosition: number = SmoTextGroup.relativePositions.RIGHT;\r\n pagination: number = SmoTextGroup.paginations.ONCE;\r\n purpose: number = SmoTextGroup.purposes.NONE;\r\n spacing: number = 0;\r\n attachToSelector: boolean = false;\r\n selector?: SmoSelector;\r\n musicXOffset: number = 0;\r\n musicYOffset: number = 0;\r\n elements: SVGSVGElement[] = [];\r\n textBlocks: SmoTextBlock[] = [];\r\n edited: boolean = false; // indicates not edited this session\r\n skipRender: boolean = false; // don't render if it is being edited \r\n static deserialize(jObj: SmoTextGroupParamsSer) {\r\n const textBlocks: SmoTextBlock[] = [];\r\n const params: any = {};\r\n const jObjLegacy: any = jObj;\r\n // handle parameter name change\r\n if (jObjLegacy.blocks) {\r\n jObj.textBlocks = jObjLegacy.blocks;\r\n }\r\n\r\n // Create new scoreText object for the text blocks\r\n jObj.textBlocks.forEach((st: any) => {\r\n const tx = SmoScoreText.deserialize(st.text);\r\n textBlocks.push({ text: tx, position: st.position, activeText: false });\r\n });\r\n // fill in the textBlock configuration\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, jObj, params);\r\n params.textBlocks = textBlocks;\r\n return new SmoTextGroup(params);\r\n }\r\n static deserializePreserveId(jObj: any) {\r\n const rv = SmoTextGroup.deserialize(jObj);\r\n if (jObj.attrs.id) {\r\n rv.attrs.id = jObj.attrs.id;\r\n }\r\n return rv;\r\n }\r\n // ### getPagedTextGroups\r\n // If this text is repeated on page, create duplicates for each page, and\r\n // resolve page numbers;\r\n static getPagedTextGroups(tg: SmoTextGroup, pages: number, pageHeight: number): SmoTextGroup[] {\r\n const rv: SmoTextGroup[] = [];\r\n let i: number = 0;\r\n if (tg.pagination === SmoTextGroup.paginations.ONCE) {\r\n rv.push(tg);\r\n return rv;\r\n }\r\n for (i = 0; i < pages; ++i) {\r\n const ix: number = i;\r\n const nblocks: any = [];\r\n // deep copy the blocks so the page offsets don't bleed into\r\n // original.\r\n tg.textBlocks.forEach((block) => {\r\n const nscoreText = new SmoScoreText(block.text);\r\n nblocks.push({\r\n text: nscoreText, position: block.position\r\n });\r\n });\r\n const params: SmoTextGroupParams = {} as SmoTextGroupParams;\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, tg, params);\r\n params.textBlocks = nblocks;\r\n const ngroup: SmoTextGroup = new SmoTextGroup(params);\r\n ngroup.textBlocks.forEach((block) => {\r\n const xx = block.text;\r\n xx.classes = 'score-text ' + xx.attrs.id;\r\n xx.text = xx.text.replace('###', (ix + 1).toString()); /// page number\r\n xx.text = xx.text.replace('@@@', pages.toString()); /// page number\r\n xx.y += pageHeight * ix;\r\n });\r\n if (tg.logicalBox) {\r\n ngroup.logicalBox = JSON.parse(JSON.stringify(tg.logicalBox));\r\n ngroup.logicalBox!.y += pageHeight * i;\r\n }\r\n rv.push(ngroup);\r\n }\r\n return rv;\r\n }\r\n serialize(): SmoTextGroupParamsSer {\r\n const params: Partial = {\r\n textBlocks: []\r\n };\r\n smoSerialize.serializedMergeNonDefault(SmoTextGroup.defaults, SmoTextGroup.nonTextAttributes, this, params);\r\n this.textBlocks.forEach((blk: SmoTextBlock) => {\r\n \r\n const blockSer: Partial = {\r\n position: blk.position\r\n }\r\n\r\n blockSer.text = blk.text.serialize();\r\n if (!isTextBlockSer(blockSer)) {\r\n throw ('bad text block ' + JSON.stringify(blockSer));\r\n }\r\n params.textBlocks!.push(blockSer);\r\n });\r\n params.ctor = 'SmoTextGroup';\r\n params.attrs = JSON.parse(JSON.stringify(this.attrs));\r\n if (!isSmoTextGroupParamsSer(params)) {\r\n throw('bad text group ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n constructor(params: SmoTextGroupParams) {\r\n super('SmoTextGroup');\r\n if (typeof (params) === 'undefined') {\r\n params = {} as SmoTextGroupParams;\r\n }\r\n this.textBlocks = [];\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, SmoTextGroup.defaults, this);\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, params, this);\r\n if (params.textBlocks) {\r\n params.textBlocks.forEach((block: SmoTextBlock) => {\r\n this.textBlocks.push(block);\r\n });\r\n }\r\n }\r\n scaleText(scale: number) {\r\n this.musicXOffset *= scale;\r\n this.musicYOffset *= scale;\r\n this.textBlocks.forEach((block: SmoTextBlock) => {\r\n block.text.x *= scale;\r\n block.text.y *= scale;\r\n });\r\n }\r\n // ### tryParseUnicode\r\n // Try to parse unicode strings.\r\n tryParseUnicode() {\r\n this.textBlocks.forEach((tb) => {\r\n tb.text.tryParseUnicode();\r\n });\r\n }\r\n estimateWidth() {\r\n let rv = 0;\r\n this.textBlocks.forEach((tb) => {\r\n rv += tb.text.estimateWidth();\r\n });\r\n return rv;\r\n }\r\n // avoid saving text that can't be deleted\r\n isTextVisible() {\r\n let rv = true;\r\n if (this.attachToSelector) {\r\n return true;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n if (block.text.x < 0 || block.text.y < 0) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n // ### setActiveBlock\r\n // let the UI know which block is being edited. Parameter null means reset all\r\n setActiveBlock(scoreText: SmoScoreText | null) {\r\n this.textBlocks.forEach((block) => {\r\n if (scoreText != null && block.text.attrs.id === scoreText.attrs.id) {\r\n block.activeText = true;\r\n } else {\r\n block.activeText = false;\r\n }\r\n });\r\n }\r\n // For editing, keep track of the active text block.\r\n getActiveBlock() {\r\n const rv = this.textBlocks.find((block) => block.activeText === true);\r\n if (typeof (rv) !== 'undefined') {\r\n return rv.text;\r\n }\r\n return this.textBlocks[0].text;\r\n }\r\n setRelativePosition(position: number) {\r\n this.textBlocks.forEach((block) => {\r\n block.position = position;\r\n });\r\n this.relativePosition = position;\r\n }\r\n firstBlock() {\r\n return this.textBlocks[0].text;\r\n }\r\n indexOf(scoreText: SmoScoreText) {\r\n return this.textBlocks.findIndex((block) => block.text.attrs.id === scoreText.attrs.id);\r\n }\r\n addScoreText(scoreText: SmoScoreText, position: number = SmoTextGroup.relativePositions.LEFT) {\r\n this.textBlocks.push({ text: scoreText, position, activeText: false });\r\n }\r\n ul() {\r\n const rv = { x: 0, y: 0 };\r\n this.textBlocks.forEach((block) => {\r\n rv.x = block.text.x > rv.x ? block.text.x : rv.x;\r\n rv.y = block.text.y > rv.y ? block.text.y : rv.y;\r\n });\r\n return rv;\r\n }\r\n removeBlock(scoreText: SmoScoreText) {\r\n const bbid = (typeof (scoreText) === 'string') ? scoreText : scoreText.attrs.id;\r\n const ix = this.textBlocks.findIndex((bb) => bb.text.attrs.id === bbid);\r\n this.textBlocks.splice(ix, 1);\r\n }\r\n offsetX(offset: number) {\r\n if (this.attachToSelector) {\r\n this.musicXOffset += offset;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n block.text.offsetX(offset);\r\n });\r\n }\r\n offsetY(offset: number) {\r\n if (this.attachToSelector) {\r\n this.musicYOffset += offset;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n block.text.offsetY(offset);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to modify a staff or system. Some staff modifiers can span multiple\r\n * staves, so it can be a little arbitrary what is a score vs. staff modifier. But\r\n * generally, a staff modifier is anything that has a beginning and end {@link SmoSelector}\r\n * @module /smo/data/staffModifiers\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoNote } from './note';\r\nimport { SmoAttrs, getId, SvgPoint, SmoObjectParams, Clef, SvgBox, SmoModifierBase, Pitch } from './common';\r\nimport { SmoTabNote, SmoFretPosition } from './noteModifiers';\r\nimport { SmoMusic } from './music';\r\n/**\r\n * Base class that mostly standardizes the interface and deals with serialization.\r\n * @param ctor constructor for derived class\r\n * @param logicalBox bounding box in SVG coordinates, if rendered\r\n * @param attrs object identification\r\n * @param startSelector where the modifier starts\r\n * @param endSelector where it ends\r\n * @category SmoModifier\r\n * */\r\nexport abstract class StaffModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n associatedStaff: number = 0;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n logicalBox: SvgBox | null = null;\r\n element: SVGSVGElement | null = null;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n static deserialize(params: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + params.ctor);\r\n const fixInstrument = params as any;\r\n if (fixInstrument.subFamily) {\r\n fixInstrument.instrument = fixInstrument.subFamily;\r\n }\r\n const rv = new ctor(params);\r\n return rv;\r\n }\r\n abstract serialize(): any;\r\n}\r\nexport interface StaffModifierBaseSer {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n associatedStaff: number;\r\n startSelector: SmoSelector;\r\n endSelector: SmoSelector;\r\n}\r\nexport type SoundSustain = 'percussive' | 'sustained';\r\nexport type oscillatorType = 'sample' | 'sine' | 'sawtooth' | 'square' | 'triangle' | 'custom';\r\nexport type oscillatorOptions = 'plucked' | 'bowed' | 'muted' | 'accented' | 'frequency-sweep' | 'na';\r\n/**\r\n * Parameters of an instrument used to create audio nodes\r\n */\r\nexport interface SmoOscillatorInfo {\r\n waveform: oscillatorType,\r\n sustain: SoundSustain,\r\n realOvertones: number[],\r\n imaginaryOvertones: number[],\r\n sample: string | null,\r\n family: string,\r\n instrument: string,\r\n nativeFrequency: number,\r\n dynamic: number,\r\n options: oscillatorOptions[],\r\n minDuration: number,\r\n maxDuration: number\r\n}\r\nexport type SmoOscillatorInfoNumberType = 'minDuration' | 'maxDuration' | 'dynamic' | 'nativeFrequency';\r\nexport type SmoOscillatorInfoNumberArType = 'realOvertones' | 'imaginaryOvertones';\r\nexport type SmoOscillatorInfoStringType = 'family';\r\nexport type SmoOscillatorInfoStringNullType = 'sample';\r\nexport type SmoOscillatorInfoWaveformType = 'waveform';\r\nexport type SmoOscillatorInfoSustainType = 'sustain';\r\nexport type SmoOscillatorInfoOptionsType = 'options';\r\nexport const SmoOscillatorInfoAllTypes = ['minDuration','maxDuration', 'dynamic', 'nativeFrequency', 'realOvertones', 'imaginaryOvertones', 'sample', 'family',\r\n 'waveform', 'sustain', 'options', 'instrument'];\r\n\r\nexport type SmoOscillatorAnyType = SmoOscillatorInfoNumberType | SmoOscillatorInfoNumberArType | SmoOscillatorInfoStringType | SmoOscillatorInfoStringNullType\r\n | oscillatorType | SoundSustain;\r\n \r\n/**\r\n * Define an instrument. An instrument is associated with a part, but a part can have instrument changes\r\n * and thus contain multiple instruments at different points in the score.\r\n * Not all of these parameters are fully utilized yet, and there are plans to greatly expand what\r\n * an SmoInstrument is. Note I may move this to PartInfo module.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoInstrumentParams {\r\n /**\r\n * where instrument starts to take effect\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where instrument changes\r\n */\r\n endSelector: SmoSelector,\r\n /**\r\n * name, for metadata\r\n */\r\n instrumentName: string,\r\n /**\r\n * woodwind, brass etc.\r\n */\r\n family: string,\r\n /**\r\n * instrument sample\r\n */\r\n instrument: string,\r\n /**\r\n * abbreviation for score\r\n */\r\n abbreviation: string,\r\n /**\r\n * -2 indicates key of Bb\r\n */\r\n keyOffset: number,\r\n /**\r\n * for future\r\n */\r\n midiInstrument: number,\r\n /**\r\n * for future\r\n */\r\n midichannel: number,\r\n /**\r\n * for future\r\n */\r\n midiport: number,\r\n /**\r\n * default clef\r\n */\r\n clef: Clef,\r\n /**\r\n * future, can be used to set sample\r\n */\r\n mutes?: string, \r\n}\r\n\r\n/**\r\n * Serialization of instrument-specific settings, such as sound and key\r\n * @category serialization\r\n */\r\nexport interface SmoInstrumentParamsSer extends SmoInstrumentParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoInstrumentParamsSer(params: Partial): params is SmoInstrumentParamsSer {\r\n return params?.ctor === 'SmoInstrument';\r\n}\r\nexport type SmoInstrumentNumParamType = 'keyOffset' | 'midichannel' | 'midiport' | 'midiInstrument';\r\nexport const SmoInstrumentNumParams: SmoInstrumentNumParamType[] = ['keyOffset', 'midichannel', 'midiport', 'midiInstrument'];\r\nexport type SmoInstrumentStringParamType = 'instrumentName' | 'abbreviation' | 'family' | 'instrument';\r\nexport const SmoInstrumentStringParams: SmoInstrumentStringParamType[] = ['instrumentName', 'abbreviation', 'family', 'instrument'];\r\n/**\r\n * Define an instrument. An instrument is associated with a part, but a part can have instrument changes\r\n * and thus contain multiple instruments at different points in the score.\r\n * Not all of these parameters are fully utilized yet, and there are plans to greatly expand what\r\n * an SmoInstrument is. Note I may move this to PartInfo module.\r\n * @category SmoModifier\r\n */\r\nexport class SmoInstrument extends StaffModifierBase {\r\n static get attributes() {\r\n return ['startSelector', 'endSelector', 'keyOffset', 'midichannel', 'midiport', 'instrumentName', 'abbreviation', 'instrument', 'family'];\r\n }\r\n startSelector: SmoSelector;\r\n endSelector: SmoSelector;\r\n instrumentName: string = '';\r\n abbreviation: string = '';\r\n keyOffset: number = 0;\r\n clef: Clef = 'treble';\r\n midiInstrument: number = 1;\r\n midichannel: number;\r\n midiport: number;\r\n family: string;\r\n instrument: string;\r\n articulation?: string;\r\n mutes?: string;\r\n static get defaults(): SmoInstrumentParams {\r\n return JSON.parse(JSON.stringify({\r\n clef: 'treble',\r\n keyOffset: 0,\r\n instrumentName: '',\r\n abbreviation: '',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n midichannel: 0,\r\n midiInstrument: 1,\r\n midiport: 0,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get defaultOscillatorParam(): SmoOscillatorInfo {\r\n return JSON.parse(JSON.stringify({\r\n waveform: 'sample',\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: null,\r\n family: 'none',\r\n instrument: 'none',\r\n nativeFrequency: 440,\r\n dynamic: 100,\r\n options: [],\r\n minDuration: 0,\r\n maxDuration: 0\r\n }));\r\n }\r\n constructor(params: SmoInstrumentParams) {\r\n super('SmoInstrument');\r\n let name = '';\r\n if (typeof ((params as any).instrument) === 'undefined') {\r\n name = params.instrumentName;\r\n } else {\r\n name = (params as any).instrument;\r\n }\r\n this.instrumentName = name;\r\n this.family = params.family;\r\n this.instrument = params.instrument;\r\n this.keyOffset = params.keyOffset;\r\n this.clef = params.clef;\r\n this.midiport = params.midiport;\r\n this.midichannel = params.midichannel;\r\n this.startSelector = params.startSelector;\r\n this.endSelector = params.endSelector;\r\n }\r\n serialize(): SmoInstrumentParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoInstrument.defaults, SmoInstrument.attributes, this, params);\r\n params.ctor = 'SmoInstrument';\r\n if (!isSmoInstrumentParamsSer(params)) {\r\n throw ('bad instrument ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n eq(other: SmoInstrument): boolean {\r\n let rv = true;\r\n SmoInstrumentNumParams.forEach((param) => {\r\n if (other[param] !== this[param]) {\r\n rv = false;\r\n }\r\n });\r\n SmoInstrumentStringParams.forEach((param) => {\r\n if (other[param] !== this[param]) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport interface SmoInstrumentMeasure {\r\n measureIndex: number,\r\n instrument: SmoInstrumentParams;\r\n}\r\n/**\r\n * constructor params for {@link SmoStaffHairpin}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoStaffHairpinParams {\r\n /**\r\n * extra x on start of shape\r\n */\r\n xOffsetLeft: number,\r\n /**\r\n * extra x on end of shape\r\n */\r\n xOffsetRight: number,\r\n /**\r\n * yOffset\r\n */\r\n yOffset: number,\r\n /**\r\n * flare-out pixels\r\n */\r\n height: number,\r\n /**\r\n * above, below\r\n */\r\n position: number,\r\n /**\r\n * cresc, dim.\r\n */\r\n hairpinType: number,\r\n /**\r\n * where it starts\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where it starts\r\n */\r\n endSelector: SmoSelector\r\n}\r\n\r\n/**\r\n * Serialized dynamic marking (hairpin)\r\n * @category serialization\r\n */\r\nexport interface SmoStaffHairpinParamsSer extends StaffModifierBaseSer {\r\n /**\r\n * extra x on start of shape\r\n */\r\n xOffsetLeft: number,\r\n /**\r\n * extra x on end of shape\r\n */\r\n xOffsetRight: number,\r\n /**\r\n * yOffset\r\n */\r\n yOffset: number,\r\n /**\r\n * flare-out pixels\r\n */\r\n height: number,\r\n /**\r\n * above, below\r\n */\r\n position: number,\r\n /**\r\n * cresc, dim.\r\n */\r\n hairpinType: number,\r\n /**\r\n * where it starts\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where it starts\r\n */\r\n endSelector: SmoSelector\r\n}\r\nfunction isSmoStaffHairpinParamsSer(params: Partial): params is SmoStaffHairpinParamsSer {\r\n if (!params.ctor || !(params.ctor === 'SmoStaffHairpin')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Also called crescendo etc.\r\n * @category SmoModifier\r\n */\r\nexport class SmoStaffHairpin extends StaffModifierBase {\r\n static get editableAttributes() {\r\n return ['xOffsetLeft', 'xOffsetRight', 'yOffset', 'height'];\r\n }\r\n static get defaults(): SmoStaffHairpinParams {\r\n return JSON.parse(JSON.stringify({\r\n xOffsetLeft: -2,\r\n xOffsetRight: 0,\r\n yOffset: -50,\r\n height: 10,\r\n position: SmoStaffHairpin.positions.BELOW,\r\n hairpinType: SmoStaffHairpin.types.CRESCENDO,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get positions() {\r\n // matches VF.modifier\r\n return {\r\n LEFT: 1,\r\n RIGHT: 2,\r\n ABOVE: 3,\r\n BELOW: 4,\r\n };\r\n }\r\n static get types() {\r\n return {\r\n CRESCENDO: 1,\r\n DECRESCENDO: 2\r\n };\r\n }\r\n static get attributes() {\r\n return ['position', 'startSelector', 'endSelector', 'xOffsetLeft',\r\n 'xOffsetRight', 'yOffset', 'hairpinType', 'height'];\r\n }\r\n xOffsetLeft: number = -2;\r\n xOffsetRight: number = 0;\r\n yOffset: number = -50;\r\n height: number = 10;\r\n position: number = SmoStaffHairpin.positions.BELOW;\r\n hairpinType: number = SmoStaffHairpin.types.CRESCENDO;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n serialize(): SmoStaffHairpinParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoStaffHairpin.defaults, SmoStaffHairpin.attributes, this, params);\r\n params.ctor = 'SmoStaffHairpin';\r\n if (!isSmoStaffHairpinParamsSer(params)) {\r\n throw 'bad hairpin ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(params: SmoStaffHairpinParams) {\r\n super('SmoStaffHairpin');\r\n smoSerialize.vexMerge(this, SmoStaffHairpin.defaults);\r\n smoSerialize.filteredMerge(SmoStaffHairpin.attributes, params, this);\r\n // If start/end selector on same note, make sure the hairpin extends\r\n if (SmoSelector.eq(this.startSelector, this.endSelector)) {\r\n if (this.xOffsetRight === SmoStaffHairpin.defaults.xOffsetRight\r\n && this.xOffsetLeft === SmoStaffHairpin.defaults.xOffsetLeft) {\r\n this.xOffsetLeft = -10;\r\n this.xOffsetRight = 10;\r\n }\r\n }\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoStaffHairpin'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * constructor params for {@link SmoStaffTextBracket}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoStaffTextBracketParams {\r\n /**\r\n * the ledger line\r\n */\r\n line: number,\r\n /**\r\n * above or below\r\n */\r\n position: number,\r\n /**\r\n * the text to display\r\n */\r\n text: string,\r\n /**\r\n * text can have superscript\r\n */\r\n superscript: string,\r\n /**\r\n * extend of the line\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * extend of the line\r\n */\r\n endSelector: SmoSelector\r\n}\r\n\r\n/**\r\n * serializable bits of SmoStaffTextBracket\r\n * @category serialization\r\n */\r\nexport interface SmoStaffTextBracketParamsSer extends StaffModifierBaseSer{\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n attrs: SmoAttrs;\r\n /**\r\n * the ledger line\r\n */\r\n line: number;\r\n /**\r\n * above or below\r\n */\r\n position: number,\r\n /**\r\n * the text to display\r\n */\r\n text: string,\r\n /**\r\n * text can have superscript\r\n */\r\n superscript: string,\r\n /**\r\n * extend of the line\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * extend of the line\r\n */\r\n endSelector: SmoSelector\r\n}\r\nfunction isSmoStaffTextBracketParamsSer(params: Partial):\r\n params is SmoStaffTextBracketParamsSer {\r\n if (params.ctor && params.ctor === 'SmoStaffTextBracket') {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexport type SmoTextBracketStringType = 'text' | 'superscript';\r\nexport const SmoTextBracketStringTypes: SmoTextBracketStringType[] = ['text', 'superscript'];\r\nexport type SmoTextBracketNumberType = 'line' | 'position';\r\nexport const SmoTextBracketNumberTypes: SmoTextBracketNumberType[] = ['line', 'position'];\r\n/**\r\n * Text like 8va, rit. that is bracketed on a system\r\n * @category SmoModifier\r\n */\r\nexport class SmoStaffTextBracket extends StaffModifierBase {\r\n static RITARD = 'ritard';\r\n static ACCEL = 'accelerando';\r\n static CRESCENDO = 'crescendo';\r\n static DIMENUENDO = 'diminuendo';\r\n static OCTAVEUP = '8va';\r\n static OCTAVEDOWN = '8vb';\r\n static OCTAVEUP2 = '15va';\r\n static OCTAVE2DOWN = '15vb';\r\n static get defaults(): SmoStaffTextBracketParams {\r\n return JSON.parse(JSON.stringify({\r\n line: 1,\r\n position: SmoStaffTextBracket.positions.BOTTOM,\r\n text: '',\r\n superscript: '',\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get positions() {\r\n // matches VF.modifier\r\n return {\r\n TOP: 1,\r\n BOTTOM: -1\r\n };\r\n } \r\n static get attributes() {\r\n return ['startSelector', 'endSelector', 'line', 'position', 'text', 'superscript'];\r\n }\r\n position: number = SmoStaffTextBracket.positions.BOTTOM;\r\n text: string = '';\r\n superscript: string = '';\r\n line: number = 1;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n serialize(): SmoStaffTextBracketParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoStaffTextBracket.defaults, SmoStaffTextBracket.attributes, this, params);\r\n params.ctor = 'SmoStaffTextBracket';\r\n if (!isSmoStaffTextBracketParamsSer(params)) {\r\n throw(' bad text bracket ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n constructor(params: SmoStaffTextBracketParams) {\r\n super('SmoStaffTextBracket');\r\n smoSerialize.serializedMerge(SmoStaffTextBracket.attributes, SmoStaffTextBracket.defaults, this);\r\n smoSerialize.serializedMerge(SmoStaffTextBracket.attributes, params, this);\r\n this.startSelector = JSON.parse(JSON.stringify(params.startSelector));\r\n this.endSelector = JSON.parse(JSON.stringify(params.endSelector));\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoStaffTextBracket'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * used for debugging\r\n */\r\nexport interface SlurDefaultParams {\r\n stemDir1: number,\r\n stemDir2: number,\r\n line1: number,\r\n line2: number,\r\n lineMin: number,\r\n lineMax: number,\r\n position: number,\r\n orientation: number,\r\n sameBeam: number\r\n}\r\nexport type SlurNumberParam = 'spacing' | 'thickness' | 'xOffset' | 'yOffset' | 'position' |\r\n 'position_end' | 'cp1x' | 'cp1y' | 'cp2x' | 'cp2y';\r\nexport const SlurNumberParams: SlurNumberParam[] = ['spacing', 'thickness', 'xOffset', 'yOffset', 'position', \r\n 'position_end', 'cp1x', 'cp1y', 'cp2x', 'cp2y'];\r\n/**\r\n * parameters for a slur\r\n * @param spacing between note and curve\r\n * @param thickness thickness of the line\r\n * @param xOffset in pixels\r\n * @param yOffset in pixels\r\n * @param position top or bottom of the chord we are attached to\r\n * @param position_end top or bottom of the chord we are attached to\r\n * @param invert turns that frown upside down\r\n * @param cp1x bz control point\r\n * @param cp1y bz control point\r\n * @param cp2x bz control point\r\n * @param cp2y bz control point\r\n * @param startSelector the start note we are attached to\r\n * @param endSelector the end note we are attached to\r\n * @category SmoParameters\r\n */\r\nexport interface SmoSlurParams {\r\n /** \r\n * spacing between note and curve \r\n * */\r\n spacing: number,\r\n /**\r\n * thickness of the curve\r\n */\r\n thickness: number,\r\n /**\r\n * x offset on both ends\r\n */\r\n xOffset: number,\r\n /**\r\n * move whole curve up or down\r\n */\r\n yOffset: number,\r\n /**\r\n * VF position, whether head-end or stem end\r\n */\r\n position: number,\r\n /**\r\n * VF position for right side of slur\r\n */\r\n position_end: number,\r\n /**\r\n * indicates whether the user wants up, down or 'auto'.\r\n * internally, sets the 'invert' flag\r\n */\r\n orientation: number,\r\n /**\r\n * reverse the slur from the usual rules in VF\r\n */\r\n invert: boolean,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp1x: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp1y: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp2x: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp2y: number,\r\n /**\r\n * start note of the curve\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * start note of the curve\r\n */\r\n endSelector: SmoSelector,\r\n /**\r\n * optional for debugging\r\n */\r\n debugParams?: SlurDefaultParams\r\n}\r\n/**\r\n * serializable bits of slur\r\n * @category serialization\r\n */\r\nexport interface SmoSlurParamsSer extends SmoSlurParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n\r\nfunction isSmoSlurParamsSer(params: Partial): params is SmoSlurParamsSer {\r\n if (params && params.ctor && params.ctor === 'SmoSlur') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Defines a slur\r\n * @category SmoModifier\r\n */\r\nexport class SmoSlur extends StaffModifierBase {\r\n static get defaults(): SmoSlurParams {\r\n return JSON.parse(JSON.stringify({\r\n spacing: 2,\r\n thickness: 2,\r\n xOffset: 5,\r\n yOffset: 0,\r\n position: SmoSlur.positions.TOP,\r\n position_end: SmoSlur.positions.TOP,\r\n orientation: SmoSlur.orientations.AUTO,\r\n invert: false,\r\n cp1x: 0,\r\n cp1y: 15,\r\n cp2x: 0,\r\n cp2y: 15,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n\r\n // matches VF curve\r\n static get positions() {\r\n return {\r\n HEAD: 1,\r\n TOP: 2,\r\n ABOVE: 3,\r\n BELOW: 4,\r\n AUTO: 5\r\n };\r\n }\r\n static get orientations() {\r\n return {\r\n AUTO: 0,\r\n UP: 1,\r\n DOWN: 2\r\n };\r\n }\r\n static get parameterArray() {\r\n return ['startSelector', 'endSelector', 'spacing', 'xOffset', 'yOffset', 'position', 'position_end', 'invert',\r\n 'orientation', 'cp1x', 'cp1y', 'cp2x', 'cp2y', 'thickness', 'pitchesStart', 'pitchesEnd'];\r\n }\r\n spacing: number = 2;\r\n thickness: number = 2;\r\n xOffset: number = -5;\r\n yOffset: number = 10;\r\n position: number = SmoSlur.positions.TOP;\r\n position_end: number = SmoSlur.positions.TOP;\r\n orientation: number = SmoSlur.orientations.AUTO;\r\n invert: boolean = false;\r\n cp1x: number = 0;\r\n cp1y: number = 15;\r\n cp2x: number = 0;\r\n cp2y: number = 15;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n\r\n serialize(): SmoSlurParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoSlur.defaults,\r\n SmoSlur.parameterArray, this, params);\r\n params.ctor = 'SmoSlur';\r\n if (!isSmoSlurParamsSer(params)) {\r\n throw('bad slur ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n get controlPoints(): SvgPoint[] {\r\n const ar: SvgPoint[] = [{\r\n x: this.cp1x,\r\n y: this.cp1y\r\n }, {\r\n x: this.cp2x,\r\n y: this.cp2y\r\n }];\r\n return ar;\r\n }\r\n\r\n constructor(params: SmoSlurParams) {\r\n super('SmoSlur');\r\n smoSerialize.serializedMerge(SmoSlur.parameterArray, SmoSlur.defaults, this);\r\n smoSerialize.serializedMerge(SmoSlur.parameterArray, params, this);\r\n this.startSelector = params.startSelector;\r\n this.endSelector = params.endSelector;\r\n\r\n // Fix some earlier serialization error. \r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSlur'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Map pitch indices of the tie line\r\n */\r\nexport interface TieLine {\r\n from: number,\r\n to: number\r\n}\r\n/**\r\n * Constructor parameters for a tie.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTieParams {\r\n /**\r\n * future: x offset on both sides\r\n */\r\n tie_spacing: number,\r\n /**\r\n * x coord of cp for bz curve\r\n */\r\n cp1: number,\r\n /**\r\n * x coord of cp for bz curve\r\n */\r\n cp2: number,\r\n /**\r\n * x offset\r\n */\r\n first_x_shift: number,\r\n /**\r\n * x offset end\r\n */\r\n last_x_shift: number,\r\n /**\r\n * y offset for all the curves\r\n */\r\n y_shift: number,\r\n /**\r\n * map of lines for the pitches\r\n */\r\n lines: TieLine[],\r\n /**\r\n * start note\r\n */\r\n startSelector: SmoSelector | null,\r\n /**\r\n * end note\r\n */\r\n endSelector: SmoSelector | null\r\n}\r\n\r\n/**\r\n * serializable bits of SmoTie\r\n * @category serialization\r\n */\r\nexport interface SmoTieParamsSer extends SmoTieParams {\r\n /** \r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoTieParamsSer(params: Partial): params is SmoTieParamsSer {\r\n if (params.ctor && params.ctor === 'SmoTie') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Like slur, but multiple pitches.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTie extends StaffModifierBase {\r\n invert: boolean = false;\r\n cp1: number = 8;\r\n cp2: number = 12;\r\n first_x_shift: number = 0;\r\n last_x_shift: number = 0;\r\n y_shift: number = 7;\r\n tie_spacing: number = 0;\r\n lines: TieLine[] = [];\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n static get defaults(): SmoTieParams {\r\n return JSON.parse(JSON.stringify({\r\n invert: false,\r\n cp1: 8,\r\n cp2: 12,\r\n y_shift: 7,\r\n first_x_shift: 0,\r\n last_x_shift: 0,\r\n lines: [],\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n\r\n static get parameterArray() {\r\n return ['startSelector', 'endSelector', 'invert', 'lines', 'y_shift', 'tie_spacing', 'cp1', 'cp2', 'first_x_shift', 'last_x_shift'];\r\n }\r\n static get vexParameters() {\r\n return ['cp1', 'cp2', 'first_x_shift', 'last_x_shift', 'y_shift'];\r\n }\r\n static isTie(modifier: SmoTie | SmoModifierBase): modifier is SmoTie {\r\n return modifier.ctor === 'SmoTie';\r\n }\r\n\r\n static createLines(fromNote: SmoNote, toNote: SmoNote): TieLine[] {\r\n const maxPitches = Math.max(fromNote.pitches.length, toNote.pitches.length);\r\n let i = 0;\r\n const lines: TieLine[] = [];\r\n // By default, just tie all the pitches to all the other pitches in order\r\n for (i = 0; i < maxPitches; ++i) {\r\n const from = i < fromNote.pitches.length ? i : fromNote.pitches.length - 1;\r\n const to = i < toNote.pitches.length ? i : toNote.pitches.length - 1;\r\n lines.push({ from, to });\r\n }\r\n return lines;\r\n }\r\n\r\n serialize(): SmoTieParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoTie.defaults,\r\n SmoTie.parameterArray, this, params);\r\n\r\n params.ctor = 'SmoTie';\r\n if (!isSmoTieParamsSer(params)) {\r\n throw 'bad tie ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n // ### checkLines\r\n // If the note chords have changed, the lines may no longer be valid so update them\r\n checkLines(fromNote: SmoNote, toNote: SmoNote) {\r\n if (this.lines.length < 1) {\r\n return;\r\n }\r\n const maxTo = this.lines.map((ll) => ll.to).reduce((a, b) => a > b ? a : b);\r\n const maxFrom = this.lines.map((ll) => ll.from).reduce((a, b) => a > b ? a : b);\r\n if (maxTo < toNote.pitches.length && maxFrom < fromNote.pitches.length) {\r\n return;\r\n }\r\n this.lines = SmoTie.createLines(fromNote, toNote);\r\n }\r\n constructor(params: SmoTieParams) {\r\n super('SmoTie');\r\n smoSerialize.serializedMerge(SmoTie.parameterArray, SmoTie.defaults, this);\r\n smoSerialize.serializedMerge(SmoTie.parameterArray, params, this);\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoTie'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Parameters for SmoTabStave\r\n */\r\nexport interface SmoTabStaveParams {\r\n /**\r\n * start selector, by measure\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * end selector, by measure\r\n */\r\n endSelector: SmoSelector,\r\n /**\r\n * space between staves, in pixels\r\n */\r\n spacing: number,\r\n /**\r\n * number of lines\r\n */\r\n numLines: number,\r\n /**\r\n * Default setting of showing stems\r\n */\r\n showStems: boolean,\r\n /**\r\n * If true, the score should keep a single tab stave for all measures\r\n */\r\n allMeasures: boolean,\r\n /**\r\n * The strings for each line\r\n */\r\n stringPitches?: Pitch[]\r\n}\r\n\r\nexport interface SmoTabStaveParamsSer extends SmoTabStaveParams {\r\n ctor: string\r\n}\r\n\r\n/**\r\n * A stave for guitar tablature sits below the music stave.\r\n */\r\nexport class SmoTabStave extends StaffModifierBase {\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n spacing: number = 13;\r\n numLines: number = 6;\r\n showStems: boolean = true;\r\n allMeasures: boolean = true;\r\n stringPitches: Pitch[];\r\n /** The default guitar tuning. Different instruments could have different tuning */\r\n static get defaultStringPitches(): Pitch[] {\r\n return JSON.parse(JSON.stringify([\r\n { letter: 'e', accidental: 'n', octave: 2 },\r\n { letter: 'a', accidental: 'n', octave: 2 },\r\n { letter: 'd', accidental: 'n', octave: 3 },\r\n { letter: 'g', accidental: 'n', octave: 3 },\r\n { letter: 'b', accidental: 'n', octave: 3 },\r\n { letter: 'e', accidental: 'n', octave: 4 }\r\n ]));\r\n }\r\n /**\r\n * Get default tab note position for a pitch on a music staff\r\n * @param pitch \r\n * @param stringPitches \r\n * @returns \r\n */\r\n static getDefaultPositionForStaff(pitch: Pitch, stringPitches: Pitch[], transposeIndex: number): SmoFretPosition {\r\n const pitchAr = stringPitches.map((pp) => SmoMusic.smoPitchToInt(pp));\r\n const pitchInt = SmoMusic.smoPitchToInt(pitch) + (-1 * transposeIndex);\r\n // if the note is higher than the highest string, count the frets.\r\n const lastIndex = pitchAr.length - 1;\r\n // If the note is between this and the next string, count the frets\r\n for (var i = 0; i < lastIndex; i++) {\r\n if (pitchInt >= pitchAr[i]) {\r\n return { string: i + 1, fret: pitchInt - pitchAr[i] };\r\n }\r\n }\r\n // if lower that the lowest string, there is no fret so just return 0\r\n return { string: lastIndex + 1, fret: 0 };\r\n }\r\n /**\r\n * Find default fret positions for a set of pitches from a note\r\n * @param pitches \r\n * @param stringPitches \r\n * @returns \r\n */\r\n static getDefaultPositionsForStaff(pitches: Pitch[], stringPitches: Pitch[], transposeIndex: number): SmoFretPosition[] {\r\n const rv: SmoFretPosition[] = [];\r\n pitches.forEach((pp) => rv.push(SmoTabStave.getDefaultPositionForStaff(pp, stringPitches, transposeIndex)));\r\n return rv;\r\n }\r\n\r\n static get defaults(): SmoTabStaveParams {\r\n return {\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default,\r\n spacing: 13,\r\n numLines: 6,\r\n showStems: true,\r\n allMeasures: true,\r\n stringPitches: SmoTabStave.defaultStringPitches\r\n }\r\n }\r\n static parameterArray: string[] = ['startSelector', 'endSelector', 'spacing', 'numLines', 'showStems', 'allMeasures'];\r\n static featuresEqual(st1: SmoTabStave, st2: SmoTabStave): boolean {\r\n if (st1.numLines !== st2.numLines) {\r\n return false;\r\n }\r\n if (st1.stringPitches.length !== st2.stringPitches.length) {\r\n return false;\r\n }\r\n if (st1.showStems !== st2.showStems) {\r\n return false;\r\n }\r\n for (var i = 0; i < st1.stringPitches.length; ++i) {\r\n const p1 = st1.stringPitches[i];\r\n const p2 = st2.stringPitches[i];\r\n if (SmoMusic.smoPitchToInt(p1) !== SmoMusic.smoPitchToInt(p2)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n static overlaps(st1: SmoTabStave, st2: SmoTabStave): boolean {\r\n if (SmoSelector.contains(st1.startSelector, st2.startSelector, st2.endSelector)) {\r\n return true;\r\n }\r\n if (SmoSelector.contains(st1.endSelector, st2.startSelector, st2.endSelector)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n getTabNoteFromNote(note: SmoNote, transposeIndex: number) {\r\n if (note.tabNote) {\r\n return note.tabNote;\r\n }\r\n const positions = SmoTabStave.getDefaultPositionsForStaff(note.pitches, this.stringPitches, transposeIndex);\r\n return new SmoTabNote({\r\n positions, noteId: note.attrs.id, isAssigned: false, flagState: SmoTabNote.flagStates.None,\r\n noteHead: SmoTabNote.noteHeads.number, flagThrough: false\r\n });\r\n }\r\n constructor(params: SmoTabStaveParams) {\r\n super('SmoTabStave');\r\n smoSerialize.serializedMerge(SmoTabStave.parameterArray, SmoTabStave.defaults, this);\r\n smoSerialize.serializedMerge(SmoTabStave.parameterArray, params, this);\r\n if (!params.stringPitches) {\r\n this.stringPitches = SmoTabStave.defaultStringPitches;\r\n } else {\r\n this.stringPitches = params.stringPitches;\r\n }\r\n this.stringPitches.sort((pa, pb) => SmoMusic.smoPitchToInt(pa) > SmoMusic.smoPitchToInt(pb) ? -1 : 1);\r\n }\r\n serialize():any {\r\n const params: Partial = { ctor: 'SmoTabStave' };\r\n smoSerialize.serializedMergeNonDefault(SmoTabStave.defaults,\r\n SmoTabStave.parameterArray, this, params);\r\n params.stringPitches = JSON.parse(JSON.stringify(this.stringPitches));\r\n return params;\r\n }\r\n}\r\n\r\nexport interface SmoTabTieParams {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n hammerType: number,\r\n slideType: number,\r\n isTap: boolean,\r\n text: string\r\n}\r\n\r\nexport interface SmoTabTieParamsSer extends SmoTabTieParams {\r\n ctor: string\r\n}\r\n\r\nexport class SmoTabTie extends StaffModifierBase {\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n hammerType: number = SmoTabTie.hammerType.None;\r\n slideType: number = SmoTabTie.slideType.None;\r\n isTap: boolean = false;\r\n text: string = '';\r\n static get hammerType() {\r\n return { None: 0, Hammeron: 1, Pulloff: 2 }\r\n }\r\n static get slideType() {\r\n return { None: 0, SlideUp: 1, SlideDown: 2 }\r\n }\r\n\r\n static get defaults(): SmoTabTieParams {\r\n return JSON.parse(JSON.stringify({\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default,\r\n hammerType: SmoTabTie.hammerType.None,\r\n slideType: SmoTabTie.slideType.None,\r\n isTap: false,\r\n text: ''\r\n }));\r\n }\r\n static get parameterArray() {\r\n return ['startSelector', 'endSelector', 'hammerType', 'slideType', 'isTap', 'text'] \r\n };\r\n constructor(params: SmoTabTieParams) {\r\n super('SmoTabTie');\r\n smoSerialize.serializedMerge(SmoTabTie.parameterArray, SmoTabStave.defaults, this);\r\n smoSerialize.serializedMerge(SmoTabTie.parameterArray, params, this);\r\n }\r\n serialize() {\r\n const params: Partial = { ctor: 'SmoTabTie' };\r\n smoSerialize.serializedMergeNonDefault(SmoTabStave.defaults,\r\n SmoTabTie.parameterArray, this, params);\r\n return params;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support a {@link SmoSystemStaff}, which is a container for measures and\r\n * staff modifiers.\r\n * @module /smo/data/systemStaff\r\n * **/\r\nimport { SmoObjectParams, SmoAttrs, MeasureNumber, getId, \r\n createXmlAttribute } from './common';\r\nimport { SmoMusic } from './music';\r\nimport { SmoMeasure, SmoMeasureParamsSer } from './measure';\r\nimport { SmoMeasureFormat, SmoRehearsalMark, SmoRehearsalMarkParams, SmoTempoTextParams, SmoVolta, SmoBarline } from './measureModifiers';\r\nimport { SmoInstrumentParams, StaffModifierBase, SmoInstrument, SmoInstrumentMeasure, SmoInstrumentStringParams, SmoInstrumentNumParams, \r\n SmoTie, SmoStaffTextBracket, SmoStaffTextBracketParamsSer, \r\n StaffModifierBaseSer, SmoTabStave, SmoTabStaveParamsSer } from './staffModifiers';\r\nimport { SmoPartInfo, SmoPartInfoParamsSer } from './partInfo';\r\nimport { SmoTextGroup } from './scoreText';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoBeamer } from '../xform/beamers';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\n/**\r\n * indicate that we need to serialize the key signature, etc.\r\n * maps beause we are going to be deserializing again in a different score\r\n */\r\nexport interface SmoStaffSerializationOptions {\r\n skipMaps: boolean\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoSystemStaff}.\r\n * Usually you will call\r\n * {@link SmoSystemStaff.defaults}, and modify the parameters you need to change,\r\n * or get the defaults from an existing staff\r\n * @param renumberingMap For alternate number, pickups, etc.\r\n * @param keySignatureMap map of keys to measures\r\n * @param measureInstrumentMap map of instruments to staves\r\n * @param measures array of {@link SmoMeasure}\r\n * @param modifiers slurs and such\r\n * @param partInfo \r\n * @category SmoParameters\r\n */\r\nexport interface SmoSystemStaffParams {\r\n /* the index of the staff in the score */\r\n staffId: number,\r\n /**\r\n * For alternate number, pickups, etc.\r\n * */ \r\n renumberingMap: Record,\r\n /**\r\n * map of keys to measures \r\n */\r\n keySignatureMap: Record,\r\n /* map of instruments to staves */\r\n measureInstrumentMap: Record,\r\n /**\r\n * array of {@link SmoMeasure})\r\n */\r\n measures: SmoMeasure[],\r\n /** \r\n * modifiers slurs and such\r\n * */ \r\n modifiers: StaffModifierBase[],\r\n /**\r\n * information about the part\r\n */\r\n partInfo?: SmoPartInfo;\r\n /**\r\n * text lines\r\n */\r\n textBrackets?: SmoStaffTextBracket[];\r\n /**\r\n *guitar tablature\r\n */\r\n tabStaves: SmoTabStave[]\r\n}\r\n/**\r\n * Serialized components of a stave\r\n * @category serialization\r\n */\r\nexport interface SmoSystemStaffParamsSer { \r\n /**\r\n * class name\r\n */\r\n ctor: string,\r\n /**\r\n * index of the staff\r\n */\r\n staffId: number,\r\n /**\r\n * map of measure numbers vs. indices of measures\r\n */\r\n renumberingMap?: Record,\r\n /**\r\n * locations of key signature changes\r\n */\r\n keySignatureMap?: Record,\r\n /**\r\n * map of measures to instruments (clef, transpose, sounds)\r\n */\r\n measureInstrumentMap: Record,\r\n /**\r\n * measure container\r\n */\r\n measures: SmoMeasureParamsSer[],\r\n /**\r\n * array of modifiers like slurs\r\n */\r\n modifiers: StaffModifierBaseSer[],\r\n /**\r\n * Associated part information for this stave\r\n */\r\n partInfo: SmoPartInfoParamsSer;\r\n /**\r\n * text brackets are another kind of modifier\r\n */\r\n textBrackets: SmoStaffTextBracketParamsSer[];\r\n /**\r\n * guitar tablature\r\n */\r\n tabStaves: SmoTabStave[];\r\n}\r\n\r\nfunction isSmoSystemStaffParamsSer(params: Partial):params is SmoSystemStaffParamsSer {\r\n if (!(typeof(params.ctor) === 'string' && params.ctor === 'SmoSystemStaff')) {\r\n return false;\r\n }\r\n if (!(Array.isArray(params.measures))) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A staff is a line of music that can span multiple measures.\r\n * A system is a line of music for each staff in the score. So a staff\r\n * spans multiple systems.\r\n * A staff modifier connects 2 points in the staff.\r\n * @category SmoObject\r\n * */\r\nexport class SmoSystemStaff implements SmoObjectParams {\r\n /**\r\n * Gets the instrument assigned to a given measure\r\n * @param measureInstrumentMap\r\n * @param measureIndex \r\n * @returns \r\n */\r\n static getStaffInstrument(measureInstrumentMap: Record, measureIndex: number) {\r\n const keyar: string[] = Object.keys(measureInstrumentMap);\r\n let fit = 0;\r\n keyar.forEach((key) => {\r\n const numkey = parseInt(key, 10);\r\n if (numkey <= measureIndex && numkey > fit) {\r\n fit = numkey;\r\n }\r\n });\r\n return measureInstrumentMap[fit];\r\n }\r\n static getStaffInstrumentArray(measureInstrumentMap: Record): SmoInstrumentMeasure[] {\r\n const rv: SmoInstrumentMeasure[] = [];\r\n const keyar: string[] = Object.keys(measureInstrumentMap);\r\n keyar.forEach((key) => {\r\n const measureIndex = parseInt(key, 10);\r\n rv.push({ measureIndex, instrument: measureInstrumentMap[measureIndex] });\r\n });\r\n return rv;\r\n }\r\n staffId: number = 0;\r\n renumberingMap: Record = {};\r\n keySignatureMap: Record = {};\r\n partInfo: SmoPartInfo;\r\n measureInstrumentMap: Record = {};\r\n measures: SmoMeasure[] = [];\r\n modifiers: StaffModifierBase[] = [];\r\n textBrackets: SmoStaffTextBracket[] = [];\r\n bracketMap: Record = {};\r\n tabStaves: SmoTabStave[] = [];\r\n attrs: SmoAttrs = {\r\n id: '',\r\n type: 'SmoSystemStaff'\r\n }\r\n ctor: string = 'SmoSystemStaff';\r\n _mappedStaffId: number = 0;\r\n\r\n // ### defaults\r\n // default values for all instances\r\n static get defaults(): SmoSystemStaffParams {\r\n return JSON.parse(JSON.stringify({\r\n staffId: 0,\r\n renumberingMap: {},\r\n keySignatureMap: {},\r\n measureInstrumentMap: {},\r\n textBrackets: [],\r\n measures: [],\r\n modifiers: [],\r\n tabStaves: []\r\n }));\r\n }\r\n setMappedStaffId(value: number) {\r\n this._mappedStaffId = value;\r\n }\r\n getMappedStaffId(): number {\r\n return this._mappedStaffId;\r\n }\r\n\r\n constructor(params: SmoSystemStaffParams) {\r\n this.staffId = params.staffId;\r\n this.measures = params.measures;\r\n this.modifiers = params.modifiers;\r\n this.textBrackets = params.textBrackets ?? [];\r\n this.renumberingMap = params.renumberingMap;\r\n this.tabStaves = params.tabStaves;\r\n if (Object.keys(params.measureInstrumentMap).length === 0) {\r\n const instrument = new SmoInstrument(SmoInstrument.defaults);\r\n instrument.startSelector.staff = instrument.endSelector.staff = this.staffId;\r\n instrument.endSelector.measure = this.measures.length - 1;\r\n this.measureInstrumentMap[0] = instrument;\r\n } else {\r\n const keys = Object.keys(params.measureInstrumentMap);\r\n keys.forEach((p, ix) => {\r\n const pnum = parseInt(p, 10);\r\n const instrument = new SmoInstrument(params.measureInstrumentMap[pnum]);\r\n instrument.startSelector.staff = instrument.endSelector.staff = this.staffId;\r\n\r\n // Make sure transposition goes to the end stave of the song.\r\n if (ix === keys.length - 1) {\r\n instrument.endSelector.measure = this.measures.length - 1;\r\n }\r\n this.measureInstrumentMap[pnum] = instrument;\r\n });\r\n }\r\n if (this.measures.length) {\r\n this.numberMeasures();\r\n }\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSystemStaff'\r\n };\r\n if (params.partInfo) {\r\n this.partInfo = params.partInfo;\r\n } else {\r\n const staveNo = this.staffId + 1;\r\n const partDefs = SmoPartInfo.defaults;\r\n partDefs.partName = 'Staff ' + staveNo;\r\n partDefs.partAbbreviation = staveNo.toString() + '.';\r\n this.partInfo = new SmoPartInfo(partDefs);\r\n }\r\n }\r\n /**\r\n * records need to be serialized separately from other elements in parameters\r\n *\r\n * @static\r\n * @type {string[]}\r\n * @memberof SmoSystemStaff\r\n */\r\n static serializableElements: string[] = ['ctor', 'staffId'];\r\n static recordElements: string[] = ['renumberingMap', 'keySignatureMap', 'measureInstrumentMap'];\r\n \r\n // ### defaultParameters\r\n // the parameters that get saved with the score.\r\n static get defaultParameters() {\r\n return [\r\n 'renumberingMap', 'keySignatureMap', 'instrumentInfo'];\r\n }\r\n\r\n get renderableModifiers() {\r\n const rv: StaffModifierBase[] = \r\n this.modifiers.concat(this.textBrackets);\r\n return rv;\r\n }\r\n // ### serialize\r\n // JSONify self.\r\n serialize(options: SmoStaffSerializationOptions): SmoSystemStaffParamsSer {\r\n const params: Partial = {\r\n ctor: 'SmoSystemStaff',\r\n tabStaves: []\r\n };\r\n if (!options.skipMaps) {\r\n smoSerialize.serializedMerge(SmoSystemStaff.defaultParameters, this, params);\r\n }\r\n params.measures = [];\r\n params.measureInstrumentMap = {};\r\n const ikeys: string[] = Object.keys(this.measureInstrumentMap);\r\n this.tabStaves.forEach((ts) => {\r\n params.tabStaves?.push(ts.serialize());\r\n });\r\n ikeys.forEach((ikey: string) => {\r\n params.measureInstrumentMap![parseInt(ikey, 10)] = this.measureInstrumentMap[parseInt(ikey, 10)].serialize();\r\n });\r\n this.measures.forEach((measure) => {\r\n params.measures!.push(measure.serialize());\r\n });\r\n params.modifiers = [];\r\n this.modifiers.forEach((modifier) => {\r\n params.modifiers!.push(modifier.serialize());\r\n });\r\n this.textBrackets.forEach((bracket) => {\r\n params.modifiers!.push(bracket.serialize());\r\n });\r\n params.partInfo = this.partInfo.serialize();\r\n if (!isSmoSystemStaffParamsSer(params)) {\r\n throw ('bad staff ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n // ### deserialize\r\n // parse formerly serialized staff.\r\n static deserialize(jsonObj: SmoSystemStaffParamsSer): SmoSystemStaff {\r\n const params: SmoSystemStaffParams = SmoSystemStaff.defaults;\r\n params.staffId = jsonObj.staffId ?? 0;\r\n params.measures = [];\r\n params.modifiers = [];\r\n params.textBrackets = [];\r\n params.renumberingMap = jsonObj.renumberingMap ?? {};\r\n if (jsonObj.tabStaves) {\r\n jsonObj.tabStaves.forEach((ts) => {\r\n params.tabStaves.push(StaffModifierBase.deserialize(ts));\r\n });\r\n }\r\n if (jsonObj.partInfo) {\r\n // Deserialize the text groups first\r\n const tgs: SmoTextGroup[] = [];\r\n jsonObj.partInfo.textGroups.forEach((tgSer: any) => {\r\n tgs.push(SmoTextGroup.deserializePreserveId(tgSer));\r\n });\r\n jsonObj.partInfo.textGroups = tgs;\r\n params.partInfo = SmoPartInfo.deserialize(jsonObj.partInfo);\r\n }\r\n // Up-convert legacy instrument info, which was split between different objects\r\n if (!jsonObj.measureInstrumentMap) {\r\n const jsonLegacy = jsonObj as any;\r\n if (jsonLegacy.instrumentInfo) {\r\n const defs = SmoInstrument.defaults;\r\n defs.keyOffset = jsonLegacy.instrumentInfo.keyOffset;\r\n defs.clef = jsonLegacy.instrumentInfo.clef;\r\n defs.instrumentName = jsonLegacy.instrumentInfo.instrumentName;\r\n const ii: SmoInstrument = new SmoInstrument(defs);\r\n params.measureInstrumentMap = { 0: ii };\r\n } else {\r\n const ii: SmoInstrument = new SmoInstrument(SmoInstrument.defaults);\r\n params.measureInstrumentMap = { 0: ii };\r\n }\r\n params.measureInstrumentMap[0].startSelector.staff = params.staffId;\r\n params.measureInstrumentMap[0].endSelector.staff = params.staffId;\r\n params.measureInstrumentMap[0].endSelector.measure = jsonObj.measures.length - 1;\r\n params.measureInstrumentMap[0].keyOffset = jsonObj.measures[0].transposeIndex ?? 0;\r\n } else {\r\n const ikeys = Object.keys(jsonObj.measureInstrumentMap);\r\n ikeys.forEach((ikey) => {\r\n const ix = parseInt(ikey, 10);\r\n const inst = jsonObj.measureInstrumentMap[ix];\r\n const defs = SmoInstrument.defaults;\r\n SmoInstrumentStringParams.forEach((str) => {\r\n if (typeof(inst[str]) === 'string') {\r\n defs[str] = inst[str];\r\n }\r\n });\r\n SmoInstrumentNumParams.forEach((str) => {\r\n if (typeof(inst[str]) === 'number') {\r\n defs[str] = inst[str];\r\n }\r\n });\r\n if (typeof(inst.startSelector) !== 'undefined') {\r\n defs.startSelector = inst.startSelector;\r\n }\r\n if (typeof(inst.endSelector) !== 'undefined') {\r\n defs.endSelector = inst.endSelector;\r\n }\r\n params.measureInstrumentMap[ix] = new SmoInstrument(defs);\r\n });\r\n }\r\n const instrumentAr = SmoSystemStaff.getStaffInstrumentArray(params.measureInstrumentMap);\r\n let curInstrumentIndex = 0;\r\n jsonObj.measures.forEach((measureObj: any) => {\r\n const measure = SmoMeasure.deserialize(measureObj);\r\n if (instrumentAr.length > (curInstrumentIndex + 1) && measure.measureNumber.measureIndex >=\r\n instrumentAr[curInstrumentIndex + 1].measureIndex) {\r\n curInstrumentIndex += 1;\r\n }\r\n measure.transposeIndex = instrumentAr[curInstrumentIndex].instrument.keyOffset;\r\n params.measures.push(measure);\r\n });\r\n if (jsonObj.modifiers) {\r\n jsonObj.modifiers.forEach((modParams: any) => {\r\n const mod = StaffModifierBase.deserialize(modParams);\r\n mod.associatedStaff = jsonObj.staffId;\r\n if (mod.ctor === 'SmoStaffTextBracket') {\r\n params.textBrackets!.push(mod as SmoStaffTextBracket);\r\n } else {\r\n params.modifiers.push(mod);\r\n }\r\n });\r\n }\r\n const rv = new SmoSystemStaff(params);\r\n return rv;\r\n }\r\n /**\r\n * We have created a score with staff mappings. Update the selectors in staff modifiers so that\r\n * 'from' in the staff slot is 'to'\r\n */\r\n mapStaffFromTo(from: number, to: number) {\r\n if (from === to) {\r\n return;\r\n }\r\n this.modifiers.forEach((mod) => {\r\n if (mod.startSelector.staff === from) {\r\n mod.startSelector.staff = to;\r\n }\r\n if (mod.endSelector.staff === from) {\r\n mod.endSelector.staff = to;\r\n }\r\n mod.associatedStaff = to; // this.staffId will remap to 'to' value\r\n });\r\n }\r\n updateMeasureFormatsForPart() {\r\n this.measures.forEach((measure, mix) => {\r\n if (this.partInfo.measureFormatting[mix]) {\r\n measure.format = new SmoMeasureFormat(this.partInfo.measureFormatting[mix]);\r\n } else {\r\n measure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n }\r\n });\r\n }\r\n /**\r\n * Get the active instrument at the given measure\r\n * @param measureIndex\r\n * @returns\r\n */\r\n getStaffInstrument(measureIndex: number): SmoInstrument {\r\n return SmoSystemStaff.getStaffInstrument(this.measureInstrumentMap, measureIndex);\r\n }\r\n getInstrumentList(): SmoInstrument[] {\r\n const rv: SmoInstrument[] = [];\r\n const keys = Object.keys(this.measureInstrumentMap);\r\n keys.forEach((key) => {\r\n rv.push(this.getStaffInstrument(parseInt(key)));\r\n });\r\n return rv;\r\n }\r\n updateInstrumentOffsets() {\r\n const ar = SmoSystemStaff.getStaffInstrumentArray(this.measureInstrumentMap);\r\n ar.forEach((entry) => {\r\n let i = entry.instrument.startSelector.measure;\r\n for (i; i <= entry.instrument.endSelector.measure && i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n const concertKey = SmoMusic.vexKeySigWithOffset(measure.keySignature, -1 * measure.transposeIndex);\r\n const targetKey = SmoMusic.vexKeySigWithOffset(concertKey, entry.instrument.keyOffset);\r\n measure.transposeToOffset(entry.instrument.keyOffset, targetKey, entry.instrument.clef);\r\n measure.transposeIndex = entry.instrument.keyOffset;\r\n measure.keySignature = targetKey;\r\n measure.setClef(entry.instrument.clef);\r\n }\r\n });\r\n }\r\n isRest(index: number) {\r\n return this.measures[index].isRest();\r\n }\r\n /**\r\n * for the purposes of breaking up multimeasure rests, isRepeat is true if\r\n * the next bar has a start repeat, or the current bar has an end repeat.\r\n * @param index \r\n * @returns \r\n */\r\n isRepeat(index: number) {\r\n if (index < this.measures.length - 1) {\r\n if (this.measures[index + 1].getStartBarline().barline !== SmoBarline.barlines.singleBar && \r\n this.measures[index + 1].getStartBarline().barline !== SmoBarline.barlines.noBar) {\r\n return true;\r\n }\r\n }\r\n const specialBar = this.measures[index].getEndBarline().barline !== SmoBarline.barlines.singleBar &&\r\n this.measures[index].getStartBarline().barline !== SmoBarline.barlines.noBar;\r\n return specialBar || this.measures[index].repeatSymbol;\r\n }\r\n isRepeatSymbol(index: number) {\r\n return this.measures[index].repeatSymbol;\r\n }\r\n isRehearsal(index: number) {\r\n return !(typeof(this.measures[index].getRehearsalMark()) === 'undefined');\r\n }\r\n removeTabStaves(delList: SmoTabStave[]) {\r\n if (delList.length < 1) {\r\n return;\r\n }\r\n const newList: SmoTabStave[] = [];\r\n this.tabStaves.forEach((ts) => {\r\n if (delList.findIndex((xx:SmoTabStave) => xx.attrs.id === ts.attrs.id) < 0) {\r\n newList.push(ts);\r\n }\r\n });\r\n this.tabStaves = newList;\r\n }\r\n updateTabStave(ts: SmoTabStave) {\r\n if (ts.allMeasures) {\r\n ts.startSelector.measure = 0;\r\n ts.endSelector.measure = this.measures.length - 1;\r\n this.tabStaves = [ts];\r\n return;\r\n }\r\n if (!this.tabStaves.length) {\r\n this.tabStaves.push(ts);\r\n return;\r\n }\r\n const toRemove: SmoTabStave[] = [];\r\n for (var i = 0; i < this.tabStaves.length; ++i) {\r\n const ex = this.tabStaves[i];\r\n if (SmoTabStave.overlaps(ex, ts)) {\r\n const starts = SmoSelector.order(ex.startSelector, ts.startSelector);\r\n const ends = SmoSelector.order(ex.startSelector, ex.endSelector);\r\n // If the tabs are the same type and overlap, then just merge them\r\n if (SmoTabStave.featuresEqual(ex, ts)) {\r\n ts.startSelector = starts[0];\r\n ts.endSelector = ends[1];\r\n }\r\n toRemove.push(ex);\r\n }\r\n }\r\n this.removeTabStaves(toRemove);\r\n this.tabStaves.push(ts);\r\n }\r\n getTabStaveForMeasure(selector: SmoSelector): SmoTabStave | undefined {\r\n return this.tabStaves.find((ts) => \r\n SmoSelector.sameStaff(ts.startSelector, selector) && ts.startSelector.measure <= selector.measure\r\n && ts.endSelector.measure >= selector.measure);\r\n }\r\n getTabStavesForMeasureRow(measures: SmoMeasure[]) {\r\n const rv: SmoTabStave[] = [];\r\n const added: Record = {};\r\n measures.forEach((mm) => {\r\n const ts = this.getTabStaveForMeasure(SmoSelector.measureSelector(mm.measureNumber.staffId, mm.measureNumber.measureIndex));\r\n if (ts && !added[ts.attrs.id]) {\r\n added[ts.attrs.id] = true;\r\n rv.push(ts);\r\n }\r\n });\r\n return rv;\r\n }\r\n // ### addStaffModifier\r\n // add a staff modifier, or replace a modifier of same type\r\n // with same endpoints.\r\n addStaffModifier(modifier: StaffModifierBase) {\r\n this.removeStaffModifier(modifier);\r\n this.modifiers.push(modifier);\r\n modifier.associatedStaff = this.staffId;\r\n }\r\n\r\n // ### removeStaffModifier\r\n // Remove a modifier of given type and location\r\n removeStaffModifier(modifier: StaffModifierBase) {\r\n const mods: StaffModifierBase[] = [];\r\n const tbs: SmoStaffTextBracket[] = [];\r\n this.renderableModifiers.forEach((mod: StaffModifierBase) => {\r\n if (mod.attrs.type !== modifier.attrs.type ||\r\n SmoSelector.neq(mod.startSelector, modifier.startSelector) ||\r\n SmoSelector.neq(mod.endSelector, modifier.endSelector)) {\r\n if (mod.ctor === 'SmoStaffTextBracket') {\r\n tbs.push(mod as SmoStaffTextBracket);\r\n } else {\r\n mods.push(mod);\r\n }\r\n }\r\n });\r\n this.textBrackets = tbs;\r\n this.modifiers = mods;\r\n }\r\n // ### getVoltaMap\r\n getVoltaMap(startIndex: number, endIndex: number) {\r\n const rv: SmoVolta[] = [];\r\n this.measures.forEach((measure) => {\r\n measure.getNthEndings().forEach((ending) => {\r\n if (ending.startBar >= startIndex && ending.endBar <= endIndex) {\r\n rv.push(ending);\r\n }\r\n });\r\n });\r\n return rv;\r\n }\r\n getVoltasForMeasure(ix: number) {\r\n const rv: SmoVolta[] = [];\r\n this.measures.forEach((measure) => {\r\n measure.getNthEndings().forEach((ending) => {\r\n if (ending.startSelector?.measure === ix || ending.endSelector?.measure === ix) {\r\n rv.push(ending);\r\n }\r\n });\r\n });\r\n return rv;\r\n }\r\n // ### getModifiersAt\r\n // get any modifiers at the selected location\r\n getModifiersAt(selector: SmoSelector): StaffModifierBase[] {\r\n const rv: StaffModifierBase[] = [];\r\n this.modifiers.forEach((mod) => {\r\n if (SmoSelector.sameNote(mod.startSelector, selector)) {\r\n rv.push(mod);\r\n }\r\n });\r\n return rv;\r\n }\r\n getModifier(modData: any) {\r\n return this.renderableModifiers.find((mod) =>\r\n SmoSelector.eq(mod.startSelector, modData.startSelector) && mod.attrs.type === modData.attrs.type);\r\n }\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.measures.forEach((measure) => {\r\n measure.setLyricFont(fontInfo);\r\n });\r\n }\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.measures.forEach((measure) => {\r\n measure.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n setChordFont(fontInfo: FontInfo) {\r\n this.measures.forEach((measure) => {\r\n measure.setChordFont(fontInfo);\r\n });\r\n }\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.measures.forEach((measure) => {\r\n measure.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n addTextBracket(bracketParams: SmoStaffTextBracket) {\r\n const nb = new SmoStaffTextBracket(bracketParams);\r\n const brackets = this.textBrackets.filter((tb) => SmoSelector.lteq(tb.startSelector, nb.startSelector)\r\n || SmoSelector.gteq(tb.endSelector, nb.startSelector) || tb.position !== nb.position);\r\n \r\n brackets.push(new SmoStaffTextBracket(bracketParams));\r\n \r\n }\r\n removeTextBracket(bracketParams: SmoStaffTextBracket) { \r\n const nb = new SmoStaffTextBracket(bracketParams);\r\n const brackets = this.textBrackets.filter((tb) => SmoSelector.lteq(tb.startSelector, nb.startSelector)\r\n || SmoSelector.gteq(tb.endSelector, nb.startSelector) || tb.position !== nb.position);\r\n brackets.push(new SmoStaffTextBracket(bracketParams));\r\n this.textBrackets = brackets;\r\n }\r\n getTextBracketsStartingAt(selector: SmoSelector) {\r\n return this.textBrackets.filter((tb) => SmoSelector.eq(tb.startSelector, selector));\r\n }\r\n\r\n // ### getSlursStartingAt\r\n // like it says. Used by audio player to slur notes\r\n getSlursStartingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) && mod.attrs.type === 'SmoSlur'\r\n );\r\n }\r\n // ### getSlursEndingAt\r\n // like it says.\r\n getSlursEndingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector)\r\n );\r\n }\r\n\r\n getTiesStartingAt(selector: SmoSelector): SmoTie[] {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) && mod.attrs.type === 'SmoTie'\r\n ) as SmoTie[];\r\n }\r\n\r\n getTiesEndingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector) && mod.attrs.type === 'SmoTie'\r\n );\r\n }\r\n\r\n // ### accesor getModifiers\r\n getModifiers() {\r\n return this.modifiers;\r\n }\r\n\r\n // ### applyBeams\r\n // group all the measures' notes into beam groups.\r\n applyBeams() {\r\n for (let i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n SmoBeamer.applyBeams(measure);\r\n }\r\n }\r\n\r\n // ### addRehearsalMark\r\n // for all measures in the system, and also bump the\r\n // auto-indexing\r\n addRehearsalMark(index: number, parameters: SmoRehearsalMarkParams) {\r\n let i = 0;\r\n let symbol = '';\r\n var mark = new SmoRehearsalMark(parameters);\r\n if (!mark.increment) {\r\n this.measures[index].addRehearsalMark(mark);\r\n return;\r\n }\r\n\r\n symbol = mark.symbol;\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const mm = this.measures[i];\r\n if (i < index) {\r\n const rm: SmoRehearsalMark = (mm.getRehearsalMark() as SmoRehearsalMark);\r\n if (rm && rm.cardinality === mark.cardinality && rm.increment) {\r\n symbol = rm.getIncrement();\r\n mark.symbol = symbol;\r\n }\r\n }\r\n if (i === index) {\r\n mm.addRehearsalMark(mark);\r\n symbol = mark.getIncrement();\r\n }\r\n if (i > index) {\r\n const rm: SmoRehearsalMark = (mm.getRehearsalMark() as SmoRehearsalMark);\r\n if (rm && rm.cardinality === mark.cardinality && rm.increment) {\r\n rm.symbol = symbol;\r\n symbol = rm.getIncrement();\r\n }\r\n }\r\n }\r\n }\r\n\r\n removeTempo(index: number) {\r\n this.measures[index].resetTempo();\r\n }\r\n\r\n addTempo(tempo: SmoTempoTextParams, index: number) {\r\n this.measures[index].setTempo(tempo);\r\n }\r\n\r\n // ### removeRehearsalMark\r\n // for all measures in the system, and also decrement the\r\n // auto-indexing\r\n removeRehearsalMark(index: number) {\r\n let ix: number = 0;\r\n let symbol: string | null = null;\r\n let card: string | null = null;\r\n this.measures.forEach((measure) => {\r\n if (ix === index) {\r\n const mark: SmoRehearsalMark = measure.getRehearsalMark() as SmoRehearsalMark;\r\n if (mark) {\r\n symbol = mark.symbol;\r\n card = mark.cardinality;\r\n }\r\n measure.removeRehearsalMark();\r\n }\r\n if (ix > index && symbol && card) {\r\n const mark: SmoRehearsalMark = measure.getRehearsalMark() as SmoRehearsalMark;\r\n if (mark && mark.increment) {\r\n mark.symbol = symbol;\r\n symbol = mark.getIncrement();\r\n }\r\n }\r\n ix += 1;\r\n });\r\n }\r\n\r\n // ### deleteMeasure\r\n // delete the measure, and any staff modifiers that start/end there.\r\n deleteMeasure(index: number) {\r\n if (this.measures.length < 2) {\r\n return; // don't delete last measure.\r\n }\r\n const nm: SmoMeasure[] = [];\r\n this.measures.forEach((measure) => {\r\n if (measure.measureNumber.measureIndex !== index) {\r\n nm.push(measure);\r\n }\r\n });\r\n this.tabStaves.forEach((ts) => {\r\n ts.endSelector.measure = this.measures.length - 1;\r\n });\r\n const sm: StaffModifierBase[] = [];\r\n this.modifiers.forEach((mod) => {\r\n // Bug: if we are deleting a measure before the selector, change the measure number.\r\n if (mod.startSelector.measure !== index && mod.endSelector.measure !== index) {\r\n if (index < mod.startSelector.measure) {\r\n mod.startSelector.measure -= 1;\r\n }\r\n if (index < mod.endSelector.measure) {\r\n mod.endSelector.measure -= 1;\r\n }\r\n sm.push(mod);\r\n }\r\n });\r\n const instMap: Record = {};\r\n SmoSystemStaff.getStaffInstrumentArray(this.measureInstrumentMap).forEach((mm) => {\r\n if (mm.instrument.startSelector.measure > index || mm.instrument.startSelector.measure > this.measures.length - 1) {\r\n mm.instrument.startSelector.measure -= 1;\r\n }\r\n if (mm.instrument.endSelector.measure > index || mm.instrument.endSelector.measure > this.measures.length - 1) {\r\n mm.instrument.endSelector.measure -= 1;\r\n }\r\n instMap[mm.instrument.startSelector.measure] = new SmoInstrument(mm.instrument);\r\n });\r\n this.measures = nm;\r\n this.modifiers = sm;\r\n this.numberMeasures();\r\n }\r\n\r\n // ### addKeySignature\r\n // Add key signature to the given measure and update map so we know\r\n // when it changes, cancels etc.\r\n addKeySignature(measureIndex: number, key: string) {\r\n this.keySignatureMap[measureIndex] = key;\r\n const target = this.measures[measureIndex];\r\n target.keySignature = key;\r\n }\r\n\r\n _updateKeySignatures() {\r\n let i = 0;\r\n const currentSig = this.measures[0].keySignature;\r\n\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n const nextSig = this.keySignatureMap[i] ? this.keySignatureMap[i] : currentSig;\r\n measure.setKeySignature(nextSig);\r\n }\r\n }\r\n\r\n // ### numberMeasures\r\n // After anything that might change the measure numbers, update them iteratively\r\n numberMeasures() {\r\n let i: number = 0;\r\n let localIndex = 0;\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n if (typeof(this.renumberingMap[i]) === 'number') {\r\n localIndex = this.renumberingMap[i];\r\n } else {\r\n localIndex += 1;\r\n }\r\n // since systemIndex is a render-time decision, we don't update it here.\r\n const systemIndex = measure.measureNumber.systemIndex;\r\n // If this is the first full measure, call it '1'\r\n const numberObj: MeasureNumber = {\r\n localIndex,\r\n measureIndex: i,\r\n systemIndex,\r\n staffId: this.staffId\r\n };\r\n measure.setMeasureNumber(numberObj);\r\n }\r\n }\r\n\r\n addDefaultMeasure(index: number, params: SmoMeasure) {\r\n const measure = SmoMeasure.getDefaultMeasure(params);\r\n this.addMeasure(index, measure);\r\n }\r\n\r\n // ## addMeasure\r\n // ## Description:\r\n // Add the measure at the specified index, splicing the array as required.\r\n addMeasure(index: number, measure: SmoMeasure) {\r\n if (index === 0 && this.measures.length) {\r\n measure.setMeasureNumber(this.measures[0].measureNumber);\r\n }\r\n if (index >= this.measures.length) {\r\n this.measures.push(measure);\r\n } else {\r\n this.measures.splice(index, 0, measure);\r\n }\r\n const modifiers = this.modifiers.filter((mod) => mod.startSelector.measure >= index);\r\n modifiers.forEach((mod) => {\r\n if (mod.startSelector.measure < this.measures.length) {\r\n mod.startSelector.measure += 1;\r\n }\r\n if (mod.endSelector.measure < this.measures.length) {\r\n mod.endSelector.measure += 1;\r\n }\r\n });\r\n // If there is a tab stave, it should extend the length of the stave.\r\n this.tabStaves.forEach((ts) => {\r\n ts.endSelector.measure = this.measures.length - 1;\r\n });\r\n this.numberMeasures();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoTuplet}\r\n * @module /smo/data/tuplet\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoNote, SmoNoteParamsSer, SmoTupletNote } from './note';\r\nimport { SmoMusic } from './music';\r\nimport { SmoNoteModifierBase } from './noteModifiers';\r\nimport { getId, SmoAttrs, Clef } from './common';\r\n\r\n/**\r\n * Parameters for tuplet construction\r\n * @param notes - runtime instance of tuplet has an actual instance of \r\n * notes. The note instances are created by the deserilization of the \r\n * measure. We serialize the note parameters so we can identify the correct notes\r\n * when deserializing.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTupletParams {\r\n notes: SmoNote[],\r\n id?: string,\r\n numNotes: number,\r\n stemTicks: number,\r\n totalTicks: number,\r\n durationMap: number[],\r\n ratioed: boolean,\r\n bracketed: boolean,\r\n voice: number,\r\n startIndex: number\r\n}\r\n/**\r\n * serializabl bits of SmoTuplet\r\n * @category serialization\r\n */\r\nexport interface SmoTupletParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string,\r\n /**\r\n * attributes for ID\r\n */\r\n id: string,\r\n /**\r\n * info about the serialized notes\r\n */\r\n notes: SmoTupletNote[],\r\n /**\r\n * numNotes in the duplet (not necessarily same as notes array size)\r\n */\r\n numNotes: number,\r\n /**\r\n * used to decide how to beam, 2048 for 1/4 triplet for instance\r\n */\r\n stemTicks: number,\r\n /**\r\n * total ticks to squeeze numNotes\r\n */\r\n totalTicks: number,\r\n /**\r\n * map of notes to ticks\r\n */\r\n durationMap: number[],\r\n /**\r\n * whether to use the :\r\n */\r\n ratioed: boolean,\r\n /**\r\n * whether to show the brackets\r\n */\r\n bracketed: boolean,\r\n /**\r\n * which voice the tuplet applies to\r\n */\r\n voice: number,\r\n /**\r\n * the start tick index of the measure\r\n */\r\n startIndex: number\r\n}\r\nexport interface SmoClonedTupletIf {\r\n tuplet: SmoTuplet,\r\n notes: SmoNote[]\r\n}\r\n/**\r\n * tuplets must be serialized with their id attribute, enforce this\r\n * @param params a possible-valid SmoTupletParamsSer\r\n * @returns \r\n */\r\nfunction isSmoTupletParamsSer(params: Partial): params is SmoTupletParamsSer {\r\n if (!params.ctor || !(params.ctor === 'SmoTuplet')) {\r\n return false;\r\n }\r\n if (!params.id || !(typeof(params.id) === 'string')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A tuplet is a container for notes within a measure\r\n * @category SmoObject\r\n */\r\nexport class SmoTuplet {\r\n static get defaults(): SmoTupletParams {\r\n return JSON.parse(JSON.stringify({\r\n notes: [],\r\n numNotes: 3,\r\n stemTicks: 2048,\r\n totalTicks: 4096, // how many ticks this tuple takes up\r\n durationMap: [1.0, 1.0, 1.0],\r\n bracketed: true,\r\n voice: 0,\r\n ratioed: false,\r\n startIndex: 0\r\n }));\r\n }\r\n id: string;\r\n notes: SmoNote[];\r\n numNotes: number = 3;\r\n stemTicks: number = 2048;\r\n totalTicks: number = 4096;\r\n durationMap: number[] = [1.0, 1.0, 1.0];\r\n bracketed: boolean = true;\r\n voice: number = 0;\r\n ratioed: boolean = false;\r\n startIndex: number = 0;\r\n\r\n get clonedParams() {\r\n const paramAr = ['stemTicks', 'ticks', 'totalTicks', 'durationMap', 'numNotes'];\r\n const rv = {};\r\n smoSerialize.serializedMerge(paramAr, this, rv);\r\n return rv;\r\n }\r\n\r\n static get parameterArray() {\r\n return ['stemTicks', 'ticks', 'totalTicks',\r\n 'durationMap', 'id', 'ratioed', 'bracketed', 'voice', 'startIndex', 'numNotes'];\r\n }\r\n\r\n serialize(): SmoTupletParamsSer {\r\n const params:Partial = {\r\n notes: []\r\n };\r\n this.notes.forEach((nn) => {\r\n if (!nn.tupletId) {\r\n throw 'bad tuplet when serializing';\r\n }\r\n params.notes!.push({\r\n noteId: nn.attrs.id, tupletId: nn.tupletId, ticks: nn.ticks\r\n });\r\n });\r\n params.ctor = 'SmoTuplet';\r\n smoSerialize.serializedMergeNonDefault(SmoTuplet.defaults,\r\n SmoTuplet.parameterArray, this, params);\r\n if (!isSmoTupletParamsSer(params)) {\r\n throw 'bad tuplet ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n static calculateStemTicks(totalTicks: number, numNotes: number) {\r\n const stemValue = totalTicks / numNotes;\r\n let stemTicks = SmoTuplet.longestTuplet;\r\n\r\n // The stem value is the type on the non-tuplet note, e.g. 1/8 note\r\n // for a triplet.\r\n while (stemValue < stemTicks) {\r\n stemTicks = stemTicks / 2;\r\n }\r\n return stemTicks * 2;\r\n }\r\n constructor(params: SmoTupletParams) {\r\n smoSerialize.vexMerge(this, SmoTuplet.defaults);\r\n smoSerialize.serializedMerge(SmoTuplet.parameterArray, params, this);\r\n this.notes = params.notes;\r\n this.id = getId().toString();\r\n this._adjustTicks();\r\n }\r\n static get longestTuplet() {\r\n return 8192;\r\n }\r\n static cloneTuplet(tuplet: SmoTuplet, tupletNotes: SmoNote[]): SmoTuplet {\r\n let i = 0;\r\n const noteAr = tupletNotes;\r\n const dupNotes: SmoNote[] = [];\r\n const durationMap = JSON.parse(JSON.stringify(tuplet.durationMap)); // deep copy array\r\n\r\n // Add any remainders for oddlets\r\n const totalTicks = noteAr.map((nn) => nn.ticks.numerator + nn.ticks.remainder)\r\n .reduce((acc, nn) => acc + nn);\r\n\r\n const numNotes: number = tuplet.numNotes;\r\n const stemTicks = SmoTuplet.calculateStemTicks(totalTicks, numNotes);\r\n\r\n noteAr.forEach((note) => {\r\n const textModifiers = note.textModifiers;\r\n // Note preserver remainder\r\n note = SmoNote.cloneWithDuration(note, {\r\n numerator: stemTicks * tuplet.durationMap[i],\r\n denominator: 1,\r\n remainder: note.ticks.remainder\r\n });\r\n\r\n // Don't clone modifiers, except for first one.\r\n if (i === 0) {\r\n const ntmAr: any = [];\r\n textModifiers.forEach((tm) => {\r\n const ntm = SmoNoteModifierBase.deserialize(tm);\r\n ntmAr.push(ntm);\r\n });\r\n note.textModifiers = ntmAr;\r\n }\r\n i += 1;\r\n dupNotes.push(note);\r\n });\r\n const rv = new SmoTuplet({\r\n numNotes: tuplet.numNotes,\r\n voice: tuplet.voice,\r\n notes: dupNotes,\r\n stemTicks,\r\n totalTicks,\r\n ratioed: false,\r\n bracketed: true,\r\n startIndex: tuplet.startIndex,\r\n durationMap\r\n });\r\n return rv;\r\n }\r\n\r\n _adjustTicks() {\r\n let i = 0;\r\n const sum = this.durationSum;\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n // TODO: notes_occupied needs to consider vex duration\r\n note.ticks.denominator = 1;\r\n note.ticks.numerator = Math.floor((this.totalTicks * this.durationMap[i]) / sum);\r\n note.tupletId = this.id;\r\n }\r\n\r\n // put all the remainder in the first note of the tuplet\r\n const noteTicks = this.notes.map((nn) => nn.tickCount)\r\n .reduce((acc, dd) => acc + dd);\r\n // bug fix: if this is a clones tuplet, remainder is already set\r\n this.notes[0].ticks.remainder =\r\n this.notes[0].ticks.remainder + this.totalTicks - noteTicks;\r\n }\r\n getIndexOfNote(note: SmoNote | null): number {\r\n let rv = -1;\r\n let i = 0;\r\n if (!note) {\r\n return -1;\r\n }\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const tn = this.notes[i];\r\n if (note.attrs.id === tn.attrs.id) {\r\n rv = i;\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n split(combineIndex: number) {\r\n let i = 0;\r\n const multiplier = 0.5;\r\n const nnotes: SmoNote[] = [];\r\n const nmap: number[] = [];\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n if (i === combineIndex) {\r\n nmap.push(this.durationMap[i] * multiplier);\r\n nmap.push(this.durationMap[i] * multiplier);\r\n note.ticks.numerator *= multiplier;\r\n\r\n const onote = SmoNote.clone(note);\r\n // remainder is for the whole tuplet, so don't duplicate that.\r\n onote.ticks.remainder = 0;\r\n nnotes.push(note);\r\n nnotes.push(onote);\r\n } else {\r\n nmap.push(this.durationMap[i]);\r\n nnotes.push(note);\r\n }\r\n }\r\n this.notes = nnotes;\r\n this.durationMap = nmap;\r\n }\r\n combine(startIndex: number, endIndex: number) {\r\n let i = 0;\r\n let base = 0.0;\r\n let acc = 0.0;\r\n // can't combine in this way, too many notes\r\n if (this.notes.length <= endIndex || startIndex >= endIndex) {\r\n return this;\r\n }\r\n for (i = startIndex; i <= endIndex; ++i) {\r\n acc += this.durationMap[i];\r\n if (i === startIndex) {\r\n base = this.durationMap[i];\r\n } else if (this.durationMap[i] !== base) {\r\n // Can't combine non-equal tuplet notes\r\n return this;\r\n }\r\n }\r\n // how much each combined value will be multiplied by\r\n const multiplier = acc / base;\r\n\r\n const nmap = [];\r\n const nnotes = [];\r\n // adjust the duration map\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n // notes that don't change are unchanged\r\n if (i < startIndex || i > endIndex) {\r\n nmap.push(this.durationMap[i]);\r\n nnotes.push(note);\r\n }\r\n // changed note with combined duration\r\n if (i === startIndex) {\r\n note.ticks.numerator = note.ticks.numerator * multiplier;\r\n nmap.push(acc);\r\n nnotes.push(note);\r\n }\r\n // other notes after startIndex are removed from the map.\r\n }\r\n this.notes = nnotes;\r\n this.durationMap = nmap;\r\n return this;\r\n }\r\n\r\n // ### getStemDirection\r\n // Return the stem direction, so we can bracket the correct place\r\n getStemDirection(clef: Clef) {\r\n const note = this.notes.find((nn) => nn.noteType === 'n');\r\n if (!note) {\r\n return SmoNote.flagStates.down;\r\n }\r\n if (note.flagState !== SmoNote.flagStates.auto) {\r\n return note.flagState;\r\n }\r\n return SmoMusic.pitchToStaffLine(clef, note.pitches[0])\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n }\r\n get durationSum() {\r\n let acc = 0;\r\n let i = 0;\r\n for (i = 0; i < this.durationMap.length; ++i) {\r\n acc += this.durationMap[i];\r\n }\r\n return Math.round(acc);\r\n }\r\n get num_notes() {\r\n return this.durationSum;\r\n }\r\n get notes_occupied() {\r\n return Math.floor(this.totalTicks / this.stemTicks);\r\n }\r\n get note_ticks_occupied() {\r\n return this.totalTicks / this.stemTicks;\r\n }\r\n get tickCount() {\r\n let rv = 0;\r\n let i = 0;\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n rv += (note.ticks.numerator / note.ticks.denominator) + note.ticks.remainder;\r\n }\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Convert midi to Smo object model. Midi parsing code from:\r\n * @module /smo/midi/midiToSmo\r\n */\r\nimport { SmoToMidi } from \"./smoToMidi\";\r\nimport { Clef, Pitch } from \"../data/common\";\r\nimport { SmoMeasure } from \"../data/measure\";\r\nimport { SmoTempoText, TimeSignature } from \"../data/measureModifiers\";\r\nimport { SmoMusic } from \"../data/music\";\r\nimport { SmoNote } from \"../data/note\";\r\nimport { SmoScore } from \"../data/score\";\r\nimport { SmoLayoutManager } from \"../data/scoreModifiers\";\r\nimport { SmoTie } from \"../data/staffModifiers\";\r\nimport { SmoSystemStaff } from \"../data/systemStaff\";\r\nimport { SmoTuplet } from \"../data/tuplet\";\r\n\r\nexport type MidiEventType = 'text' | 'copyrightNotice' | 'trackName' | 'instrumentName' | 'lyrics' | 'marker' |\r\n 'cuePoint' | 'channelPrefix' | 'portPrefix' | 'endOfTrack' | 'setTempo' | 'smpteOffset' | 'timeSignature' | 'keySignature' |\r\n 'sequencerSpecific' | 'unknownMeta' |\r\n 'noteOff' | 'noteOn' | 'noteAftertouch' | 'controller' | 'programChange' | 'channelAftertouch' | 'pitchBend';\r\n\r\n/**\r\n * These are the midi events as defined by the parser.\r\n */\r\nexport interface MidiTrackEvent {\r\n deltaTime: number,\r\n meta?: boolean,\r\n numerator?: number,\r\n denominator?: number,\r\n microsecondsPerBeat?: number,\r\n scale?: number,\r\n key?: number,\r\n metronome?: number,\r\n thirtyseconds?: number,\r\n type: MidiEventType,\r\n channel?: number,\r\n noteNumber?: number,\r\n velocity?: number\r\n}\r\nexport interface RunningMetadata {\r\n keySignature: string,\r\n timeSignature: TimeSignature,\r\n tempo: SmoTempoText\r\n}\r\nexport interface MidiNoteOn {\r\n channel: number,\r\n note: number,\r\n smoIndex: number\r\n}\r\nexport interface MidiTupletInfo {\r\n numNotes: number,\r\n stemTicks: number,\r\n totalTicks: number,\r\n isLast: boolean\r\n}\r\nexport interface EventSmoData {\r\n pitches: Pitch[],\r\n durationTicks: number,\r\n tupletInfo: MidiTupletInfo | null,\r\n isRest: boolean,\r\n isTied: boolean,\r\n timeSignature: TimeSignature,\r\n tempo: SmoTempoText,\r\n keySignature: string,\r\n measure: number,\r\n tick: number\r\n}\r\n\r\nexport function getValueForTick(arg: Record, tick: number) {\r\n const keys = Object.keys(arg);\r\n let maxKey = 0;\r\n let rv = arg[0];\r\n keys.forEach((key) => {\r\n const keyInt = parseInt(key, 10);\r\n if (keyInt <= tick && keyInt > maxKey && arg[keyInt]) {\r\n rv = arg[maxKey];\r\n maxKey = keyInt;\r\n }\r\n });\r\n return rv;\r\n}\r\n/**\r\n * Converts a JSON midi file to a {@link SmoScore}\r\n * @category SmoToMidi\r\n */\r\nexport class MidiToSmo {\r\n timeSignatureMap: Record = {};\r\n tempoMap: Record = {};\r\n keySignatureMap: Record = {};\r\n tieMap: Record = {};\r\n timeDivision: number = 480;\r\n trackIndex: number = 0;\r\n eventIndex: number = 0; // index into current track\r\n maxMeasure: number = 0;\r\n quantizeTicks: number = MidiToSmo.quantizeTicksDefault;\r\n eot: boolean = false;\r\n midiOnNotes: Record = {};\r\n\r\n midi: any; // MIDI JSON from MIDI parser\r\n static get quantizeTicksDefault() {\r\n return 1024;\r\n }\r\n /**\r\n * Since midi has very little metadata, we don't know the original clef.\r\n * so just use the one (treble or bass) that uses the fewest ledger lines\r\n * @internal\r\n * @param notes notes in measure\r\n * @returns \r\n */\r\n static guessClefForNotes(measure: SmoMeasure): Clef {\r\n let trebleMax = 0;\r\n let bassMax = 0;\r\n measure.voices[0].notes.forEach((note) => {\r\n note.pitches.forEach((pitch) => {\r\n const tl = Math.abs(SmoMusic.pitchToStaffLine('treble', pitch));\r\n const bl = Math.abs(SmoMusic.pitchToStaffLine('bass', pitch));\r\n trebleMax = Math.max(trebleMax, tl);\r\n bassMax = Math.max(bassMax, bl);\r\n })\r\n });\r\n const clef: Clef = trebleMax <= bassMax ? 'treble' : 'bass';\r\n measure.clef = clef;\r\n // For rests, make sure the rest is centered in the clef\r\n measure.voices[0].notes.forEach((note) => {\r\n if (note.noteType === 'r') {\r\n note.pitches = [SmoMeasure.defaultPitchForClef[clef]];\r\n }\r\n note.clef = clef;\r\n });\r\n return clef;\r\n }\r\n /**\r\n * Create an object to convert MIDI to a {@link SmoScore}\r\n * @param midi the output of midi parser\r\n * @param quantizeDuration ticks to quantize (1024 == 16th note)\r\n */\r\n constructor(midi: any, quantizeDuration: number) {\r\n this.midi = midi;\r\n // console.log(JSON.stringify(midi, null, ''));\r\n this.timeSignatureMap[0] = new TimeSignature(TimeSignature.defaults);\r\n this.tempoMap[0] = new SmoTempoText(SmoTempoText.defaults);\r\n this.keySignatureMap[0] = 'c';\r\n this.timeDivision = midi.header.ticksPerBeat;\r\n this.quantizeTicks = quantizeDuration;\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getTempo(ticks: number) {\r\n if (this.tempoMap[ticks]) {\r\n return this.tempoMap[ticks];\r\n }\r\n return getValueForTick(this.tempoMap, ticks);\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getTimeSignature(ticks: number): TimeSignature {\r\n if (this.timeSignatureMap[ticks]) {\r\n return this.timeSignatureMap[ticks];\r\n }\r\n return getValueForTick(this.timeSignatureMap, ticks);\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getKeySignature(ticks: number) {\r\n if (this.keySignatureMap[ticks]) {\r\n return this.keySignatureMap[ticks];\r\n }\r\n return getValueForTick(this.keySignatureMap, ticks);\r\n }\r\n /**\r\n * Get metadata from the map for this point in the score\r\n * @param ticks current point in track\r\n * @returns \r\n */\r\n getMetadata(ticks: number) {\r\n return { tempo: this.getTempo(ticks), \r\n timeSignature: this.getTimeSignature(ticks), keySignature: this.getKeySignature(ticks).toLowerCase() };\r\n }\r\n /**\r\n * We process 3 types of metadata at present: time signature, tempo and keysignature.\r\n * @param trackEvent \r\n * @param ticks \r\n */\r\n handleMetadata(trackEvent: MidiTrackEvent, ticks: number) {\r\n if (trackEvent.meta) {\r\n const mtype = trackEvent.type;\r\n if (mtype === 'timeSignature') {\r\n /**\r\n * whenever we get a time signature event, recompute ticks per measure\r\n */\r\n const numerator = trackEvent.numerator!;\r\n const denominator = trackEvent.denominator!;\r\n const tsDef = TimeSignature.defaults;\r\n tsDef.actualBeats = numerator;\r\n tsDef.beatDuration = denominator;\r\n const ts = new TimeSignature(tsDef);\r\n this.timeSignatureMap[ticks] = ts;\r\n } else if (mtype === 'setTempo') {\r\n const bpm = 60 / (trackEvent.microsecondsPerBeat! / 1000000);\r\n const tempoDef = SmoTempoText.defaults;\r\n tempoDef.bpm = bpm;\r\n this.tempoMap[ticks] = new SmoTempoText(tempoDef);\r\n } else if (mtype === 'keySignature') {\r\n const mdata = trackEvent.key!;\r\n if (mdata === 0) {\r\n this.keySignatureMap[ticks] = 'c';\r\n } else {\r\n // there seem to be different ways to encode this...\r\n let signed = mdata / 256;\r\n if (signed > 7) {\r\n signed = -1 * (256 - signed);\r\n }\r\n if (Math.abs(mdata) < 256) {\r\n signed = mdata;\r\n }\r\n this.keySignatureMap[ticks] = SmoMusic.midiKeyToVexKey(signed);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Convert from Midi PPQ to Smoosic (and vex) ticks\r\n * @internal\r\n */\r\n getSmoTicks(midiTicks: number) {\r\n return 4096 * midiTicks / this.timeDivision;\r\n }\r\n /**\r\n * @internal\r\n */\r\n createNewEvent(metadata: RunningMetadata): EventSmoData {\r\n return {\r\n pitches: [], durationTicks: 0, tupletInfo: null, isRest: false, timeSignature: new TimeSignature(metadata.timeSignature),\r\n tempo: new SmoTempoText(metadata.tempo), keySignature: metadata.keySignature, measure: 0, tick: 0, isTied: false\r\n };\r\n }\r\n /**\r\n * @internal\r\n */\r\n static copyEvent(o: EventSmoData): EventSmoData {\r\n const pitches = JSON.parse(JSON.stringify(o.pitches));\r\n const timeSignature = new TimeSignature(o.timeSignature);\r\n const tempo = new SmoTempoText(o.tempo);\r\n return ({\r\n pitches, durationTicks: o.durationTicks, tupletInfo: o.tupletInfo, isRest: o.isRest, timeSignature, tempo, keySignature: o.keySignature,\r\n measure: o.measure, tick: o.tick, isTied: o.isTied\r\n });\r\n }\r\n /**\r\n * @internal\r\n */\r\n addToTieMap(measureIndex: number) {\r\n const staffIx = this.trackIndex;\r\n if (typeof (this.tieMap[staffIx]) === 'undefined') {\r\n this.tieMap[staffIx] = [];\r\n }\r\n this.tieMap[staffIx].push(measureIndex);\r\n }\r\n /**\r\n * Step 3 in the 3-step process. Quantize the note durations and convert the midi\r\n * event into SmoNotes.\r\n * @param events \r\n * @returns \r\n */\r\n createNotesFromEvents(events: EventSmoData[]): SmoMeasure[] {\r\n let measureIndex = 0;\r\n const measures: SmoMeasure[] = [];\r\n let measure: SmoMeasure | null = null;\r\n let deficit = 0;\r\n // If the midi event is smaller than the smallest note..\r\n const smallest = 1 * (this.quantizeTicks / 4);\r\n events.forEach((ev) => {\r\n if (measure === null || ev.measure > measureIndex) {\r\n const measureDefs = SmoMeasure.defaults;\r\n measureDefs.keySignature = ev.keySignature;\r\n measureDefs.timeSignature = new TimeSignature(ev.timeSignature);\r\n measureDefs.tempo = new SmoTempoText(ev.tempo);\r\n measure = new SmoMeasure(measureDefs);\r\n measure.voices.push({ notes: [] });\r\n measureIndex = ev.measure;\r\n measures.push(measure);\r\n }\r\n if (Math.abs(ev.durationTicks - deficit) < smallest && !(ev.tupletInfo !== null)) {\r\n deficit = deficit - ev.durationTicks;\r\n } else {\r\n const best = SmoMusic.midiTickSearch(ev.durationTicks - deficit, this.quantizeTicks);\r\n deficit += best.result - ev.durationTicks;\r\n ev.durationTicks = best.result;\r\n const defs = SmoNote.defaults;\r\n defs.ticks.numerator = ev.durationTicks;\r\n defs.pitches = JSON.parse(JSON.stringify(ev.pitches));\r\n defs.noteType = ev.isRest ? 'r' : 'n';\r\n const note = new SmoNote(defs);\r\n SmoNote.sortPitches(note);\r\n measure.voices[0].notes.push(note);\r\n if (ev.tupletInfo !== null && ev.tupletInfo.isLast === true) {\r\n const voiceLen = measure.voices[0].notes.length;\r\n const tupletNotes = [note, measure.voices[0].notes[voiceLen - 2], measure.voices[0].notes[voiceLen - 3]];\r\n const defs = SmoTuplet.defaults;\r\n defs.notes = tupletNotes;\r\n defs.stemTicks = ev.tupletInfo.stemTicks;\r\n defs.numNotes = ev.tupletInfo.numNotes;\r\n defs.totalTicks = ev.tupletInfo.totalTicks;\r\n defs.startIndex = voiceLen - 3;\r\n measure.tuplets.push(new SmoTuplet(defs));\r\n }\r\n if (ev.isTied) {\r\n this.addToTieMap(measureIndex);\r\n }\r\n }\r\n });\r\n measures.forEach((measure) => {\r\n measure.clef = MidiToSmo.guessClefForNotes(measure);\r\n });\r\n return measures;\r\n }\r\n /**\r\n * @param ticks \r\n * @returns the length in ticks of a triplet, if this looks like a triplet. Otherwise 0\r\n */\r\n tripletType(ticks: number): number {\r\n const tripletBeat = Math.round(4096 / 3);\r\n const tripletHalf = Math.round((4096 * 2) / 3);\r\n const tripletEighth = Math.round((4096 / 2) / 3);\r\n const beatTrip = tripletBeat / ticks;\r\n const eigthTrip = tripletEighth / ticks;\r\n const halfTrip = tripletHalf / ticks;\r\n if (Math.abs(1 - beatTrip) < 0.05) {\r\n return 4096;\r\n }\r\n if (Math.abs(1 - eigthTrip) < 0.05) {\r\n return 2048;\r\n }\r\n if (Math.abs(1 - halfTrip) < 0.05) {\r\n return 4096 * 2;\r\n }\r\n return 0;\r\n }\r\n /**\r\n * step 2 in the 3 step process. Divide the music up into measures based on\r\n * tick duration. If there are events overlapping measures, create extra events in the\r\n * new measure (hence the expand) and shorten the original event\r\n * @param events\r\n * @returns \r\n */\r\n expandMidiEvents(events: EventSmoData[]): EventSmoData[] {\r\n const rv: EventSmoData[] = [];\r\n if (events.length === 0) {\r\n return rv;\r\n }\r\n let i = 0;\r\n let ticksSoFar = 0;\r\n let measure = 0;\r\n let tick = 0;\r\n let tripletCount = 0;\r\n let tripletValue = 0;\r\n for (i = 0; i < events.length; ++i) {\r\n const ev = events[i];\r\n // If it's too small, continue. Don't record the event but do count the ticks\r\n if (ev.durationTicks < 128) {\r\n ticksSoFar += ev.durationTicks;\r\n continue;\r\n }\r\n const ticksPerMeasure = SmoMusic.timeSignatureToTicks(ev.timeSignature.timeSignature);\r\n const nevent = MidiToSmo.copyEvent(ev);\r\n if (ticksSoFar + ev.durationTicks > ticksPerMeasure) {\r\n nevent.durationTicks = ticksPerMeasure - ticksSoFar;\r\n if (nevent.durationTicks > 0) {\r\n rv.push(nevent);\r\n nevent.tick = tick;\r\n }\r\n tick = 0;\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n measure += 1;\r\n ticksSoFar = 0;\r\n this.maxMeasure = Math.max(this.maxMeasure, measure);\r\n let overflow = ev.durationTicks - nevent.durationTicks;\r\n while (overflow > ticksPerMeasure) {\r\n const ovfEvent = MidiToSmo.copyEvent(nevent);\r\n ovfEvent.tick = tick;\r\n ovfEvent.measure = measure;\r\n tick += 1;\r\n measure += 1;\r\n ovfEvent.durationTicks = ticksPerMeasure;\r\n rv.push(ovfEvent);\r\n overflow -= ticksPerMeasure;\r\n }\r\n if (overflow > 0) {\r\n const ovfEvent = MidiToSmo.copyEvent(nevent);\r\n ovfEvent.isTied = true;\r\n ovfEvent.durationTicks = overflow;\r\n ovfEvent.measure = measure;\r\n ovfEvent.tick = tick;\r\n ticksSoFar += ovfEvent.durationTicks;\r\n tick += 1;\r\n rv.push(ovfEvent);\r\n overflow = 0;\r\n }\r\n } else {\r\n ticksSoFar += ev.durationTicks;\r\n // Try to infer the presence of triplets. If it looks like a triplet, mark it and we will\r\n // create the tuplet when we create the measure.\r\n const possibleTriplet = this.tripletType(nevent.durationTicks);\r\n if (possibleTriplet > 0 && (tripletValue === 0 || possibleTriplet === tripletValue)) {\r\n tripletCount += 1;\r\n tripletValue = possibleTriplet;\r\n if (tripletCount === 3) {\r\n nevent.tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: true\r\n };\r\n rv[rv.length - 1].tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: false\r\n };\r\n rv[rv.length - 2].tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: false\r\n };\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n }\r\n } else {\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n }\r\n rv.push(nevent);\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Store midi on events. If the midi on or off matches an existing\r\n * stored event based on channel and note, return it so it can be processed\r\n * @param ev raw event\r\n * @param evIndex index of processed events\r\n * @returns \r\n */\r\n pushPopMidiEvent(ev: MidiTrackEvent, evIndex: number): MidiNoteOn | null {\r\n let rv: MidiNoteOn | null = null;\r\n if (!ev.noteNumber || typeof (ev.channel) === 'undefined') {\r\n return null;\r\n }\r\n if (this.midiOnNotes[ev.noteNumber]) {\r\n const ix = this.midiOnNotes[ev.noteNumber].findIndex((x) => x.channel === ev.channel);\r\n if (ix >= 0) {\r\n rv = JSON.parse(JSON.stringify(this.midiOnNotes[ev.noteNumber][ix]));\r\n this.midiOnNotes[ev.noteNumber].splice(ix);\r\n }\r\n }\r\n if (!this.midiOnNotes[ev.noteNumber]) {\r\n this.midiOnNotes[ev.noteNumber] = [];\r\n }\r\n if (ev.type === 'noteOn' && ev.velocity && ev.velocity > 0) {\r\n this.midiOnNotes[ev.noteNumber].push({\r\n note: ev.noteNumber,\r\n channel: ev.channel,\r\n smoIndex: evIndex\r\n });\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Step 1 in the 3-step process. Collapse midi events into \r\n * a single EventSmoData for each distinct tick that contains\r\n * the metadata state, a duration, and note information.\r\n * @param trackEvents \r\n * @returns \r\n */\r\n collapseMidiEvents(trackEvents: MidiTrackEvent[]): EventSmoData[] {\r\n const isEot = (ev: MidiTrackEvent) => {\r\n if (!ev) {\r\n return true;\r\n }\r\n if (typeof (ev.type) === 'undefined') {\r\n return true;\r\n }\r\n return ev.type === 'endOfTrack';\r\n }\r\n if (this.eventIndex >= trackEvents.length) {\r\n this.eot = true;\r\n return [];\r\n }\r\n const rv: EventSmoData[] = [];\r\n let cur = trackEvents[0];\r\n let metadata: RunningMetadata = this.getMetadata(0);\r\n let curSmo = this.createNewEvent(metadata);\r\n let untrackedTicks = 0;\r\n let ticks = 0;\r\n while (this.eventIndex < trackEvents.length && !(this.eot)) {\r\n if (isEot(cur)) {\r\n this.eot = true;\r\n break;\r\n }\r\n if (cur.deltaTime > 0) {\r\n curSmo.durationTicks = this.getSmoTicks(cur.deltaTime);\r\n ticks += curSmo.durationTicks;\r\n // We only need to track note on/off events. Other events update the global\r\n // map, we need to keep track of the duration changes though.\r\n if (cur.type === 'noteOn' || cur.type === 'noteOff') {\r\n if (curSmo.pitches.length === 0) {\r\n curSmo.isRest = true;\r\n }\r\n curSmo.durationTicks += untrackedTicks;\r\n untrackedTicks = 0;\r\n rv.push(curSmo);\r\n } else {\r\n untrackedTicks += curSmo.durationTicks\r\n }\r\n curSmo = this.createNewEvent(metadata);\r\n }\r\n curSmo.timeSignature = metadata.timeSignature;\r\n curSmo.tempo = metadata.tempo;\r\n curSmo.keySignature = metadata.keySignature.toLowerCase();\r\n\r\n if (cur.type === 'noteOn' || cur.type === 'noteOff') {\r\n const mm = this.pushPopMidiEvent(cur, rv.length);\r\n if (mm) {\r\n const npitch = SmoMusic.getEnharmonicInKey(SmoMusic.smoIntToPitch(mm.note - 12), metadata.keySignature);\r\n if (mm.smoIndex < rv.length) {\r\n rv[mm.smoIndex].pitches.push(npitch);\r\n rv[mm.smoIndex].isRest = false;\r\n } else {\r\n console.warn('bad index in event mm.smoIndex');\r\n }\r\n }\r\n } else if (cur.meta) {\r\n this.handleMetadata(cur, ticks);\r\n }\r\n metadata = this.getMetadata(ticks);\r\n this.eventIndex += 1;\r\n cur = trackEvents[this.eventIndex];\r\n if (isEot(cur)) {\r\n this.eot = true;\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n getTrackData(midi: any) {\r\n if (midi.header.format !== 0) {\r\n return midi.tracks;\r\n }\r\n const trackData: any[] = [];\r\n const trackHash: Record = {};\r\n const trackEvents: MidiTrackEvent[] = midi.tracks[0];\r\n trackEvents.forEach((ev) => {\r\n const channel = ev.channel ?? 0;\r\n if (!trackHash[channel]) {\r\n trackHash[channel] = [];\r\n }\r\n trackHash[channel].push(ev);\r\n });\r\n const trackKeys = Object.keys(trackHash);\r\n trackKeys.forEach((trackKey) => {\r\n trackData.push(trackHash[trackKey]);\r\n });\r\n return trackData;\r\n }\r\n\r\n /**\r\n * Convert the midi to a score as best we can. The conversion is made via a 3-step\r\n * process. \r\n * 1. consolidate all the MIDI events into individual note on/off events with a duration\r\n * 2. adjust the durations so the fit in with Smoosic measure lengths.\r\n * 3. Create the {@link SmoNote} objects from the events.\r\n * @returns \r\n */\r\n convert(): SmoScore {\r\n let staves: SmoSystemStaff[] = [];\r\n // go through the tracks. If this is midi format 1, split tracks into their own channels\r\n const tracks = this.getTrackData(this.midi);\r\n try {\r\n tracks.forEach((trackEvents: MidiTrackEvent[], trackIx: number) => {\r\n this.eventIndex = 0; // index into current track\r\n this.trackIndex = trackIx;\r\n this.eot = false;\r\n this.tieMap[trackIx] = [];\r\n const collapsed: EventSmoData[] = this.collapseMidiEvents(trackEvents);\r\n const expanded: EventSmoData[] = this.expandMidiEvents(collapsed);\r\n if (expanded.length > 0) {\r\n const staffDef = SmoSystemStaff.defaults;\r\n staffDef.staffId = trackIx;\r\n staffDef.measures = this.createNotesFromEvents(expanded);\r\n\r\n const staff = new SmoSystemStaff(staffDef);\r\n // For notes that are tied across measures, add the tie\r\n this.tieMap[trackIx].forEach((mm) => {\r\n const startMeasure = staffDef.measures[mm - 1];\r\n const endMeasure = staffDef.measures[mm];\r\n const endIx = startMeasure.voices[0].notes.length - 1;\r\n const startNote = startMeasure.voices[0].notes[endIx];\r\n const endNote = endMeasure.voices[0].notes[0];\r\n if (startNote.noteType === 'n' &&\r\n endNote.noteType === 'n' && SmoMusic.pitchArraysMatch(startNote.pitches, endNote.pitches)) {\r\n const tieDefs = SmoTie.defaults;\r\n tieDefs.startSelector = {\r\n staff: trackIx, measure: mm - 1, voice: 0, tick: endIx,\r\n pitches: []\r\n }\r\n tieDefs.endSelector = {\r\n staff: trackIx, measure: mm, voice: 0, tick: 0,\r\n pitches: []\r\n }\r\n tieDefs.lines.push({ from: 0, to: 0 });\r\n const tie = new SmoTie(tieDefs);\r\n staff.modifiers.push(tie);\r\n }\r\n });\r\n staves.push(staff);\r\n }\r\n });\r\n } catch (exception) {\r\n console.warn(exception);\r\n }\r\n if (staves.length === 0) {\r\n return SmoScore.getEmptyScore(SmoScore.defaults);\r\n }\r\n let longestStave = staves[0];\r\n staves.forEach((staff) => {\r\n if (staff.measures.length > longestStave.measures.length) {\r\n longestStave = staff;\r\n }\r\n });\r\n staves.forEach((staff) => {\r\n let i = 0;\r\n for (i = staff.measures.length; i < longestStave.measures.length; ++i) {\r\n const measure = SmoMeasure.getDefaultMeasure(longestStave.measures[i]);\r\n measure.voices.push({ notes: SmoMeasure.getDefaultNotes(longestStave.measures[i]) });\r\n staff.measures.push(measure);\r\n }\r\n });\r\n const scoreDefs = SmoScore.defaults;\r\n scoreDefs.staves = staves;\r\n\r\n const rv = new SmoScore(scoreDefs);\r\n const layoutDefaults = rv.layoutManager as SmoLayoutManager;\r\n // if no scale given in score, default to something small.\r\n layoutDefaults.globalLayout.svgScale = 0.65;\r\n layoutDefaults.globalLayout.zoomScale = 1.5;\r\n return rv;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Support for converting Smo object model to MIDI\r\n * @module /smo/midi/smoToMidi\r\n */\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoAudioScore } from '../xform/audioTrack';\r\nimport { SmoScore } from '../data/score';\r\ndeclare var MidiWriter: any;\r\n/* options: [{\r\n\r\n value: 1,\r\n label: 'Piano (bowed)'\r\n }, {\r\n value: 34,\r\n label: 'Bass (plucked)'\r\n }, {\r\n value: 27,\r\n label: 'Electric Guitar'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'trombone',\r\n label: 'Trombone'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'altoSax',\r\n label: 'Eb Alto Sax'\r\n }, {\r\n value: 'tenorSax',\r\n label: 'Bb Tenor Sax'\r\n }, {\r\n value: 'bariSax',\r\n label: 'Eb Bari Sax'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]*/\r\n\r\nexport interface MidiTrackHash {\r\n track: any,\r\n lastMeasure: number\r\n}\r\n\r\n/**\r\n * Convert a {@link SmoScore} object to MIDI\r\n * @category SmoToMidi\r\n */\r\nexport class SmoToMidi {\r\n /**\r\n * @param score \r\n * @returns Midi byte array that can be sent to a file upload widget\r\n */\r\n static convert(score: SmoScore) {\r\n const beatTime = 128; // midi ticks per beat\r\n const converter = new SmoAudioScore(score, beatTime);\r\n const audioScore = converter.convert();\r\n const smoTracks = audioScore.tracks;\r\n let currentKey: string = 'C';\r\n const trackHash: Record = {};\r\n smoTracks.forEach((smoTrack, trackIx) => {\r\n let j = 0;\r\n if (typeof(trackHash[trackIx]) === 'undefined') {\r\n trackHash[trackIx] = {\r\n track: new MidiWriter.Track(),\r\n lastMeasure: 0\r\n };\r\n }\r\n const track = trackHash[trackIx].track;\r\n // eslint-disable-next-line\r\n audioScore.repeatMap.forEach((measureMap) => {\r\n for (j = measureMap.startMeasure; j <= measureMap.endMeasure; ++j) {\r\n // eslint-disable-next-line\r\n const notes = smoTrack.notes.filter((nn) => nn.selector.measure === j);\r\n notes.forEach((noteData) => { \r\n const selectorKey = SmoSelector.getMeasureKey(noteData.selector);\r\n if (smoTrack.tempoMap[selectorKey]) {\r\n track.setTempo(smoTrack.tempoMap[selectorKey]);\r\n }\r\n if (smoTrack.timeSignatureMap[selectorKey]) {\r\n const ts = smoTrack.timeSignatureMap[selectorKey];\r\n track.setTimeSignature(ts.numerator, ts.denominator);\r\n }\r\n if (smoTrack.keyMap[j]) {\r\n const ksString = smoTrack.keyMap[j];\r\n const ks = -1 * SmoMusic.getFlatsInKeySignature(ksString) + SmoMusic.getSharpsInKeySignature(ksString);\r\n track.setKeySignature(ks, 0);\r\n }\r\n if (noteData.noteType === 'r') {\r\n if (!noteData.padding) {\r\n const rest = new MidiWriter.NoteOffEvent({\r\n channel: trackIx + 1,\r\n pitch: 'C4',\r\n duration: 't' + noteData.duration\r\n });\r\n track.addEvent(rest);\r\n }\r\n } else {\r\n const pitchArray = SmoMusic.smoPitchesToMidiStrings(noteData.pitches);\r\n const velocity = Math.round(127 * noteData.volume);\r\n const midiNote = new MidiWriter.NoteEvent({\r\n channel: trackIx + 1,\r\n pitch: pitchArray,\r\n duration: 't' + noteData.duration,\r\n velocity\r\n });\r\n track.addEvent(midiNote);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n const tracks = Object.keys(trackHash).map((key) => trackHash[key].track);\r\n const writer = new MidiWriter.Writer(tracks);\r\n return writer.buildFile();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef, Pitch } from '../data/common';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoBarline, TimeSignature, SmoRehearsalMark, SmoMeasureModifierBase } from '../data/measureModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, SmoTie } from '../data/staffModifiers';\r\nimport { SmoArticulation, SmoLyric, SmoOrnament } from '../data/noteModifiers';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoTuplet } from '../data/tuplet';\r\n\r\nimport { XmlHelpers } from './xmlHelpers';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoTempoText } from '../data/measureModifiers';\r\nimport { XmlToSmo } from './xmlToSmo';\r\nimport { SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SuiSampleMedia } from '../../render/audio/samples';\r\n\r\nexport interface SlurXml {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n number: number\r\n}\r\n/**\r\n * Keep state of the xml document as we are generating it\r\n * @category SmoToXml\r\n */\r\nexport interface SmoState {\r\n divisions: number,\r\n measureNumber: number,\r\n measureIndex: number,\r\n transposeOffset: number,\r\n tickCount: number,\r\n voiceIndex: number,\r\n keySignature: string,\r\n voiceTickIndex: number,\r\n voice?: SmoVoice,\r\n partStaves: SmoSystemStaff[],\r\n staffPartIx: number, // index of staff in part\r\n slurs: SlurXml[],\r\n ties: SlurXml[],\r\n tieds: SlurXml[],\r\n lyricState: Record,\r\n measureTicks: number,\r\n note?: SmoNote,\r\n beamState: number,\r\n beamTicks: number,\r\n timeSignature?: TimeSignature,\r\n tempo?: SmoTempoText\r\n}\r\n\r\n/**\r\n * Convert {@link SmoScore} object into a music XML serialization\r\n * \r\n * usage: `xdoc: XmlDocument = SmoToXml.convert(score)`\r\n * @category SmoToXml\r\n */\r\nexport class SmoToXml {\r\n static get beamStates(): Record {\r\n return {\r\n none: 1, start: 2, continue: 3, stop: 4\r\n };\r\n }\r\n static get defaultState(): SmoState {\r\n return JSON.parse(JSON.stringify({\r\n divisions: 0,\r\n measureNumber: 0,\r\n measureIndex: 0,\r\n transposeOffset: 0,\r\n tickCount: 0,\r\n voiceIndex: 0,\r\n keySignature: 'C',\r\n voiceTickIndex: 0,\r\n slurs: [],\r\n ties: [],\r\n partStaves: [],\r\n lyricState: {},\r\n measureTicks: 0,\r\n beamState: 0,\r\n beamTicks: 4096\r\n }));\r\n }\r\n /**\r\n * see usage\r\n * @param score\r\n * @returns \r\n */\r\n static convert(score: SmoScore): XMLDocument {\r\n let staffGroupIx = 0;\r\n let staffIx = 0;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const dom = XmlHelpers.createRootElement(); \r\n const root = dom.children[0];\r\n const work = nn(root, 'work', null, '');\r\n nn(work, 'work-title', score.scoreInfo, 'title');\r\n const identification = nn(root, 'identification', null, '');\r\n const creator = nn(identification, 'creator', score.scoreInfo, 'composer');\r\n XmlHelpers.createAttributes(creator, { type: 'composer' });\r\n const encoding = nn(identification, 'encoding', null, '');\r\n nn(encoding, 'software', { software: 'Some pre-release version of Smoosic' }, 'software');\r\n const today = new Date();\r\n const dd = (n: number) => n < 10 ? '0' + n.toString() : n.toString()\r\n const dateString: string = today.getFullYear() + '-' + dd(today.getMonth() + 1) + '-' + dd(today.getDate());\r\n nn(encoding, 'encoding-date', dateString, 'date');\r\n const defaults = nn(root, 'defaults', null, '');\r\n const scaling = nn(defaults, 'scaling', null, '');\r\n const svgScale = score.layoutManager!.getGlobalLayout().svgScale;\r\n\r\n // music in vexflow is rendered at a font size of 38\r\n const mm = XmlToSmo.mmPerPixel * 42 * svgScale;\r\n nn(scaling, 'millimeters', { mm }, 'mm');\r\n nn(scaling, 'tenths', { tenths: 40 }, 'tenths');\r\n const pageLayout = nn(defaults, 'page-layout', null, '');\r\n const musicFont = nn(defaults, 'music-font', null, '');\r\n const engrave = score.fonts.find((fn) => fn.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n XmlHelpers.createAttribute(musicFont, 'font-size', 38 * svgScale );\r\n if (engrave) {\r\n XmlHelpers.createAttribute(musicFont, 'font-family', engrave.family);\r\n }\r\n const tenthConversion = (25.2 / 96) * (40 / mm);\r\n const pageDims = {\r\n 'page-height': score.layoutManager!.globalLayout.pageHeight * tenthConversion,\r\n 'page-width' : score.layoutManager!.globalLayout.pageWidth * tenthConversion\r\n };\r\n Object.keys(pageDims).forEach((dim) => {\r\n nn(pageLayout, dim, pageDims, dim);\r\n });\r\n const margins = { 'left-margin': score.layoutManager!.pageLayouts[0].leftMargin * tenthConversion,\r\n 'right-margin': score.layoutManager!.pageLayouts[0].rightMargin * tenthConversion,\r\n 'top-margin': score.layoutManager!.pageLayouts[0].topMargin * tenthConversion,\r\n 'bottom-margin': score.layoutManager!.pageLayouts[0].bottomMargin * tenthConversion };\r\n const pageMargins = nn(pageLayout, 'page-margins', null, '');\r\n Object.keys(margins).forEach((margin) => {\r\n nn(pageMargins, margin, margins, margin);\r\n });\r\n const partList = nn(root, 'part-list', null, '');\r\n score.staves.forEach((staff) => {\r\n score.systemGroups.forEach((sg) => {\r\n if (sg.startSelector.staff === staff.staffId && sg.startSelector.staff < sg.endSelector.staff ) {\r\n const partGroup = nn(partList, 'part-group', null, '');\r\n XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'start' });\r\n const groupSymbol = nn(partGroup, 'group-symbol', null, '');\r\n let symbolText = 'line';\r\n if (sg.leftConnector === SmoSystemGroup.connectorTypes['brace']) {\r\n symbolText = 'brace';\r\n } else if (sg.leftConnector === SmoSystemGroup.connectorTypes['bracket']) {\r\n symbolText = 'bracket';\r\n } else if (sg.leftConnector === SmoSystemGroup.connectorTypes['double']) {\r\n symbolText = 'square';\r\n }\r\n groupSymbol.textContent = symbolText;\r\n } else if (sg.endSelector.staff === staff.staffId && sg.startSelector.staff < sg.endSelector.staff ) {\r\n const partGroup = nn(partList, 'part-group', null, '');\r\n XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'stop' });\r\n }\r\n });\r\n if (!staff.partInfo.stavesBefore) {\r\n const id = 'P' + staff.staffId;\r\n const scorePart = nn(partList, 'score-part', null, '');\r\n XmlHelpers.createAttributes(scorePart, { id });\r\n nn(scorePart, 'part-name', { name: staff.measureInstrumentMap[0].instrumentName }, 'name');\r\n nn(scorePart, 'part-abbreviation', { name: staff.measureInstrumentMap[0].abbreviation }, 'name');\r\n const staffInsts = staff.getInstrumentList();\r\n staffInsts.forEach((inst, ix) => {\r\n const scoreInstrument = nn(scorePart, 'score-instrument', null, '');\r\n XmlHelpers.createAttributes(scoreInstrument, { id: `${id}-${ix}` });\r\n const iname = nn(scoreInstrument, 'instrument-name', null, '');\r\n iname.textContent = inst.instrumentName;\r\n const iinst = nn(scoreInstrument, 'instrument-sound', null, '');\r\n // Hack: family is in the sample library, breaks dependency direction\r\n const family = SuiSampleMedia.getFamilyForInstrument(inst.instrument);\r\n iinst.textContent = `${family}.${inst.instrument}`;\r\n });\r\n }\r\n });\r\n const smoState: SmoState = SmoToXml.defaultState;\r\n for (staffIx = 0; staffIx < score.staves.length; ++staffIx) {\r\n smoState.partStaves = [];\r\n // If this is the second staff in a part, we've already output the music with the\r\n // first stave\r\n if (score.staves[staffIx].partInfo.stavesBefore > 0) {\r\n continue;\r\n }\r\n smoState.partStaves.push(score.staves[staffIx]);\r\n if (smoState.partStaves[0].partInfo.stavesAfter > 0 && staffIx < score.staves.length + 1) {\r\n smoState.partStaves.push(score.staves[staffIx + 1]);\r\n } \r\n const part = nn(root, 'part', null, '');\r\n const id = 'P' + smoState.partStaves[0].staffId;\r\n XmlHelpers.createAttributes(part, { id });\r\n smoState.measureNumber = 1;\r\n smoState.tickCount = 0;\r\n smoState.transposeOffset = 0;\r\n smoState.slurs = [];\r\n smoState.ties = [];\r\n smoState.tieds = [];\r\n smoState.lyricState = {};\r\n for (smoState.measureIndex = 0; smoState.measureIndex < smoState.partStaves[0].measures.length; ++smoState.measureIndex) {\r\n const measureElement = nn(part, 'measure', null, '');\r\n for (smoState.staffPartIx = 0; smoState.staffPartIx < smoState.partStaves.length; ++smoState.staffPartIx) {\r\n smoState.measureTicks = 0;\r\n // each staff in a part goes in the same measure element. If this is a subsequent part, we've already \r\n SmoToXml.measure(measureElement, smoState);\r\n }\r\n smoState.measureNumber += 1;\r\n }\r\n }\r\n \r\n return smoSerialize.prettifyXml(dom);\r\n } \r\n /**\r\n * /score-partwise/part/measure\r\n * @param measureElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static measure(measureElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const measure = smoState.partStaves[smoState.staffPartIx].measures[smoState.measureIndex];\r\n if (smoState.measureNumber === 1 && measure.isPickup()) {\r\n smoState.measureNumber = 0;\r\n }\r\n if (measure.getForceSystemBreak()) {\r\n const printElement = nn(measureElement, 'print', null, '');\r\n XmlHelpers.createAttributes(printElement, { 'new-system': 'yes' });\r\n }\r\n XmlHelpers.createAttributes(measureElement, { number: smoState.measureNumber });\r\n SmoToXml.attributes(measureElement, measure, smoState);\r\n smoState.voiceIndex = 1;\r\n smoState.beamState = SmoToXml.beamStates.none;\r\n smoState.beamTicks = 0;\r\n SmoToXml.barline(measureElement, smoState, true);\r\n measure.voices.forEach((voice) => {\r\n smoState.voiceTickIndex = 0;\r\n smoState.voice = voice;\r\n voice.notes.forEach((note) => {\r\n smoState.note = note;\r\n // Start wedge before note starts\r\n SmoToXml.direction(measureElement, smoState, true);\r\n SmoToXml.note(measureElement, measure, note, smoState);\r\n // End wedge on next tick\r\n SmoToXml.direction(measureElement, smoState, false);\r\n });\r\n // If this is the end of a voice, back up the time to align the voices\r\n if (measure.voices.length > smoState.voiceIndex) {\r\n smoState.voiceIndex += 1;\r\n const backupElement = nn(measureElement, 'backup', null, '');\r\n nn(backupElement, 'duration', { duration: smoState.measureTicks }, 'duration');\r\n } else {\r\n if (smoState.partStaves.length > 1 && smoState.staffPartIx + 1 < smoState.partStaves.length) {\r\n // If this is the end of a measure, and this is the first part in the staff, back it up for the second staff\r\n const backupElement = nn(measureElement, 'backup', null, '');\r\n nn(backupElement, 'duration', { duration: smoState.measureTicks }, 'duration'); \r\n smoState.tickCount += smoState.measureTicks;\r\n } else if (smoState.partStaves.length === 1) {\r\n smoState.tickCount += smoState.measureTicks;\r\n }\r\n }\r\n smoState.measureTicks = 0;\r\n });\r\n SmoToXml.barline(measureElement, smoState, false);\r\n }\r\n /**\r\n * /score-partwise/part/measure/barline\r\n * @param measureElement \r\n * @param smoState \r\n * @param start \r\n */\r\n static barline(measureElement: Element, smoState: SmoState, start: boolean) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n let barlineElement = null;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n if (start) {\r\n if (measure!.getStartBarline().barline === SmoBarline.barlines.startRepeat) {\r\n barlineElement = nn(measureElement, 'barline', null, '');\r\n const repeatElement = nn(barlineElement, 'repeat', null, '');\r\n XmlHelpers.createAttributes(repeatElement, { direction: 'forward' });\r\n }\r\n }\r\n const voltas = staff.getVoltasForMeasure(measure!.measureNumber.measureIndex);\r\n const numArray: number[] = [];\r\n voltas.forEach((volta) => {\r\n if ((start && volta?.startSelector?.measure === measure.measureNumber.measureIndex) || \r\n (!start && volta?.endSelector?.measure === measure.measureNumber.measureIndex)) {\r\n numArray.push(volta.number);\r\n }\r\n });\r\n if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.endBar) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n nn(barlineElement, 'bar-style', { style: 'light-heavy'} , 'style');\r\n } else if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.doubleBar) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n nn(barlineElement, 'bar-style', { style: 'light-light'} , 'style');\r\n }\r\n if (numArray.length) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n const numstr = numArray.join(',');\r\n const endElement = nn(barlineElement, 'ending', null, '');\r\n const endString = start ? 'start' : 'stop';\r\n XmlHelpers.createAttributes(endElement, { type: endString, number: numstr });\r\n }\r\n if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.endRepeat) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n const repeatElement = nn(barlineElement, 'repeat', null, '');\r\n XmlHelpers.createAttributes(repeatElement, { direction: 'backward' });\r\n }\r\n }\r\n\r\n /**\r\n * /score-partwise/part/measure/note/tie\r\n * @param notationsElement \r\n * @param smoState \r\n */\r\n static tied(notationsElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForTie = ((ties: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n ties.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getTiesStartingAt(selector) as SmoTie[];\r\n const ends = staff.getTiesEndingAt(selector) as SmoTie[];\r\n const remove: SlurXml[] = [];\r\n const newTies: SlurXml[] = [];\r\n ends.forEach((tie) => {\r\n const match = smoState.tieds.find((ss: any) => SmoSelector.eq(ss.startSelector, tie.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, tie.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const tieElement = nn(notationsElement, 'tied', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'stop' });\r\n }\r\n });\r\n smoState.tieds.forEach((tie: any) => {\r\n if (remove.findIndex((rr) => rr.number === tie.number) < 0) {\r\n newTies.push(tie);\r\n }\r\n });\r\n smoState.tieds = newTies;\r\n starts.forEach((tie) => {\r\n const number = getNumberForTie(smoState.ties);\r\n smoState.tieds.push({\r\n startSelector: tie.startSelector,\r\n endSelector: tie.endSelector,\r\n number\r\n });\r\n const tieElement = nn(notationsElement, 'tied', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/note/tie\r\n * @param noteElement\r\n * @param smoState \r\n */\r\n static tie(noteElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForTie = ((ties: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n ties.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getTiesStartingAt(selector) as SmoTie[];\r\n const ends = staff.getTiesEndingAt(selector) as SmoTie[];\r\n const remove: SlurXml[] = [];\r\n const newTies: SlurXml[] = [];\r\n ends.forEach((tie) => {\r\n const match = smoState.ties.find((ss: any) => SmoSelector.eq(ss.startSelector, tie.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, tie.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const tieElement = nn(noteElement, 'tie', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'stop' });\r\n }\r\n });\r\n smoState.ties.forEach((tie: any) => {\r\n if (remove.findIndex((rr) => rr.number === tie.number) < 0) {\r\n newTies.push(tie);\r\n }\r\n });\r\n smoState.ties = newTies;\r\n starts.forEach((tie) => {\r\n const number = getNumberForTie(smoState.ties);\r\n smoState.ties.push({\r\n startSelector: tie.startSelector,\r\n endSelector: tie.endSelector,\r\n number\r\n });\r\n const tieElement = nn(noteElement, 'tie', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/note/notations/slur\r\n * @param notationsElement \r\n * @param smoState \r\n */\r\n static slur(notationsElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForSlur = ((slurs: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n slurs.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getSlursStartingAt(selector) as SmoSlur[];\r\n const ends = staff.getSlursEndingAt(selector) as SmoSlur[];\r\n const remove: SlurXml[] = [];\r\n const newSlurs: SlurXml[] = [];\r\n ends.forEach((slur) => {\r\n const match = smoState.slurs.find((ss: any) => SmoSelector.eq(ss.startSelector, slur.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, slur.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const slurElement = nn(notationsElement, 'slur', null, '');\r\n XmlHelpers.createAttributes(slurElement, { number: match.number, type: 'stop' });\r\n }\r\n });\r\n smoState.slurs.forEach((slur: any) => {\r\n if (remove.findIndex((rr) => rr.number === slur.number) < 0) {\r\n newSlurs.push(slur);\r\n }\r\n });\r\n smoState.slurs = newSlurs;\r\n starts.forEach((slur) => {\r\n const number = getNumberForSlur(smoState.slurs);\r\n smoState.slurs.push({\r\n startSelector: slur.startSelector,\r\n endSelector: slur.endSelector,\r\n number\r\n });\r\n const slurElement = nn(notationsElement, 'slur', null, '');\r\n XmlHelpers.createAttributes(slurElement, { number: number, type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/measure/note/time-modification\r\n * /score-partwise/measure/note/tuplet\r\n * @param noteElement \r\n * @param notationsElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static tupletTime(noteElement: Element, tuplet: SmoTuplet, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const obj = {\r\n actualNotes: tuplet.numNotes, normalNotes: tuplet.notes_occupied\r\n };\r\n const timeModification = nn(noteElement, 'time-modification', null, '');\r\n nn(timeModification, 'actual-notes', obj, 'actualNotes');\r\n nn(timeModification, 'normal-notes', obj, 'normalNotes');\r\n }\r\n static tupletNotation(notationsElement: Element, tuplet: SmoTuplet, note: SmoNote) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n if (tuplet.getIndexOfNote(note) === 0) {\r\n const tupletElement = nn(notationsElement, 'tuplet', null, '');\r\n XmlHelpers.createAttributes(tupletElement, {\r\n number: 1, type: 'start'\r\n });\r\n } else if (tuplet.getIndexOfNote(note) === tuplet.notes.length - 1) {\r\n const tupletElement = nn(notationsElement, 'tuplet', null, '');\r\n XmlHelpers.createAttributes(tupletElement, {\r\n number: 1, type: 'stop'\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * /score-partwise/measure/note/pitch\r\n * @param pitch \r\n * @param noteElement \r\n */\r\n static pitch(pitch: Pitch, noteElement: Element) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const accidentalOffset = ['bb', 'b', 'n', '#', '##'];\r\n const alter = accidentalOffset.indexOf(pitch.accidental) - 2;\r\n const pitchElement = nn(noteElement, 'pitch', null, '');\r\n nn(pitchElement, 'step', { letter: pitch.letter.toUpperCase() }, 'letter');\r\n nn(pitchElement, 'alter', { alter }, 'alter');\r\n nn(pitchElement, 'octave', pitch, 'octave');\r\n }\r\n /**\r\n * /score-partwise/measure/beam\r\n * @param noteElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static beamNote(noteElement: Element, smoState: SmoState) {\r\n if (!smoState.note) {\r\n return;\r\n }\r\n if (!smoState.voice) {\r\n return;\r\n }\r\n const nn = XmlHelpers.createTextElementChild;\r\n const note = smoState.note;\r\n const nextNote = (smoState.voiceTickIndex + 1) >= smoState.voice.notes.length ?\r\n null : smoState.voice.notes[smoState.voiceTickIndex + 1];\r\n const exceedTicks = smoState.beamTicks + note.tickCount >= note.beamBeats;\r\n // don't start a beam on a rest\r\n if (note.isRest() && smoState.beamState === SmoToXml.beamStates.none) {\r\n return;\r\n }\r\n let toBeam = SmoToXml.beamStates.none;\r\n if (note.tickCount <= 2048 && !exceedTicks) {\r\n // Explicit end beam, or no more notes to beam, so stop beam\r\n if (note.endBeam || nextNote === null) {\r\n if (smoState.beamState !== SmoToXml.beamStates.none) {\r\n toBeam = SmoToXml.beamStates.stop;\r\n }\r\n } else {\r\n // else if the next note is beamable, start or continue the beam\r\n if (nextNote.tickCount <= 2048) {\r\n toBeam = smoState.beamState === SmoToXml.beamStates.continue ?\r\n SmoToXml.beamStates.continue : SmoToXml.beamStates.start;\r\n }\r\n }\r\n }\r\n if (toBeam === SmoToXml.beamStates.start || toBeam === SmoToXml.beamStates.continue) {\r\n smoState.beamTicks += smoState.note.tickCount;\r\n } else {\r\n smoState.beamTicks = 0;\r\n }\r\n // slur is start/stop, beam is begin, end, gf\r\n if (toBeam === SmoToXml.beamStates.start) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'begin' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n smoState.beamState = SmoToXml.beamStates.continue;\r\n } else if (toBeam === SmoToXml.beamStates.continue) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'continue' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n } else if ((toBeam === SmoToXml.beamStates.stop) ||\r\n (toBeam === SmoToXml.beamStates.none && smoState.beamState !== SmoToXml.beamStates.none)) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'end' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n smoState.beamState = SmoToXml.beamStates.none;\r\n }\r\n }\r\n /**\r\n * /score-partwise/measure/direction/direction-type\r\n * @param measureElement \r\n * @param smoState \r\n * @param beforeNote \r\n */\r\n static direction(measureElement: Element, smoState: SmoState, beforeNote: boolean) {\r\n let addDirection = false;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const directionElement = measureElement.ownerDocument.createElement('direction');\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const directionChildren: Element[] = [];\r\n const tempo = measure.getTempo();\r\n let displayTempo = false;\r\n if (smoState.tempo) {\r\n if (tempo.display && measure.measureNumber.measureIndex === 0 && smoState.measureTicks === 0) {\r\n displayTempo = true;\r\n } else if (tempo.display && !SmoTempoText.eq(smoState.tempo, tempo)) {\r\n displayTempo = true;\r\n }\r\n } else {\r\n displayTempo = true;\r\n }\r\n smoState.tempo = new SmoTempoText(tempo);\r\n if (beforeNote === true && smoState.staffPartIx === 0 && smoState.measureTicks === 0 && smoState.partStaves[0].staffId === 0) {\r\n const mark: SmoMeasureModifierBase | undefined = measure.getRehearsalMark();\r\n if (mark) {\r\n const rmtype = nn(directionElement, 'direction-type', null, '');\r\n const xmark = (mark as SmoRehearsalMark);\r\n const rElement = nn(rmtype, 'rehearsal', { mark: xmark.symbol }, 'mark');\r\n XmlHelpers.createAttribute(rElement, 'enclosure', 'square');\r\n XmlHelpers.createAttribute(directionElement, 'placement', 'above');\r\n addDirection = true;\r\n }\r\n }\r\n if (beforeNote === true && displayTempo) {\r\n addDirection = true;\r\n const tempoBpm = Math.round(tempo.bpm * tempo.beatDuration / 4096);\r\n const tempoElement = nn(directionElement, 'direction-type', null, '');\r\n XmlHelpers.createAttribute(directionElement, 'placement', 'above');\r\n let tempoText = tempo.tempoText;\r\n if (tempo.tempoMode === SmoTempoText.tempoModes.customMode) {\r\n tempoText = tempo.customText;\r\n }\r\n if (tempo.tempoMode === SmoTempoText.tempoModes.textMode) {\r\n nn(tempoElement, 'words', { words: tempoText }, 'words');\r\n } else if (tempo.tempoMode === SmoTempoText.tempoModes.customMode || tempo.tempoMode === SmoTempoText.tempoModes.durationMode) {\r\n const metronomeElement = nn(tempoElement, 'metronome', null, '');\r\n let durationType = 'quarter';\r\n let dotType = false;\r\n if (tempo.bpm >= 8192) {\r\n durationType = 'half';\r\n } else if (tempo.bpm < 4096) {\r\n durationType = 'eighth';\r\n }\r\n if (tempo.bpm === 6144 || tempo.bpm === 12288 || tempo.bpm === 3072) {\r\n dotType = true;\r\n }\r\n nn(metronomeElement, 'beat-unit', { beatUnit: durationType}, 'beatUnit');\r\n if (dotType) {\r\n nn(metronomeElement, 'beat-unit-dot', null, '');\r\n }\r\n nn(metronomeElement, 'per-minute', { tempo }, 'bpm');\r\n }\r\n // Sound is supposed to come last under 'direction' element\r\n const soundElement = measureElement.ownerDocument.createElement('sound');\r\n soundElement.setAttribute('tempo', tempoBpm.toString());\r\n directionChildren.push(soundElement);\r\n }\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n if (!beforeNote) {\r\n selector.tick -= 1;\r\n }\r\n const startWedge = staff.modifiers.find((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) &&\r\n (mod.attrs.type === 'SmoStaffHairpin')) as SmoStaffHairpin;\r\n const endWedge = staff.modifiers.find((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector) &&\r\n (mod.attrs.type === 'SmoStaffHairpin')) as SmoStaffHairpin;\r\n if (endWedge && !beforeNote) {\r\n const wedgeDirection = nn(measureElement, 'direction', null, '');\r\n const dtype = nn(wedgeDirection, 'direction-type', null, '');\r\n const wedgeElement = nn(dtype, 'wedge', null, '');\r\n XmlHelpers.createAttributes(wedgeElement, { type: 'stop', spread: '20' });\r\n }\r\n if (startWedge && beforeNote) {\r\n const wedgeDirection = nn(measureElement, 'direction', null, '');\r\n const dtype = nn(wedgeDirection, 'direction-type', null, '');\r\n const wedgeElement = nn(dtype, 'wedge', null, '');\r\n const wedgeType = startWedge.hairpinType === SmoStaffHairpin.types.CRESCENDO ?\r\n 'crescendo' : 'diminuendo';\r\n XmlHelpers.createAttributes(wedgeElement, { type: wedgeType });\r\n }\r\n if (addDirection) {\r\n measureElement.appendChild(directionElement);\r\n directionChildren.forEach((el) => {\r\n directionElement.appendChild(el);\r\n })\r\n }\r\n }\r\n /**\r\n * /score-partwise/measure/note/lyric\r\n * @param noteElement \r\n * @param smoState \r\n */\r\n static lyric(noteElement: Element, smoState: SmoState) {\r\n const smoNote = smoState.note!;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const lyrics = smoNote.getTrueLyrics() as SmoLyric[];\r\n lyrics.forEach((lyric) => {\r\n let syllabic = 'single';\r\n if (lyric.isHyphenated() === false && lyric.isDash() === false) {\r\n if (smoState.lyricState[lyric.verse] === 'begin') {\r\n syllabic = 'end';\r\n } // else stays single\r\n } else {\r\n if (lyric.isHyphenated()) {\r\n syllabic = smoState.lyricState[lyric.verse] === 'begin' ?\r\n 'middle' : 'begin';\r\n } else if (lyric.isDash()) {\r\n syllabic = 'middle';\r\n }\r\n }\r\n smoState.lyricState[lyric.verse] = syllabic;\r\n const lyricElement = nn(noteElement, 'lyric', null, '');\r\n XmlHelpers.createAttribute(lyricElement, 'number', lyric.verse + 1);\r\n XmlHelpers.createAttribute(lyricElement, 'placement', 'below');\r\n XmlHelpers.createAttribute(lyricElement, 'default-y',\r\n -80 - 10 * lyric.verse);\r\n nn(lyricElement, 'syllabic', syllabic, '');\r\n nn(lyricElement, 'text', lyric.getText(), '');\r\n });\r\n }\r\n /**\r\n * /score-partwise/measure/note\r\n * @param measureElement \r\n * @param smoState \r\n */\r\n static note(measureElement: Element, measure: SmoMeasure, note: SmoNote, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n let i = 0;\r\n for (i = 0; i < note.pitches.length; ++i) {\r\n let j = 0;\r\n const noteElement = nn(measureElement, 'note', null, '');\r\n const isChord = i > 0;\r\n if (isChord) {\r\n nn(noteElement, 'chord', null, '');\r\n } else {\r\n }\r\n if (note.isRest()) {\r\n const restElement = nn(noteElement, 'rest', null, '');\r\n const step = { letter: note.pitches[i].letter.toUpperCase() };\r\n nn(restElement, 'display-step', step, 'letter');\r\n nn(restElement, 'display-octave', { ...note.pitches[i] }, 'octave');\r\n } else {\r\n SmoToXml.pitch(note.pitches[i], noteElement);\r\n }\r\n const duration = note.tickCount;\r\n smoState.measureTicks += duration;\r\n const tuplet = measure.getTupletForNote(note);\r\n nn(noteElement, 'duration', { duration }, 'duration');\r\n SmoToXml.tie(noteElement, smoState);\r\n nn(noteElement, 'voice', { voice: smoState.voiceIndex }, 'voice');\r\n let typeTickCount = note.tickCount;\r\n if (tuplet) {\r\n typeTickCount = tuplet.stemTicks;\r\n }\r\n nn(noteElement, 'type', { type: XmlHelpers.closestStemType(typeTickCount) },\r\n 'type');\r\n const dots = SmoMusic.smoTicksToVexDots(note.tickCount);\r\n for (j = 0; j < dots; ++j) {\r\n nn(noteElement, 'dot', null, '');\r\n }\r\n // time modification (tuplet) comes before notations which have tuplet beaming rules\r\n // also before stem\r\n if (tuplet) {\r\n SmoToXml.tupletTime(noteElement, tuplet, smoState);\r\n }\r\n if (note.flagState === SmoNote.flagStates.up) {\r\n nn(noteElement, 'stem', { direction: 'up' }, 'direction');\r\n }\r\n if (note.flagState === SmoNote.flagStates.down) {\r\n nn(noteElement, 'stem', { direction: 'down' }, 'direction');\r\n }\r\n // stupid musicxml requires beam to be last.\r\n const notationsElement = noteElement.ownerDocument.createElement('notations');\r\n // If a multi-part staff, we need to include 'staff' element\r\n if (smoState.partStaves.length > 1) {\r\n nn(noteElement, 'staff', { staffIx: smoState.staffPartIx + 1 }, 'staffIx');\r\n }\r\n if (!isChord) {\r\n SmoToXml.beamNote(noteElement, smoState);\r\n }\r\n if (!isChord) {\r\n SmoToXml.slur(notationsElement, smoState);\r\n }\r\n SmoToXml.tied(notationsElement, smoState);\r\n if (tuplet) {\r\n SmoToXml.tupletNotation(notationsElement, tuplet, note);\r\n }\r\n const ornaments = note.getOrnaments();\r\n if (ornaments.length) {\r\n const ornamentsElement = noteElement.ownerDocument.createElement('ornaments');\r\n ornamentsElement.textContent = '\\n';\r\n ornaments.forEach((ornament) => {\r\n if (SmoOrnament.xmlOrnaments[ornament.ornament]) {\r\n const sub = nn(ornamentsElement, SmoOrnament.xmlOrnaments[ornament.ornament], null, '');\r\n XmlHelpers.createAttribute(sub, 'placement', 'above');\r\n }\r\n });\r\n if (ornamentsElement.children.length) {\r\n notationsElement.appendChild(ornamentsElement);\r\n }\r\n }\r\n const jazzOrnaments = note.getJazzOrnaments();\r\n const articulations = note.articulations;\r\n if (jazzOrnaments.length || articulations.length) {\r\n const articulationsElement = noteElement.ownerDocument.createElement('articulations');\r\n jazzOrnaments.forEach((ornament) => {\r\n if (SmoOrnament.xmlJazz[ornament.ornament]) {\r\n nn(articulationsElement, SmoOrnament.xmlJazz[ornament.ornament], null, '');\r\n }\r\n });\r\n articulations.forEach((articulation) => {\r\n if (SmoArticulation.xmlArticulations[articulation.articulation]) {\r\n nn(articulationsElement, SmoArticulation.xmlArticulations[articulation.articulation], null, '');\r\n }\r\n });\r\n if (articulationsElement.children.length) {\r\n notationsElement.append(articulationsElement);\r\n }\r\n }\r\n if (notationsElement.children.length) {\r\n noteElement.appendChild(notationsElement);\r\n }\r\n // stupid musicxml requires beam to be laster.\r\n if (!isChord) {\r\n SmoToXml.lyric(noteElement, smoState);\r\n }\r\n }\r\n smoState.voiceTickIndex += 1;\r\n }\r\n /**\r\n * /score-partwise/measure/attributes/key\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static key(attributesElement: Element, measure: SmoMeasure, smoState: SmoState) {\r\n let fifths = 0;\r\n if (smoState.keySignature && measure.keySignature === smoState.keySignature) {\r\n return; // no key change\r\n }\r\n const flats = SmoMusic.getFlatsInKeySignature(measure.keySignature);\r\n const nn = XmlHelpers.createTextElementChild;\r\n if (flats > 0) {\r\n fifths = -1 * flats;\r\n } else {\r\n fifths = SmoMusic.getSharpsInKeySignature(measure.keySignature);\r\n }\r\n const keyElement = nn(attributesElement, 'key', null, '');\r\n nn(keyElement, 'fifths', { fifths }, 'fifths');\r\n nn(keyElement, 'mode', { mode: 'major' }, 'major');\r\n smoState.keySignature = measure.keySignature;\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/time\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static time(attributesElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const currentTs = (smoState.timeSignature as TimeSignature) ?? null;\r\n if (currentTs !== null && TimeSignature.equal(currentTs, measure.timeSignature)) {\r\n return;\r\n }\r\n smoState.timeSignature = measure.timeSignature;\r\n const time = { beats: measure.timeSignature.actualBeats, beatType: measure.timeSignature.beatDuration };\r\n const timeElement = nn(attributesElement, 'time', null, '');\r\n nn(timeElement, 'beats', time, 'beats');\r\n nn(timeElement, 'beat-type', time, 'beatType');\r\n smoState.timeSignature = measure.timeSignature;\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/clef\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static clef(attributesElement: Element, smoState: SmoState) { \r\n smoState.partStaves.forEach((staff, staffIx) => {\r\n const measure = staff.measures[smoState.measureIndex];\r\n let prevMeasure: SmoMeasure | null = null;\r\n let clefChange: Clef | null = null;\r\n if (smoState.measureIndex > 0) {\r\n prevMeasure = staff.measures[smoState.measureIndex - 1];\r\n }\r\n if (prevMeasure && prevMeasure.clef !== measure.clef) {\r\n clefChange = measure.clef;\r\n }\r\n // both clefs are defined in the first measure one time.\r\n if (smoState.measureIndex === 0 && smoState.staffPartIx === 0) {\r\n clefChange = measure.clef;\r\n }\r\n if (clefChange) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const xmlClef = SmoMusic.clefSigns[clefChange];\r\n const clefElement = nn(attributesElement, 'clef', null, '');\r\n nn(clefElement, 'sign', xmlClef.sign, 'sign');\r\n if (typeof(xmlClef.line) !== 'undefined') {\r\n nn(clefElement, 'line', xmlClef, 'line');\r\n }\r\n if (typeof(xmlClef.octave) !== 'undefined') {\r\n nn(clefElement, 'clef-octave-change', xmlClef, 'octave');\r\n }\r\n XmlHelpers.createAttribute(clefElement, 'number', (staffIx + 1).toString());\r\n }\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes\r\n * @param measureElement \r\n * @param smoState \r\n */\r\n static attributes(measureElement: Element, measure: SmoMeasure, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const attributesElement = measureElement.ownerDocument.createElement('attributes');\r\n if (smoState.divisions < 1) {\r\n nn(attributesElement, 'divisions', { divisions: 4096 }, 'divisions');\r\n smoState.divisions = 4096;\r\n }\r\n SmoToXml.key(attributesElement, measure, smoState);\r\n SmoToXml.time(attributesElement, smoState);\r\n // only call out number of staves in a part at the beginning of the part\r\n if (smoState.measureIndex === 0 && smoState.staffPartIx === 0) {\r\n SmoToXml.staves(attributesElement, smoState);\r\n }\r\n SmoToXml.clef(attributesElement, smoState);\r\n SmoToXml.transpose(attributesElement, smoState);\r\n if (attributesElement.children.length > 0) {\r\n // don't add an empty attributes element\r\n measureElement.appendChild(attributesElement);\r\n }\r\n }\r\n static staves(attributesElement: Element, smoState: SmoState) {\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const staffCount = staff.partInfo.stavesAfter > 0 ? 2 : 1;\r\n const nn = XmlHelpers.createTextElementChild;\r\n nn(attributesElement, 'staves', { staffCount: staffCount.toString() }, 'staffCount');\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/transpose\r\n * @param attributesElement\r\n * @param smoState \r\n * @returns \r\n */\r\n static transpose(attributesElement: Element, smoState: SmoState) {\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n if (measure.transposeIndex !== smoState.transposeOffset) {\r\n smoState.transposeOffset = measure.transposeIndex;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const xposeElement = nn(attributesElement, 'transpose', null, '');\r\n const offset = (measure.transposeIndex * -1).toString();;\r\n nn(xposeElement, 'chromatic', { offset: offset }, 'offset');\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoArticulation, SmoNoteModifierBase, SmoOrnament } from '../data/noteModifiers';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { Pitch, PitchLetter, createXmlAttributes, createXmlAttribute } from '../data/common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoBarline } from '../data/measureModifiers';\r\n\r\nexport interface XmlOrnamentData {\r\n ctor: string,\r\n params: Record\r\n}\r\nexport interface XmlSmoMap {\r\n xml: string, smo: string\r\n}\r\nexport interface XmlDurationAlteration {\r\n noteCount: number, noteDuration: number\r\n}\r\nexport interface XmlDuration {\r\n tickCount: number, duration: number, alteration: XmlDurationAlteration\r\n}\r\n/**\r\n * Store slur information when parsing xml\r\n */\r\nexport interface XmlSlurType {\r\n number: number, type: string, orientation: string, placement: string, controlX: number, controlY: number, selector: SmoSelector, yOffset: number\r\n}\r\n/**\r\n * Store tie information when parsing xml\r\n */\r\nexport interface XmlTieType {\r\n number: number, type: string, orientation: string, selector: SmoSelector, pitchIndex: number\r\n}\r\n/**\r\n * Store tuplet information when parsing xml\r\n */\r\nexport interface XmlTupletData {\r\n number: number, type: string\r\n}\r\nexport interface XmlEndingData {\r\n numbers: number[], type: string\r\n}\r\nexport type LyricSyllabic = 'begin' | 'end' | 'middle' | 'single';\r\n/**\r\n * Store lyric information when parsing xml\r\n */\r\nexport interface XmlLyricData {\r\n _text: string, verse: number | string, syllabic: LyricSyllabic\r\n}\r\n/**\r\n * Utilities for parsing and serialzing musicXML.\r\n * @category SmoToXml\r\n * */\r\nexport class XmlHelpers {\r\n /**\r\n * mxml note 'types', really s/b stem types.\r\n * For grace notes, we use the note type and not duration\r\n * to get the flag\r\n */\r\n static get noteTypesToSmoMap(): Record {\r\n return {\r\n 'breve': 8192 * 4,\r\n 'whole': 8192 * 2,\r\n 'half': 8192,\r\n 'quarter': 4096,\r\n 'eighth': 2048,\r\n '16th': 1024,\r\n '32nd': 512,\r\n '64th': 256,\r\n '128th': 128\r\n };\r\n }\r\n static readonly _ticksToNoteTypeMap: Record = smoSerialize.reverseMap(XmlHelpers.noteTypesToSmoMap) as Record;\r\n\r\n static get ticksToNoteTypeMap(): Record {\r\n return XmlHelpers._ticksToNoteTypeMap;\r\n }\r\n // ### closestStemType\r\n // smo infers the stem type from the duration, but other applications don't\r\n static closestStemType(ticks: number) {\r\n const nticks = SmoMusic.closestDurationTickLtEq(ticks);\r\n return XmlHelpers.ticksToNoteTypeMap[nticks];\r\n }\r\n static get beamStates(): Record {\r\n return {\r\n BEGIN: 1,\r\n END: 2,\r\n AUTO: 3\r\n };\r\n }\r\n static get ornamentXmlToSmoMap(): Record {\r\n return {\r\n staccato: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.staccato } },\r\n tenuto: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.tenuto } },\r\n marcato: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.marcato } },\r\n accent: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.accent } },\r\n doit: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.doitLong } },\r\n falloff: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.fall } },\r\n scoop: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.scoop } },\r\n 'delayed-turn': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turn, offset: SmoOrnament.offsets.after } },\r\n turn: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turn, offset: SmoOrnament.offsets.on } },\r\n 'inverted-turn': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turnInverted } },\r\n mordent: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordent } },\r\n 'inverted-mordent': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordentInverted } },\r\n shake: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordentInverted } },\r\n 'trill-mark': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.trill } },\r\n };\r\n }\r\n // ### createRootElement\r\n // Create score-partwise document with prelude\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=318086\r\n static createRootElement() {\r\n const doc = document.implementation.createDocument('', '', null);\r\n const rootElem = doc.createElement('score-partwise');\r\n const piElement = doc.createProcessingInstruction('xml', 'version=\"1.0\" encoding=\"UTF-8\"');\r\n rootElem.setAttribute('version', '3.1');\r\n doc.appendChild(rootElem);\r\n doc.insertBefore(piElement, rootElem);\r\n return doc;\r\n }\r\n // Parse an element whose child has a number in the textContent\r\n static getNumberFromElement(parent: Element, path: string, defaults: number): number {\r\n let rv = (typeof (defaults) === 'undefined' || defaults === null)\r\n ? 0 : defaults;\r\n const tval = XmlHelpers.getTextFromElement(parent, path, defaults);\r\n if (!tval) {\r\n return rv;\r\n }\r\n if (typeof (tval) === 'number') {\r\n return tval;\r\n }\r\n if (tval.indexOf('.')) {\r\n const tf = parseFloat(tval);\r\n rv = isNaN(tf) ? rv : tf;\r\n } else {\r\n const ff = parseInt(tval, 10);\r\n rv = isNaN(ff) ? rv : ff;\r\n }\r\n return rv;\r\n }\r\n // Parse an element whose child has a textContent\r\n static getTextFromElement(parent: Element, path: string, defaults: number | string | null): string {\r\n const rv = (typeof (defaults) === 'undefined' || defaults === null)\r\n ? 0 : defaults;\r\n const el = [...parent.getElementsByTagName(path)];\r\n if (!el.length) {\r\n return rv.toString();\r\n }\r\n return el[0].textContent as string;\r\n }\r\n static getNumberFromAttribute(node: Element, attribute: string, defaults: number) {\r\n const str = XmlHelpers.getTextFromAttribute(node, attribute, defaults.toString());\r\n const rv = parseInt(str, 10);\r\n if (isNaN(rv)) {\r\n return defaults;\r\n }\r\n return rv;\r\n }\r\n static getTextFromAttribute(node: Element, attribute: string, defaults: string): string {\r\n const rv = node.getAttribute(attribute);\r\n if (rv) {\r\n return rv;\r\n }\r\n return defaults;\r\n }\r\n // ### getChildrenFromPath\r\n // Like xpath, given ['foo', 'bar'] and parent element\r\n // 'moo' return any element /moo/foo/bar as an array of elements\r\n static getChildrenFromPath(parent: Element, pathAr: string[]): Element[] {\r\n let i = 0;\r\n let node = parent;\r\n const rv: Element[] = [];\r\n for (i = 0; i < pathAr.length; ++i) {\r\n const tag = pathAr[i];\r\n const nodes: Element[] = [...node.getElementsByTagName(tag)];\r\n if (nodes.length === 0) {\r\n return [];\r\n }\r\n if (i < pathAr.length - 1) {\r\n node = nodes[0];\r\n } else {\r\n nodes.forEach((nn: Element) => {\r\n rv.push(nn);\r\n });\r\n }\r\n }\r\n return rv;\r\n }\r\n static getStemType(noteElement: Element) {\r\n const tt = XmlHelpers.getTextFromElement(noteElement, 'stem', '');\r\n if (tt === 'up') {\r\n return SmoNote.flagStates.up;\r\n } else if (tt === 'down') {\r\n return SmoNote.flagStates.down;\r\n }\r\n return SmoNote.flagStates.auto;\r\n }\r\n static getEnding(barlineNode: Element): XmlEndingData | null {\r\n const endingNodes = [...barlineNode.getElementsByTagName('ending')];\r\n if (!endingNodes.length) {\r\n return null;\r\n }\r\n const attrs = XmlHelpers.nodeAttributes(endingNodes[0]);\r\n if (attrs.number && attrs.type) {\r\n return {\r\n numbers: attrs.number.split(',').map((x) => parseInt(x, 10)),\r\n type: attrs.type\r\n };\r\n }\r\n return null;\r\n }\r\n static getBarline(barlineNode: Element): number {\r\n const rptNode = [...barlineNode.getElementsByTagName('repeat')];\r\n if (rptNode.length) {\r\n const repeatattr = XmlHelpers.nodeAttributes(rptNode[0]);\r\n return repeatattr.direction === 'forward' ? SmoBarline.barlines.startRepeat : SmoBarline.barlines.endRepeat;\r\n }\r\n const styleText = XmlHelpers.getTextFromElement(barlineNode, 'bar-style', '');\r\n if (styleText.length) {\r\n const double = styleText.indexOf('-') >= 0;\r\n const heavy = styleText.indexOf('heavy') >= 0;\r\n const light = styleText.indexOf('light') >= 0;\r\n if (double && heavy && light) {\r\n return SmoBarline.barlines.endBar;\r\n }\r\n if (double) {\r\n return SmoBarline.barlines.doubleBar;\r\n }\r\n }\r\n return SmoBarline.barlines.singleBar;\r\n }\r\n \r\n // ### assignDefaults\r\n // Map SMO layout data from xml layout data (default node)\r\n static assignDefaults(node: Element, defObj: any, parameters: XmlSmoMap[]) {\r\n parameters.forEach((param) => {\r\n if (!isNaN(parseInt(defObj[param.smo], 10))) {\r\n const smoParam = param.smo;\r\n const xmlParam = param.xml;\r\n defObj[smoParam] = XmlHelpers.getNumberFromElement(node, xmlParam, defObj[smoParam]);\r\n }\r\n });\r\n }\r\n // ### nodeAttributes\r\n // turn the attributes of an element into a JS hash\r\n static nodeAttributes(node: Element): Record {\r\n const rv: Record = {};\r\n node.getAttributeNames().forEach((attr) => {\r\n const aval: string | null = node.getAttribute(attr);\r\n if (aval) {\r\n rv[attr] = aval;\r\n }\r\n });\r\n return rv;\r\n }\r\n // Some measures have staff ID, some don't.\r\n // convert xml 1 index to array 0 index\r\n static getStaffId(node: Element) {\r\n const staff = [...node.getElementsByTagName('staff')];\r\n if (staff.length && staff[0].textContent) {\r\n return parseInt(staff[0].textContent, 10) - 1;\r\n }\r\n return 0;\r\n }\r\n static noteBeamState(noteNode: Element) {\r\n const beamNodes = [...noteNode.getElementsByTagName('beam')];\r\n if (!beamNodes.length) {\r\n return XmlHelpers.beamStates.AUTO;\r\n }\r\n const beamText = beamNodes[0].textContent;\r\n if (beamText === 'begin') {\r\n return XmlHelpers.beamStates.BEGIN;\r\n } else if (beamText === 'end') {\r\n return XmlHelpers.beamStates.END;\r\n }\r\n return XmlHelpers.beamStates.AUTO;\r\n }\r\n // same with notes and voices. same convert\r\n static getVoiceId(node: Element) {\r\n const voice = [...node.getElementsByTagName('voice')];\r\n if (voice.length && voice[0].textContent) {\r\n return parseInt(voice[0].textContent, 10) - 1;\r\n }\r\n return 0;\r\n }\r\n static smoPitchFromNote(noteNode: Element, defaultPitch: Pitch): Pitch {\r\n const accidentals = ['bb', 'b', 'n', '#', '##'];\r\n const letter: PitchLetter = XmlHelpers.getTextFromElement(noteNode, 'step', defaultPitch.letter).toLowerCase() as PitchLetter;\r\n const octave = XmlHelpers.getNumberFromElement(noteNode, 'octave', defaultPitch.octave);\r\n const xaccidental = XmlHelpers.getNumberFromElement(noteNode, 'alter', 0);\r\n return { letter, accidental: accidentals[xaccidental + 2], octave };\r\n }\r\n static isGrace(noteNode: Element) {\r\n const path = XmlHelpers.getChildrenFromPath(noteNode, ['grace']);\r\n return path?.length > 0;\r\n }\r\n static isSystemBreak(measureNode: Element) {\r\n const printNodes = measureNode.getElementsByTagName('print');\r\n if (printNodes.length) {\r\n const attrs = XmlHelpers.nodeAttributes(printNodes[0]);\r\n if (typeof (attrs['new-system']) !== 'undefined') {\r\n return attrs['new-system'] === 'yes';\r\n }\r\n }\r\n return false;\r\n }\r\n // ### durationFromType\r\n // Get the SMO tick duration of a note, based on the XML type element (quarter, etc)\r\n static durationFromType(noteNode: Element, def: number): number {\r\n const typeNodes = [...noteNode.getElementsByTagName('type')];\r\n if (typeNodes.length) {\r\n const txt = typeNodes[0].textContent;\r\n if (txt && XmlHelpers.noteTypesToSmoMap[txt]) {\r\n return XmlHelpers.noteTypesToSmoMap[txt];\r\n }\r\n }\r\n return def;\r\n }\r\n // ### durationFromNode\r\n // the true duration value, used to handle forward/backward\r\n static durationFromNode(noteNode: Element, def: number) {\r\n const durationNodes = [...noteNode.getElementsByTagName('duration')];\r\n if (durationNodes.length && durationNodes[0].textContent) {\r\n const duration = parseInt(durationNodes[0].textContent, 10);\r\n return duration;\r\n }\r\n return def;\r\n }\r\n static ticksFromDuration(noteNode: Element, divisions: number, def: number): XmlDuration {\r\n const rv: XmlDuration = { tickCount: def, duration: def / divisions, alteration: { noteCount: 1, noteDuration: 1 } };\r\n const durationNodes = [...noteNode.getElementsByTagName('duration')];\r\n const timeAlteration = XmlHelpers.getTimeAlteration(noteNode);\r\n // different ways to declare note duration - from type is the graphical\r\n // type, SMO uses ticks for everything\r\n if (durationNodes.length && durationNodes[0].textContent) {\r\n rv.duration = parseInt(durationNodes[0].textContent, 10);\r\n rv.tickCount = 4096 * (rv.duration / divisions);\r\n } else {\r\n rv.tickCount = XmlHelpers.durationFromType(noteNode, def);\r\n rv.duration = (divisions / 4096) * rv.tickCount;\r\n }\r\n // If this is a tuplet, we adjust the note duration back to the graphical type\r\n // and SMO will create the tuplet after. We keep track of tuplet data though for beaming\r\n if (timeAlteration) {\r\n rv.tickCount = (rv.tickCount * timeAlteration.noteCount) / timeAlteration.noteDuration;\r\n rv.alteration = timeAlteration;\r\n }\r\n return rv;\r\n }\r\n \r\n static getTieData(noteNode: Element, selector: SmoSelector, pitchIndex: number): XmlTieType[] {\r\n const rv: XmlTieType[] = [];\r\n let number = 0;\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n const slurNodes = [...nNode.getElementsByTagName('tied')];\r\n slurNodes.forEach((slurNode) => {\r\n const orientation = XmlHelpers.getTextFromAttribute(slurNode, 'orientation', 'auto');\r\n const type = slurNode.getAttribute('type') as string;\r\n number = XmlHelpers.getNumberFromAttribute(slurNode, 'number', 1);\r\n rv.push({ number, type, orientation, selector, pitchIndex });\r\n });\r\n });\r\n return rv;\r\n }\r\n static getSlurData(noteNode: Element, selector: SmoSelector): XmlSlurType[] {\r\n const rv: XmlSlurType[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n const slurNodes = [...nNode.getElementsByTagName('slur')];\r\n slurNodes.forEach((slurNode) => {\r\n const number = parseInt(slurNode.getAttribute('number') as string, 10);\r\n const type = slurNode.getAttribute('type') as string;\r\n const orientation = XmlHelpers.getTextFromAttribute(slurNode, 'orienation', 'auto');\r\n const placement = XmlHelpers.getTextFromAttribute(slurNode, 'placement', 'auto');\r\n const controlX = XmlHelpers.getNumberFromAttribute(slurNode, 'bezier-x', 0);\r\n // Y coordinates are reversed from music XML to SVG, hence the -1\r\n const controlY = XmlHelpers.getNumberFromAttribute(slurNode, 'bezier-y', 15) * -1;\r\n const slurInfo = { number, type, orientation, placement, controlX, controlY, selector, invert: false, yOffset: 0 };\r\n rv.push(slurInfo);\r\n });\r\n });\r\n return rv;\r\n }\r\n static getCrescendoData(directionElement: Element) {\r\n let rv = {};\r\n const nNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'wedge']);\r\n nNodes.forEach((nNode) => {\r\n rv = { type: nNode.getAttribute('type') };\r\n });\r\n return rv;\r\n }\r\n static getTupletData(noteNode: Element): XmlTupletData[] {\r\n const rv: XmlTupletData[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n const slurNodes = [...nNode.getElementsByTagName('tuplet')];\r\n slurNodes.forEach((slurNode) => {\r\n const number = parseInt(slurNode.getAttribute('number') as string, 10);\r\n const type = slurNode.getAttribute('type') as string;\r\n rv.push({ number, type });\r\n });\r\n });\r\n return rv;\r\n }\r\n static articulationsAndOrnaments(noteNode: Element): SmoNoteModifierBase[] {\r\n const rv: SmoNoteModifierBase[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n ['articulations', 'ornaments'].forEach((typ) => {\r\n const articulations = [...nNode.getElementsByTagName(typ)];\r\n articulations.forEach((articulation) => {\r\n Object.keys(XmlHelpers.ornamentXmlToSmoMap).forEach((key) => {\r\n if (articulation.getElementsByTagName(key).length) {\r\n const ctor = eval('globalThis.Smo.' + XmlHelpers.ornamentXmlToSmoMap[key].ctor);\r\n rv.push(new ctor(XmlHelpers.ornamentXmlToSmoMap[key].params));\r\n }\r\n });\r\n });\r\n });\r\n });\r\n return rv;\r\n }\r\n static lyrics(noteNode: Element): XmlLyricData[] {\r\n const rv: XmlLyricData[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('lyric')];\r\n nNodes.forEach((nNode) => {\r\n let verse = nNode.getAttribute('number');\r\n const text = XmlHelpers.getTextFromElement(nNode, 'text', '_');\r\n const name = nNode.getAttribute('name') as string;\r\n const syllabic = XmlHelpers.getTextFromElement(nNode, 'syllabic', 'end') as LyricSyllabic;\r\n // Per xml spec, verse can be specified by a string (name), as in 'chorus'\r\n if (!verse) {\r\n verse = name;\r\n }\r\n const obj: XmlLyricData = { _text: text, verse, syllabic };\r\n rv.push(obj);\r\n });\r\n return rv;\r\n }\r\n\r\n static getTimeAlteration(noteNode: Element): XmlDurationAlteration | null {\r\n const timeNodes = XmlHelpers.getChildrenFromPath(noteNode, ['time-modification']);\r\n if (timeNodes.length) {\r\n return {\r\n noteCount: XmlHelpers.getNumberFromElement(timeNodes[0], 'actual-notes', 1),\r\n noteDuration: XmlHelpers.getNumberFromElement(timeNodes[0], 'normal-notes', 1)\r\n };\r\n }\r\n return null;\r\n }\r\n // ### createTextElementChild\r\n // In: ../parent\r\n // Out: ../parent/elementName/obj[field]\r\n // returns elementName element. If obj is null, just creates and returns child\r\n // if obj is a string, it uses it as the text value\r\n static createTextElementChild(parentElement: Element, elementName: string, obj: any, field: string): Element {\r\n const el = parentElement.ownerDocument.createElement(elementName);\r\n if (obj) {\r\n if (typeof (obj) === 'string') {\r\n el.textContent = obj;\r\n } else {\r\n el.textContent = obj[field];\r\n }\r\n }\r\n parentElement.appendChild(el);\r\n return el;\r\n }\r\n static createAttributes(element: Element, obj: any) {\r\n createXmlAttributes(element, obj);\r\n }\r\n static createAttribute(element: Element, name: string, value: any) {\r\n createXmlAttribute(element, name, value);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { XmlHelpers, XmlLyricData, XmlDurationAlteration, XmlTieType, XmlSlurType, XmlTupletData } from './xmlHelpers';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoSystemGroup, SmoFormattingManager } from '../data/scoreModifiers';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoTie, SmoStaffHairpin, SmoSlur, SmoSlurParams, SmoInstrument, SmoInstrumentParams, TieLine } from '../data/staffModifiers';\r\nimport { SmoBarline, SmoMeasureModifierBase, SmoRehearsalMark, SmoTempoText } from '../data/measureModifiers';\r\nimport { SmoPartInfo } from '../data/partInfo';\r\nimport { SmoMeasure } from '../data/measure';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoLyric, SmoDynamicText, SmoGraceNote } from '../data/noteModifiers';\r\nimport { SmoTuplet } from '../data/tuplet';\r\nimport { Clef } from '../data/common';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoSelector, SmoSelection } from '../xform/selections';\r\n\r\nexport interface XmlClefInfo {\r\n clef: string, staffId: number\r\n}\r\nexport interface XmlVoiceInfo {\r\n notes: SmoNote[],\r\n ticksUsed: number\r\n}\r\nexport interface XmlStaffInfo {\r\n clefInfo: XmlClefInfo,\r\n measure: SmoMeasure | null,\r\n voices: Record\r\n}\r\nexport interface XmlBeamGroupInfo {\r\n ticks: number, notes: number\r\n}\r\nexport interface XmlSystemInfo {\r\n startSelector: SmoSelector, endSelector: SmoSelector, leftConnector: number\r\n}\r\nexport interface XmlStaffGroupInfo {\r\n start: number, length: number\r\n}\r\n/**\r\n * Wedge is a hairpin/cresc.\r\n */\r\nexport interface XmlWedgeInfo {\r\n type: string\r\n}\r\nexport interface XmlWedgeState {\r\n type: string, start: number\r\n}\r\nexport interface XmlHairpinInfo {\r\n type: string, start: number, end: number\r\n}\r\nexport interface XmlDynamicInfo {\r\n dynamic: string, offset: number\r\n}\r\nexport interface XmlCompletedTies {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n fromPitch: number,\r\n toPitch: number\r\n}\r\nexport interface XmlCompletedTuplet {\r\n tuplet: SmoTuplet, staffId: number, voiceId: number\r\n}\r\nexport interface XmlTupletState {\r\n start: SmoSelector,\r\n end: SmoSelector\r\n}\r\nexport interface XmlEnding {\r\n start: number,\r\n end: number,\r\n number: number\r\n}\r\nexport interface XmlPartGroup {\r\n partNum: number,\r\n group: SmoSystemGroup,\r\n parts: number[]\r\n}\r\n/**\r\n * Keep state of musical objects while parsing music xml\r\n * @category SmoToXml\r\n * */\r\nexport class XmlState {\r\n static get defaults() {\r\n return {\r\n divisions: 4096, tempo: new SmoTempoText(SmoTempoText.defaults), timeSignature: '4/4', keySignature: 'c',\r\n clefInfo: [], staffGroups: [], smoStaves: []\r\n };\r\n }\r\n clefInfo: XmlClefInfo[] = [];\r\n systems: XmlSystemInfo[] = [];\r\n staffGroups: XmlStaffGroupInfo[] = [];\r\n smoStaves: SmoSystemStaff[] = [];\r\n slurs: Record = {};\r\n wedges: XmlWedgeState = {} as XmlWedgeState;\r\n hairpins: XmlHairpinInfo[] = [];\r\n instrument: SmoInstrumentParams = SmoInstrument.defaults;\r\n instrumentMap: Record = {};\r\n globalCursor = 0;\r\n staffVoiceHash: Record = {};\r\n endingMap: Record = {};\r\n startRepeatMap: Record = {};\r\n endRepeatMap: Record = {};\r\n startBarline: number = SmoBarline.barlines.singleBar;\r\n endBarline: number = SmoBarline.barlines.singleBar;\r\n measureIndex = -1;\r\n completedSlurs: SmoSlurParams[] = [];\r\n completedTies: XmlTieType[] = [];\r\n verseMap: Record = {};\r\n measureNumber: number = 0;\r\n formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n tuplets: Record = {};\r\n tickCursor: number = 0;\r\n tempo: SmoTempoText = new SmoTempoText(SmoTempoText.defaults);\r\n staffArray: XmlStaffInfo[] = [];\r\n staffIndex: number = 0;\r\n graceNotes: SmoGraceNote[] = [];\r\n currentDuration: number = 0;\r\n beamGroups: Record = {};\r\n dynamics: XmlDynamicInfo[] = [];\r\n previousNote: SmoNote = new SmoNote(SmoNote.defaults);\r\n completedTuplets: XmlCompletedTuplet[] = [];\r\n newTitle: boolean = false;\r\n divisions: number = 4096;\r\n keySignature: string = 'c';\r\n timeSignature: string = '4/4';\r\n voiceIndex: number = 0;\r\n pixelsPerTenth: number = 0.4;\r\n musicFontSize: number = 16;\r\n partId: string = '';\r\n rehearsalMark = '';\r\n rehearsalMarks: Record = {};\r\n parts: Record = {}; \r\n openPartGroup: XmlPartGroup | null = null;\r\n // Initialize things that persist throughout a staff\r\n // likc hairpins and slurs\r\n initializeForPart() {\r\n this.slurs = {};\r\n this.wedges = {} as XmlWedgeState;\r\n this.hairpins = [];\r\n this.globalCursor = 0;\r\n this.staffVoiceHash = {};\r\n this.measureIndex = -1;\r\n this.completedSlurs = [];\r\n this.verseMap = {};\r\n this.instrument.keyOffset = 0;\r\n this.instrumentMap = {};\r\n this.partId = '';\r\n this.clefInfo = [];\r\n this.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n }\r\n // ### initializeForMeasure\r\n // reset state for a new measure: beam groups, tuplets\r\n // etc. that don't cross measure boundaries\r\n initializeForMeasure(measureElement: Element) {\r\n const oldMeasure = this.measureNumber;\r\n this.measureNumber =\r\n parseInt(measureElement.getAttribute('number') as string, 10) - 1;\r\n if (isNaN(this.measureNumber)) {\r\n this.measureNumber = oldMeasure + 1;\r\n }\r\n this.tuplets = {};\r\n this.tickCursor = 0;\r\n this.tempo = SmoMeasureModifierBase.deserialize(this.tempo.serialize());\r\n this.tempo.display = false;\r\n this.staffArray = [];\r\n this.graceNotes = [];\r\n this.currentDuration = 0;\r\n this.beamGroups = {};\r\n this.completedTuplets = [];\r\n this.dynamics = [];\r\n this.startBarline = SmoBarline.barlines.singleBar;\r\n this.endBarline = SmoBarline.barlines.singleBar;\r\n this.previousNote = new SmoNote(SmoNote.defaults);\r\n this.measureIndex += 1;\r\n this.rehearsalMark = '';\r\n }\r\n // ### initializeStaff\r\n // voices are not sequential, seem to have artitrary numbers and\r\n // persist per part, so we treat them as a hash.\r\n // staff IDs persist per part but are sequential.\r\n initializeStaff(staffIndex: number, voiceIndex: number) {\r\n // If no clef is specified, default to treble\r\n if (typeof (this.staffArray[staffIndex]) === 'undefined') {\r\n this.staffArray.push({ clefInfo: { clef: 'treble', staffId: this.staffIndex }, measure: null, voices: {} });\r\n }\r\n if (typeof (this.staffArray[staffIndex].voices[voiceIndex]) === 'undefined') {\r\n this.staffArray[staffIndex].voices[voiceIndex] = { notes: [], ticksUsed: 0 };\r\n // keep track of 0-indexed voice for slurs and other modifiers\r\n if (!this.staffVoiceHash[staffIndex]) {\r\n this.staffVoiceHash[staffIndex] = [];\r\n }\r\n if (this.staffVoiceHash[staffIndex].indexOf(voiceIndex) < 0) {\r\n this.staffVoiceHash[staffIndex].push(voiceIndex);\r\n }\r\n // The smo 0-indexed voice index, used in selectors\r\n this.beamGroups[voiceIndex] = null;\r\n }\r\n }\r\n // ### updateStaffGroups\r\n // once everything is parsed, figure out how to group the staves\r\n updateStaffGroups() {\r\n this.systems = [];\r\n this.staffGroups.forEach((staffGroup) => {\r\n const len = this.smoStaves[staffGroup.start].measures.length;\r\n const startSelector = SmoSelector.default;\r\n startSelector.staff = staffGroup.start;\r\n startSelector.measure = 0;\r\n const endSelector = SmoSelector.default;\r\n endSelector.staff = staffGroup.start + (staffGroup.length - 1);\r\n endSelector.measure = len;\r\n const grpParams = SmoSystemGroup.defaults;\r\n grpParams.startSelector = startSelector;\r\n grpParams.endSelector = endSelector;\r\n grpParams.leftConnector = SmoSystemGroup.connectorTypes.brace;\r\n this.systems.push(\r\n new SmoSystemGroup(grpParams)\r\n );\r\n });\r\n }\r\n addLyric(note: SmoNote, lyricData: XmlLyricData) {\r\n if (typeof (this.verseMap[lyricData.verse]) === 'undefined') {\r\n const keys = Object.keys(this.verseMap);\r\n this.verseMap[lyricData.verse] = keys.length;\r\n }\r\n lyricData.verse = this.verseMap[lyricData.verse];\r\n const params = SmoLyric.defaults;\r\n params.text = lyricData._text;\r\n params.verse = lyricData.verse;\r\n if (lyricData.syllabic === 'begin' || lyricData.syllabic === 'middle') {\r\n params.text += '-';\r\n }\r\n const lyric = new SmoLyric(params);\r\n note.addLyric(lyric);\r\n }\r\n /**\r\n * process a wedge aka hairpin dynamic\r\n * @param wedgeInfo \r\n */\r\n processWedge(wedgeInfo: XmlWedgeInfo) {\r\n if (wedgeInfo.type) {\r\n // If we already know about this wedge, it must have been\r\n // started, so complete it\r\n if (this.wedges.type) {\r\n this.hairpins.push({\r\n type: this.wedges.type,\r\n start: this.wedges.start,\r\n end: this.tickCursor + this.globalCursor\r\n });\r\n this.wedges = {} as XmlWedgeState;\r\n } else {\r\n this.wedges.type = wedgeInfo.type;\r\n this.wedges.start = this.tickCursor + this.globalCursor;\r\n }\r\n }\r\n }\r\n // ### backtrackHairpins\r\n // For the measure just parsed, find the correct tick for the\r\n // beginning and end of hairpins, if a hairpin stop directive\r\n // was received. These are not associated with a staff or voice, so\r\n // we use the first one in the measure element for both\r\n backtrackHairpins(smoStaff: SmoSystemStaff, staffId: number) {\r\n this.hairpins.forEach((hairpin) => {\r\n let hpMeasureIndex = this.measureIndex;\r\n let hpMeasure = smoStaff.measures[hpMeasureIndex];\r\n let startTick = hpMeasure.voices[0].notes.length - 1;\r\n let hpTickCount = this.globalCursor; // All ticks read so far\r\n const endSelector = {\r\n staff: staffId - 1, measure: hpMeasureIndex, voice: 0,\r\n tick: -1, pitches: []\r\n };\r\n while (hpMeasureIndex >= 0 && hpTickCount > hairpin.start) {\r\n if (endSelector.tick < 0 && hpTickCount <= hairpin.end) {\r\n endSelector.tick = startTick;\r\n }\r\n hpTickCount -= hpMeasure.voices[0].notes[startTick].ticks.numerator;\r\n if (hpTickCount > hairpin.start) {\r\n startTick -= 1;\r\n if (startTick < 0) {\r\n hpMeasureIndex -= 1;\r\n hpMeasure = smoStaff.measures[hpMeasureIndex];\r\n startTick = hpMeasure.voices[0].notes.length - 1;\r\n }\r\n }\r\n }\r\n\r\n const params = SmoStaffHairpin.defaults;\r\n params.startSelector = {\r\n staff: staffId - 1, measure: hpMeasureIndex, voice: 0, tick: startTick, pitches: []\r\n };\r\n params.endSelector = endSelector;\r\n params.hairpinType = hairpin.type === 'crescendo' ? SmoStaffHairpin.types.CRESCENDO : SmoStaffHairpin.types.DECRESCENDO;\r\n const smoHp = new SmoStaffHairpin(params);\r\n smoStaff.modifiers.push(smoHp);\r\n });\r\n this.hairpins = [];\r\n }\r\n\r\n // ### updateDynamics\r\n // Based on note just parsed, put the dynamics on the closest\r\n // note, based on the offset of dynamic\r\n updateDynamics() {\r\n const smoNote = this.previousNote;\r\n const tickCursor = this.tickCursor;\r\n const newArray: XmlDynamicInfo[] = [];\r\n this.dynamics.forEach((dynamic) => {\r\n if (tickCursor >= dynamic.offset) {\r\n const modParams = SmoDynamicText.defaults;\r\n modParams.text = dynamic.dynamic;\r\n // TODO: change the smonote name of this interface\r\n smoNote.addDynamic(new SmoDynamicText(modParams));\r\n } else {\r\n newArray.push(dynamic);\r\n }\r\n });\r\n this.dynamics = newArray;\r\n }\r\n // For the given voice, beam the notes according to the\r\n // note beam length\r\n backtrackBeamGroup(voice: XmlVoiceInfo, beamGroup: XmlBeamGroupInfo) {\r\n let i = 0;\r\n for (i = 0; i < beamGroup.notes; ++i) {\r\n const note = voice.notes[voice.notes.length - (i + 1)];\r\n if (!note) {\r\n console.warn('no note for beam group');\r\n return;\r\n }\r\n note.endBeam = i === 0;\r\n note.beamBeats = beamGroup.ticks;\r\n }\r\n }\r\n // ### updateBeamState\r\n // Keep track of beam instructions found while parsing note element\r\n // includes time alteration from tuplets\r\n updateBeamState(beamState: number, alteration: XmlDurationAlteration, voice: XmlVoiceInfo, voiceIndex: number) {\r\n const note = voice.notes[voice.notes.length - 1];\r\n if (beamState === XmlHelpers.beamStates.BEGIN) {\r\n this.beamGroups[voiceIndex] = {\r\n ticks: (note.tickCount * alteration.noteCount) / alteration.noteDuration,\r\n notes: 1\r\n };\r\n } else if (this.beamGroups[voiceIndex]) {\r\n (this.beamGroups[voiceIndex] as XmlBeamGroupInfo).ticks += note.tickCount;\r\n (this.beamGroups[voiceIndex] as XmlBeamGroupInfo).notes += 1;\r\n if (beamState === XmlHelpers.beamStates.END) {\r\n this.backtrackBeamGroup(voice, this.beamGroups[voiceIndex] as XmlBeamGroupInfo);\r\n this.beamGroups[voiceIndex] = null;\r\n }\r\n }\r\n }\r\n updateTieStates(tieInfos: XmlTieType[]) {\r\n tieInfos.forEach((tieInfo) => {\r\n // tieInfo = { number, type, orientation, selector, pitchIndex }\r\n if (tieInfo.type === 'start') {\r\n this.completedTies.push(tieInfo);\r\n }\r\n });\r\n }\r\n updateEndings(barlineNode: Element) {\r\n const findStartEnding = (endingNumber: number, ix: number): XmlEnding | null | undefined => {\r\n const endingIx = Object.keys(this.endingMap).map((xx) => parseInt(xx, 10));\r\n let gt = -1;\r\n let rv: XmlEnding | null = null;\r\n endingIx.forEach((ee) => {\r\n if (ee > gt && ee <= ix) {\r\n const endings = this.endingMap[ee];\r\n const txt = endings.find((xx: XmlEnding) => xx.number === endingNumber);\r\n if (txt) {\r\n gt = ee;\r\n rv = txt;\r\n }\r\n if (endings.findIndex((xx: XmlEnding) => xx.number === endingNumber) >= 0) {\r\n gt = ee;\r\n }\r\n }\r\n });\r\n if (gt >= 0) {\r\n return rv;\r\n } else {\r\n return null;\r\n }\r\n };\r\n const ending = XmlHelpers.getEnding(barlineNode);\r\n if (ending) {\r\n if (ending.type === 'start') {\r\n const numbers = ending.numbers;\r\n numbers.forEach((nn) => {\r\n const endings: XmlEnding[] | undefined = this.endingMap[this.measureIndex];\r\n if (!endings) {\r\n this.endingMap[this.measureIndex] = [];\r\n }\r\n const inst = this.endingMap[this.measureIndex].find((ee) => ee.number === nn);\r\n if (!inst) {\r\n this.endingMap[this.measureIndex].push({\r\n start: this.measureIndex,\r\n end: -1,\r\n number: nn\r\n });\r\n }\r\n });\r\n } else {\r\n ending.numbers.forEach((nn) => {\r\n const inst = findStartEnding(nn, this.measureIndex);\r\n if (!inst) {\r\n console.warn('bad ending ' + nn + ' at ' + this.measureIndex);\r\n } else {\r\n inst.end = this.measureIndex;\r\n }\r\n });\r\n }\r\n }\r\n const barline = XmlHelpers.getBarline(barlineNode);\r\n if (barline === SmoBarline.barlines.startRepeat) {\r\n this.startBarline = barline;\r\n } else {\r\n this.endBarline = barline;\r\n }\r\n }\r\n\r\n /**\r\n * While parsing a measure,\r\n * on a slur element, either complete a started\r\n * slur or start a new one.\r\n * @param slurInfos \r\n */\r\n updateSlurStates(slurInfos: XmlSlurType[]) {\r\n const clef: Clef = this.staffArray[this.staffIndex].clefInfo.clef as Clef;\r\n const note = this.previousNote;\r\n const getForcedSlurDirection = (smoParams: SmoSlurParams, xmlStart: XmlSlurType, xmlEnd: XmlSlurType | null) => {\r\n // If the slur direction is specified, otherwise use autor.\r\n if (xmlStart.placement === 'above' || xmlEnd?.placement === 'above') {\r\n smoParams.position_end = SmoSlur.positions.ABOVE;\r\n smoParams.position = SmoSlur.positions.ABOVE;\r\n if (xmlStart.orientation === 'over') {\r\n smoParams.orientation = SmoSlur.orientations.DOWN;\r\n } else if (xmlStart.orientation === 'under') {\r\n smoParams.orientation = SmoSlur.orientations.UP;\r\n }\r\n } else if (xmlStart.placement === 'below' || xmlEnd?.placement === 'below') {\r\n smoParams.position_end = SmoSlur.positions.BELOW;\r\n smoParams.position = SmoSlur.positions.BELOW;\r\n if (xmlStart.orientation === 'over') {\r\n smoParams.orientation = SmoSlur.orientations.DOWN;\r\n } else if (xmlStart.orientation === 'under') {\r\n smoParams.orientation = SmoSlur.orientations.UP;\r\n }\r\n }\r\n };\r\n slurInfos.forEach((slurInfo) => {\r\n // slurInfo = { number, type, selector }\r\n if (slurInfo.type === 'start') {\r\n const slurParams = SmoSlur.defaults;\r\n // if start and stop come out of order\r\n if (this.slurs[slurInfo.number] && (this.slurs[slurInfo.number] as XmlSlurType).type === 'stop') {\r\n slurParams.endSelector = JSON.parse(JSON.stringify((this.slurs[slurInfo.number] as XmlSlurType).selector));\r\n slurParams.startSelector = slurInfo.selector;\r\n slurParams.cp1x = slurInfo.controlX;\r\n slurParams.cp1y = slurInfo.controlY;\r\n const slurType = this.slurs[slurInfo.number];\r\n getForcedSlurDirection(slurParams, slurInfo, slurType);\r\n this.completedSlurs.push(slurParams);\r\n this.slurs[slurInfo.number] = null;\r\n } else {\r\n // We no longer try to pick the slur direction until the score is complete.\r\n this.slurs[slurInfo.number] = JSON.parse(JSON.stringify(slurInfo));\r\n }\r\n } else if (slurInfo.type === 'stop') {\r\n if (this.slurs[slurInfo.number] && (this.slurs[slurInfo.number] as XmlSlurType).type === 'start') {\r\n const slurData = this.slurs[slurInfo.number] as XmlSlurType;\r\n const slurParams = SmoSlur.defaults;\r\n slurParams.startSelector = JSON.parse(JSON.stringify((this.slurs[slurInfo.number] as XmlSlurType).selector));\r\n slurParams.endSelector = slurInfo.selector;\r\n slurParams.cp2x = slurInfo.controlX;\r\n slurParams.cp2y = slurInfo.controlY;\r\n slurParams.yOffset = slurData.yOffset;\r\n const slurType = this.slurs[slurInfo.number];\r\n getForcedSlurDirection(slurParams, slurInfo, slurType);\r\n // console.log('complete slur ' + slurInfo.number + JSON.stringify(slurParams, null, ' '));\r\n this.completedSlurs.push(slurParams);\r\n this.slurs[slurInfo.number] = null;\r\n } else {\r\n this.slurs[slurInfo.number] = JSON.parse(JSON.stringify(slurInfo));\r\n }\r\n }\r\n });\r\n }\r\n assignRehearsalMarks() {\r\n Object.keys(this.rehearsalMarks).forEach((rm) => {\r\n const measureIx = parseInt(rm, 10);\r\n this.smoStaves.forEach((staff) => {\r\n const mark = new SmoRehearsalMark(SmoRehearsalMark.defaults);\r\n staff.addRehearsalMark(measureIx, mark);\r\n });\r\n });\r\n }\r\n /**\r\n * After reading in a measure, update any completed slurs and make them\r\n * into SmoSlur and add them to the SmoSystemGroup objects.\r\n * staffIndexOffset is the offset from the xml staffId and the score staff Id\r\n * (i.e. the staves that have already been parsed in other parts)\r\n */\r\n completeSlurs() {\r\n this.completedSlurs.forEach((slur) => { \r\n const smoSlur = new SmoSlur(slur);\r\n this.smoStaves[slur.startSelector.staff].addStaffModifier(smoSlur);\r\n });\r\n }\r\n /**\r\n * Go through saved start ties, try to find the endpoint of the tie. Ties in music xml\r\n * are a little ambiguous, we assume we are tying to the same pitch\r\n * @param score \r\n */\r\n completeTies(score: SmoScore) {\r\n this.completedTies.forEach((tieInfo) => {\r\n const startSelection: SmoSelection | null = SmoSelection.noteFromSelector(score, tieInfo.selector);\r\n if (startSelection && startSelection.note) {\r\n const startNote = startSelection.note;\r\n const endSelection = SmoSelection.nextNoteSelectionFromSelector(score, startSelection.selector);\r\n const endNote = endSelection?.note;\r\n const pitches: TieLine[] = [];\r\n if (endSelection && endNote) {\r\n startNote.pitches.forEach((spitch, ix) => {\r\n endNote.pitches.forEach((epitch, jx) => {\r\n if (SmoMusic.smoPitchToInt(spitch) === SmoMusic.smoPitchToInt(epitch)) {\r\n pitches.push({ from: ix, to: jx });\r\n }\r\n });\r\n });\r\n }\r\n if (pitches.length && endSelection) {\r\n const params = SmoTie.defaults;\r\n params.startSelector = startSelection.selector;\r\n params.endSelector = endSelection.selector;\r\n params.lines = pitches;\r\n const smoTie = new SmoTie(params);\r\n score.staves[smoTie.startSelector.staff].addStaffModifier(smoTie);\r\n }\r\n }\r\n });\r\n }\r\n // ### backtrackTuplets\r\n // If we received a tuplet end, go back through the voice\r\n // and construct the SmoTuplet.\r\n backtrackTuplets(voice: XmlVoiceInfo, tupletNumber: number, staffId: number, voiceId: number) {\r\n const tupletState = this.tuplets[tupletNumber];\r\n let i = tupletState.start.tick;\r\n const notes = [];\r\n const durationMap = [];\r\n while (i < voice.notes.length) {\r\n const note = voice.notes[i];\r\n notes.push(note);\r\n if (i === tupletState.start.tick) {\r\n durationMap.push(1.0);\r\n } else {\r\n const prev = voice.notes[i - 1];\r\n durationMap.push(note.ticks.numerator / prev.ticks.numerator);\r\n }\r\n i += 1;\r\n }\r\n const tp = SmoTuplet.defaults;\r\n tp.notes = notes;\r\n tp.durationMap = durationMap;\r\n tp.voice = voiceId;\r\n const tuplet = new SmoTuplet(tp);\r\n // Store the tuplet with the staff ID and voice so we\r\n // can add it to the right measure when it's created.\r\n this.completedTuplets.push({ tuplet, staffId, voiceId });\r\n }\r\n // ### updateTupletStates\r\n // react to a tuplet start or stop directive\r\n updateTupletStates(tupletInfos: XmlTupletData[], voice: XmlVoiceInfo, staffIndex: number, voiceIndex: number) {\r\n const tick = voice.notes.length - 1;\r\n tupletInfos.forEach((tupletInfo) => {\r\n if (tupletInfo.type === 'start') {\r\n this.tuplets[tupletInfo.number] = {\r\n start: { staff: staffIndex, measure: this.measureNumber, voice: voiceIndex, tick, pitches: [] },\r\n end: SmoSelector.default\r\n };\r\n } else if (tupletInfo.type === 'stop') {\r\n this.tuplets[tupletInfo.number].end = {\r\n staff: staffIndex, measure: this.measureNumber, voice: voiceIndex, tick, pitches: []\r\n };\r\n this.backtrackTuplets(voice, tupletInfo.number, staffIndex, voiceIndex);\r\n }\r\n });\r\n }\r\n addTupletsToMeasure(smoMeasure: SmoMeasure, staffId: number, voiceId: number) {\r\n const completed: XmlCompletedTuplet[] = [];\r\n this.completedTuplets.forEach((tuplet) => {\r\n if (tuplet.voiceId === voiceId && tuplet.staffId === staffId) {\r\n smoMeasure.tuplets.push(tuplet.tuplet);\r\n } else {\r\n completed.push(tuplet);\r\n }\r\n });\r\n this.completedTuplets = completed;\r\n }\r\n getSystems(): SmoSystemGroup[] {\r\n const rv: SmoSystemGroup[] = [];\r\n this.systems.forEach((system) => {\r\n const params = SmoSystemGroup.defaults;\r\n params.startSelector = system.startSelector;\r\n params.endSelector = system.endSelector;\r\n params.leftConnector = system.leftConnector;\r\n rv.push(new SmoSystemGroup(params));\r\n });\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Logic to convert music XML (finale) to Smo internal format\r\n * @module XmlToSmo\r\n */\r\nimport { XmlHelpers } from './xmlHelpers';\r\nimport { XmlVoiceInfo, XmlState, XmlWedgeInfo } from './xmlState';\r\nimport { SmoLayoutManager, SmoPageLayout, SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SmoTextGroup } from '../data/scoreText';\r\nimport { SmoTempoText, SmoMeasureFormat, SmoMeasureModifierBase, SmoVolta, SmoBarline } from '../data/measureModifiers';\r\nimport { SmoScore, isEngravingFont } from '../data/score';\r\nimport { SmoMeasure, SmoMeasureParams } from '../data/measure';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoGraceNote, SmoOrnament, SmoArticulation } from '../data/noteModifiers';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoNote, SmoNoteParams } from '../data/note';\r\nimport { Pitch, PitchKey, Clef } from '../data/common';\r\nimport { SmoOperation } from '../xform/operations';\r\nimport { SmoInstrument, SmoSlur, SmoTie, TieLine } from '../data/staffModifiers';\r\nimport { SmoPartInfo } from '../data/partInfo';\r\n\r\n/**\r\n * A class that takes a music XML file and outputs a {@link SmoScore}\r\n * @category SmoToXml\r\n */\r\nexport class XmlToSmo {\r\n static get mmPerPixel() {\r\n return 0.264583;\r\n }\r\n /**\r\n * Vex renders everything as if the font size were 39\r\n */\r\n static get vexFontSize() {\r\n return 39;\r\n }\r\n static get customProportionDefault(): number {\r\n return SmoScore.defaults.layoutManager?.getGlobalLayout().proportionality ?? 0;\r\n }\r\n static get pageLayoutMap() {\r\n return [\r\n { xml: 'page-height', smo: 'pageHeight' },\r\n { xml: 'page-width', smo: 'pageWidth' }\r\n ];\r\n }\r\n static get pageMarginMap() {\r\n return [\r\n { xml: 'left-margin', smo: 'leftMargin' },\r\n { xml: 'right-margin', smo: 'rightMargin' },\r\n { xml: 'top-margin', smo: 'topMargin' },\r\n { xml: 'bottom-margin', smo: 'bottomMargin' }\r\n ];\r\n }\r\n static get scoreInfoFields() {\r\n return ['title', 'subTitle', 'composer', 'copyright'];\r\n }\r\n /**\r\n * Convert music XML file from parsed xml to a {@link SmoScore}\r\n * @param xmlDoc \r\n * @returns\r\n */\r\n static convert(xmlDoc: Document): SmoScore {\r\n try {\r\n const scoreRoots = [...xmlDoc.getElementsByTagName('score-partwise')];\r\n if (!scoreRoots.length) {\r\n // no score node\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n\r\n const scoreRoot = scoreRoots[0];\r\n const rv: SmoScore = new SmoScore(SmoScore.defaults);\r\n rv.staves = [];\r\n const layoutDefaults = rv.layoutManager as SmoLayoutManager;\r\n // if no scale given in score, default to something small.\r\n layoutDefaults.globalLayout.svgScale = 0.5;\r\n layoutDefaults.globalLayout.zoomScale = 1.0;\r\n const xmlState = new XmlState();\r\n xmlState.newTitle = false;\r\n rv.scoreInfo.name = 'Imported Smoosic';\r\n XmlToSmo.scoreInfoFields.forEach((field) => {\r\n (rv.scoreInfo as any)[field] = '';\r\n });\r\n const childNodes = [...scoreRoot.children];\r\n childNodes.forEach((scoreElement) => {\r\n if (scoreElement.tagName === 'work') {\r\n const scoreNameNode = [...scoreElement.getElementsByTagName('work-title')];\r\n if (scoreNameNode.length && scoreNameNode[0].textContent) {\r\n rv.scoreInfo.title = scoreNameNode[0].textContent;\r\n rv.scoreInfo.name = rv.scoreInfo.title;\r\n xmlState.newTitle = true;\r\n }\r\n } else if (scoreElement.tagName === 'identification') {\r\n const creators = [...scoreElement.getElementsByTagName('creator')];\r\n creators.forEach((creator) => {\r\n if (creator.getAttribute('type') === 'composer' && creator.textContent) {\r\n rv.scoreInfo.composer = creator.textContent;\r\n }\r\n });\r\n } else if (scoreElement.tagName === 'movement-title') {\r\n if (xmlState.newTitle && scoreElement.textContent) {\r\n rv.scoreInfo.subTitle = scoreElement.textContent;\r\n } else if (scoreElement.textContent) {\r\n rv.scoreInfo.title = scoreElement.textContent;\r\n rv.scoreInfo.name = rv.scoreInfo.title;\r\n xmlState.newTitle = true;\r\n }\r\n } else if (scoreElement.tagName === 'defaults') {\r\n XmlToSmo.defaults(scoreElement, rv, layoutDefaults, xmlState);\r\n } else if (scoreElement.tagName === 'part') {\r\n xmlState.initializeForPart();\r\n XmlToSmo.part(scoreElement, xmlState);\r\n } else if (scoreElement.tagName === 'part-list') {\r\n XmlToSmo.partList(scoreElement, rv, xmlState);\r\n }\r\n });\r\n // The entire score is parsed and xmlState now contains the staves.\r\n rv.formattingManager = xmlState.formattingManager;\r\n rv.staves = xmlState.smoStaves;\r\n xmlState.updateStaffGroups();\r\n rv.systemGroups = xmlState.getSystems();\r\n\r\n // Fix tempo to be column mapped\r\n rv.staves[0].measures.forEach((measure) => {\r\n const tempoStaff = rv.staves.find((ss) => ss.measures[measure.measureNumber.measureIndex].tempo.display === true);\r\n if (tempoStaff) {\r\n const tempo = tempoStaff.measures[measure.measureNumber.measureIndex].tempo;\r\n rv.staves.forEach((ss) => {\r\n ss.measures[measure.measureNumber.measureIndex].tempo =\r\n SmoMeasureModifierBase.deserialize(tempo);\r\n });\r\n }\r\n });\r\n const lm: SmoLayoutManager = rv.layoutManager as SmoLayoutManager;\r\n if (rv.scoreInfo.title) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.TITLE, rv.scoreInfo.title, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n if (rv.scoreInfo.subTitle) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.SUBTITLE, rv.scoreInfo.subTitle, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n if (rv.scoreInfo.composer) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.COMPOSER, rv.scoreInfo.composer, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n XmlToSmo.setSlurDefaults(rv);\r\n xmlState.completeTies(rv);\r\n \r\n rv.preferences.showPiano = false;\r\n XmlToSmo.setVoltas(rv, xmlState);\r\n rv.staves.forEach((staff) => {\r\n\r\n });\r\n return rv;\r\n } catch (exc) {\r\n console.warn(exc);\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n }\r\n /**\r\n * when building the slurs, we don't always know which direction the beams will go or what other\r\n * voices there will be.\r\n * @param score\r\n */\r\n static setSlurDefaults(score: SmoScore) {\r\n score.staves.forEach((staff) => {\r\n const slurs = staff.modifiers.filter((mm) =>mm.ctor === 'SmoSlur');\r\n slurs.forEach((ss) => {\r\n const slur = (ss as any) as SmoSlur;\r\n let slurPosition = SmoSlur.positions.AUTO;\r\n if (slur.position === slur.position_end) {\r\n slurPosition = slur.position;\r\n }\r\n const slurParams = SmoOperation.getDefaultSlurDirection(score, ss.startSelector, ss.endSelector, slurPosition, slur.orientation);\r\n slur.position = slurParams.position;\r\n slur.position_end = slurParams.position_end;\r\n slur.invert = slurParams.invert;\r\n slur.yOffset = slurParams.yOffset;\r\n slur.cp1y = slurParams.cp1y;\r\n slur.cp2y = slurParams.cp2y;\r\n slur.xOffset = slurParams.xOffset;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * After parsing the XML, resolve the voltas we've saved\r\n * @param score \r\n * @param state \r\n */\r\n static setVoltas(score: SmoScore, state: XmlState) {\r\n const endingMeasures = Object.keys(state.endingMap).map((k) => parseInt(k, 10));\r\n endingMeasures.forEach((em) => {\r\n const endings = state.endingMap[em];\r\n endings.forEach((ending) => {\r\n const defs = SmoVolta.defaults;\r\n defs.number = ending.number;\r\n defs.startBar = ending.start;\r\n defs.endBar = ending.end >= 0 ? ending.end : ending.start;\r\n const volta = new SmoVolta(defs);\r\n SmoOperation.addEnding(score, volta);\r\n });\r\n });\r\n }\r\n static partList(partList: Element, score: SmoScore, state: XmlState) {\r\n const children = partList.children;\r\n let partIndex = 0;\r\n var i = 0;\r\n for (i = 0;i < children.length; ++i) {\r\n const child = children[i];\r\n if (child.tagName === 'score-part') {\r\n const partElement = child;\r\n const partData = new SmoPartInfo(SmoPartInfo.defaults);\r\n partData.partName = XmlHelpers.getTextFromElement(partElement, 'part-name', 'part ' + i);\r\n const partId = XmlHelpers.getTextFromAttribute(partElement, 'id', i.toString());\r\n if (state.openPartGroup) {\r\n state.openPartGroup.parts.push(partIndex);\r\n }\r\n partIndex += 1;\r\n state.parts[partId] = partData;\r\n partData.partAbbreviation = XmlHelpers.getTextFromElement(partElement, 'part-abbreviation', 'p.');\r\n partData.midiDevice = XmlHelpers.getTextFromElement(partElement, 'part-abbreviation', null);\r\n // it seems like musicxml doesn't allow for different music font size in parts vs. score\r\n // partData.layoutManager.globalLayout.svgScale = 0.55;\r\n partData.layoutManager.globalLayout.svgScale = state.musicFontSize / XmlToSmo.vexFontSize;\r\n const midiElements = partElement.getElementsByTagName('midi-instrument');\r\n if (midiElements.length) {\r\n const midiElement = midiElements[0];\r\n partData.midiInstrument = {\r\n channel: XmlHelpers.getNumberFromElement(midiElement, 'midi-channel', 1),\r\n program: XmlHelpers.getNumberFromElement(midiElement, 'midi-program', 1),\r\n volume: XmlHelpers.getNumberFromElement(midiElement, 'volume', 80),\r\n pan: XmlHelpers.getNumberFromElement(midiElement, 'pan', 0)\r\n };\r\n }\r\n } else if (child.tagName === 'part-group') {\r\n const groupElement = child;\r\n if (state.openPartGroup) {\r\n const staffGroup = state.openPartGroup.group;\r\n state.openPartGroup.parts.forEach((part) => {\r\n if (staffGroup.startSelector.staff === 0 || staffGroup.startSelector.staff > part) {\r\n staffGroup.startSelector.staff = part;\r\n }\r\n if (staffGroup.endSelector.staff < part) {\r\n staffGroup.endSelector.staff = part;\r\n }\r\n });\r\n score.systemGroups.push(staffGroup);\r\n state.openPartGroup = null;\r\n } else {\r\n const staffGroup = new SmoSystemGroup(SmoSystemGroup.defaults); \r\n const groupNum = XmlHelpers.getNumberFromAttribute(groupElement, 'number', 1);\r\n const xmlSymbol = XmlHelpers.getTextFromElement(groupElement, 'group-symbol', 'single');\r\n if (xmlSymbol === 'single') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['single'];\r\n } else if (xmlSymbol === 'brace') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['brace'];\r\n } if (xmlSymbol === 'bracket') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['bracket'];\r\n } if (xmlSymbol === 'square') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['double'];\r\n }\r\n state.openPartGroup = {\r\n partNum: groupNum,\r\n parts: [],\r\n group: staffGroup\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n /**\r\n * page-layout element occurs in a couple of places\r\n * @param defaultsElement\r\n * @param layoutDefaults \r\n * @param xmlState \r\n */\r\n static pageSizeFromLayout(defaultsElement: Element, layoutDefaults: SmoLayoutManager, xmlState: XmlState) {\r\n const pageLayoutNode = defaultsElement.getElementsByTagName('page-layout');\r\n if (pageLayoutNode.length) {\r\n XmlHelpers.assignDefaults(pageLayoutNode[0], layoutDefaults.globalLayout, XmlToSmo.pageLayoutMap);\r\n layoutDefaults.globalLayout.pageHeight *= xmlState.pixelsPerTenth;\r\n layoutDefaults.globalLayout.pageWidth *= xmlState.pixelsPerTenth;\r\n }\r\n const pageMarginNode = XmlHelpers.getChildrenFromPath(defaultsElement,\r\n ['page-layout', 'page-margins']);\r\n if (pageMarginNode.length) {\r\n XmlHelpers.assignDefaults(pageMarginNode[0], layoutDefaults.pageLayouts[0], XmlToSmo.pageMarginMap);\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n layoutDefaults.pageLayouts[0][attr] *= xmlState.pixelsPerTenth;\r\n });\r\n }\r\n }\r\n /**\r\n * /score-partwise/defaults\r\n * @param defaultsElement \r\n * @param score \r\n * @param layoutDefaults \r\n */\r\n static defaults(defaultsElement: Element, score: SmoScore, layoutDefaults: SmoLayoutManager, xmlState: XmlState) {\r\n // Default scale for mxml\r\n let scale = 1 / 7;\r\n const currentScale = layoutDefaults.getGlobalLayout().svgScale;\r\n const scaleNode = defaultsElement.getElementsByTagName('scaling');\r\n if (scaleNode.length) {\r\n const mm = XmlHelpers.getNumberFromElement(scaleNode[0], 'millimeters', 1);\r\n const tn = XmlHelpers.getNumberFromElement(scaleNode[0], 'tenths', 7);\r\n if (tn > 0 && mm > 0) {\r\n scale = mm / tn;\r\n }\r\n }\r\n const fontNode = defaultsElement.getElementsByTagName('music-font');\r\n // All musicxml sizes are given in 'tenths'. Smoosic and vex use pixels. so find the ratio and \r\n // normalize all values.\r\n xmlState.pixelsPerTenth = scale / XmlToSmo.mmPerPixel;\r\n if (fontNode.length) {\r\n const fontString = fontNode[0].getAttribute('font-size');\r\n if (fontString) {\r\n xmlState.musicFontSize = parseInt(fontString, 10);\r\n }\r\n const fontFamily = fontNode[0].getAttribute('font-family');\r\n if (fontFamily && isEngravingFont(fontFamily)) {\r\n score.engravingFont =fontFamily;\r\n }\r\n }\r\n XmlToSmo.pageSizeFromLayout(defaultsElement, layoutDefaults, xmlState);\r\n \r\n // svgScale is the ratio of music font size to the default Vex font size (39).\r\n layoutDefaults.globalLayout.svgScale = xmlState.musicFontSize / XmlToSmo.vexFontSize;\r\n score.scaleTextGroups(currentScale / layoutDefaults.globalLayout.svgScale);\r\n }\r\n\r\n /**\r\n * /score-partwise/part\r\n * @param partElement \r\n * @param xmlState \r\n */\r\n static part(partElement: Element, xmlState: XmlState) {\r\n let staffId = xmlState.smoStaves.length;\r\n const partId = XmlHelpers.getTextFromAttribute(partElement, 'id', '');\r\n console.log('part ' + partId);\r\n xmlState.initializeForPart();\r\n xmlState.partId = partId;\r\n const stavesForPart: SmoSystemStaff[] = [];\r\n const measureElements = [...partElement.getElementsByTagName('measure')];\r\n measureElements.forEach((measureElement) => {\r\n // Parse the measure element, populate staffArray of xmlState with the\r\n // measure data\r\n XmlToSmo.measure(measureElement, xmlState);\r\n const newStaves = xmlState.staffArray;\r\n if (newStaves.length > 1 && stavesForPart.length <= newStaves[0].clefInfo.staffId) {\r\n xmlState.staffGroups.push({ start: staffId, length: newStaves.length });\r\n }\r\n xmlState.globalCursor += (newStaves[0].measure as SmoMeasure).getMaxTicksVoice();\r\n newStaves.forEach((staffMeasure) => {\r\n if (stavesForPart.length <= staffMeasure.clefInfo.staffId) {\r\n const params = SmoSystemStaff.defaults;\r\n params.staffId = staffId;\r\n params.measureInstrumentMap = xmlState.instrumentMap;\r\n const newStaff = new SmoSystemStaff(params);\r\n if (xmlState.parts[partId]) {\r\n console.log('putting part ' + partId + ' in staff ' + newStaff.staffId);\r\n newStaff.partInfo = new SmoPartInfo(xmlState.parts[partId]);\r\n }\r\n console.log('createing stave ' + newStaff.staffId);\r\n stavesForPart.push(newStaff);\r\n staffId += 1;\r\n }\r\n const smoStaff = stavesForPart[staffMeasure.clefInfo.staffId];\r\n smoStaff.measures.push(staffMeasure.measure as SmoMeasure);\r\n });\r\n const oldStaffId = staffId - stavesForPart.length;\r\n xmlState.backtrackHairpins(stavesForPart[0], oldStaffId + 1);\r\n });\r\n if (stavesForPart.length > 1) {\r\n stavesForPart[0].partInfo.stavesAfter = 1;\r\n stavesForPart[0].partInfo.stavesBefore = 0;\r\n console.log('part has stave after ' + stavesForPart[0].staffId);\r\n stavesForPart[1].partInfo.stavesAfter = 0;\r\n stavesForPart[1].partInfo.stavesBefore = 1;\r\n console.log('part has stave before ' + stavesForPart[1].staffId);\r\n }\r\n xmlState.smoStaves = xmlState.smoStaves.concat(stavesForPart);\r\n xmlState.completeSlurs();\r\n xmlState.assignRehearsalMarks();\r\n }\r\n /**\r\n * /score-partwise/measure/direction/sound:tempo\r\n * @param element \r\n * @returns \r\n */\r\n static tempo(element: Element) {\r\n let tempoText = '';\r\n let customText = tempoText;\r\n const rv: { staffId: number, tempo: SmoTempoText }[] = [];\r\n const soundNodes = XmlHelpers.getChildrenFromPath(element,\r\n ['sound']);\r\n soundNodes.forEach((sound) => {\r\n let tempoMode = SmoTempoText.tempoModes.durationMode;\r\n tempoText = sound.getAttribute('tempo') as string;\r\n if (tempoText) {\r\n const bpm = parseInt(tempoText, 10);\r\n const wordNode =\r\n [...element.getElementsByTagName('words')];\r\n tempoText = wordNode.length ? wordNode[0].textContent as string :\r\n tempoText.toString();\r\n if (isNaN(parseInt(tempoText, 10))) {\r\n if (SmoTempoText.tempoTexts[tempoText.toLowerCase()]) {\r\n tempoMode = SmoTempoText.tempoModes.textMode;\r\n } else {\r\n tempoMode = SmoTempoText.tempoModes.customMode;\r\n customText = tempoText;\r\n }\r\n }\r\n const params = SmoTempoText.defaults;\r\n params.tempoMode = tempoMode;\r\n params.bpm = bpm;\r\n params.tempoText = tempoText;\r\n params.customText = customText;\r\n params.display = true;\r\n const tempo = new SmoTempoText(params);\r\n const staffId = XmlHelpers.getStaffId(element);\r\n rv.push({ staffId, tempo });\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * /score-partwise/measure/direction/dynamics\r\n * @param element \r\n * @returns \r\n */\r\n static dynamics(directionElement: Element, xmlState: XmlState) {\r\n let offset = 1;\r\n const dynamicNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'dynamics']);\r\n const rehearsalNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'rehearsal']);\r\n const offsetNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['offset']);\r\n if (offsetNodes.length) {\r\n offset = parseInt(offsetNodes[0].textContent as string, 10);\r\n }\r\n if (rehearsalNodes.length) {\r\n const rm = rehearsalNodes[0].textContent;\r\n if (rm) {\r\n xmlState.rehearsalMark = rm;\r\n }\r\n }\r\n dynamicNodes.forEach((dynamic) => {\r\n xmlState.dynamics.push({\r\n dynamic: dynamic.children[0].tagName,\r\n offset: (offset / xmlState.divisions) * 4096\r\n });\r\n });\r\n }\r\n\r\n // ### attributes\r\n // /score-partwise/part/measure/attributes\r\n static attributes(measureElement: Element, xmlState: XmlState) {\r\n let smoKey: PitchKey = {} as PitchKey;\r\n const attributesNodes = XmlHelpers.getChildrenFromPath(measureElement, ['attributes']);\r\n if (!attributesNodes.length) {\r\n return;\r\n }\r\n const attributesNode = attributesNodes[0];\r\n xmlState.divisions =\r\n XmlHelpers.getNumberFromElement(attributesNode, 'divisions', xmlState.divisions);\r\n\r\n const keyNode = XmlHelpers.getChildrenFromPath(attributesNode, ['key']);\r\n // MusicXML expresses keys in 'fifths' from C.\r\n if (keyNode.length) {\r\n const fifths = XmlHelpers.getNumberFromElement(keyNode[0], 'fifths', 0);\r\n if (fifths < 0) {\r\n smoKey = SmoMusic.circleOfFifths[SmoMusic.circleOfFifths.length + fifths];\r\n } else {\r\n smoKey = SmoMusic.circleOfFifths[fifths];\r\n }\r\n xmlState.keySignature = smoKey.letter.toUpperCase();\r\n if (smoKey.accidental !== 'n') {\r\n xmlState.keySignature += smoKey.accidental;\r\n }\r\n }\r\n const transposeNode = XmlHelpers.getChildrenFromPath(attributesNode, ['transpose']);\r\n if (transposeNode.length) {\r\n const offset = XmlHelpers.getNumberFromElement(transposeNode[0], 'chromatic', 0);\r\n if (offset !== xmlState.instrument.keyOffset) {\r\n xmlState.instrument.keyOffset = -1 * offset;\r\n if (xmlState.instrumentMap[xmlState.measureIndex]) {\r\n xmlState.instrumentMap[xmlState.measureIndex].keyOffset = xmlState.instrument.keyOffset;\r\n } else {\r\n const params = xmlState.instrument;\r\n xmlState.instrumentMap[xmlState.measureIndex] = new SmoInstrument(params);\r\n }\r\n }\r\n }\r\n\r\n const currentTime = xmlState.timeSignature.split('/');\r\n const timeNodes = XmlHelpers.getChildrenFromPath(attributesNode, ['time']);\r\n if (timeNodes.length) {\r\n const timeNode = timeNodes[0];\r\n const num = XmlHelpers.getNumberFromElement(timeNode, 'beats', parseInt(currentTime[0], 10));\r\n const den = XmlHelpers.getNumberFromElement(timeNode, 'beat-type', parseInt(currentTime[1], 10));\r\n xmlState.timeSignature = '' + num + '/' + den;\r\n }\r\n\r\n const clefNodes = XmlHelpers.getChildrenFromPath(attributesNode, ['clef']);\r\n if (clefNodes.length) {\r\n // We expect the number of clefs to equal the number of staves in each measure\r\n clefNodes.forEach((clefNode) => {\r\n let clefNum = 0;\r\n let clef = 'treble';\r\n const clefAttrs = XmlHelpers.nodeAttributes(clefNode);\r\n if (typeof (clefAttrs.number) !== 'undefined') {\r\n // staff numbers index from 1 in mxml\r\n clefNum = parseInt(clefAttrs.number, 10) - 1;\r\n }\r\n const clefType = XmlHelpers.getTextFromElement(clefNode, 'sign', 'G');\r\n const clefLine = XmlHelpers.getNumberFromElement(clefNode, 'line', 2);\r\n // mxml supports a zillion clefs, just implement the basics.\r\n if (clefType === 'F') {\r\n clef = 'bass';\r\n } else if (clefType === 'C') {\r\n if (clefLine === 4) {\r\n clef = 'alto';\r\n } else if (clefLine === 3) {\r\n clef = 'tenor';\r\n } else if (clefLine === 1) {\r\n clef = 'soprano';\r\n }\r\n } else if (clefType === 'percussion') {\r\n clef = 'percussion';\r\n }\r\n if (xmlState.clefInfo.length <= clefNum) {\r\n xmlState.clefInfo.push({ clef, staffId: clefNum });\r\n } else {\r\n xmlState.clefInfo[clefNum].clef = clef;\r\n }\r\n });\r\n }\r\n }\r\n\r\n // ### wedge (hairpin)\r\n // /score-partwise/part/measure/direction/direction-type/wedge\r\n static wedge(directionElement: Element, xmlState: XmlState) {\r\n let crescInfo: XmlWedgeInfo | null = null;\r\n const wedgeNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'wedge']);\r\n wedgeNodes.forEach((wedgeNode) => {\r\n crescInfo = { type: wedgeNode.getAttribute('type') as string };\r\n });\r\n // If this is a start hairpin, start it. If an end hairpin, add it to the\r\n // hairpin array with the type and start/stop ticks\r\n if (crescInfo !== null) {\r\n xmlState.processWedge(crescInfo);\r\n }\r\n }\r\n // ### direction\r\n // /score-partwise/part/measure/direction\r\n static direction(directionElement: Element, xmlState: XmlState) {\r\n const tempo = XmlToSmo.tempo(directionElement);\r\n // Only display tempo if changes.\r\n if (tempo.length) {\r\n // TODO: staff ID is with tempo, but tempo is per column in SMO\r\n if (!SmoTempoText.eq(xmlState.tempo, tempo[0].tempo)) {\r\n xmlState.tempo = tempo[0].tempo;\r\n xmlState.tempo.display = true;\r\n }\r\n }\r\n // parse dynamic node and add to xmlState\r\n XmlToSmo.dynamics(directionElement, xmlState);\r\n\r\n // parse wedge (hairpin)\r\n XmlToSmo.wedge(directionElement, xmlState);\r\n }\r\n // ### note\r\n // /score-partwise/part/measure/note\r\n static note(noteElement: Element, xmlState: XmlState) {\r\n let grIx = 0;\r\n const staffIndex: number = XmlHelpers.getStaffId(noteElement);\r\n xmlState.staffIndex = staffIndex;\r\n // We assume the clef information from attributes comes before the notes\r\n // xmlState.staffArray[staffIndex] = { clefInfo: { clef }, voices[voiceIndex]: notes[] }\r\n if (xmlState.staffArray.length <= staffIndex) {\r\n // mxml has measures for all staves in a part interleaved. In SMO they are\r\n // each in a separate stave object. Base the staves we expect based on\r\n // the number of clefs in the xml state object\r\n xmlState.clefInfo.forEach((clefInfo) => {\r\n xmlState.staffArray.push({ clefInfo, measure: null, voices: {} as Record });\r\n });\r\n }\r\n const chordNode = XmlHelpers.getChildrenFromPath(noteElement, ['chord']);\r\n if (chordNode.length === 0) {\r\n xmlState.currentDuration += XmlHelpers.durationFromNode(noteElement, 0);\r\n }\r\n // voices are not sequential, seem to have artitrary numbers and\r\n // persist per part (same with staff IDs). Update XML state if these are new\r\n // staves\r\n const voiceIndex = XmlHelpers.getVoiceId(noteElement);\r\n xmlState.voiceIndex = voiceIndex;\r\n xmlState.initializeStaff(staffIndex, voiceIndex);\r\n const voice = xmlState.staffArray[staffIndex].voices[voiceIndex];\r\n // Calculate the tick and staff index for selectors\r\n const tickIndex = chordNode.length < 1 ? voice.notes.length : voice.notes.length - 1;\r\n const smoVoiceIndex = xmlState.staffVoiceHash[staffIndex].indexOf(voiceIndex);\r\n const pitchIndex = chordNode.length ? xmlState.previousNote.pitches.length : 0;\r\n const smoStaffIndex = xmlState.smoStaves.length + staffIndex;\r\n const selector = {\r\n staff: smoStaffIndex, measure: xmlState.measureIndex, voice: smoVoiceIndex,\r\n tick: tickIndex, pitches: []\r\n };\r\n const divisions = xmlState.divisions;\r\n const printText = noteElement.getAttribute('print-object');\r\n const hideNote = typeof (printText) === 'string' && printText === 'no';\r\n const isGrace = XmlHelpers.isGrace(noteElement);\r\n const restNode = XmlHelpers.getChildrenFromPath(noteElement, ['rest']);\r\n const noteType = restNode.length ? 'r' : 'n';\r\n const durationData = XmlHelpers.ticksFromDuration(noteElement, divisions, 4096);\r\n const tickCount = durationData.tickCount;\r\n if (chordNode.length === 0) {\r\n xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed += tickCount;\r\n }\r\n xmlState.tickCursor = (xmlState.currentDuration / divisions) * 4096;\r\n const beamState = XmlHelpers.noteBeamState(noteElement);\r\n const slurInfos = XmlHelpers.getSlurData(noteElement, selector);\r\n const tieInfos = XmlHelpers.getTieData(noteElement, selector, pitchIndex);\r\n const tupletInfos = XmlHelpers.getTupletData(noteElement);\r\n const ornaments = XmlHelpers.articulationsAndOrnaments(noteElement);\r\n const lyrics = XmlHelpers.lyrics(noteElement);\r\n const flagState = XmlHelpers.getStemType(noteElement);\r\n const clefString: Clef = xmlState.staffArray[staffIndex].clefInfo.clef as Clef;\r\n const pitch: Pitch = XmlHelpers.smoPitchFromNote(noteElement,\r\n SmoMeasure.defaultPitchForClef[clefString]);\r\n if (isGrace === false) {\r\n if (chordNode.length) {\r\n // If this is a note in a chord, just add the pitch to previous note.\r\n xmlState.previousNote.pitches.push(pitch);\r\n xmlState.updateTieStates(tieInfos);\r\n } else {\r\n // Create a new note\r\n const noteData: SmoNoteParams = SmoNote.defaults;\r\n noteData.noteType = noteType;\r\n noteData.pitches = [pitch];\r\n // If this is a non-grace note, add any grace notes to the note since SMO\r\n // treats them as note modifiers\r\n noteData.ticks = { numerator: tickCount, denominator: 1, remainder: 0 };\r\n noteData.flagState = flagState;\r\n noteData.clef = clefString;\r\n xmlState.previousNote = new SmoNote(noteData);\r\n if (hideNote) {\r\n xmlState.previousNote.makeHidden(true);\r\n }\r\n xmlState.updateDynamics();\r\n ornaments.forEach((ornament) => {\r\n if (ornament.ctor === 'SmoOrnament') {\r\n xmlState.previousNote.toggleOrnament(ornament as SmoOrnament);\r\n } else if (ornament.ctor === 'SmoArticulation') {\r\n xmlState.previousNote.toggleArticulation(ornament as SmoArticulation);\r\n }\r\n });\r\n lyrics.forEach((lyric) => {\r\n xmlState.addLyric(xmlState.previousNote, lyric);\r\n });\r\n for (grIx = 0; grIx < xmlState.graceNotes.length; ++grIx) {\r\n xmlState.previousNote.addGraceNote(xmlState.graceNotes[grIx], grIx);\r\n }\r\n xmlState.graceNotes = []; // clear the grace note array\r\n // If this note starts later than the cursor due to forward, pad with rests\r\n if (xmlState.tickCursor > xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed) {\r\n const pads = SmoMusic.splitIntoValidDurations(\r\n xmlState.tickCursor - xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed);\r\n console.log(`padding ${pads.length} before ${xmlState.staffIndex}-${xmlState.measureIndex}-${xmlState.voiceIndex}-${tickIndex}`);\r\n pads.forEach((pad) => {\r\n const clefString: Clef = xmlState.staffArray[staffIndex].clefInfo.clef as Clef;\r\n const padNote = SmoMeasure.createRestNoteWithDuration(pad,\r\n clefString);\r\n padNote.makeHidden(true);\r\n voice.notes.push(padNote); \r\n });\r\n // slurs and ties use selector, so this affects them, also\r\n selector.tick += pads.length;\r\n // then reset the cursor since we are now in sync\r\n xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed = xmlState.tickCursor;\r\n }\r\n /* slurInfos.forEach((slurInfo) => {\r\n console.log(`xml slur: ${slurInfo.selector.staff}-${slurInfo.selector.measure}-${slurInfo.selector.voice}-${slurInfo.selector.tick} ${slurInfo.type} ${slurInfo.number}`);\r\n console.log(` ${slurInfo.placement}`);\r\n });*/\r\n /* tieInfos.forEach((tieInfo) => {\r\n console.log(`xml tie: ${tieInfo.selector.staff}-${tieInfo.selector.measure}-${tieInfo.selector.voice}-${tieInfo.selector.tick} ${tieInfo.type} `);\r\n console.log(` pitch ${tieInfo.pitchIndex} orient ${tieInfo.orientation} num ${tieInfo.number}`);\r\n });*/\r\n \r\n xmlState.updateSlurStates(slurInfos);\r\n xmlState.updateTieStates(tieInfos);\r\n voice.notes.push(xmlState.previousNote);\r\n xmlState.updateBeamState(beamState, durationData.alteration, voice, voiceIndex);\r\n xmlState.updateTupletStates(tupletInfos, voice,\r\n staffIndex, voiceIndex);\r\n }\r\n } else {\r\n if (chordNode.length) {\r\n xmlState.graceNotes[xmlState.graceNotes.length - 1].pitches.push(pitch);\r\n } else {\r\n // grace note durations don't seem to have explicit duration, so\r\n // get it from note type\r\n xmlState.updateSlurStates(slurInfos);\r\n xmlState.updateTieStates(tieInfos);\r\n xmlState.graceNotes.push(new SmoGraceNote({\r\n pitches: [pitch],\r\n ticks: { numerator: tickCount, denominator: 1, remainder: 0 }\r\n }));\r\n }\r\n }\r\n }\r\n static print(printElement: Element, xmlState: XmlState) {\r\n if (xmlState.parts[xmlState.partId]) {\r\n XmlToSmo.pageSizeFromLayout(printElement, xmlState.parts[xmlState.partId].layoutManager, xmlState);\r\n }\r\n }\r\n /**\r\n * /score-partwise/part/measure\r\n * A measure in music xml might represent several measures in SMO at the same\r\n * column in the score\r\n * @param measureElement \r\n * @param xmlState \r\n */\r\n static measure(measureElement: Element, xmlState: XmlState) {\r\n xmlState.initializeForMeasure(measureElement);\r\n const elements = [...measureElement.children];\r\n let hasNotes = false;\r\n elements.forEach((element) => { \r\n if (element.tagName === 'backup') {\r\n xmlState.currentDuration -= XmlHelpers.durationFromNode(element, 0);\r\n }\r\n if (element.tagName === 'forward') {\r\n xmlState.currentDuration += XmlHelpers.durationFromNode(element, 0);\r\n }\r\n if (element.tagName === 'attributes') {\r\n // update the running state of the XML with new information from this measure\r\n // if an XML attributes element is present\r\n XmlToSmo.attributes(measureElement, xmlState);\r\n } else if (element.tagName === 'direction') {\r\n XmlToSmo.direction(element, xmlState);\r\n } else if (element.tagName === 'note') {\r\n XmlToSmo.note(element, xmlState);\r\n hasNotes = true;\r\n } else if (element.tagName === 'barline') {\r\n xmlState.updateEndings(element);\r\n } else if (element.tagName === 'print') {\r\n XmlToSmo.print(element, xmlState);\r\n }\r\n });\r\n // If a measure has no notes, just make one with the defaults\r\n if (hasNotes === false && xmlState.staffArray.length < 1 && xmlState.clefInfo.length >= 1) {\r\n xmlState.clefInfo.forEach((clefInfo) => {\r\n xmlState.staffArray.push({ clefInfo, measure: null, voices: {} });\r\n });\r\n }\r\n if (xmlState.rehearsalMark.length) {\r\n xmlState.rehearsalMarks[xmlState.measureIndex] = xmlState.rehearsalMark;\r\n }\r\n xmlState.staffArray.forEach((staffData) => {\r\n const clef = staffData.clefInfo.clef as Clef;\r\n const params: SmoMeasureParams = SmoMeasure.defaults;\r\n params.transposeIndex = xmlState.instrument.keyOffset;\r\n params.clef = clef;\r\n const smoMeasure = SmoMeasure.getDefaultMeasure(params);\r\n smoMeasure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n smoMeasure.format.measureIndex = xmlState.measureNumber;\r\n smoMeasure.format.systemBreak = XmlHelpers.isSystemBreak(measureElement);\r\n smoMeasure.tempo = xmlState.tempo;\r\n smoMeasure.format.proportionality = XmlToSmo.customProportionDefault;\r\n xmlState.formattingManager.updateMeasureFormat(smoMeasure.format);\r\n smoMeasure.keySignature = xmlState.keySignature.toLowerCase();\r\n smoMeasure.timeSignature = SmoMeasure.convertLegacyTimeSignature(xmlState.timeSignature);\r\n smoMeasure.measureNumber.localIndex = xmlState.measureNumber;\r\n smoMeasure.measureNumber.measureIndex = xmlState.measureIndex;\r\n smoMeasure.measureNumber.staffId = staffData.clefInfo.staffId + xmlState.smoStaves.length;\r\n const startBarDefs = SmoBarline.defaults;\r\n startBarDefs.position = SmoBarline.positions.start;\r\n startBarDefs.barline = xmlState.startBarline;\r\n const endBarDefs = SmoBarline.defaults;\r\n endBarDefs.position = SmoBarline.positions.end;\r\n endBarDefs.barline = xmlState.endBarline;\r\n smoMeasure.setBarline(new SmoBarline(startBarDefs));\r\n smoMeasure.setBarline(new SmoBarline(endBarDefs));\r\n // voices not in array, put them in an array\r\n Object.keys(staffData.voices).forEach((voiceKey) => {\r\n const voice = staffData.voices[voiceKey];\r\n xmlState.addTupletsToMeasure(smoMeasure, staffData.clefInfo.staffId,\r\n parseInt(voiceKey, 10));\r\n voice.notes.forEach((note) => {\r\n if (!note.clef) {\r\n note.clef = smoMeasure.clef;\r\n }\r\n });\r\n smoMeasure.voices.push(voice);\r\n });\r\n if (smoMeasure.voices.length === 0) {\r\n smoMeasure.voices.push({ notes: SmoMeasure.getDefaultNotes(smoMeasure) });\r\n }\r\n staffData.measure = smoMeasure;\r\n });\r\n // Pad incomplete measures/voices with rests\r\n const maxTicks = xmlState.staffArray.map((staffData) => (staffData.measure as SmoMeasure).getMaxTicksVoice())\r\n .reduce((a, b) => a > b ? a : b);\r\n xmlState.staffArray.forEach((staffData) => {\r\n let i = 0;\r\n let j = 0;\r\n const measure = staffData.measure as SmoMeasure;\r\n for (i = 0; i < measure.voices.length; ++i) {\r\n const curTicks = measure.getTicksFromVoice(i);\r\n if (curTicks < maxTicks) {\r\n const tickAr = SmoMusic.splitIntoValidDurations(maxTicks - curTicks);\r\n for (j = 0; j < tickAr.length; ++j) {\r\n measure.voices[i].notes.push(\r\n SmoMeasure.createRestNoteWithDuration(tickAr[j], measure.clef)\r\n );\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoDynamicText, SmoMicrotone } from '../data/noteModifiers';\r\nimport { SmoSelector, SmoSelection } from './selections';\r\nimport { SmoStaffHairpin, StaffModifierBase } from '../data/staffModifiers';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoTempoText, SmoBarline, SmoVolta } from '../data/measureModifiers';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoNote } from '../data/note';\r\nimport { Pitch } from '../data/common';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoAudioPitch } from '../data/music';\r\n\r\nexport interface SmoAudioRepeat {\r\n startRepeat: number,\r\n endRepeat?: number,\r\n voltas: SmoAudioVolta[]\r\n}\r\nexport interface SmoAudioVolta {\r\n measureIndex: number,\r\n ending: number\r\n}\r\nexport interface SmoAudioRepeatMap {\r\n startMeasure: number,\r\n endMeasure: number\r\n}\r\nexport interface SmoAudioHairpin {\r\n hairpinType: number,\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n delta: number,\r\n ticks: number\r\n}\r\nexport interface SmoAudioTie {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector\r\n}\r\nexport interface SmoAudioNote {\r\n pitches: Pitch[],\r\n frequencies: number[],\r\n noteType: string,\r\n duration: number,\r\n offset: number,\r\n selector: SmoSelector,\r\n volume: number,\r\n padding?: boolean\r\n}\r\nexport interface SmoAudioTimeSignature {\r\n numerator: number,\r\n denominator: number\r\n}\r\nexport interface SmoAudioTrack {\r\n lastMeasure: number,\r\n notes: SmoAudioNote[],\r\n tempoMap: Record,\r\n measureNoteMap: Record,\r\n keyMap: Record,\r\n timeSignatureMap: Record,\r\n hairpins: SmoAudioHairpin[],\r\n volume: number,\r\n tiedNotes: SmoAudioTie[],\r\n repeats: []\r\n}\r\nexport interface AudioTracks {\r\n tracks: SmoAudioTrack[],\r\n repeats: SmoAudioRepeat[],\r\n repeatMap: SmoAudioRepeatMap[],\r\n measureBeats: number[],\r\n tempoMap: number[]\r\n}\r\n/** \r\n * Convert a score into a JSON structure that can be rendered to audio.\r\n * the return value looks like this:\r\n * ` { tracks, repeats, repeatMap} `\r\n * repeatMap is just an array of tuples with start/end measures.\r\n * each track contains:\r\n * ` { lastMeasure, notes, tempoMap, timeSignatureMap, hairpins, volume, tiedNotes } `\r\n * where each note might contain:\r\n * `{ pitches, noteType, duration, selector, volume }`\r\n * _Note_: pitches are smo pitches, durations are adjusted for beatTime\r\n * (beatTime === 4096 uses Smo/Vex ticks, 128 is midi tick default)\r\n * volume is normalized 0-1\r\n * @category SmoTransform\r\n */\r\nexport class SmoAudioScore {\r\n // ### dynamicVolumeMap\r\n // normalized dynamic\r\n static get dynamicVolumeMap(): Record {\r\n // matches SmoDynamicText.dynamics\r\n return {\r\n pp: 0.3,\r\n p: 0.4,\r\n mp: 0.5,\r\n mf: 0.6,\r\n f: 0.7,\r\n ff: 0.8\r\n };\r\n }\r\n static get emptyTrack(): SmoAudioTrack {\r\n return {\r\n lastMeasure: 0,\r\n notes: [],\r\n tempoMap: {},\r\n timeSignatureMap: {},\r\n hairpins: [],\r\n measureNoteMap: {},\r\n keyMap: {},\r\n volume: 0,\r\n tiedNotes: [],\r\n repeats: []\r\n };\r\n }\r\n timeDiv: number;\r\n score: SmoScore;\r\n beatTime: number;\r\n volume: number = 0;\r\n constructor(score: SmoScore, beatTime: number) {\r\n this.timeDiv = 4096 / beatTime;\r\n this.score = score;\r\n this.beatTime = beatTime;\r\n }\r\n // ### volumeFromNote\r\n // Return a normalized volume from the dynamic setting of the note\r\n // or supplied default if none exists\r\n static volumeFromNote(smoNote: SmoNote, def?: number): number {\r\n if (typeof (def) === 'undefined' || def === 0) {\r\n def = SmoAudioScore.dynamicVolumeMap[SmoDynamicText.dynamics.PP];\r\n }\r\n const dynamic: SmoDynamicText[] = smoNote.getModifiers('SmoDynamicText') as SmoDynamicText[];\r\n if (dynamic.length < 1) {\r\n return def;\r\n }\r\n if (dynamic[0].text === SmoDynamicText.dynamics.SFZ) {\r\n return SmoAudioScore.dynamicVolumeMap[SmoDynamicText.dynamics.F];\r\n }\r\n if (typeof (SmoAudioScore.dynamicVolumeMap[dynamic[0].text]) === 'undefined') {\r\n return def;\r\n }\r\n return SmoAudioScore.dynamicVolumeMap[dynamic[0].text];\r\n }\r\n getVoltas(repeat: SmoAudioRepeat, measureIndex: number): SmoAudioVolta[] {\r\n let v1 = measureIndex;\r\n let endings = null;\r\n let currentEnding = -1;\r\n const rv: SmoAudioVolta[] = [];\r\n const staff = this.score.staves[0];\r\n while (v1 > repeat.startRepeat) {\r\n endings = staff.measures[v1].getNthEndings();\r\n if (endings.length && endings[0].endSelector) {\r\n currentEnding = endings[0].number;\r\n rv.push({ measureIndex: v1, ending: currentEnding });\r\n v1 = endings[0].endSelector.measure + 1;\r\n break;\r\n }\r\n v1--;\r\n }\r\n if (currentEnding < 0 || !staff?.measures) {\r\n return rv;\r\n }\r\n while (endings?.length && v1 < staff.measures.length) {\r\n endings = staff.measures[v1].getNthEndings();\r\n if (!endings.length) {\r\n break;\r\n }\r\n currentEnding = endings[0].number;\r\n rv.push({ measureIndex: v1, ending: currentEnding });\r\n v1 = (endings[0].endSelector as SmoSelector).measure + 1;\r\n }\r\n rv.sort((a: SmoAudioVolta, b: SmoAudioVolta) => a.ending - b.ending);\r\n return rv;\r\n }\r\n // ### ticksFromSelection\r\n // return the count of ticks between the selectors, adjusted for\r\n // beatTime\r\n ticksFromSelection(startSelector: SmoSelector, endSelector: SmoSelector): number {\r\n const selection = SmoSelection.selectionFromSelector(this.score, startSelector);\r\n const note = selection?.note as SmoNote;\r\n let ticks: number = note.tickCount;\r\n let nextSelection: SmoSelection | null = SmoSelection.nextNoteSelectionFromSelector(this.score, startSelector);\r\n while (nextSelection && nextSelection.note && !SmoSelector.gt(nextSelection.selector, endSelector)) {\r\n ticks += nextSelection.note.tickCount;\r\n nextSelection = SmoSelection.nextNoteSelectionFromSelector(this.score, nextSelection.selector);\r\n }\r\n return ticks / this.timeDiv;\r\n }\r\n // ### getHairpinInfo\r\n // Get any hairpin starting at this selection, and calculate its\r\n // effect on the overall volume\r\n getHairpinInfo(track: SmoAudioTrack, selection: SmoSelection) {\r\n const staff: SmoSystemStaff = selection.staff;\r\n const selector: SmoSelector = selection.selector;\r\n const cp = (x: SmoSelector) => JSON.parse(JSON.stringify(x));\r\n const hps: StaffModifierBase[] = staff.getModifiersAt(selector)\r\n .filter((hairpin) => hairpin.ctor === 'SmoStaffHairpin' &&\r\n SmoSelector.eq(hairpin.startSelector, selector));\r\n const rv: SmoAudioHairpin[] = [];\r\n // clear out old hairpins.\r\n // usually there will only be a single hairpin per voice, except\r\n // in the case of overlapping.\r\n track.hairpins.forEach((hairpin: SmoAudioHairpin) => {\r\n if (SmoSelector.gteq(selection.selector, hairpin.startSelector) &&\r\n SmoSelector.lteq(selection.selector, hairpin.endSelector)) {\r\n rv.push(hairpin);\r\n }\r\n });\r\n track.hairpins = rv;\r\n\r\n hps.forEach((hairpin) => {\r\n const ch = hairpin as SmoStaffHairpin;\r\n let endDynamic = 0;\r\n const trackHairpin: SmoAudioHairpin = {\r\n hairpinType: ch.hairpinType,\r\n startSelector: cp(hairpin.startSelector),\r\n endSelector: cp(hairpin.endSelector),\r\n delta: 0,\r\n ticks: 0\r\n };\r\n // For a hairpin, try to calculate the volume difference from start to end,\r\n // as a function of ticks\r\n const endSelection: SmoSelection | null = SmoSelection.selectionFromSelector(this.score, hairpin.endSelector);\r\n if (endSelection !== null && typeof (endSelection.note) !== 'undefined') {\r\n const endNote = endSelection.note as SmoNote;\r\n const curNote = selection.note as SmoNote;\r\n endDynamic = SmoAudioScore.volumeFromNote(endNote);\r\n const startDynamic = SmoAudioScore.volumeFromNote(curNote, track.volume);\r\n if (startDynamic === endDynamic) {\r\n const nextSelection = SmoSelection.nextNoteSelectionFromSelector(this.score, hairpin.endSelector);\r\n if (nextSelection) {\r\n const nextNote = nextSelection.note as SmoNote;\r\n endDynamic = SmoAudioScore.volumeFromNote(nextNote);\r\n }\r\n }\r\n if (startDynamic === endDynamic) {\r\n const offset = (hairpin as SmoStaffHairpin).hairpinType === SmoStaffHairpin.types.CRESCENDO ? 0.1 : -0.1;\r\n endDynamic = Math.max(endDynamic + offset, 0.1);\r\n endDynamic = Math.min(endDynamic, 1.0);\r\n }\r\n trackHairpin.delta = endDynamic - startDynamic;\r\n trackHairpin.ticks = this.ticksFromSelection(hairpin.startSelector, hairpin.endSelector);\r\n track.hairpins.push(trackHairpin);\r\n }\r\n });\r\n }\r\n // ### computeVolume\r\n // come up with a current normalized volume based on dynamics\r\n // that appear in the music\r\n computeVolume(track: SmoAudioTrack, selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n if (track.volume === 0) {\r\n track.volume = SmoAudioScore.volumeFromNote(note,\r\n SmoAudioScore.dynamicVolumeMap.p);\r\n return;\r\n }\r\n if (track.hairpins.length) {\r\n const hp = track.hairpins[0];\r\n const coff = (note.tickCount / this.timeDiv) / hp.ticks;\r\n track.volume += hp.delta * coff;\r\n } else {\r\n track.volume = SmoAudioScore.volumeFromNote(note, track.volume);\r\n }\r\n }\r\n getSlurInfo(track: SmoAudioTrack, selection: SmoSelection) {\r\n const tn: SmoAudioTie[] = [];\r\n const cp = (x: any) => JSON.parse(JSON.stringify(x));\r\n track.tiedNotes.forEach((tie) => {\r\n if (SmoSelector.gteq(selection.selector, tie.startSelector) && SmoSelector.lteq(selection.selector, tie.endSelector)) { \r\n tn.push(tie);\r\n }\r\n });\r\n track.tiedNotes = tn;\r\n const tieStart = selection.staff.getTiesStartingAt(selection.selector);\r\n tieStart.forEach((tie) => {\r\n tn.push({\r\n startSelector: cp(tie.startSelector),\r\n endSelector: cp(tie.endSelector)\r\n });\r\n });\r\n }\r\n isTiedPitch(track: SmoAudioTrack, selection: SmoSelection, noteIx: number): boolean {\r\n if (noteIx < 1) {\r\n return false;\r\n }\r\n if (!track.tiedNotes.length) {\r\n return false;\r\n }\r\n if (track.notes[noteIx - 1].noteType !== 'n') {\r\n return false;\r\n }\r\n // Don't do this for first note of nth endings, because it will mess up\r\n // other endings.\r\n if (selection.selector.tick === 0) {\r\n const endings = selection.measure.getNthEndings();\r\n if (endings.length) {\r\n return false;\r\n }\r\n }\r\n // the first note should be played, not tied\r\n if (SmoSelector.eq(track.tiedNotes[0].startSelector, selection.selector)) {\r\n return false;\r\n }\r\n return SmoMusic.pitchArraysMatch(track.notes[noteIx - 1].pitches, (selection.note as SmoNote).pitches);\r\n }\r\n static updateMeasureIndexMap(note: SmoAudioNote, measureIndexMap: Record>) {\r\n if (note.noteType !== 'n') {\r\n return;\r\n }\r\n const selector = note.selector;\r\n if (typeof (measureIndexMap[selector.measure]) === 'undefined') {\r\n measureIndexMap[selector.measure] = {} as Record;\r\n }\r\n const measureIndex = measureIndexMap[selector.measure];\r\n if (typeof (measureIndex[selector.tick]) === 'undefined') {\r\n measureIndex[selector.tick] = [];\r\n }\r\n if (note.noteType === 'n') {\r\n measureIndex[selector.tick].push(note);\r\n }\r\n }\r\n updateMeasureNoteMap(track: SmoAudioTrack, measureIndex: number, note: SmoAudioNote) {\r\n if (!track.measureNoteMap[measureIndex]) {\r\n track.measureNoteMap[measureIndex] = [];\r\n }\r\n track.measureNoteMap[measureIndex].push(note)\r\n }\r\n createTrackNote(track: SmoAudioTrack, selection: SmoSelection, duration: number, runningDuration: number, measureIndexMap: Record>) {\r\n const noteIx = track.notes.length;\r\n if (this.isTiedPitch(track, selection, noteIx)) {\r\n track.notes[noteIx - 1].duration += duration;\r\n const restPad = this.createTrackRest(track, duration, runningDuration, selection.selector, measureIndexMap);\r\n // Indicate this rest is just padding for a previous tied note. Midi and audio render this\r\n // differently\r\n restPad.padding = true;\r\n track.notes.push(restPad);\r\n return;\r\n }\r\n const tpitches: Pitch[] = [];\r\n const frequencies: number[] = [];\r\n const xpose = selection.measure.transposeIndex;\r\n const smoNote = selection.note as SmoNote;\r\n smoNote.pitches.forEach((pitch, pitchIx) => {\r\n tpitches.push(SmoMusic.smoIntToPitch(\r\n SmoMusic.smoPitchToInt(pitch) - xpose));\r\n const mtone: SmoMicrotone | null = smoNote.getMicrotone(pitchIx) ?? null;\r\n frequencies.push(SmoAudioPitch.smoPitchToFrequency(pitch, -1 * xpose, mtone));\r\n });\r\n const pitchArray = JSON.parse(JSON.stringify(tpitches));\r\n const note: SmoAudioNote = {\r\n pitches: pitchArray,\r\n noteType: 'n',\r\n duration,\r\n offset: runningDuration,\r\n selector: selection.selector,\r\n volume: track.volume,\r\n frequencies\r\n };\r\n this.updateMeasureNoteMap(track, selection.selector.measure, note);\r\n track.notes.push(note);\r\n SmoAudioScore.updateMeasureIndexMap(note, measureIndexMap);\r\n }\r\n createTrackRest(track: SmoAudioTrack, duration: number, runningDuration: number, selector: SmoSelector, \r\n measureIndexMap: Record>): SmoAudioNote {\r\n const rest: SmoAudioNote = {\r\n duration,\r\n offset: runningDuration,\r\n noteType: 'r',\r\n selector,\r\n volume: 0,\r\n pitches: [],\r\n frequencies: []\r\n };\r\n SmoAudioScore.updateMeasureIndexMap(rest, measureIndexMap);\r\n this.updateMeasureNoteMap(track, selector.measure, rest); \r\n return rest;\r\n }\r\n createRepeatMap(repeats: SmoAudioRepeat[]): SmoAudioRepeatMap[] {\r\n let startm = 0;\r\n let j = 0;\r\n const staff = this.score.staves[0];\r\n const repeatMap: SmoAudioRepeatMap[] = [];\r\n const endm = staff.measures.length - 1;\r\n repeats.forEach((repeat) => {\r\n // Include the current start to start of repeat, unless there is no start repeat\r\n if (repeat.startRepeat > 0) {\r\n repeatMap.push({ startMeasure: startm, endMeasure: repeat.startRepeat - 1 });\r\n }\r\n // Include first time through\r\n if (repeat.endRepeat) {\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.endRepeat });\r\n }\r\n startm = repeat.startRepeat;\r\n // nth time through, go to the start of volta 0, then to the start of volta n\r\n if (repeat.endRepeat && repeat.voltas.length < 1) {\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.endRepeat });\r\n startm = repeat.endRepeat + 1;\r\n }\r\n for (j = 1; j < repeat.voltas.length; ++j) {\r\n const volta = repeat.voltas[j];\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.voltas[0].measureIndex - 1 });\r\n // If there are more endings, repeat to first volta\r\n if (j + 1 < repeat.voltas.length) {\r\n repeatMap.push({ startMeasure: volta.measureIndex, endMeasure: repeat.voltas[j + 1].measureIndex - 1 });\r\n } else {\r\n startm = volta.measureIndex;\r\n }\r\n }\r\n });\r\n if (startm <= endm) {\r\n repeatMap.push({ startMeasure: startm, endMeasure: endm });\r\n }\r\n return repeatMap;\r\n }\r\n normalizeVolume(measureIndexMap: Record>) {\r\n let i = 0;\r\n let j = 0;\r\n let runningSum = -1;\r\n const measureKeys = Object.keys(measureIndexMap);\r\n for (i = 0; i < measureKeys.length; ++i) {\r\n const measureNotes = measureIndexMap[i];\r\n if (typeof (measureNotes) === 'undefined') {\r\n continue;\r\n }\r\n const tickKeys = Object.keys(measureNotes);\r\n for (j = 0; j < tickKeys.length; ++j) {\r\n let volumeSum = 0;\r\n let normalize = 1.0;\r\n const tickNotes = measureNotes[parseInt(tickKeys[j], 10)];\r\n if (typeof (tickNotes) === 'undefined') {\r\n continue;\r\n }\r\n volumeSum = tickNotes.map((nn) => nn.volume).reduce((a, b) => a + b);\r\n if (volumeSum > 1.0) {\r\n normalize = 1.0 / volumeSum;\r\n volumeSum = 1.0;\r\n }\r\n if (runningSum < 0) {\r\n runningSum = volumeSum;\r\n }\r\n const diff = Math.abs(runningSum - volumeSum);\r\n if (diff > 0.6) {\r\n const avg = (volumeSum * 3 + runningSum) / 4;\r\n normalize = normalize * avg;\r\n }\r\n runningSum = volumeSum * normalize;\r\n tickNotes.forEach((nn) => {\r\n nn.volume *= normalize;\r\n });\r\n runningSum = volumeSum;\r\n }\r\n }\r\n }\r\n convert(): AudioTracks {\r\n let measureIx = 0;\r\n const trackHash: Record = {};\r\n const measureBeats: number[] = [];\r\n const measureIndexMap = {};\r\n const repeats: SmoAudioRepeat[] = [];\r\n let startRepeat = 0;\r\n const tempoMap: number[] = [];\r\n this.score.staves.forEach((staff, staffIx) => {\r\n let runningKey = staff.measures[0].keySignature;\r\n this.volume = 0;\r\n for (measureIx = 0; measureIx < staff.measures.length; ++measureIx) {\r\n const measure = staff.measures[measureIx];\r\n measure.voices.forEach((voice, voiceIx) => {\r\n let duration = 0;\r\n const trackKey = (this.score.staves.length * voiceIx) + staffIx;\r\n if (typeof (trackHash[trackKey]) === 'undefined') {\r\n trackHash[trackKey] = SmoAudioScore.emptyTrack;\r\n }\r\n const measureSelector = SmoSelector.default;\r\n measureSelector.staff = staffIx;\r\n measureSelector.measure = measureIx;\r\n const track: SmoAudioTrack = trackHash[trackKey];\r\n if (!measure.tempo) {\r\n measure.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n const tempo = measure.tempo.bpm * (measure.tempo.beatDuration / 4096);\r\n // staff 0/voice 0, set track values for the measure\r\n if (voiceIx === 0) {\r\n if (staffIx === 0) {\r\n track.keyMap[0] = runningKey;\r\n measureBeats.push(measure.getMaxTicksVoice() / this.timeDiv);\r\n const startBar = measure.getStartBarline();\r\n const endBar = measure.getEndBarline();\r\n if (startBar.barline === SmoBarline.barlines.startRepeat) {\r\n startRepeat = measureIx;\r\n }\r\n if (endBar.barline === SmoBarline.barlines.endRepeat) {\r\n const repeat: SmoAudioRepeat = { startRepeat, endRepeat: measureIx, voltas: [] };\r\n repeat.voltas = this.getVoltas(repeat, measureIx);\r\n repeats.push(repeat);\r\n }\r\n tempoMap.push(tempo);\r\n }\r\n\r\n const selectorKey = SmoSelector.getMeasureKey(measureSelector);\r\n track.tempoMap[selectorKey] = Math.round(tempo);\r\n if (measure.keySignature !== runningKey) {\r\n runningKey = measure.keySignature;\r\n track.keyMap[measureIx] = runningKey;\r\n }\r\n track.timeSignatureMap[selectorKey] = {\r\n numerator: measure.timeSignature.actualBeats,\r\n denominator: measure.timeSignature.beatDuration\r\n };\r\n }\r\n // If this voice is not in every measure, fill in the space\r\n // in its own channel.\r\n while (track.lastMeasure < measureIx) {\r\n track.notes.push(this.createTrackRest(track, measureBeats[track.lastMeasure], 0,\r\n { staff: staffIx, measure: track.lastMeasure, voice: voiceIx, tick: 0, pitches: [] },\r\n measureIndexMap,\r\n ));\r\n track.lastMeasure += 1;\r\n }\r\n let tupletTicks = 0;\r\n let runningDuration = 0;\r\n voice.notes.forEach((note, noteIx) => {\r\n const selector = {\r\n staff: staffIx, measure: measureIx, voice: voiceIx, tick: noteIx, pitches: []\r\n };\r\n const selection = SmoSelection.selectionFromSelector(this.score, selector) as SmoSelection;\r\n // update staff features of slur/tie/cresc.\r\n this.getSlurInfo(track, selection);\r\n this.getHairpinInfo(track, selection);\r\n const tuplet = measure.getTupletForNote(note);\r\n if (tuplet && tuplet.getIndexOfNote(note) === 0) {\r\n tupletTicks = tuplet.tickCount / this.timeDiv;\r\n }\r\n if (tupletTicks) {\r\n // tuplet likely won't fit evenly in ticks, so\r\n // use remainder in last tuplet note.\r\n if (tuplet && tuplet.getIndexOfNote(note) === tuplet.notes.length - 1) {\r\n duration = tupletTicks;\r\n tupletTicks = 0;\r\n } else {\r\n duration = note.tickCount / this.timeDiv;\r\n tupletTicks -= duration;\r\n }\r\n } else {\r\n duration = note.tickCount / this.timeDiv;\r\n }\r\n if (note.isRest() || note.isSlash()) {\r\n track.notes.push(this.createTrackRest(track, duration, runningDuration, selector, measureIndexMap));\r\n } else {\r\n this.computeVolume(track, selection);\r\n this.createTrackNote(track, selection, duration, runningDuration, measureIndexMap);\r\n }\r\n runningDuration += duration;\r\n });\r\n track.lastMeasure += 1;\r\n });\r\n }\r\n });\r\n // For voices that don't fill out the full piece, fill them in with rests\r\n const tracks = Object.keys(trackHash).map((key) => trackHash[key]);\r\n const maxMeasure = tracks[0].lastMeasure;\r\n tracks.forEach((track) => {\r\n while (track.lastMeasure < maxMeasure) {\r\n const staff = track.notes[0].selector.staff;\r\n const voice = track.notes[0].selector.voice;\r\n const rest: SmoAudioNote = this.createTrackRest(track, measureBeats[track.lastMeasure], 0,\r\n { staff, measure: track.lastMeasure, voice, tick: 0, pitches: [] }, measureIndexMap\r\n );\r\n track.notes.push(rest);\r\n track.lastMeasure += 1;\r\n }\r\n });\r\n const repeatMap = this.createRepeatMap(repeats);\r\n this.normalizeVolume(measureIndexMap);\r\n return { tracks, repeats, repeatMap, measureBeats, tempoMap };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoAttrs, getId } from '../data/common';\r\nimport { SmoMeasure, ISmoBeamGroup } from '../data/measure';\r\nimport { TickMap } from './tickMap';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\n\r\nexport interface SmoBeamGroupParams {\r\n notes: SmoNote[],\r\n voice: number\r\n}\r\n\r\n/**\r\n * Contain a group of {@link SmoNote} used for beaming.\r\n * @internal\r\n */\r\nexport class SmoBeamGroup implements ISmoBeamGroup {\r\n notes: SmoNote[];\r\n attrs: SmoAttrs;\r\n voice: number = 0;\r\n constructor(params: SmoBeamGroupParams) {\r\n let i = 0;\r\n this.voice = params.voice;\r\n this.notes = params.notes;\r\n smoSerialize.vexMerge(this, params);\r\n\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoBeamGroup'\r\n };\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n if (note.tickCount < 4096) {\r\n note.beam_group = this.attrs;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Apply the beam policy set up in node and measure to group the notes into beam groups\r\n * @category SmoTransform\r\n */\r\nexport class SmoBeamer {\r\n static applyBeams(measure: SmoMeasure) {\r\n let i = 0;\r\n let j = 0;\r\n for (i = 0; i < measure.voices.length; ++i) {\r\n const beamer = new SmoBeamer(measure, i);\r\n const tickmap = measure.tickmapForVoice(i);\r\n for (j = 0; j < tickmap.durationMap.length; ++j) {\r\n beamer.beamNote(tickmap, j, measure.voices[i].notes[j]);\r\n }\r\n }\r\n }\r\n measure: SmoMeasure;\r\n duration: number;\r\n meterNumbers: number[];\r\n beamBeats: number;\r\n skipNext: number;\r\n currentGroup: SmoNote[];\r\n constructor(measure: SmoMeasure, voice: number) {\r\n this.measure = measure;\r\n this._removeVoiceBeam(measure, voice);\r\n this.duration = 0;\r\n this.meterNumbers = [measure.timeSignature.actualBeats, measure.timeSignature.beatDuration];\r\n // beam on 1/4 notes in most meter, triple time dotted quarter\r\n this.beamBeats = 2 * 2048;\r\n if (this.meterNumbers[0] % 3 === 0) {\r\n this.beamBeats = 3 * 2048;\r\n }\r\n this.skipNext = 0;\r\n this.currentGroup = [];\r\n }\r\n\r\n get beamGroups() {\r\n return this.measure.beamGroups;\r\n }\r\n _removeVoiceBeam(measure: SmoMeasure, voice: number) {\r\n const beamGroups: ISmoBeamGroup[] = [];\r\n measure.beamGroups.forEach((gr: ISmoBeamGroup) => {\r\n if (gr.voice !== voice) {\r\n beamGroups.push(gr);\r\n }\r\n });\r\n measure.beamGroups = beamGroups;\r\n }\r\n\r\n _completeGroup(voice: number) {\r\n const nrCount: SmoNote[] = this.currentGroup.filter((nn: SmoNote) =>\r\n nn.isRest() === false\r\n );\r\n // don't beam groups of 1\r\n if (nrCount.length > 1) {\r\n this.measure.beamGroups.push(new SmoBeamGroup({\r\n notes: this.currentGroup,\r\n voice\r\n }));\r\n }\r\n }\r\n\r\n _advanceGroup() {\r\n this.currentGroup = [];\r\n this.duration = 0;\r\n }\r\n\r\n // ### _isRemainingTicksBeamable\r\n // look ahead, and see if we need to beam the tuplet now or if we\r\n // can combine current beam with future notes.\r\n _isRemainingTicksBeamable(tickmap: TickMap, index: number) {\r\n let acc = 0;\r\n let i = 0;\r\n if (this.duration >= this.beamBeats) {\r\n return false;\r\n }\r\n acc = this.duration;\r\n for (i = index + 1; i < tickmap.deltaMap.length; ++i) {\r\n acc += tickmap.deltaMap[i];\r\n if (acc === this.beamBeats) {\r\n return true;\r\n }\r\n if (acc > this.beamBeats) {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n beamNote(tickmap: TickMap, index: number, note: SmoNote) {\r\n this.beamBeats = note.beamBeats;\r\n this.duration += tickmap.deltaMap[index];\r\n if (note.noteType === '/') {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n // beam tuplets\r\n if (note.isTuplet) {\r\n const tuplet = this.measure.getTupletForNote(note);\r\n // The underlying notes must have been deleted.\r\n if (!tuplet) {\r\n return;\r\n }\r\n const tupletIndex = tuplet.getIndexOfNote(note);\r\n const ult = tuplet.notes[tuplet.notes.length - 1];\r\n const first = tuplet.notes[0];\r\n\r\n if (first.endBeam) {\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n // is this beamable length-wise\r\n const stemTicks = SmoMusic.closestDurationTickLtEq(note.tickCount) * tuplet.durationMap[tupletIndex];\r\n if (note.noteType === 'n' && stemTicks < 4096) {\r\n this.currentGroup.push(note);\r\n }\r\n // Ultimate note in tuplet\r\n if (ult.attrs.id === note.attrs.id && !this._isRemainingTicksBeamable(tickmap, index)) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n }\r\n return;\r\n }\r\n\r\n // don't beam > 1/4 note in 4/4 time. Don't beam rests.\r\n if (tickmap.deltaMap[index] >= 4096 || (note.isRest() && this.currentGroup.length === 0)) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n this.currentGroup.push(note);\r\n if (note.endBeam) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n }\r\n\r\n if (this.duration === this.beamBeats) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n // If this does not align on a beat, don't beam it\r\n if (this.duration > this.beamBeats) {\r\n this._advanceGroup();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoSelection, SmoSelector } from './selections';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { StaffModifierBase } from '../data/staffModifiers';\r\nimport { SmoTuplet } from '../data/tuplet';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { SmoScore } from '../data/score';\r\nimport { TickMap } from './tickMap';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { getId } from '../data/common';\r\n\r\n/**\r\n * Used to calculate the offset and transposition of a note to be pasted\r\n */\r\nexport interface PasteNote {\r\n note: SmoNote,\r\n selector: SmoSelector,\r\n originalKey: string\r\n}\r\n/**\r\n * Used when pasting staff modifiers like slurs to calculate the\r\n * offset\r\n */\r\nexport interface ModifierPlacement {\r\n modifier: StaffModifierBase,\r\n ticksToStart: number\r\n}\r\n/**\r\n * PasteBuffer holds copied music, and handles the action of pasting the music to\r\n * a different point in the score. It does this by serializing the measure(s) from the source\r\n * and then creating handling the overlap with existing music when deserializaing it.\r\n * @category SmoTransform\r\n */\r\nexport class PasteBuffer {\r\n notes: PasteNote[];\r\n noteIndex: number;\r\n measures: SmoMeasure[];\r\n measureIndex: number;\r\n remainder: number;\r\n replacementMeasures: SmoSelection[];\r\n score: SmoScore | null = null;\r\n tupletNoteMap: Record = { };\r\n modifiers: StaffModifierBase[] = [];\r\n modifiersToPlace: ModifierPlacement[] = [];\r\n destination: SmoSelector = SmoSelector.default;\r\n staffSelectors: SmoSelector[] = [];\r\n constructor() {\r\n this.notes = [];\r\n this.noteIndex = 0;\r\n this.measures = [];\r\n this.measureIndex = -1;\r\n this.remainder = 0;\r\n this.replacementMeasures = [];\r\n }\r\n\r\n setScore(score: SmoScore) {\r\n this.score = score;\r\n }\r\n setSelections(score: SmoScore, selections: SmoSelection[]) {\r\n this.notes = [];\r\n this.noteIndex = 0;\r\n this.score = score;\r\n if (selections.length < 1) {\r\n return;\r\n }\r\n this.tupletNoteMap = {};\r\n const first = selections[0];\r\n const last = selections[selections.length - 1];\r\n if (!first.note || !last.note) {\r\n return;\r\n }\r\n\r\n const startTuplet: SmoTuplet | null = first.measure.getTupletForNote(first.note);\r\n if (startTuplet) {\r\n if (startTuplet.getIndexOfNote(first.note) !== 0) {\r\n return; // can't paste from the middle of a tuplet\r\n }\r\n }\r\n const endTuplet: SmoTuplet | null = last.measure.getTupletForNote(last.note);\r\n if (endTuplet) {\r\n if (endTuplet.getIndexOfNote(last.note) !== endTuplet.notes.length - 1) {\r\n return; // can't paste part of a tuplet.\r\n }\r\n }\r\n this._populateSelectArray(selections);\r\n }\r\n // ### _populateSelectArray\r\n // copy the selected notes into the paste buffer with their original locations.\r\n _populateSelectArray(selections: SmoSelection[]) {\r\n let selector: SmoSelector = SmoSelector.default;\r\n this.modifiers = [];\r\n selections.forEach((selection) => {\r\n selector = JSON.parse(JSON.stringify(selection.selector));\r\n const mod: StaffModifierBase[] = selection.staff.getModifiersAt(selector);\r\n if (mod.length) {\r\n mod.forEach((modifier: StaffModifierBase) => {\r\n const cp: StaffModifierBase = StaffModifierBase.deserialize(modifier.serialize());\r\n cp.attrs.id = getId().toString();\r\n this.modifiers.push(cp);\r\n });\r\n }\r\n const isTuplet: boolean = selection?.note?.isTuplet ?? false;\r\n // We store copy in concert pitch. The originalKey is the original key of the copy.\r\n // the destKey is the originalKey in concert pitch.\r\n const originalKey = selection.measure.keySignature;\r\n const keyOffset = -1 * selection.measure.transposeIndex;\r\n const destKey = SmoMusic.vexKeySignatureTranspose(originalKey, keyOffset).toLocaleLowerCase();\r\n if (isTuplet) {\r\n const tuplet = (selection.measure.getTupletForNote(selection.note) as SmoTuplet);\r\n const index = tuplet.getIndexOfNote(selection.note);\r\n if (index === 0) {\r\n const tupletNotes = tuplet.notes;\r\n const ntuplet = SmoTuplet.cloneTuplet(tuplet, tupletNotes);\r\n this.tupletNoteMap[ntuplet.id] = ntuplet;\r\n ntuplet.notes.forEach((nnote) => {\r\n const xposeNote = SmoNote.transpose(SmoNote.clone(nnote),\r\n [], -1 * selection.measure.transposeIndex, selection.measure.keySignature, destKey) as SmoNote;\r\n this.notes.push({ selector, note: xposeNote, originalKey: destKey });\r\n selector = JSON.parse(JSON.stringify(selector));\r\n selector.tick += 1;\r\n });\r\n }\r\n } else if (selection.note) {\r\n const note = SmoNote.transpose(SmoNote.clone(selection.note),\r\n [], keyOffset, selection.measure.keySignature, destKey) as SmoNote;\r\n this.notes.push({ selector, note, originalKey: destKey });\r\n }\r\n });\r\n this.notes.sort((a, b) =>\r\n SmoSelector.gt(a.selector, b.selector) ? 1 : -1\r\n );\r\n }\r\n\r\n clearSelections() {\r\n this.notes = [];\r\n }\r\n\r\n _findModifier(selector: SmoSelector) {\r\n const rv = this.modifiers.filter((mod) => SmoSelector.eq(selector, mod.startSelector));\r\n return (rv && rv.length) ? rv[0] : null;\r\n }\r\n _findPlacedModifier(selector: SmoSelector) {\r\n const rv = this.modifiers.filter((mod) => SmoSelector.eq(selector, mod.endSelector));\r\n return (typeof(rv) !== 'undefined' && rv.length) ? rv[0] : null;\r\n }\r\n\r\n // ### _populateMeasureArray\r\n // Before pasting, populate an array of existing measures from the paste destination\r\n // so we know how to place the notes.\r\n _populateMeasureArray() {\r\n if (!this.score || !this.destination) {\r\n return;\r\n }\r\n let measureSelection = SmoSelection.measureSelection(this.score, this.destination.staff, this.destination.measure);\r\n if (!measureSelection) {\r\n return;\r\n }\r\n const measure = measureSelection.measure;\r\n while (measure.voices.length <= this.destination.voice) {\r\n measure.populateVoice(measure.voices.length);\r\n }\r\n const tickmap = measure.tickmapForVoice(this.destination.voice);\r\n let currentDuration = tickmap.durationMap[this.destination.tick];\r\n this.measures = [];\r\n this.staffSelectors = [];\r\n this.measures.push(measure);\r\n this.notes.forEach((selection: PasteNote) => {\r\n if (currentDuration + selection.note.tickCount > tickmap.totalDuration && measureSelection !== null) {\r\n // If this note will overlap the measure boundary, the note will be split in 2 with the\r\n // remainder going to the next measure. If they line up exactly, the remainder is 0.\r\n const remainder = (currentDuration + selection.note.tickCount) - tickmap.totalDuration;\r\n currentDuration = remainder;\r\n\r\n measureSelection = SmoSelection.measureSelection(this.score as SmoScore,\r\n measureSelection.selector.staff,\r\n measureSelection.selector.measure + 1);\r\n\r\n // If the paste buffer overlaps the end of the score, we can't paste (TODO: add a measure in this case)\r\n if (measureSelection != null) {\r\n this.measures.push(measureSelection.measure);\r\n }\r\n } else if (measureSelection != null) {\r\n currentDuration += selection.note.tickCount;\r\n }\r\n });\r\n }\r\n\r\n // ### _populatePre\r\n // When we paste, we replace entire measures. Populate the first measure up until the start of pasting.\r\n _populatePre(voiceIndex: number, measure: SmoMeasure, startTick: number, tickmap: TickMap) {\r\n const voice: SmoVoice = {\r\n notes: []\r\n };\r\n let i = 0;\r\n let j = 0;\r\n let ticksToFill = tickmap.durationMap[startTick];\r\n // TODO: bug here, need to handle tuplets in pre-part, create new tuplet\r\n for (i = 0; i < measure.voices[voiceIndex].notes.length; ++i) {\r\n const note = measure.voices[voiceIndex].notes[i];\r\n // If this is a tuplet, clone all the notes at once.\r\n if (note.isTuplet && ticksToFill >= note.tickCount) {\r\n const tuplet = measure.getTupletForNote(note);\r\n if (!tuplet) {\r\n continue; // we remove the tuplet after first iteration\r\n }\r\n const ntuplet: SmoTuplet = SmoTuplet.cloneTuplet(tuplet, tuplet.notes);\r\n voice.notes = voice.notes.concat(ntuplet.notes as SmoNote[]);\r\n measure.removeTupletForNote(note);\r\n measure.tuplets.push(ntuplet);\r\n ticksToFill -= tuplet.tickCount;\r\n } else if (ticksToFill >= note.tickCount) {\r\n ticksToFill -= note.tickCount;\r\n voice.notes.push(SmoNote.clone(note));\r\n } else {\r\n const duration = note.tickCount - ticksToFill;\r\n const durMap = SmoMusic.gcdMap(duration);\r\n for (j = 0; j < durMap.length; ++j) {\r\n const dd = durMap[j];\r\n SmoNote.cloneWithDuration(note, {\r\n numerator: dd,\r\n denominator: 1,\r\n remainder: 0\r\n });\r\n }\r\n ticksToFill = 0;\r\n }\r\n if (ticksToFill < 1) {\r\n break;\r\n }\r\n }\r\n return voice;\r\n }\r\n\r\n // ### _populateVoice\r\n // ### Description:\r\n // Create a new voice for a new measure in the paste destination\r\n _populateVoice(voiceIndex: number): SmoVoice[] {\r\n this._populateMeasureArray();\r\n const measures = this.measures;\r\n let measure = measures[0];\r\n let tickmap = measure.tickmapForVoice(this.destination.voice);\r\n let voice = this._populatePre(voiceIndex, measure, this.destination.tick, tickmap);\r\n let startSelector = JSON.parse(JSON.stringify(this.destination));\r\n this.measureIndex = 0;\r\n const measureVoices = [];\r\n measureVoices.push(voice);\r\n while (this.measureIndex < measures.length) {\r\n measure = measures[this.measureIndex];\r\n while (measure.voices.length <= this.destination.voice) {\r\n const nvoice = { notes : SmoMeasure.getDefaultNotes(measure) };\r\n measure.voices.push(nvoice);\r\n }\r\n tickmap = measure.tickmapForVoice(this.destination.voice);\r\n this._populateNew(voice, measure, tickmap, startSelector);\r\n if (this.noteIndex < this.notes.length && this.measureIndex < measures.length) {\r\n voice = {\r\n notes: []\r\n };\r\n measureVoices.push(voice);\r\n startSelector = {\r\n staff: startSelector.staff,\r\n measure: startSelector.measure,\r\n voice: voiceIndex,\r\n tick: 0\r\n };\r\n this.measureIndex += 1;\r\n startSelector.measure += 1;\r\n } else {\r\n break;\r\n }\r\n }\r\n this._populatePost(voice, voiceIndex, measure, tickmap);\r\n return measureVoices;\r\n }\r\n\r\n static _countTicks(voice: SmoVoice): number {\r\n let voiceTicks = 0;\r\n voice.notes.forEach((note) => {\r\n voiceTicks += note.tickCount;\r\n });\r\n return voiceTicks;\r\n }\r\n\r\n /**\r\n * If the source contains a staff modifier that ends on the source selection, copy the modifier\r\n * @param srcSelector \r\n * @param destSelector \r\n * @param staff \r\n * @returns \r\n */\r\n _populateModifier(srcSelector: SmoSelector, destSelector: SmoSelector, staff: SmoSystemStaff) {\r\n const mod = this._findPlacedModifier(srcSelector);\r\n if (mod && this.score) {\r\n // Don't copy modifiers that cross staff boundaries outside the source staff b/c it's not clear what\r\n // the dest staff should be\r\n if (mod.startSelector.staff !== mod.endSelector.staff && srcSelector.staff !== destSelector.staff) {\r\n return;\r\n }\r\n const repl = StaffModifierBase.deserialize(mod.serialize());\r\n repl.endSelector = JSON.parse(JSON.stringify(destSelector));\r\n const tickOffset = SmoSelection.countTicks(this.score, mod.startSelector, mod.endSelector);\r\n this.modifiersToPlace.push({\r\n modifier: repl,\r\n ticksToStart: tickOffset\r\n });\r\n }\r\n }\r\n /**\r\n * Figure out if the tuplet overlaps an existing tuplet in the target measure\r\n * @param t1 \r\n * @param measure \r\n * @returns \r\n */\r\n static tupletOverlapIndex(t1: SmoTuplet, measure: SmoMeasure) {\r\n for (var i = 0; i < measure.tuplets.length; ++i) {\r\n const tt = measure.tuplets[i];\r\n // TODO: what about other kinds of overlap?\r\n if (tt.startIndex === t1.startIndex) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n /**\r\n * Start copying the paste buffer into the destination by copying the notes and working out\r\n * the measure overlap\r\n * \r\n * @param voice \r\n * @param measure \r\n * @param tickmap \r\n * @param startSelector \r\n * @returns \r\n */\r\n _populateNew(voice: SmoVoice, measure: SmoMeasure, tickmap: TickMap, startSelector: SmoSelector) {\r\n let currentDuration = tickmap.durationMap[startSelector.tick];\r\n let i = 0;\r\n let j = 0;\r\n const totalDuration = tickmap.totalDuration;\r\n while (currentDuration < totalDuration && this.noteIndex < this.notes.length) {\r\n if (!this.score) {\r\n return;\r\n }\r\n const selection = this.notes[this.noteIndex];\r\n const note = selection.note;\r\n if (note.noteType === 'n') {\r\n const pitchAr: number[] = [];\r\n note.pitches.forEach((pitch, ix) => {\r\n pitchAr.push(ix);\r\n });\r\n SmoNote.transpose(note, pitchAr, measure.transposeIndex, selection.originalKey, measure.keySignature);\r\n }\r\n this._populateModifier(selection.selector, startSelector, this.score.staves[selection.selector.staff]);\r\n if (note.isTuplet && note.tupletId) {\r\n const tuplet = this.tupletNoteMap[note.tupletId];\r\n const ntuplet = SmoTuplet.cloneTuplet(tuplet, tuplet.notes);\r\n ntuplet.startIndex = voice.notes.length;\r\n this.noteIndex += ntuplet.notes.length;\r\n startSelector.tick += ntuplet.notes.length;\r\n currentDuration += tuplet.tickCount;\r\n for (i = 0; i < ntuplet.notes.length; ++i) {\r\n const tn = ntuplet.notes[i];\r\n tn.clef = measure.clef;\r\n voice.notes.push(tn);\r\n }\r\n const tix = PasteBuffer.tupletOverlapIndex(ntuplet, measure);\r\n // If this is overlapping an existing tuplet in the target measure, replace it\r\n if (tix >= 0) {\r\n measure.tuplets[tix] = ntuplet;\r\n } else {\r\n measure.tuplets.push(ntuplet);\r\n }\r\n } else if (currentDuration + note.tickCount <= totalDuration && this.remainder === 0) {\r\n // The whole note fits in the measure, paste it.\r\n const nnote = SmoNote.clone(note);\r\n nnote.clef = measure.clef;\r\n voice.notes.push(nnote);\r\n currentDuration += note.tickCount;\r\n this.noteIndex += 1;\r\n startSelector.tick += 1;\r\n } else if (this.remainder > 0) {\r\n // This is a note that spilled over the last measure\r\n const nnote = SmoNote.cloneWithDuration(note, {\r\n numerator: this.remainder,\r\n denominator: 1,\r\n remainder: 0\r\n });\r\n nnote.clef = measure.clef;\r\n voice.notes.push(nnote);\r\n currentDuration += this.remainder;\r\n this.remainder = 0;\r\n } else {\r\n // The note won't fit, so we split it in 2 and paste the remainder in the next measure.\r\n // TODO: tie the last note to this one.\r\n const partial = totalDuration - currentDuration;\r\n const dar = SmoMusic.gcdMap(partial);\r\n for (j = 0; j < dar.length; ++j) {\r\n const ddd = dar[j];\r\n const vnote = SmoNote.cloneWithDuration(note, {\r\n numerator: ddd,\r\n denominator: 1,\r\n remainder: 0\r\n });\r\n voice.notes.push(vnote);\r\n }\r\n currentDuration += partial;\r\n\r\n // Set the remaining length of the current note, this will be added to the\r\n // next measure with the previous note's pitches\r\n this.remainder = note.tickCount - partial;\r\n }\r\n }\r\n }\r\n\r\n // ### _populatePost\r\n // When we paste, we replace entire measures. Populate the last measure from the end of paste to the\r\n // end of the measure with notes in the existing measure.\r\n _populatePost(voice: SmoVoice, voiceIndex: number, measure: SmoMeasure, tickmap: TickMap) {\r\n let startTicks = PasteBuffer._countTicks(voice);\r\n let existingIndex = 0;\r\n const totalDuration = tickmap.totalDuration;\r\n while (startTicks < totalDuration) {\r\n // Find the point in the music where the paste area runs out, or as close as we can get.\r\n existingIndex = tickmap.durationMap.indexOf(startTicks);\r\n existingIndex = (existingIndex < 0) ? measure.voices[voiceIndex].notes.length - 1 : existingIndex;\r\n const note = measure.voices[voiceIndex].notes[existingIndex];\r\n if (note.isTuplet) {\r\n const tuplet = measure.getTupletForNote(note);\r\n if (!tuplet) {\r\n throw 'bad tuplet in copy paste';\r\n }\r\n const ntuplet = SmoTuplet.cloneTuplet(tuplet, tuplet.notes); \r\n startTicks += tuplet.tickCount;\r\n\r\n voice.notes = voice.notes.concat(ntuplet.notes);\r\n measure.tuplets.push(ntuplet);\r\n measure.removeTupletForNote(note);\r\n } else {\r\n const ticksLeft = totalDuration - startTicks;\r\n if (ticksLeft >= note.tickCount) {\r\n startTicks += note.tickCount;\r\n voice.notes.push(SmoNote.clone(note));\r\n } else {\r\n const remainder = totalDuration - startTicks;\r\n voice.notes.push(SmoNote.cloneWithDuration(note, {\r\n numerator: remainder,\r\n denominator: 1,\r\n remainder: 0\r\n }));\r\n startTicks = totalDuration;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _pasteVoiceSer(ser: any, vobj: any, voiceIx: number) {\r\n const voices: any[] = [];\r\n let ix = 0; \r\n ser.voices.forEach((vc: any) => {\r\n if (ix !== voiceIx) {\r\n voices.push(vc);\r\n } else {\r\n voices.push(vobj);\r\n }\r\n ix += 1;\r\n });\r\n // If we are pasting into a measure that doesn't contain this voice, add the voice\r\n if (ser.voices.length <= voiceIx) {\r\n voices.push(vobj);\r\n }\r\n ser.voices = voices;\r\n }\r\n\r\n pasteSelections(selector: SmoSelector) {\r\n let i = 0;\r\n if (this.notes.length < 1) {\r\n return;\r\n }\r\n const maxCutVoice = this.notes.map((n) => n.selector.voice).reduce((a, b) => a > b ? a : b);\r\n const minCutVoice = this.notes.map((n) => n.selector.voice).reduce((a, b) => a > b ? a : b);\r\n const backupNotes: PasteNote[] = [];\r\n this.notes.forEach((bb) => {\r\n const note = (SmoNote.deserialize(bb.note.serialize()));\r\n const selector = JSON.parse(JSON.stringify(bb.selector));\r\n backupNotes.push({ note, selector, originalKey: bb.originalKey });\r\n });\r\n this.destination = selector;\r\n if (minCutVoice === maxCutVoice && minCutVoice > this.destination.voice) {\r\n this.destination.voice = minCutVoice;\r\n \r\n }\r\n this.modifiersToPlace = [];\r\n if (this.notes.length < 1) {\r\n return;\r\n }\r\n if (!this.score) {\r\n return;\r\n }\r\n this.noteIndex = 0;\r\n this.measureIndex = -1;\r\n this.remainder = 0;\r\n const voices = this._populateVoice(this.destination.voice);\r\n const measureSel = JSON.parse(JSON.stringify(this.destination));\r\n const selectors: SmoSelector[] = [];\r\n for (i = 0; i < this.measures.length && i < voices.length; ++i) {\r\n const measure: SmoMeasure = this.measures[i];\r\n const nvoice: SmoVoice = voices[i];\r\n const ser: any = measure.serialize();\r\n // Make sure the key is concert pitch, it is what measure constructor expects\r\n ser.transposeIndex = measure.transposeIndex; // default values are undefined, make sure the transpose is valid\r\n ser.keySignature = SmoMusic.vexKeySigWithOffset(measure.keySignature, -1 * measure.transposeIndex);\r\n ser.timeSignature = measure.timeSignature.serialize();\r\n ser.tempo = measure.tempo.serialize();\r\n const vobj: any = {\r\n notes: []\r\n };\r\n nvoice.notes.forEach((note: SmoNote) => {\r\n vobj.notes.push(note.serialize());\r\n });\r\n\r\n // TODO: figure out how to do this with multiple voices\r\n this._pasteVoiceSer(ser, vobj, this.destination.voice);\r\n const nmeasure = SmoMeasure.deserialize(ser);\r\n // If this is the non-display buffer, don't try to reset the display rectangles.\r\n // Q: Is this even required since we are going to re-render?\r\n // A: yes, because until we do, the replaced measure needs the formatting info\r\n if (measure.svg.logicalBox && measure.svg.logicalBox.width > 0) {\r\n nmeasure.setBox(SvgHelpers.smoBox(measure.svg.logicalBox), 'copypaste');\r\n nmeasure.setX(measure.svg.logicalBox.x, 'copyPaste');\r\n nmeasure.setWidth(measure.svg.logicalBox.width, 'copypaste');\r\n nmeasure.setY(measure.svg.logicalBox.y, 'copypaste');\r\n nmeasure.svg.element = measure.svg.element;\r\n nmeasure.svg.tabElement = measure.svg.tabElement;\r\n }\r\n ['forceClef', 'forceKeySignature', 'forceTimeSignature', 'forceTempo'].forEach((flag) => {\r\n (nmeasure as any)[flag] = (measure.svg as any)[flag];\r\n });\r\n this.score.replaceMeasure(measureSel, nmeasure);\r\n measureSel.measure += 1;\r\n selectors.push(\r\n { staff: selector.staff, measure: nmeasure.measureNumber.measureIndex, voice: 0, tick: 0, pitches: [] }\r\n );\r\n }\r\n this.replacementMeasures = [];\r\n selectors.forEach((selector: SmoSelector) => {\r\n const nsel: SmoSelection | null = SmoSelection.measureSelection(this.score as SmoScore, selector.staff, selector.measure);\r\n if (nsel) {\r\n this.replacementMeasures.push(nsel);\r\n }\r\n });\r\n this.modifiersToPlace.forEach((mod) => {\r\n let selection = SmoSelection.selectionFromSelector(this.score!, mod.modifier.endSelector);\r\n while (selection && mod.ticksToStart !== 0) {\r\n if (mod.ticksToStart < 0) {\r\n selection = SmoSelection.nextNoteSelectionFromSelector(this.score!, selection.selector);\r\n } else {\r\n selection = SmoSelection.lastNoteSelectionFromSelector(this.score!, selection.selector);\r\n }\r\n mod.ticksToStart -= 1 * Math.sign(mod.ticksToStart);\r\n }\r\n if (selection) {\r\n mod.modifier.startSelector = JSON.parse(JSON.stringify(selection.selector));\r\n selection.staff.addStaffModifier(mod.modifier);\r\n }\r\n });\r\n this.notes = backupNotes;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Pitch, PitchLetter, Clef, getId } from '../data/common';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoMeasureParams, SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { SmoSystemStaff, SmoSystemStaffParams } from '../data/systemStaff';\r\nimport { SmoArticulation, SmoGraceNote, SmoLyric, SmoMicrotone, SmoOrnament,\r\n SmoDynamicText, \r\n SmoTabNote} from '../data/noteModifiers';\r\nimport {\r\n SmoRehearsalMark, SmoMeasureText, SmoVolta, SmoMeasureFormat, SmoTempoText, SmoBarline,\r\n TimeSignature, SmoRepeatSymbol\r\n} from '../data/measureModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, SmoTie, StaffModifierBase, SmoTieParams, SmoInstrument, SmoStaffHairpinParams,\r\n SmoSlurParams, SmoInstrumentMeasure, SmoStaffTextBracket, SmoStaffTextBracketParams,\r\n SmoTabStave } from '../data/staffModifiers';\r\nimport { SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SmoTextGroup } from '../data/scoreText';\r\nimport { SmoSelection, SmoSelector, ModifierTab } from './selections';\r\nimport {\r\n SmoDuration, SmoContractNoteActor, SmoStretchNoteActor, SmoMakeTupletActor,\r\n SmoUnmakeTupletActor, SmoContractTupletActor\r\n} from './tickDuration';\r\nimport { SmoBeamer } from './beamers';\r\n/**\r\n * supported operations for {@link SmoOperation.batchSelectionOperation} to change a note's duration\r\n */\r\nexport type BatchSelectionOperation = 'dotDuration' | 'undotDuration' | 'doubleDuration' | 'halveDuration' |\r\n 'doubleGraceNoteDuration' | 'halveGraceNoteDuration';\r\n\r\n/**\r\n * SmoOperation is a collection of static methods that operate on/change/transform the music. Most methods\r\n * take the score, a selection or selection array, and the parameters of the operation.\r\n * @category SmoUtilities\r\n */\r\nexport class SmoOperation {\r\n static setMeasureFormat(score: SmoScore, selection: SmoSelection, value: SmoMeasureFormat) {\r\n if (!score.formattingManager) {\r\n return;\r\n }\r\n score.staves.forEach((staff: SmoSystemStaff) => {\r\n value.formatMeasure(staff.measures[selection.selector.measure]);\r\n });\r\n score.formattingManager.updateMeasureFormat(value);\r\n }\r\n\r\n static addKeySignature(score: SmoScore, selection: SmoSelection, keySignature: string) {\r\n score.addKeySignature(selection.selector.measure, keySignature);\r\n }\r\n static addConnectorDown(score: SmoScore, selections: SmoSelection[], parameters: SmoSystemGroup) {\r\n const msel = SmoSelection.getMeasureList(selections);\r\n const len = msel.length - 1;\r\n if (score.staves.length <= msel[len].selector.staff) {\r\n return;\r\n }\r\n const existing = score.getSystemGroupForStaff(msel[0]);\r\n if (existing && existing.endSelector.staff < selections[len].selector.staff) {\r\n existing.endSelector.staff = msel[len].selector.staff + 1;\r\n } else {\r\n parameters.startSelector = SmoSelector.default;\r\n parameters.startSelector.staff = msel[0].selector.staff;\r\n parameters.startSelector.measure = msel[0].selector.measure;\r\n parameters.endSelector = SmoSelector.default;\r\n parameters.endSelector.staff = msel[len].selector.staff + 1;\r\n parameters.endSelector.measure = msel[len].selector.measure;\r\n score.addOrReplaceSystemGroup(new SmoSystemGroup(parameters));\r\n }\r\n }\r\n static toggleBeamGroup(noteSelection: SmoSelection) {\r\n if (!noteSelection.note) {\r\n return;\r\n }\r\n noteSelection.note.endBeam = !(noteSelection.note.endBeam);\r\n }\r\n static setActiveVoice(score: SmoScore, voiceIx: number) {\r\n score.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n measure.setActiveVoice(voiceIx);\r\n });\r\n });\r\n }\r\n\r\n static addRemoveMicrotone(ignore: any, selections: SmoSelection[], tone: SmoMicrotone) {\r\n selections.forEach((sel) => {\r\n const note = sel.note;\r\n if (note) {\r\n const oldTone = note.getMicrotone(tone.pitchIndex);\r\n if (oldTone) {\r\n note.removeMicrotone(oldTone);\r\n } else {\r\n note.addMicrotone(tone);\r\n }\r\n }\r\n });\r\n }\r\n\r\n static moveStaffUpDown(score: SmoScore, selection: SmoSelection, index: number) {\r\n const index1 = selection.selector.staff;\r\n const index2 = selection.selector.staff + index;\r\n if (index2 < score.staves.length && index2 >= 0) {\r\n score.swapStaves(index1, index2);\r\n }\r\n }\r\n\r\n static depopulateVoice(selection: SmoSelection, voiceIx: number) {\r\n let ix = 0;\r\n const voices: SmoVoice[] = [];\r\n const measure = selection.measure;\r\n measure.voices.forEach((voice) => {\r\n if (measure.voices.length < 2 || ix !== voiceIx) {\r\n voices.push(voice);\r\n }\r\n ix += 1;\r\n });\r\n measure.voices = voices;\r\n\r\n if (measure.getActiveVoice() >= measure.voices.length) {\r\n measure.setActiveVoice(0);\r\n }\r\n }\r\n\r\n static populateVoice(selection: SmoSelection, voiceIx: number) {\r\n selection.measure.populateVoice(voiceIx);\r\n }\r\n\r\n static setTabStave(score: SmoScore, tabStave: SmoTabStave) {\r\n score.staves[tabStave.startSelector.staff].updateTabStave(tabStave);\r\n }\r\n static removeTabStave(score: SmoScore, tabStaves: SmoTabStave[]) {\r\n if (tabStaves.length > 0) {\r\n score.staves[tabStaves[0].startSelector.staff].removeTabStaves(tabStaves);\r\n }\r\n }\r\n static setTimeSignature(score: SmoScore, selections: SmoSelection[], timeSignature: TimeSignature) {\r\n const selectors: SmoSelector[] = [];\r\n let i = 0;\r\n // change the time signature for each stave in the score\r\n selections.forEach((selection) => {\r\n for (i = 0; i < score.staves.length; ++i) {\r\n const measureSel: SmoSelector = SmoSelector.measureSelector(i, selection.selector.measure);\r\n selectors.push(measureSel);\r\n }\r\n });\r\n selectors.forEach((selector: SmoSelector) => {\r\n const rowSelection: SmoSelection = (SmoSelection.measureSelection(score, selector.staff, selector.measure) as SmoSelection);\r\n rowSelection.measure.timeSignature = new TimeSignature(timeSignature);\r\n rowSelection.measure.alignNotesWithTimeSignature();\r\n });\r\n }\r\n\r\n static batchSelectionOperation(score: SmoScore, selections: SmoSelection[], operation: BatchSelectionOperation) {\r\n var measureTicks: { selector: SmoSelector, tickOffset: number }[] = [];\r\n selections.forEach((selection) => {\r\n const tm = selection.measure.tickmapForVoice(selection.selector.voice);\r\n const tickOffset = tm.durationMap[selection.selector.tick];\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n measureTicks.push({\r\n selector,\r\n tickOffset\r\n });\r\n });\r\n measureTicks.forEach((measureTick) => {\r\n const selection = SmoSelection.measureSelection(score, measureTick.selector.staff, measureTick.selector.measure) as SmoSelection;\r\n const tickmap = selection.measure.tickmapForVoice(measureTick.selector.voice);\r\n const ix = tickmap.durationMap.indexOf(measureTick.tickOffset);\r\n if (ix >= 0) {\r\n const nsel = SmoSelection.noteSelection(score, measureTick.selector.staff, measureTick.selector.measure,\r\n measureTick.selector.voice, ix);\r\n (SmoOperation as any)[operation](nsel);\r\n }\r\n });\r\n }\r\n // ## doubleDuration\r\n // ## Description\r\n // double the duration of a note in a measure, at the expense of the following\r\n // note, if possible. Works on tuplets also.\r\n static doubleDuration(selection: SmoSelection) {\r\n const note = selection.note;\r\n const measure = selection.measure;\r\n const tuplet = measure.getTupletForNote(note);\r\n if (!tuplet) {\r\n SmoDuration.doubleDurationNonTuplet(selection);\r\n } else {\r\n SmoDuration.doubleDurationTuplet(selection);\r\n }\r\n return true;\r\n }\r\n\r\n // ## halveDuration\r\n // ## Description\r\n // Replace the note with 2 notes of 1/2 duration, if possible\r\n // Works on tuplets also.\r\n static halveDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n let divisor = 2;\r\n const measure = selection.measure;\r\n const tuplet = measure.getTupletForNote(note);\r\n if (measure.timeSignature.actualBeats % 3 === 0 && note.tickCount === 6144) {\r\n // special behavior, if this is dotted 1/4 in 6/8, split to 3\r\n divisor = 3;\r\n }\r\n if (!tuplet) {\r\n const nticks = note.tickCount / divisor;\r\n if (!SmoMusic.validDurations[nticks]) {\r\n return;\r\n }\r\n SmoContractNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure: selection.measure,\r\n voice: selection.selector.voice,\r\n newTicks: nticks\r\n });\r\n SmoBeamer.applyBeams(measure);\r\n } else {\r\n const startIndex = measure.tupletIndex(tuplet) + tuplet.getIndexOfNote(note);\r\n SmoContractTupletActor.apply({\r\n changeIndex: startIndex,\r\n measure,\r\n voice: selection.selector.voice\r\n });\r\n }\r\n }\r\n\r\n // ## makeTuplet\r\n // ## Description\r\n // Makes a non-tuplet into a tuplet of equal value.\r\n static makeTuplet(selection: SmoSelection, numNotes: number) {\r\n const note = selection.note as SmoNote;\r\n const measure = selection.measure;\r\n if (measure.getTupletForNote(note)) {\r\n return;\r\n }\r\n const nticks = note.tickCount;\r\n SmoMakeTupletActor.apply({\r\n index: selection.selector.tick,\r\n totalTicks: nticks,\r\n numNotes,\r\n measure: selection.measure,\r\n voice: selection.selector.voice\r\n });\r\n }\r\n static addStaffModifier(selection: SmoSelection, modifier: StaffModifierBase) {\r\n selection.staff.addStaffModifier(modifier);\r\n }\r\n static toggleRest(selection: SmoSelection) {\r\n selection.note?.toggleRest();\r\n }\r\n static toggleSlash(selection: SmoSelection) {\r\n selection.note?.toggleSlash();\r\n }\r\n\r\n static makeRest(selection: SmoSelection) {\r\n selection.note?.makeRest();\r\n }\r\n static makeNote(selection: SmoSelection) {\r\n selection.note?.makeNote();\r\n }\r\n static setNoteHead(selections: SmoSelection[], noteHead: string) {\r\n selections.forEach((selection: SmoSelection) => {\r\n selection.note?.setNoteHead(noteHead);\r\n });\r\n }\r\n\r\n static addGraceNote(selection: SmoSelection, g: SmoGraceNote, offset: number) {\r\n selection.note?.addGraceNote(g, offset);\r\n }\r\n\r\n static removeGraceNote(selection: SmoSelection, offset: number) {\r\n selection.note?.removeGraceNote(offset);\r\n }\r\n\r\n static doubleGraceNoteDuration(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.ticks.numerator = mm.ticks.numerator * 2;\r\n });\r\n }\r\n static halveGraceNoteDuration(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.ticks.numerator = mm.ticks.numerator / 2;\r\n });\r\n }\r\n\r\n static toggleGraceNoteCourtesy(selection: any, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm: SmoGraceNote) => {\r\n mm.pitches.forEach((pitch: Pitch) => {\r\n // eslint-disable-next-line\r\n pitch.cautionary = pitch.cautionary ? false : true;\r\n });\r\n });\r\n }\r\n static toggleGraceNoteEnharmonic(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.pitches.forEach((pitch) => {\r\n SmoNote.toggleEnharmonic(pitch);\r\n });\r\n });\r\n }\r\n\r\n static transposeGraceNotes(selection: SmoSelection, modifiers: SmoGraceNote[], offset: number) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm: SmoGraceNote) => {\r\n const par: Pitch[] = [];\r\n if (!mm) {\r\n console.warn('bad modifier grace note');\r\n return;\r\n }\r\n mm.pitches.forEach((pitch) => {\r\n par.push(SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(pitch) + offset));\r\n });\r\n mm.pitches = par;\r\n });\r\n }\r\n\r\n static slashGraceNotes(selections: ModifierTab[] | ModifierTab) {\r\n if (!Array.isArray(selections)) {\r\n selections = [selections];\r\n }\r\n // TODO: modifiers on artifacts should be typed\r\n selections.forEach((mm: any) => {\r\n if (mm.modifier && mm.modifier.ctor === 'SmoGraceNote') {\r\n mm.modifier.slash = !mm.modifier.slash;\r\n }\r\n });\r\n }\r\n\r\n // ## unmakeTuplet\r\n // ## Description\r\n // Makes a tuplet into a single with the duration of the whole tuplet\r\n static unmakeTuplet(selection: SmoSelection) {\r\n const note = selection.note;\r\n const measure = selection.measure;\r\n if (!measure.getTupletForNote(note)) {\r\n return;\r\n }\r\n const tuplet = measure.getTupletForNote(note);\r\n if (tuplet === null) {\r\n return;\r\n }\r\n const startIndex = measure.tupletIndex(tuplet);\r\n const endIndex = tuplet.notes.length + startIndex - 1;\r\n\r\n SmoUnmakeTupletActor.apply({\r\n startIndex,\r\n endIndex,\r\n measure,\r\n voice: selection.selector.voice\r\n });\r\n }\r\n\r\n // ## dotDuration\r\n // ## Description\r\n // Add a dot to a note, if possible, and make the note ahead of it shorter\r\n // to compensate.\r\n static dotDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n const measure = selection.measure;\r\n const nticks = SmoMusic.getNextDottedLevel(note.tickCount);\r\n if (nticks === note.tickCount) {\r\n return;\r\n }\r\n // Don't dot if the thing on the right of the . is too small\r\n const dotCount = SmoMusic.smoTicksToVexDots(nticks);\r\n const multiplier = Math.pow(2, dotCount);\r\n const baseDot = SmoMusic.closestDurationTickLtEq(nticks) / (multiplier * 2);\r\n if (baseDot <= 128) {\r\n return;\r\n }\r\n // If this is the ultimate note in the measure, we can't increase the length\r\n if (selection.selector.tick + 1 === selection.measure.voices[selection.selector.voice].notes.length) {\r\n return;\r\n }\r\n if (selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].tickCount > note.tickCount) {\r\n console.log('too long');\r\n return;\r\n }\r\n // is dot too short?\r\n if (!SmoMusic.validDurations[selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].tickCount / 2]) {\r\n return;\r\n }\r\n SmoStretchNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure,\r\n voice: selection.selector.voice,\r\n newTicks: nticks\r\n });\r\n }\r\n\r\n // ## undotDuration\r\n // ## Description\r\n // Add the value of the last dot to the note, increasing length and\r\n // reducing the number of dots.\r\n static undotDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n const measure = selection.measure;\r\n const nticks = SmoMusic.getPreviousDottedLevel(note.tickCount);\r\n if (nticks === note.tickCount) {\r\n return;\r\n }\r\n SmoContractNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure,\r\n voice: selection.selector.voice,\r\n newTicks: nticks\r\n });\r\n }\r\n\r\n static transposeScore(score: SmoScore, offset: number) {\r\n score.staves.forEach((staff, staffIx) => {\r\n staff.measures.forEach((measure, measureIx) => {\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note, tickIx) => {\r\n const selection = SmoSelection.noteSelection(\r\n score,staffIx, measureIx, voiceIx, tickIx);\r\n if (selection) {\r\n this.transpose(selection, offset);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }\r\n static updateTabNote(selections: SmoSelection[], tabNote: SmoTabNote) {\r\n selections.forEach((sel) => {\r\n if (sel.note) {\r\n sel.note.setTabNote(tabNote);\r\n }\r\n });\r\n }\r\n static removeTabNote(selections: SmoSelection[]) {\r\n selections.forEach((sel) => {\r\n if (sel.note) {\r\n sel.note.clearTabNote();\r\n }\r\n });\r\n }\r\n // ## transpose\r\n // ## Description\r\n // Transpose the selected note, trying to find a key-signature friendly value\r\n static transpose(selection: SmoSelection, offset: number) {\r\n let trans: Pitch;\r\n let transInt: number = 0;\r\n let i: number = 0;\r\n if (typeof (selection.selector.pitches) === 'undefined') {\r\n selection.selector.pitches = [];\r\n }\r\n const measure = selection.measure;\r\n const note = selection.note;\r\n if (measure && note) {\r\n const pitchar: Pitch[] = [];\r\n const tabStave: SmoTabStave | undefined = selection.staff.getTabStaveForMeasure(selection.selector);\r\n note.pitches.forEach((opitch, pitchIx) => {\r\n // Only translate selected pitches\r\n const shouldXpose = selection.selector.pitches.length === 0 ||\r\n selection.selector.pitches.indexOf(pitchIx) >= 0;\r\n\r\n // Translate the pitch, ignoring enharmonic\r\n trans = shouldXpose ? SmoMusic.getKeyOffset(opitch, offset)\r\n : JSON.parse(JSON.stringify(opitch));\r\n if (shouldXpose) {\r\n trans = SmoMusic.getEnharmonicInKey(trans, measure.keySignature);\r\n if (!trans.accidental) {\r\n trans.accidental = 'n';\r\n }\r\n transInt = SmoMusic.smoPitchToInt(trans);\r\n\r\n // Look through the earlier notes in the measure and try\r\n // to find an equivalent note, and convert it if it exists.\r\n measure.voices.forEach((voice) => {\r\n for (i = 0; i < selection.selector.tick\r\n && i < voice.notes.length; ++i) {\r\n const prevNote = voice.notes[i];\r\n // eslint-disable-next-line\r\n prevNote.pitches.forEach((prevPitch: Pitch) => {\r\n const prevInt = SmoMusic.smoPitchToInt(prevPitch);\r\n if (prevInt === transInt) {\r\n trans = JSON.parse(JSON.stringify(prevPitch));\r\n }\r\n });\r\n }\r\n });\r\n }\r\n pitchar.push(trans as Pitch);\r\n });\r\n note.pitches = pitchar;\r\n // If this note has a tab stave, try to preserve the assigned string.\r\n // If not possible, find the default string/fret for the note\r\n if (note.tabNote) {\r\n note.tabNote.positions.forEach((pp, ix) => {\r\n if (pp.fret + offset > 0) {\r\n pp.fret = pp.fret + offset;\r\n } else if (tabStave && note.pitches.length > ix) {\r\n const position = SmoTabStave.getDefaultPositionForStaff(note.pitches[ix], tabStave.stringPitches, offset);\r\n pp.fret = position.fret;\r\n pp.string = position.string;\r\n } else {\r\n pp.fret = 0; \r\n }\r\n });\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // ## setPitch\r\n // ## Description:\r\n // pitches can be either an array, a single pitch, or a letter. In the latter case,\r\n // the letter value appropriate for the key signature is used, e.g. c in A major becomes\r\n // c#\r\n static setPitch(selection: SmoSelection, pitches: Pitch[]) {\r\n let i = 0;\r\n const measure = selection.measure;\r\n const note = selection.note as SmoNote;\r\n if (typeof (note) === 'undefined') {\r\n console.warn('set Pitch on invalid note');\r\n return;\r\n }\r\n note.makeNote();\r\n // TODO allow hint for octave\r\n const octave = note.pitches[0].octave;\r\n note.pitches = [];\r\n if (!Array.isArray(pitches)) {\r\n pitches = [pitches];\r\n }\r\n const earlierAccidental = (pitch: Pitch) => {\r\n selection.measure.voices.forEach((voice) => {\r\n for (i = 0; i < selection.selector.tick\r\n && i < voice.notes.length; ++i) {\r\n const prevNote = voice.notes[i];\r\n if (prevNote === null || prevNote.pitches === null) {\r\n console.log('this will die null');\r\n }\r\n prevNote.pitches.forEach((prevPitch: Pitch) => {\r\n if (prevNote.noteType === 'n' && prevPitch.letter === pitch.letter) {\r\n pitch.accidental = prevPitch.accidental;\r\n }\r\n });\r\n }\r\n });\r\n };\r\n pitches.forEach((pitch) => {\r\n if (typeof (pitch) === 'string') {\r\n const letter = SmoMusic.getKeySignatureKey(pitch[0], measure.keySignature);\r\n pitch = {\r\n letter: letter[0] as PitchLetter,\r\n accidental: letter.length > 1 ? letter.substring(1) : '',\r\n octave\r\n };\r\n }\r\n earlierAccidental(pitch);\r\n note.pitches.push(pitch);\r\n });\r\n }\r\n\r\n static toggleCourtesyAccidental(selection: SmoSelection) {\r\n let toBe: boolean = false;\r\n const note = selection.note as SmoNote;\r\n if (!selection.selector.pitches || selection.selector.pitches.length === 0) {\r\n const ps: Pitch[] = [];\r\n note.pitches.forEach((pitch) => {\r\n const p = JSON.parse(JSON.stringify(pitch));\r\n ps.push(p);\r\n p.cautionary = !(pitch.cautionary);\r\n });\r\n note.pitches = ps;\r\n } else {\r\n toBe = !(note.pitches[selection.selector.pitches[0]].cautionary);\r\n }\r\n SmoOperation.courtesyAccidental(selection, toBe);\r\n }\r\n\r\n static courtesyAccidental(pitchSelection: SmoSelection, toBe: boolean) {\r\n pitchSelection.selector.pitches.forEach((pitchIx) => {\r\n (pitchSelection.note as SmoNote).pitches[pitchIx].cautionary = toBe;\r\n });\r\n }\r\n\r\n static toggleEnharmonic(pitchSelection: SmoSelection) {\r\n if (pitchSelection.selector.pitches.length === 0) {\r\n pitchSelection.selector.pitches.push(0);\r\n }\r\n const pitch = (pitchSelection.note as SmoNote).pitches[pitchSelection.selector.pitches[0]];\r\n SmoNote.toggleEnharmonic(pitch);\r\n }\r\n\r\n static addDynamic(selection: SmoSelection, dynamic: SmoDynamicText) {\r\n (selection.note as SmoNote).addDynamic(dynamic);\r\n }\r\n\r\n static removeDynamic(selection: SmoSelection, dynamic: SmoDynamicText) {\r\n (selection.note as SmoNote).removeDynamic(dynamic);\r\n }\r\n\r\n static beamSelections(score: SmoScore, selections: SmoSelection[]) {\r\n const start = selections[0].selector;\r\n let cur = selections[0].selector;\r\n const beamGroup: SmoNote[] = [];\r\n let ticks = 0;\r\n selections.forEach((selection) => {\r\n const note = selection.note as SmoNote;\r\n if (SmoSelector.sameNote(start, selection.selector) ||\r\n (SmoSelector.sameMeasure(selection.selector, cur) &&\r\n cur.tick === selection.selector.tick - 1)) {\r\n ticks += note.tickCount;\r\n cur = selection.selector;\r\n beamGroup.push(note);\r\n }\r\n });\r\n if (beamGroup.length) {\r\n beamGroup.forEach((note) => {\r\n note.beamBeats = ticks;\r\n note.endBeam = false;\r\n });\r\n beamGroup[beamGroup.length - 1].endBeam = true;\r\n // Make sure the last note of the previous beam is the end of this beam group.\r\n if (selections[0].selector.tick > 0) {\r\n const ps = JSON.parse(JSON.stringify(selections[0].selector));\r\n ps.tick -= 1;\r\n const previous: SmoSelection | null = SmoSelection.noteFromSelector(score, ps);\r\n if (previous?.note && previous.note.tickCount < 4096) {\r\n previous.note.endBeam = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n static toggleBeamDirection(selections: SmoSelection[]) {\r\n const note0 = selections[0].note as SmoNote;\r\n note0.toggleFlagState();\r\n selections.forEach((selection) => {\r\n const note = selection.note as SmoNote;\r\n note.flagState = note0.flagState;\r\n });\r\n }\r\n\r\n static toggleOrnament(selection: SmoSelection, ornament: SmoOrnament) {\r\n (selection.note as SmoNote).toggleOrnament(ornament);\r\n }\r\n\r\n static toggleArticulation(selection: SmoSelection, articulation: SmoArticulation) {\r\n (selection.note as SmoNote).toggleArticulation(articulation);\r\n }\r\n\r\n static addEnding(score: SmoScore, parameters: SmoVolta) {\r\n let m = 0;\r\n let s = 0;\r\n const startMeasure = parameters.startBar;\r\n const endMeasure = parameters.endBar;\r\n\r\n // Ending ID ties all the instances of an ending across staves\r\n parameters.endingId = getId().toString();\r\n score.staves.forEach((staff) => {\r\n m = 0;\r\n staff.measures.forEach((measure) => {\r\n if (m === startMeasure) {\r\n const pp = JSON.parse(JSON.stringify(parameters));\r\n pp.startSelector = {\r\n staff: s,\r\n measure: startMeasure\r\n };\r\n pp.endSelector = {\r\n staff: s,\r\n measure: endMeasure\r\n };\r\n const ending = new SmoVolta(pp);\r\n measure.addNthEnding(ending);\r\n }\r\n m += 1;\r\n });\r\n s += 1;\r\n });\r\n }\r\n\r\n static removeEnding(score: SmoScore, ending: SmoVolta) {\r\n let i = 0;\r\n score.staves.forEach((staff) => {\r\n // bug\r\n // Due to deleted measures, volta might not match up so look through all measures.\r\n for (i = 0; i < staff.measures.length; ++i) {\r\n staff.measures[i].removeNthEnding(ending);\r\n }\r\n });\r\n }\r\n\r\n static addTextGroup(score: SmoScore, textGroup: SmoTextGroup) {\r\n score.addTextGroup(textGroup);\r\n }\r\n\r\n static removeTextGroup(score: SmoScore, textGroup: SmoTextGroup) {\r\n score.removeTextGroup(textGroup);\r\n }\r\n\r\n static addMeasureText(score: SmoScore, selection: SmoSelection, measureText: SmoMeasureText) {\r\n const current = selection.measure.getMeasureText();\r\n // TODO: should we allow multiples per position\r\n current.forEach((mod) => {\r\n selection.measure.removeMeasureText(mod.attrs.id);\r\n });\r\n selection.measure.addMeasureText(measureText);\r\n }\r\n\r\n static removeMeasureText(score: SmoScore, selection: SmoSelection, mt: SmoMeasureText) {\r\n selection.measure.removeMeasureText(mt.attrs.id);\r\n }\r\n\r\n static removeRehearsalMark(score: SmoScore, selection: SmoSelection) {\r\n score.staves.forEach((staff) => {\r\n staff.removeRehearsalMark(selection.selector.measure);\r\n });\r\n }\r\n\r\n static addRehearsalMark(score: SmoScore, selection: SmoSelection, rehearsalMark: SmoRehearsalMark) {\r\n score.staves.forEach((staff) => {\r\n const mt = new SmoRehearsalMark(rehearsalMark.serialize());\r\n staff.addRehearsalMark(selection.selector.measure, mt);\r\n });\r\n }\r\n\r\n static addTempo(score: SmoScore, selection: SmoSelection, tempo: SmoTempoText) {\r\n score.staves.forEach((staff) => {\r\n staff.addTempo(tempo, selection.selector.measure);\r\n });\r\n }\r\n\r\n static setMeasureBarline(score: SmoScore, selection: SmoSelection, barline: SmoBarline) {\r\n const mm = selection.selector.measure;\r\n let ix = 0;\r\n score.staves.forEach(() => {\r\n const s2: SmoSelection | null = SmoSelection.measureSelection(score, ix, mm);\r\n s2?.measure.setBarline(barline);\r\n ix += 1;\r\n });\r\n }\r\n\r\n static setRepeatSymbol(score: SmoScore, selection: SmoSelection, sym: SmoRepeatSymbol) {\r\n let ix = 0;\r\n const mm = selection.selector.measure;\r\n score.staves.forEach(() => {\r\n const s2 = SmoSelection.measureSelection(score, ix, mm);\r\n s2?.measure.setRepeatSymbol(sym);\r\n ix += 1;\r\n });\r\n }\r\n\r\n // ## interval\r\n // Add a pitch at the specified interval to the chord in the selection.\r\n static interval(selection: SmoSelection, interval: number) {\r\n const measure = selection.measure;\r\n const note = selection.note as SmoNote;\r\n let pitch: Pitch = {} as Pitch;\r\n\r\n // TODO: figure out which pitch is selected\r\n pitch = note.pitches[0];\r\n if (interval > 0) {\r\n pitch = note.pitches[note.pitches.length - 1];\r\n }\r\n pitch = SmoMusic.getIntervalInKey(pitch, measure.keySignature, interval);\r\n if (pitch) {\r\n note.pitches.push(pitch);\r\n note.pitches.sort((x, y) =>\r\n SmoMusic.smoPitchToInt(x) - SmoMusic.smoPitchToInt(y)\r\n );\r\n return true;\r\n }\r\n return false;\r\n }\r\n static addOrReplaceBracket(modifier: SmoStaffTextBracket, fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n fromSelection.staff.addTextBracket(modifier);\r\n }\r\n static ritard(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.RITARD;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static accelerando(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.ACCEL;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static crescendoBracket(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.CRESCENDO;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static dimenuendo(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.CRESCENDO;\r\n const modifier = new SmoStaffTextBracket(params);\r\n fromSelection.staff.addTextBracket(modifier);\r\n return modifier;\r\n }\r\n static crescendo(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffHairpinParams = SmoStaffHairpin.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.hairpinType = SmoStaffHairpin.types.CRESCENDO;\r\n const modifier = new SmoStaffHairpin(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n\r\n static decrescendo(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffHairpinParams = SmoStaffHairpin.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.hairpinType = SmoStaffHairpin.types.DECRESCENDO;\r\n const modifier = new SmoStaffHairpin(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n static tie(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n // By default, just tie all the pitches to all the other pitches in order\r\n const lines = SmoTie.createLines(fromSelection.note as SmoNote, toSelection.note as SmoNote);\r\n const params: SmoTieParams = SmoTie.defaults;\r\n params.startSelector = fromSelection.selector;\r\n params.endSelector = toSelection.selector;\r\n params.lines = lines;\r\n const modifier = new SmoTie(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n\r\n static getSlurDefaultParameters(selections: SmoSelection[]) {\r\n const lastIndex = selections.length - 1;\r\n const note1 = selections[0].note;\r\n const note2 = selections[lastIndex].note;\r\n const inners = [];\r\n let minLine = -1;\r\n let maxLine = 0;\r\n if (selections.length > 2) {\r\n for (var i = 1; i < selections.length - 1; ++i) {\r\n inners.push(selections[i]);\r\n }\r\n }\r\n if (note1 === null || note2 === null) {\r\n throw('no note in slur selections');\r\n } \r\n }\r\n /**\r\n * Heuristically determine how a slur should be formatted based on the notes. Determine control points,\r\n * offset, and alignment\r\n * \r\n * ## Note: Vexflow slurs consider `top` to mean the furthest point from the note head, which could be the top\r\n * or the bottom of the note. It also considers yoffset to be negative if inverted is set. Head means close to the\r\n * note head.\r\n * @param score \r\n * @param fromSelection \r\n * @param toSelection \r\n * @returns \r\n */\r\n static getDefaultSlurDirection(score: SmoScore, fromSelector: SmoSelector, toSelector: SmoSelector, \r\n forcePosition: number, forceOrientation: number):SmoSlurParams {\r\n const params: SmoSlurParams = SmoSlur.defaults;\r\n const sels = SmoSelector.order(fromSelector, toSelector);\r\n params.startSelector = JSON.parse(JSON.stringify(sels[0]));\r\n params.endSelector = JSON.parse(JSON.stringify(sels[1]));\r\n const fromSelection = SmoSelection.noteFromSelector(score, fromSelector);\r\n if (!fromSelection) {\r\n return params;\r\n }\r\n // Get all selections within the slur\r\n const selections = SmoSelection.innerSelections(score, sels[0], sels[1]).filter((ff) => ff.selector.voice === fromSelection.selector.voice);\r\n const dirs: Record = {};\r\n const beamGroups: Record = {};\r\n let startDir = SmoNote.flagStates.up;\r\n let mixed = false;\r\n let endDir = SmoNote.flagStates.up;\r\n let firstGap = 0;\r\n let lastGap = 0;\r\n if (selections.length < 1) {\r\n return new SmoSlur(params);\r\n }\r\n \r\n selections.forEach((selection, selectionIx) => {\r\n const note = selection.note!;\r\n if (note.beam_group) {\r\n beamGroups[note.beam_group.id] = true;\r\n } else {\r\n beamGroups[note.attrs.id] = true;\r\n }\r\n // Find the gap between the first and second note, and also between last 2. If they are far apart,\r\n // increase the control points so the slurs don't run into the notes\r\n if (selectionIx === 1) {\r\n const lastNote = selections[0].note!;\r\n firstGap = Math.abs(SmoMusic.pitchToStaffLine(note.clef as Clef, note.pitches[0]) - \r\n SmoMusic.pitchToStaffLine(lastNote.clef as Clef, lastNote.pitches[0]));\r\n }\r\n if (selectionIx === selections.length - 2 && selections.length > 2) {\r\n const nextNote = selections[selectionIx + 1].note!;\r\n lastGap = Math.abs(SmoMusic.pitchToStaffLine(note.clef as Clef, note.pitches[0]) - \r\n SmoMusic.pitchToStaffLine(nextNote.clef as Clef, nextNote.pitches[0]));\r\n }\r\n const fstate = SmoMusic.flagStateFromNote(note.clef as Clef, note);\r\n // Keep track of the number of stem directions, so we can determine if the flags are mixed direction\r\n // the rules are a little different for mixed - we always try to put the slur on (the real) top of the staff.\r\n dirs[fstate] = true;\r\n if (selectionIx === 0) {\r\n startDir = fstate;\r\n }\r\n if (selectionIx === selections.length - 1) {\r\n endDir = fstate;\r\n }\r\n });\r\n params.invert = false;\r\n mixed = Object.keys(dirs).length > 1;\r\n // If the notes are beamed together, we assume the beams point in the same direction\r\n if (Object.keys(beamGroups).length < 2) {\r\n mixed = false;\r\n }\r\n if (forcePosition === SmoSlur.positions.ABOVE) {\r\n params.position = startDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n params.position_end = endDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n if (startDir === SmoNote.flagStates.up && forceOrientation !== SmoSlur.orientations.DOWN) {\r\n params.invert = true;\r\n }\r\n } else if (forcePosition === SmoSlur.positions.BELOW) {\r\n params.position = startDir === SmoNote.flagStates.up ? SmoSlur.positions.HEAD : SmoSlur.positions.TOP;\r\n params.position_end = endDir === SmoNote.flagStates.up ? SmoSlur.positions.HEAD : SmoSlur.positions.TOP;\r\n if (startDir === SmoNote.flagStates.down && forceOrientation !== SmoSlur.orientations.UP) {\r\n params.invert = true;\r\n }\r\n } else {\r\n if (mixed) {\r\n // special case: slur 2 notes, note heads close, connect the note heads\r\n // to keep a flat arc\r\n if (selections.length === 2 && firstGap < 3) {\r\n params.position = SmoSlur.positions.HEAD;\r\n params.position_end = SmoSlur.positions.HEAD;\r\n params.xOffset = 5;\r\n } else {\r\n params.position = startDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n params.position_end = endDir === SmoNote.flagStates.up ? SmoSlur.positions.TOP : SmoSlur.positions.HEAD;\r\n if (firstGap >= 3 || lastGap >= 3) {\r\n params.cp1y = 45;\r\n params.cp2y = 45;\r\n }\r\n }\r\n params.invert = endDir === SmoNote.flagStates.up;\r\n } \r\n if (!mixed) {\r\n params.position = SmoSlur.positions.HEAD;\r\n params.position_end = SmoSlur.positions.HEAD;\r\n if (firstGap >= 2 || lastGap >= 2) {\r\n params.cp1y = 45;\r\n params.cp2y = 45;\r\n params.yOffset += 10;\r\n } else {\r\n params.yOffset += 10;\r\n }\r\n }\r\n }\r\n if (selections.length === 2) {\r\n params.xOffset = 0;\r\n }\r\n return params;\r\n }\r\n static slur(score: SmoScore, fromSelection: SmoSelection, toSelection: SmoSelection): SmoSlurParams {\r\n const params = SmoOperation.getDefaultSlurDirection(score, fromSelection.selector, toSelection.selector, SmoSlur.positions.AUTO, SmoSlur.orientations.AUTO);\r\n const modifier: SmoSlur = new SmoSlur(params);\r\n fromSelection.staff.addStaffModifier(modifier);\r\n return modifier;\r\n }\r\n static addStaff(score: SmoScore, parameters: SmoSystemStaffParams): SmoSystemStaff {\r\n return score.addStaff(parameters);\r\n }\r\n static removeStaff(score: SmoScore, index: number) {\r\n score.removeStaff(index);\r\n }\r\n\r\n static transposeChords(smoNote: SmoNote, offset: number, key: string) {\r\n const chords = smoNote.getModifiers('SmoLyric');\r\n chords.forEach((ll) => {\r\n const lyric = ll as SmoLyric;\r\n if (lyric.parser === SmoLyric.parsers.chord) {\r\n const tx = lyric.getText();\r\n // Look for something that looks like a key name\r\n if (tx.length >= 1 && (tx[0].toUpperCase() >= 'A'\r\n && tx[0].toUpperCase() <= 'G')) {\r\n // toffset is 2 if the key has b or # in it\r\n let toffset = 1;\r\n let newText = tx[0];\r\n if (tx.length > 0 && tx[1] === 'b' || tx[1] === '#') {\r\n newText += tx[1];\r\n toffset = 2;\r\n }\r\n // Transpose the key, as if it were a key signature (octave has no meaning)\r\n let nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(\r\n SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(newText))) + offset);\r\n nkey = JSON.parse(JSON.stringify(SmoMusic.getEnharmonicInKey(nkey, key)));\r\n newText = nkey.letter.toUpperCase();\r\n\r\n // new key may have different length, e.g. Bb to B natural\r\n if (nkey.accidental !== 'n') {\r\n newText += nkey.accidental;\r\n }\r\n newText += tx.substr(toffset, tx.length - toffset);\r\n lyric.setText(newText);\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * Compute new map based on current instrument selections, adjusting existing instruments as required\r\n * @param instrument\r\n * @param selections\r\n */\r\n static changeInstrument(instrument: SmoInstrument, selections: SmoSelection[]) {\r\n const measureSel = SmoSelection.getMeasureList(selections);\r\n const measureIndex = measureSel[0].selector.measure;\r\n const measureEnd = measureIndex + (measureSel.length - 1);\r\n instrument.startSelector = JSON.parse(JSON.stringify(measureSel[0].selector));\r\n instrument.endSelector = JSON.parse(JSON.stringify(measureSel[measureSel.length - 1].selector));\r\n const instMap: Record = {};\r\n const staffArray: SmoInstrumentMeasure[] = SmoSystemStaff.getStaffInstrumentArray(measureSel[0].staff.measureInstrumentMap);\r\n instMap[measureIndex] = instrument;\r\n staffArray.forEach((ar) => {\r\n if (ar.instrument.endSelector.measure < measureIndex || ar.instrument.startSelector.measure > measureEnd) {\r\n // No overlap, juse use the original instrument\r\n instMap[ar.instrument.startSelector.measure] = new SmoInstrument(ar.instrument);\r\n } else if (ar.instrument.startSelector.measure < measureIndex) {\r\n // overlap on left\r\n const split1 = new SmoInstrument(ar.instrument);\r\n split1.startSelector.measure = ar.instrument.startSelector.measure;\r\n instMap[split1.startSelector.measure] = split1;\r\n split1.endSelector.measure = measureIndex - 1;\r\n if (ar.instrument.endSelector.measure > measureEnd) {\r\n // overlap on left and right\r\n const split2 = new SmoInstrument(ar.instrument);\r\n split2.startSelector.measure = measureEnd + 1;\r\n split2.endSelector.measure = ar.instrument.endSelector.measure;\r\n instMap[split2.startSelector.measure] = split2;\r\n }\r\n instMap[ar.instrument.startSelector.measure] = new SmoInstrument(ar.instrument);\r\n } else if (ar.instrument.endSelector.measure > measureEnd) {\r\n // overlap on right only\r\n const split1 = new SmoInstrument(ar.instrument);\r\n split1.startSelector.measure = measureEnd + 1;\r\n instMap[split1.startSelector.measure] = split1;\r\n }\r\n });\r\n selections[0].staff.measureInstrumentMap = instMap;\r\n selections[0].staff.updateInstrumentOffsets();\r\n }\r\n static computeMultipartRest(score: SmoScore) {\r\n let i = 0;\r\n let j = 0;\r\n const measureRanges: Record = {};\r\n const measureCount = score.staves[0].measures.length;\r\n if (score.staves[0].partInfo.expandMultimeasureRests === true) {\r\n return;\r\n }\r\n while (i < measureCount) {\r\n let forceRest = score.staves[0].measures[i].format.forceRest;\r\n if (score.isMultimeasureRest(i, true, forceRest)) {\r\n for (j = i + 1; j < measureCount; ++j) {\r\n const restBreak = score.staves[0].measures[j].format.restBreak;\r\n forceRest = score.staves[0].measures[j].format.forceRest; \r\n if (!score.isMultimeasureRest(j, false, forceRest) || restBreak) {\r\n break; \r\n }\r\n }\r\n if (j - i >= 2) {\r\n measureRanges[i] = j;\r\n }\r\n i = j;\r\n } else {\r\n const startMeasure = i;\r\n score.staves.forEach((staff) => {\r\n staff.measures[startMeasure].svg.hideMultimeasure = false;\r\n });\r\n i += 1;\r\n }\r\n }\r\n const multiKeys = Object.keys(measureRanges).map((x) => parseInt(x, 10));\r\n multiKeys.forEach((key) => {\r\n const endMeasure = measureRanges[key];\r\n score.staves.forEach((staff) => {\r\n const mmLength = endMeasure - key;\r\n const svg = staff.measures[key].svg;\r\n svg.multimeasureLength = mmLength;\r\n if (svg.multimeasureLength > 1) {\r\n svg.multimeasureEndBarline = staff.measures[endMeasure - 1].getEndBarline().barline;\r\n }\r\n staff.measures[key].svg.hideMultimeasure = false;\r\n for (i = key + 1; i < endMeasure; ++i) {\r\n staff.measures[i].svg.hideMultimeasure = true;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Editing operations are performed on selections. A selection can be different things, from a single pitch\r\n * to many notes. These classes standardize some standard selection operations.\r\n * SmoSelector\r\n * @module /smo/xform/selections\r\n */\r\nimport { SmoScore, SmoModifier } from '../data/score';\r\nimport { SmoMeasure } from '../data/measure';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SvgBox, SvgPoint } from '../data/common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\n/**\r\n * Modifier tab is a modifier and its bounding box, that can be tabbed to with the keyboard\r\n */\r\n export interface ModifierTab {\r\n modifier: SmoModifier,\r\n selection: SmoSelection | null,\r\n box: SvgBox,\r\n index: number\r\n}\r\n\r\n/**\r\n * There are 2 parts to a selection: the actual musical bits that are selected, and the\r\n * indices that define what was selected. This is the latter. The actual object does not\r\n * have any methods so there is no constructor.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoSelector {\r\n static get default(): SmoSelector {\r\n return {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: -1,\r\n pitches: []\r\n };\r\n }\r\n staff: number = 0;\r\n measure: number = 0;\r\n voice: number = 0;\r\n tick: number = -1;\r\n pitches: number[] = [];\r\n\r\n static measureSelector(staff: number, measure: number): SmoSelector {\r\n return { staff, measure, voice: 0, tick: 0, pitches: [] };\r\n }\r\n\r\n // TODO: tick in selector s/b tickIndex\r\n static sameNote(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice === sel2.voice\r\n && sel1.tick === sel2.tick);\r\n }\r\n static sameMeasure(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.measure === sel2.measure);\r\n }\r\n\r\n static sameStaff(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return sel1.staff === sel2.staff;\r\n }\r\n /**\r\n * Return gt, not considering the voice (e.g. gt in time)\r\n * @param sel1 \r\n * @param sel2 \r\n */\r\n static gtInTime(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.measure > sel2.measure) ||\r\n (sel1.measure === sel2.measure && sel1.tick > sel2.tick);\r\n }\r\n\r\n // ## return true if sel1 > sel2.\r\n static gt(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n // Note: voice is not considered b/c it's more of a vertical component\r\n // Note further: sometimes we need to consider voice\r\n return (sel1.staff > sel2.staff) ||\r\n (sel1.staff === sel2.staff && sel1.measure > sel2.measure) ||\r\n (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice > sel2.voice) ||\r\n (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice === sel2.voice && sel1.tick > sel2.tick);\r\n }\r\n\r\n static eq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.voice === sel2.voice && sel1.measure === sel2.measure && sel1.tick === sel2.tick);\r\n }\r\n static neq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return !(SmoSelector.eq(sel1, sel2));\r\n }\r\n\r\n static lt(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.gt(sel2, sel1);\r\n }\r\n\r\n static gteq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.gt(sel1, sel2) || SmoSelector.eq(sel1, sel2);\r\n }\r\n static lteq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.lt(sel1, sel2) || SmoSelector.eq(sel1, sel2);\r\n }\r\n // Return 2 selectors in score order, rv[0] is first in time.\r\n static order(a: SmoSelector, b: SmoSelector): SmoSelector[] {\r\n if (SmoSelector.gtInTime(a, b)) {\r\n return [b, a];\r\n }\r\n return [a, b];\r\n }\r\n\r\n // ### getNoteKey\r\n // Get a key useful for a hash map of notes.\r\n static getNoteKey(selector: SmoSelector) {\r\n return '' + selector.staff + '-' + selector.measure + '-' + selector.voice + '-' + selector.tick;\r\n }\r\n\r\n static getMeasureKey(selector: SmoSelector) {\r\n return '' + selector.staff + '-' + selector.measure;\r\n }\r\n\r\n // return true if testSel is contained in the selStart to selEnd range.\r\n static contains(testSel: SmoSelector, selStart: SmoSelector, selEnd: SmoSelector) {\r\n const geStart =\r\n selStart.measure < testSel.measure ||\r\n (selStart.measure === testSel.measure && selStart.tick <= testSel.tick);\r\n const leEnd =\r\n selEnd.measure > testSel.measure ||\r\n (selEnd.measure === testSel.measure && testSel.tick <= selEnd.tick);\r\n\r\n return geStart && leEnd;\r\n }\r\n\r\n // create a hashmap key for a single note, used to organize modifiers\r\n static selectorNoteKey(selector: SmoSelector) {\r\n return 'staff-' + selector.staff + '-measure-' + selector.measure + '-voice-' + selector.voice + '-tick-' + selector.tick;\r\n }\r\n}\r\n/**\r\n * The fields in a selection. We have the 5 musical cardinal directions of staff, measure, note, pitches, \r\n * and a selector. The pitches are indices\r\n * */\r\nexport interface SmoSelectionParams {\r\n selector: SmoSelector,\r\n _staff: SmoSystemStaff,\r\n _measure: SmoMeasure,\r\n _note?: SmoNote,\r\n _pitches?: number[],\r\n type?: string,\r\n box?: SvgBox\r\n}\r\n\r\n/**\r\n * A selection is a {@link SmoSelector} and a set of references to musical elements, like measure etc.\r\n * The staff and measure are always a part of the selection, and possible a voice and note,\r\n * and one or more pitches. Selections can also be made from the UI by clicking on an element\r\n * or navigating to an element with the keyboard.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoSelection {\r\n selector: SmoSelector = {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: -1,\r\n pitches: []\r\n };\r\n _staff: SmoSystemStaff;\r\n _measure: SmoMeasure;\r\n _note: SmoNote | null;\r\n _pitches: number[] = [];\r\n box: SvgBox | null = null;\r\n scrollBox: SvgPoint | null = null;\r\n // ### measureSelection\r\n // A selection that does not contain a specific note\r\n static measureSelection(score: SmoScore, staffIndex: number, measureIndex: number): SmoSelection | null {\r\n staffIndex = staffIndex !== null ? staffIndex : score.activeStaff;\r\n const selector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n };\r\n if (score.staves.length <= staffIndex) {\r\n return null;\r\n }\r\n const staff = score.staves[staffIndex];\r\n if (staff.measures.length <= measureIndex) {\r\n return null;\r\n }\r\n const measure = staff.measures[measureIndex];\r\n\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n type: 'measure'\r\n });\r\n }\r\n\r\n static measuresInColumn(score: SmoScore, staffIndex: number): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n for (i = 0; i < score.staves.length; ++i) {\r\n const sel = SmoSelection.measureSelection(score, i, staffIndex);\r\n if (sel) {\r\n rv.push(sel);\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n // ### noteSelection\r\n // a selection that specifies a note in the score\r\n static noteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n staffIndex = staffIndex != null ? staffIndex : score.activeStaff;\r\n measureIndex = typeof (measureIndex) !== 'undefined' ? measureIndex : 0;\r\n voiceIndex = typeof (voiceIndex) !== 'undefined' ? voiceIndex : 0;\r\n const staff = score.staves[staffIndex];\r\n if (!staff) {\r\n return null;\r\n }\r\n const measure = staff.measures[measureIndex];\r\n if (!measure) {\r\n return null;\r\n }\r\n if (measure.voices.length <= voiceIndex) {\r\n return null;\r\n }\r\n if (measure.voices[voiceIndex].notes.length <= tickIndex) {\r\n return null;\r\n }\r\n const note = measure.voices[voiceIndex].notes[tickIndex];\r\n const selector: SmoSelector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: voiceIndex,\r\n tick: tickIndex,\r\n pitches: []\r\n };\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: [],\r\n type: 'note'\r\n });\r\n }\r\n\r\n // ### noteFromSelector\r\n // return a selection based on the passed-in selector\r\n static noteFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection| null {\r\n return SmoSelection.noteSelection(score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n\r\n // ### selectionsToEnd\r\n // Select all the measures from startMeasure to the end of the score in the given staff.\r\n static selectionsToEnd(score: SmoScore, staff: number, startMeasure: number): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n for (i = startMeasure; i < score.staves[staff].measures.length; ++i) {\r\n const selection = SmoSelection.measureSelection(score, staff, i);\r\n if (selection) {\r\n rv.push(selection);\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n // ### renderedNoteSelection\r\n // return the appropriate type of selection from the selector, based on the selector.\r\n static selectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n if (typeof (selector.pitches) !== 'undefined' && selector.pitches.length) {\r\n return SmoSelection.pitchSelection(score,\r\n selector.staff, selector.measure, selector.voice, selector.tick, selector.pitches);\r\n }\r\n if (typeof (selector.tick) === 'number') {\r\n return SmoSelection.noteFromSelector(score, selector);\r\n }\r\n return SmoSelection.measureSelection(score, selector.staff, selector.measure);\r\n }\r\n\r\n static pitchSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number, pitches: number[]) {\r\n staffIndex = staffIndex !== null ? staffIndex : score.activeStaff;\r\n measureIndex = typeof (measureIndex) !== 'undefined' ? measureIndex : 0;\r\n voiceIndex = typeof (voiceIndex) !== 'undefined' ? voiceIndex : 0;\r\n const staff = score.staves[staffIndex];\r\n const measure = staff.measures[measureIndex];\r\n const note = measure.voices[voiceIndex].notes[tickIndex];\r\n pitches = typeof (pitches) !== 'undefined' ? pitches : [];\r\n const pa: number[] = [];\r\n pitches.forEach((ix) => {\r\n pa.push(JSON.parse(JSON.stringify(note.pitches[ix])));\r\n });\r\n const selector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: voiceIndex,\r\n tick: tickIndex,\r\n pitches\r\n };\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: pa,\r\n type: 'pitches'\r\n });\r\n }\r\n /**\r\n * Return the selection that is tickCount ticks after the current selection.\r\n * @param score \r\n * @param selection \r\n * @param tickCount \r\n * @returns \r\n */\r\n static advanceTicks(score: SmoScore, selection: SmoSelection, tickCount: number): SmoSelection | null {\r\n let rv: SmoSelection | null = null;\r\n if (!selection.note) {\r\n return rv;\r\n }\r\n const staff = selection.staff;\r\n rv = SmoSelection.noteFromSelector(score, selection.selector);\r\n while (rv !== null && rv.note !== null && tickCount > 0) {\r\n const prevSelector = JSON.parse(JSON.stringify(rv.selector));\r\n const measureTicks = rv.measure.getMaxTicksVoice();\r\n const tickIx = rv.selector.tick;\r\n const voiceId = rv.measure.voices.length > rv.selector.voice ? rv.selector.voice : 0;\r\n // If the destination is more than a measure away, increment measure\r\n if (tickIx === 0 && tickCount >= measureTicks) {\r\n tickCount -= measureTicks;\r\n if (staff.measures.length > rv.selector.measure + 1) {\r\n rv.selector.measure += 1;\r\n rv.selector.tick = 0;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n }\r\n } else if (selection.measure.voices[voiceId].notes.length > tickIx + 1) {\r\n // else count the tick and advance to next tick\r\n tickCount -= rv.note.tickCount;\r\n rv.selector.tick += 1;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n } else if (staff.measures.length > rv.selector.measure + 1) {\r\n // else advance to next measure and start counting ticks there\r\n tickCount -= rv.note.tickCount;\r\n rv.selector.measure += 1;\r\n rv.selector.tick = 0;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n }\r\n if (rv !== null && SmoSelector.eq(prevSelector, rv.selector)) {\r\n // No progress, start and end the same\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Count the number of tick indices between selector 1 and selector 2;\r\n * @param score \r\n * @param sel1 \r\n * @param sel2 \r\n * @returns \r\n */\r\n static countTicks(score: SmoScore, sel1: SmoSelector, sel2: SmoSelector): number {\r\n if (SmoSelector.eq(sel1, sel2)) {\r\n return 0;\r\n }\r\n const backwards = SmoSelector.gt(sel1, sel2);\r\n let ticks = 0;\r\n const startSelection = SmoSelection.selectionFromSelector(score, sel1);\r\n let endSelection = SmoSelection.selectionFromSelector(score, sel2);\r\n while (endSelection !== null && startSelection !== null) {\r\n if (SmoSelector.eq(startSelection.selector, endSelection.selector)) {\r\n break;\r\n }\r\n if (backwards) {\r\n endSelection = SmoSelection.nextNoteSelectionFromSelector(score, endSelection.selector);\r\n ticks -= 1;\r\n } else {\r\n endSelection = SmoSelection.lastNoteSelectionFromSelector(score, endSelection.selector);\r\n ticks += 1;\r\n }\r\n }\r\n return ticks;\r\n }\r\n\r\n // ## nextNoteSelection\r\n // ## Description:\r\n // Return the next note in this measure, or the first note of the next measure, if it exists.\r\n static nextNoteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n const nextTick = tickIndex + 1;\r\n const nextMeasure = measureIndex + 1;\r\n const staff = score.staves[staffIndex];\r\n const measure = staff.measures[measureIndex];\r\n if (measure.voices[voiceIndex].notes.length > nextTick) {\r\n return SmoSelection.noteSelection(score, staffIndex, measureIndex, voiceIndex, nextTick);\r\n }\r\n if (staff.measures.length > nextMeasure) {\r\n return SmoSelection.noteSelection(score, staffIndex, nextMeasure, voiceIndex, 0);\r\n }\r\n return null;\r\n }\r\n /**\r\n * \r\n * @param score \r\n * @param selector \r\n * @returns \r\n */\r\n static innerSelections(score: SmoScore, startSelector: SmoSelector, endSelector: SmoSelector) {\r\n const sels = SmoSelector.order(startSelector, endSelector);\r\n let start = JSON.parse(JSON.stringify(sels[0]));\r\n const rv: SmoSelection[] = [];\r\n let cur = SmoSelection.selectionFromSelector(score, start);\r\n if (cur) {\r\n rv.push(cur);\r\n }\r\n while (cur && SmoSelector.lt(start, sels[1])) {\r\n cur = SmoSelection.nextNoteSelection(score, start.staff, start.measure, start.voice, start.tick);\r\n if (cur) {\r\n start = JSON.parse(JSON.stringify(cur.selector));\r\n rv.push(cur);\r\n }\r\n }\r\n return rv;\r\n }\r\n static nextNoteSelectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n return SmoSelection.nextNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n static lastNoteSelectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n return SmoSelection.lastNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n\r\n static lastNoteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n const lastTick = tickIndex - 1;\r\n const lastMeasure = measureIndex - 1;\r\n const staff = score.staves[staffIndex];\r\n let measure = staff.measures[measureIndex];\r\n if (tickIndex > 0) {\r\n return SmoSelection.noteSelection(score, staffIndex, measureIndex, voiceIndex, lastTick);\r\n }\r\n if (lastMeasure >= 0) {\r\n measure = staff.measures[lastMeasure];\r\n if (voiceIndex >= measure.voices.length) {\r\n return null;\r\n }\r\n const noteIndex = measure.voices[voiceIndex].notes.length - 1;\r\n return SmoSelection.noteSelection(score, staffIndex, lastMeasure, voiceIndex, noteIndex);\r\n }\r\n if (measureIndex === 0 && voiceIndex === 0 && tickIndex === 0) {\r\n return null;\r\n }\r\n return SmoSelection.noteSelection(score, staffIndex, 0, 0, 0);\r\n }\r\n static lastNoteSelectionNonRest(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n let rv = SmoSelection.lastNoteSelection(score, staffIndex, measureIndex, voiceIndex, tickIndex);\r\n let best = rv;\r\n while (best !== null && best.note !== null) {\r\n if (!best.note.isRest()) {\r\n rv = best;\r\n break;\r\n }\r\n const selector = best.selector;\r\n best = SmoSelection.lastNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n return rv;\r\n }\r\n static nextNoteSelectionNonRest(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n let rv = SmoSelection.nextNoteSelection(score, staffIndex, measureIndex, voiceIndex, tickIndex);\r\n let best = rv;\r\n while (best !== null && best.note !== null) {\r\n if (!best.note.isRest()) {\r\n rv = best;\r\n break;\r\n }\r\n const selector = best.selector;\r\n best = SmoSelection.nextNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n return rv;\r\n }\r\n // ### getMeasureList\r\n // Gets the list of measures in an array from the selections\r\n static getMeasureList(selections: SmoSelection[]): SmoSelection[] {\r\n let i = 0;\r\n let cur = {};\r\n const rv: SmoSelection[] = [];\r\n if (!selections.length) {\r\n return rv;\r\n }\r\n cur = selections[0].selector.measure;\r\n for (i = 0; i < selections.length; ++i) {\r\n const sel: SmoSelection = selections[i];\r\n if (i === 0 || (sel.selector.measure !== cur)) {\r\n const _staff: SmoSystemStaff = sel._staff;\r\n const _measure: SmoMeasure = sel._measure;\r\n rv.push(\r\n new SmoSelection({\r\n selector: {\r\n staff: sel.selector.staff,\r\n measure: sel.selector.measure,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n },\r\n _staff,\r\n _measure\r\n }));\r\n }\r\n cur = sel.selector.measure;\r\n }\r\n return rv;\r\n }\r\n static getMeasuresBetween(score: SmoScore, fromSelector: SmoSelector, toSelector: SmoSelector): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n if (fromSelector.staff !== toSelector.staff) {\r\n return rv;\r\n }\r\n for (i = fromSelector.measure; i <= toSelector.measure; ++i) {\r\n const sel = SmoSelection.measureSelection(score, fromSelector.staff, i);\r\n if (sel) {\r\n rv.push(sel);\r\n }\r\n }\r\n return rv;\r\n }\r\n // ### selectionsSameMeasure\r\n // Return true if the selections are all in the same measure. Used to determine what\r\n // type of undo we need.\r\n static selectionsSameMeasure(selections: SmoSelection[]) {\r\n let i = 0;\r\n if (selections.length < 2) {\r\n return true;\r\n }\r\n const sel1 = selections[0].selector;\r\n for (i = 1; i < selections.length; ++i) {\r\n if (!SmoSelector.sameMeasure(sel1, selections[i].selector)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n static selectionsSameStaff(selections: SmoSelection[]) {\r\n let i = 0;\r\n if (selections.length < 2) {\r\n return true;\r\n }\r\n const sel1 = selections[0].selector;\r\n for (i = 1; i < selections.length; ++i) {\r\n if (!SmoSelector.sameStaff(sel1, selections[i].selector)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n constructor(params: SmoSelectionParams) {\r\n this.selector = {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n };\r\n this._staff = params._staff;\r\n this._measure = params._measure;\r\n this._note = null;\r\n this._pitches = [];\r\n smoSerialize.vexMerge(this, params);\r\n }\r\n\r\n get staff() {\r\n return this._staff;\r\n }\r\n get measure() {\r\n return this._measure;\r\n }\r\n\r\n get note() {\r\n return this._note;\r\n }\r\n get pitches() {\r\n return this.selector.pitches;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoTuplet } from '../data/tuplet';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoSelector, SmoSelection } from './selections';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { Ticks } from '../data/common';\r\nimport { TickMap } from './tickMap';\r\n\r\n/**\r\n * Abstract class for classes that modifiy duration.\r\n * @param note the note we're iterating over\r\n * @param tickmap the tickmap for the measure\r\n * @param index the index into the tickmap\r\n * @returns the note or notes that replace this one. Null if this note is no longer in the measure\r\n */\r\nexport abstract class TickIteratorBase {\r\n // es\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number): SmoNote | SmoNote[] | null {\r\n return null;\r\n }\r\n}\r\n/**\r\n * SmoDuration: change the duration of a note, maybe at the expense of some\r\n * other note.\r\n * @category SmoTransform\r\n */\r\nexport class SmoDuration {\r\n /**\r\n * doubleDurationNonTuplet\r\n * double the duration of the selection, consuming the next note or\r\n * possibly split it in half and consume that. Simple operation so\r\n * do it inline\r\n * @param selection\r\n * @returns\r\n */\r\n static doubleDurationNonTuplet(selection: SmoSelection) {\r\n const note: SmoNote | null = selection?.note;\r\n const measure: SmoMeasure = selection.measure;\r\n if (note === null) {\r\n return;\r\n }\r\n const selector: SmoSelector = selection.selector;\r\n const voices: SmoVoice[] | undefined = measure?.voices;\r\n const voice: SmoVoice = voices[selector.voice];\r\n const notes: SmoNote[] = voice?.notes;\r\n let i = 0;\r\n const nticks: Ticks = { numerator: note.tickCount * 2, denominator: 1, remainder: 0 };\r\n const replNote = SmoNote.cloneWithDuration(note, nticks);\r\n let ticksUsed = note.tickCount;\r\n const newNotes = [];\r\n for (i = 0; i < selector.tick; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n for (i = selector.tick + 1; i < notes.length; ++i) {\r\n const nnote = notes[i];\r\n ticksUsed += nnote.tickCount;\r\n if (ticksUsed >= nticks.numerator) {\r\n break;\r\n }\r\n }\r\n const remainder = ticksUsed - nticks.numerator;\r\n if (remainder < 0) {\r\n return;\r\n }\r\n newNotes.push(replNote);\r\n if (remainder > 0) {\r\n const lmap = SmoMusic.gcdMap(remainder);\r\n lmap.forEach((duration) => {\r\n newNotes.push(SmoNote.cloneWithDuration(note, duration));\r\n });\r\n }\r\n\r\n for (i = i + 1; i < notes.length; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n // If any tuplets got removed while extending the notes,\r\n voice.notes = newNotes;\r\n const measureTuplets: SmoTuplet[] = [];\r\n const allTuplets: SmoTuplet[] | undefined = measure?.tuplets;\r\n allTuplets?.forEach((tuplet: SmoTuplet) => {\r\n const testNotes = measure?.tupletNotes(tuplet);\r\n if (testNotes?.length === tuplet.notes.length) {\r\n measureTuplets.push(tuplet);\r\n }\r\n });\r\n measure.tuplets = measureTuplets;\r\n }\r\n\r\n /**\r\n * double duration, tuplet form. Increase the first selection and consume the\r\n * following note. Also a simple operation\r\n * @param selection\r\n * @returns\r\n */\r\n static doubleDurationTuplet(selection: SmoSelection) {\r\n let i: number = 0;\r\n const measure: SmoMeasure = selection.measure;\r\n const note: SmoNote | null = selection?.note;\r\n if (note === null) {\r\n return;\r\n }\r\n const notes = measure.voices[selection.selector.voice].notes;\r\n const tuplet: SmoTuplet | null = measure.getTupletForNote(note);\r\n if (tuplet === null) {\r\n return;\r\n }\r\n const startIndex = selection.selector.tick - tuplet.startIndex;\r\n\r\n const startLength: number = tuplet.notes.length;\r\n tuplet.combine(startIndex, startIndex + 1);\r\n if (tuplet.notes.length >= startLength) {\r\n return;\r\n }\r\n const newNotes = [];\r\n\r\n for (i = 0; i < tuplet.startIndex; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n tuplet.notes.forEach((note) => {\r\n newNotes.push(note);\r\n });\r\n for (i = i + tuplet.notes.length + 1; i < notes.length; ++i) {\r\n newNotes.push(notes[i]);\r\n }\r\n measure.voices[selection.selector.voice].notes = newNotes;\r\n }\r\n}\r\n/**\r\n * SmoTickIterator\r\n * this is a local helper class that follows a pattern of iterating of the notes. Most of the\r\n * duration changers iterate over a selection, and return:\r\n * - A note, if the duration changes\r\n * - An array of notes, if the notes split\r\n * - null if the note stays the same\r\n * - empty array, remove the note from the group\r\n * @category SmoTransform\r\n */\r\nexport class SmoTickIterator {\r\n notes: SmoNote[] = [];\r\n newNotes: SmoNote[] = [];\r\n actor: TickIteratorBase;\r\n measure: SmoMeasure;\r\n voice: number = 0;\r\n keySignature: string;\r\n constructor(measure: SmoMeasure, actor: TickIteratorBase, voiceIndex: number) {\r\n this.notes = measure.voices[voiceIndex].notes;\r\n this.measure = measure;\r\n this.voice = typeof (voiceIndex) === 'number' ? voiceIndex : 0;\r\n this.newNotes = [];\r\n // eslint-disable-next-line\r\n this.actor = actor;\r\n this.keySignature = 'C';\r\n }\r\n static nullActor(note: SmoNote) {\r\n return note;\r\n }\r\n /**\r\n *\r\n * @param measure {SmoMeasure}\r\n * @param actor {}\r\n * @param voiceIndex\r\n */\r\n static iterateOverTicks(measure: SmoMeasure, actor: TickIteratorBase, voiceIndex: number) {\r\n measure.clearBeamGroups();\r\n const transformer = new SmoTickIterator(measure, actor, voiceIndex);\r\n transformer.run();\r\n measure.voices[voiceIndex].notes = transformer.notes;\r\n }\r\n // ### transformNote\r\n // call the actors for each note, and put the result in the note array.\r\n // The note from the original array is copied and sent to each actor.\r\n //\r\n // Because the resulting array can have a different number of notes than the existing\r\n // array, the actors communicate with the transformer in the following, jquery-ish\r\n // but somewhat unintuitive way:\r\n //\r\n // 1. if the actor returns null, the next actor is called and the results of that actor are used\r\n // 2. if all the actors return null, the copy is used.\r\n // 3. if a note object is returned, that is used for the current tick and no more actors are called.\r\n // 4. if an array of notes is returned, it is concatenated to the existing note array and no more actors are called.\r\n // Note that *return note;* and *return [note];* produce the same result.\r\n // 5. if an empty array [] is returned, that copy is not added to the result. The note is effectively deleted.\r\n iterateOverTick(tickmap: TickMap, index: number, note: SmoNote) {\r\n const actor: TickIteratorBase = this.actor;\r\n const newNote: SmoNote[] | SmoNote | null = actor.iterateOverTick(note, tickmap, index);\r\n if (newNote === null) {\r\n this.newNotes.push(note); // no change\r\n return note;\r\n }\r\n if (Array.isArray(newNote)) {\r\n if (newNote.length === 0) {\r\n return null;\r\n }\r\n this.newNotes = this.newNotes.concat(newNote);\r\n return null;\r\n }\r\n this.newNotes.push(newNote as SmoNote);\r\n return null;\r\n }\r\n\r\n run() {\r\n let i = 0;\r\n const tickmap = this.measure.tickmapForVoice(this.voice);\r\n for (i = 0; i < tickmap.durationMap.length; ++i) {\r\n this.iterateOverTick(tickmap, i, this.measure.voices[this.voice].notes[i]);\r\n }\r\n this.notes = this.newNotes;\r\n return this.newNotes;\r\n }\r\n}\r\n/**\r\n * used to create a contract/dilate operation on a note via {@link SmoContractNoteActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoContractNoteParams {\r\n startIndex: number,\r\n measure: SmoMeasure,\r\n voice: number,\r\n newTicks: number\r\n}\r\n/**\r\n * Contract the duration of a note, filling in the space with another note\r\n * or rest.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoContractNoteActor extends TickIteratorBase {\r\n startIndex: number;\r\n tickmap: TickMap;\r\n newTicks: number;\r\n measure: SmoMeasure;\r\n voice: number;\r\n constructor(params: SmoContractNoteParams) {\r\n super();\r\n this.startIndex = params.startIndex;\r\n this.measure = params.measure;\r\n this.voice = params.voice;\r\n this.tickmap = this.measure.tickmapForVoice(this.voice);\r\n this.newTicks = params.newTicks;\r\n }\r\n static apply(params: SmoContractNoteParams) {\r\n const actor = new SmoContractNoteActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure,\r\n actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number): SmoNote | SmoNote[] | null {\r\n let i = 0;\r\n if (index === this.startIndex) {\r\n const notes: SmoNote[] = [];\r\n const noteCount = Math.floor(note.ticks.numerator / this.newTicks);\r\n let remainder = note.ticks.numerator;\r\n /**\r\n * Replace 1 note with noteCOunt notes of newTIcks duration\r\n * old map:\r\n * d . d . .\r\n * new map:\r\n * d d d . .\r\n */\r\n for (i = 0; i < noteCount; ++i) {\r\n // first note, retain modifiers so clone. Otherwise just\r\n // retain pitches\r\n if (i === 0) {\r\n const nn = SmoNote.clone(note);\r\n nn.ticks = { numerator: this.newTicks, denominator: 1, remainder: 0 };\r\n notes.push(nn);\r\n } else {\r\n const nnote = new SmoNote(SmoNote.defaults);\r\n nnote.clef = note.clef;\r\n nnote.pitches = JSON.parse(JSON.stringify(note.pitches));\r\n nnote.ticks = { numerator: this.newTicks, denominator: 1, remainder: 0 };\r\n nnote.beamBeats = note.beamBeats;\r\n notes.push(nnote);\r\n }\r\n remainder = remainder - this.newTicks;\r\n }\r\n\r\n // make sure remnainder is not too short\r\n if (remainder > 0) {\r\n if (remainder < 128) {\r\n return null;\r\n }\r\n const nnote = new SmoNote(SmoNote.defaults);\r\n nnote.clef = note.clef;\r\n nnote.pitches = JSON.parse(JSON.stringify(note.pitches));\r\n nnote.ticks = { numerator: remainder, denominator: 1, remainder: 0 };\r\n nnote.beamBeats = note.beamBeats;\r\n notes.push(nnote);\r\n }\r\n return notes;\r\n }\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * used to create a contract/dilate operation on a note via {@link SmoContractTupletActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoContractTupletParams {\r\n changeIndex: number,\r\n measure: SmoMeasure,\r\n voice: number\r\n}\r\n/**\r\n * Shrink the duration of a note in a tuplet by creating additional notes\r\n * @category SmoTransform\r\n */\r\nexport class SmoContractTupletActor extends TickIteratorBase {\r\n changeIndex: number;\r\n measure: SmoMeasure;\r\n voice: number;\r\n tuplet: SmoTuplet | null;\r\n oldLength: number = 0;\r\n tupletIndex: number = 0;\r\n splitIndex: number = 0;\r\n constructor(params: SmoContractTupletParams) {\r\n super();\r\n this.changeIndex = params.changeIndex;\r\n this.measure = params.measure;\r\n this.voice = params.voice;\r\n this.tuplet = this.measure.getTupletForNote(this.measure.voices[this.voice].notes[this.changeIndex]);\r\n if (this.tuplet === null) {\r\n return;\r\n }\r\n this.oldLength = this.tuplet.notes.length;\r\n this.tupletIndex = this.measure.tupletIndex(this.tuplet);\r\n this.splitIndex = this.changeIndex - this.tupletIndex;\r\n this.tuplet.split(this.splitIndex);\r\n }\r\n static apply(params: SmoContractTupletParams) {\r\n const actor = new SmoContractTupletActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (this.tuplet === null) {\r\n return null;\r\n }\r\n if (index < this.tupletIndex) {\r\n return note;\r\n }\r\n if (index >= this.tupletIndex + this.oldLength) {\r\n return note;\r\n }\r\n if (index === this.changeIndex) {\r\n return this.tuplet.notes;\r\n }\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * Constructor params for {@link SmoUnmakeTupletActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoUnmakeTupletParams {\r\n startIndex: number,\r\n endIndex: number,\r\n measure: SmoMeasure,\r\n voice: number\r\n}\r\n/**\r\n * Convert a tuplet into a single note that takes up the whole duration\r\n * @category SmoTransform\r\n */\r\nexport class SmoUnmakeTupletActor extends TickIteratorBase {\r\n startIndex: number = 0;\r\n endIndex: number = 0;\r\n measure: SmoMeasure;\r\n voice: number;\r\n constructor(parameters: SmoUnmakeTupletParams) {\r\n super();\r\n this.startIndex = parameters.startIndex;\r\n this.endIndex = parameters.endIndex;\r\n this.measure = parameters.measure;\r\n this.voice = parameters.voice;\r\n }\r\n static apply(params: SmoUnmakeTupletParams) {\r\n const actor = new SmoUnmakeTupletActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (index < this.startIndex || index > this.endIndex) {\r\n return null;\r\n }\r\n if (index === this.startIndex) {\r\n const tuplet = this.measure.getTupletForNote(note);\r\n if (tuplet === null) {\r\n return [];\r\n }\r\n const ticks = tuplet.totalTicks;\r\n const nn: SmoNote = SmoNote.cloneWithDuration(note, { numerator: ticks, denominator: 1, remainder: 0 });\r\n nn.tupletId = null;\r\n this.measure.removeTupletForNote(note);\r\n return [nn];\r\n }\r\n return [];\r\n }\r\n}\r\n\r\n/**\r\n * constructor parameters for {@link SmoMakeTupletActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoMakeTupletParams {\r\n index: number,\r\n totalTicks: number,\r\n numNotes: number,\r\n measure: SmoMeasure,\r\n voice: number\r\n}\r\n/**\r\n * Turn a tuplet into a non-tuplet of the same length\r\n * @category SmoTransform\r\n * \r\n * */\r\nexport class SmoMakeTupletActor extends TickIteratorBase {\r\n measure: SmoMeasure;\r\n durationMap: number[];\r\n numNotes: number;\r\n stemTicks: number;\r\n totalTicks: number;\r\n rangeToSkip: number[];\r\n tuplet: SmoNote[];\r\n voice: number;\r\n index: number;\r\n constructor(params: SmoMakeTupletParams) {\r\n let i = 0;\r\n super();\r\n this.measure = params.measure;\r\n this.numNotes = params.numNotes;\r\n this.durationMap = [];\r\n this.totalTicks = params.totalTicks;\r\n this.voice = params.voice;\r\n this.index = params.index;\r\n for (i = 0; i < this.numNotes; ++i) {\r\n this.durationMap.push(1.0);\r\n }\r\n this.stemTicks = SmoTuplet.calculateStemTicks(this.totalTicks, this.numNotes);\r\n this.rangeToSkip = this._rangeToSkip();\r\n this.tuplet = [];\r\n }\r\n static apply(params: SmoMakeTupletParams) {\r\n const actor = new SmoMakeTupletActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n _rangeToSkip(): number[] {\r\n let i = 0;\r\n if (this.measure === null) {\r\n return [];\r\n }\r\n const ticks = this.measure.tickmapForVoice(this.voice);\r\n let accum = 0;\r\n const rv = [];\r\n rv.push(this.index);\r\n for (i = 0; i < ticks.deltaMap.length; ++i) {\r\n if (i >= this.index) {\r\n accum += ticks.deltaMap[i];\r\n }\r\n if (accum >= this.totalTicks) {\r\n rv.push(i);\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n let i = 0;\r\n // if our tuplet replaces this note, make sure we make it go away.\r\n if (index > this.index && index <= this.rangeToSkip[1]) {\r\n return [];\r\n }\r\n if (this.measure === null) {\r\n return [];\r\n }\r\n if (index !== this.index) {\r\n return null;\r\n }\r\n for (i = 0; i < this.numNotes; ++i) {\r\n note = SmoNote.cloneWithDuration(note, { numerator: this.stemTicks, denominator: 1, remainder: 0 });\r\n // Don't clone modifiers, except for first one.\r\n note.textModifiers = i === 0 ? note.textModifiers : [];\r\n this.tuplet.push(note);\r\n }\r\n const tuplet = new SmoTuplet({\r\n notes: this.tuplet,\r\n stemTicks: this.stemTicks,\r\n totalTicks: this.totalTicks,\r\n ratioed: false,\r\n bracketed: true,\r\n startIndex: index,\r\n durationMap: this.durationMap,\r\n voice: tickmap.voice,\r\n numNotes: this.numNotes\r\n });\r\n this.measure.tuplets.push(tuplet);\r\n return this.tuplet;\r\n }\r\n}\r\n\r\n/**\r\n * Constructor when we want to double or dot the duration of a note (stretch)\r\n * for {@link SmoStretchNoteActor}\r\n * @param startIndex tick index into the measure\r\n * @param measure the container measure\r\n * @param voice the voice index\r\n * @param newTicks the ticks the new note will take up\r\n * @category SmoTransform\r\n */\r\nexport interface SmoStretchNoteParams {\r\n startIndex: number,\r\n measure: SmoMeasure,\r\n voice: number,\r\n newTicks: number\r\n}\r\n/**\r\n * increase the length of a note, removing future notes in the measure as required\r\n * @category SmoTransform\r\n */\r\nexport class SmoStretchNoteActor extends TickIteratorBase {\r\n startIndex: number;\r\n tickmap: TickMap;\r\n newTicks: number;\r\n startTick: number;\r\n divisor: number;\r\n durationMap: number[];\r\n skipFromStart: number;\r\n skipFromEnd: number;\r\n measure: SmoMeasure;\r\n voice: number;\r\n constructor(params: SmoStretchNoteParams) {\r\n let mapIx = 0;\r\n let i = 0;\r\n super();\r\n this.startIndex = params.startIndex;\r\n this.measure = params.measure;\r\n this.voice = params.voice;\r\n this.tickmap = this.measure.tickmapForVoice(this.voice);\r\n this.newTicks = params.newTicks;\r\n this.startTick = this.tickmap.durationMap[this.startIndex];\r\n const currentTicks = this.tickmap.deltaMap[this.startIndex];\r\n const endTick = this.tickmap.durationMap[this.startIndex] + this.newTicks;\r\n this.divisor = -1;\r\n this.durationMap = [];\r\n this.skipFromStart = this.startIndex + 1;\r\n this.skipFromEnd = this.startIndex + 1;\r\n this.durationMap.push(this.newTicks);\r\n\r\n mapIx = this.tickmap.durationMap.indexOf(endTick);\r\n\r\n const remaining = this.tickmap.deltaMap.slice(this.startIndex, this.tickmap.durationMap.length).reduce((accum, x) => x + accum);\r\n if (remaining === this.newTicks) {\r\n mapIx = this.tickmap.deltaMap.length;\r\n }\r\n\r\n // If there is no tickable at the end point, try to split the next note\r\n /**\r\n * old map:\r\n * d . d .\r\n * split map:\r\n * d . d d\r\n * new map:\r\n * d . . d\r\n */\r\n if (mapIx < 0) {\r\n const ndelta = this.tickmap.deltaMap[this.startIndex + 1];\r\n const needed = this.newTicks - currentTicks;\r\n const exp = ndelta / needed;\r\n // Next tick does not divide evenly into this, or next tick is shorter than this\r\n if (Math.round(ndelta / exp) - ndelta / exp !== 0 || ndelta < 256) {\r\n this.durationMap = [];\r\n } else if (ndelta / exp + this.startTick + this.newTicks <= this.tickmap.totalDuration) {\r\n this.durationMap.push(ndelta - (ndelta / exp));\r\n } else {\r\n // there is no way to do this...\r\n this.durationMap = [];\r\n }\r\n } else {\r\n // If this note now takes up the space of other notes, remove those notes\r\n for (i = this.startIndex + 1; i < mapIx; ++i) {\r\n this.durationMap.push(0);\r\n }\r\n }\r\n }\r\n static apply(params: SmoStretchNoteParams) {\r\n const actor = new SmoStretchNoteActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (this.durationMap.length === 0) {\r\n return null;\r\n }\r\n if (index >= this.startIndex && index < this.startIndex + this.durationMap.length) {\r\n const mapIndex = index - this.startIndex;\r\n const ticks = this.durationMap[mapIndex];\r\n if (ticks === 0) {\r\n return [];\r\n }\r\n note = SmoNote.cloneWithDuration(note, { numerator: ticks, denominator: 1, remainder: 0 });\r\n return [note];\r\n }\r\n return null;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../data/music';\r\nimport { TickMappable } from '../data/measure';\r\nimport { Pitch, IsPitchLetter, TickAccidental } from '../data/common';\r\nimport { SmoNote } from '../data/note';\r\n\r\n/**\r\n * create a map note durations at each index into the voice, including the accidentals at each duration.\r\n * return format:\r\n * ```\r\n tickmap = {\r\n totalDuration: 16384,\r\n durationMap:[2048,4096,..], // A running total per tick\r\n deltaMap:[2048,2048...], a map of deltas\r\n ```\r\n * @category SmoTransform\r\n */ \r\nexport class TickMap {\r\n keySignature: string;\r\n voice: number;\r\n notes: SmoNote[] = [];\r\n index: number = 0;\r\n startIndex: number = 0;\r\n endIndex: number = 0;\r\n // duration is the accumulated duraition over all the notes\r\n totalDuration: number = 0;\r\n // delta is the tick contribution of this note\r\n delta: number = 0;\r\n // the absolute tick start location of notes[x]\r\n durationMap: number[] = [];\r\n // the relative duration if each tick slot\r\n deltaMap: number[] = [];\r\n // An array of active accidentals for each tick index\r\n accidentalMap: Record[] = [];\r\n // a map of active accidentals, indexed by duration index\r\n durationAccidentalMap: Record> = {};\r\n constructor(measure: TickMappable, voiceIndex: number) {\r\n this.keySignature = measure.keySignature;\r\n this.voice = voiceIndex;\r\n if (measure.voices.length <= this.voice) {\r\n console.warn('tickmap for invalid voice');\r\n return;\r\n }\r\n this.notes = measure.voices[this.voice].notes;\r\n this.endIndex = this.notes.length;\r\n this.createMap();\r\n }\r\n // ### _getAccidentalsForKey\r\n // Update `map` with the correct accidental based on the key signature.\r\n _getAccidentalsForKey(map: Record) {\r\n const keys = SmoMusic.getScaleTonesForKey(this.keySignature);\r\n const keyKeys = Object.keys(keys);\r\n keyKeys.forEach((keyKey) => {\r\n const vexKey = keys[keyKey];\r\n if (vexKey.length > 1 && (vexKey[1] === 'b' || vexKey[1] === '#')) {\r\n if (IsPitchLetter(vexKey[0])) {\r\n const pitch = {\r\n letter: vexKey[0],\r\n accidental: vexKey[1],\r\n octave: 4\r\n };\r\n map[vexKey[0]] = {\r\n duration: 0,\r\n pitch\r\n };\r\n }\r\n }\r\n });\r\n }\r\n\r\n // ### updateAccidentalMap\r\n // Keep a running tally of the accidentals for this voice\r\n // based on the key and previous accidentals.\r\n updateAccidentalMap(note: SmoNote) {\r\n let i = 0;\r\n let sigObj: Record = {};\r\n const newObj: Record = {};\r\n if (this.index === 0) {\r\n this._getAccidentalsForKey(newObj);\r\n sigObj = newObj;\r\n } else {\r\n sigObj = this.accidentalMap[this.index - 1];\r\n }\r\n for (i = 0; i < note.pitches.length; ++i) {\r\n if (note.noteType !== 'n') {\r\n continue;\r\n }\r\n const pitch: Pitch = note.pitches[i];\r\n const pitchOctave = pitch.letter.toLowerCase() + '-' + pitch.octave;\r\n const sigLetter: string = pitchOctave + pitch.accidental;\r\n const sigKey = SmoMusic.getKeySignatureKey(pitch.letter, this.keySignature);\r\n if (sigObj && sigObj[pitchOctave]) {\r\n const curObj = sigObj[pitchOctave];\r\n const currentVal = curObj.pitch.letter.toLowerCase() + '-' + curObj.pitch.octave + curObj.pitch.accidental;\r\n if (sigLetter !== currentVal) {\r\n newObj[pitchOctave] = { pitch, duration: this.duration };\r\n }\r\n } else {\r\n if (sigLetter !== sigKey) {\r\n newObj[pitchOctave] = { pitch, duration: this.duration };\r\n }\r\n }\r\n }\r\n this.accidentalMap.push(newObj);\r\n // Mark the accidental with the start of this note.\r\n this.durationAccidentalMap[this.durationMap[this.index]] = newObj;\r\n }\r\n\r\n // ### getActiveAccidental\r\n // return the active accidental for the given note\r\n getActiveAccidental(pitch: Pitch, iteratorIndex: number, keySignature: string) {\r\n let defaultAccidental: string = SmoMusic.getKeySignatureKey(pitch.letter, keySignature);\r\n let i = 0;\r\n let j = 0;\r\n defaultAccidental = defaultAccidental.length > 1 ? defaultAccidental[1] : 'n';\r\n if (iteratorIndex === 0) {\r\n return defaultAccidental;\r\n }\r\n // Back up the accidental map until we have a match, or until we run out\r\n for (i = iteratorIndex; i > 0; --i) {\r\n const map: Record = this.accidentalMap[i - 1];\r\n const mapKeys = Object.keys(map);\r\n for (j = 0; j < mapKeys.length; ++j) {\r\n const mapKey: string = mapKeys[j];\r\n // The letter name + accidental in the map\r\n const mapPitch: Pitch = map[mapKey].pitch;\r\n const mapAcc = mapPitch.accidental ? mapPitch.accidental : 'n';\r\n\r\n // if the letters match and the accidental...\r\n if (mapPitch.letter.toLowerCase() === pitch.letter) {\r\n return mapAcc;\r\n }\r\n }\r\n }\r\n return defaultAccidental;\r\n }\r\n get duration() {\r\n return this.totalDuration;\r\n }\r\n createMap() {\r\n for (this.index = this.startIndex; this.index < this.endIndex; ++this.index) {\r\n const note = this.notes[this.index];\r\n // save the starting point, tickwise\r\n this.durationMap.push(this.totalDuration);\r\n // the number of ticks for this note\r\n this.delta = (note.ticks.numerator / note.ticks.denominator) + note.ticks.remainder;\r\n this.deltaMap.push(this.delta);\r\n // update the tick count for the whole array/measure\r\n this.totalDuration += this.delta;\r\n this.updateAccidentalMap(note);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoStaffTextBracket, StaffModifierBase } from '../data/staffModifiers';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoOperation } from './operations';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoMeasure } from '../data/measure';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoTextGroup } from '../data/scoreText';\r\nimport { SmoSelector } from './selections';\r\n\r\nexport interface UndoEntry {\r\n title: string,\r\n type: number,\r\n selector: SmoSelector,\r\n subtype: number,\r\n grouped: boolean,\r\n firstInGroup: boolean,\r\n json?: any\r\n}\r\nexport function copyUndo(entry: UndoEntry): UndoEntry {\r\n const obj = { \r\n title: entry.title,\r\n type: entry.type,\r\n selector: entry.selector,\r\n subtype: entry.subtype,\r\n grouped: entry.grouped,\r\n firstInGroup: entry.firstInGroup,\r\n json: undefined\r\n };\r\n if (entry.json) {\r\n obj.json = JSON.parse(JSON.stringify(entry.json));\r\n }\r\n return obj;\r\n}\r\n/**\r\n * manage a set of undo or redo operations on a score. The objects passed into\r\n * undo must implement serialize()/deserialize()\r\n * \r\n * ## Buffer format:\r\n * A buffer is one of 7 things:\r\n * * A single measure,\r\n * * A single staff\r\n * * the whole score\r\n * * a score modifier (text)\r\n * * score attributes (layout, etc)\r\n * * column - all the measures at one index\r\n * * rectangle - a rectangle of measures\r\n * @category SmoTransform\r\n * */\r\nexport class UndoBuffer {\r\n static groupCount = 0;\r\n static get bufferMax() {\r\n return 100;\r\n }\r\n\r\n static get bufferTypes() {\r\n return {\r\n FIRST: 1,\r\n MEASURE: 1, STAFF: 2, SCORE: 3, SCORE_MODIFIER: 4, COLUMN: 5, RECTANGLE: 6,\r\n SCORE_ATTRIBUTES: 7, STAFF_MODIFIER: 8, LAST: 8\r\n };\r\n }\r\n static get bufferSubtypes() {\r\n return {\r\n NONE: 0, ADD: 1, REMOVE: 2, UPDATE: 3\r\n };\r\n }\r\n static get bufferTypeLabel() {\r\n return ['INVALID', 'MEASURE', 'STAFF', 'SCORE', 'SCORE_MODIFIER', 'COLUMN', 'RECTANGLE',\r\n 'SCORE_ATTRIBUTES', 'STAFF_MODIFIER'];\r\n }\r\n // ### serializeMeasure\r\n // serialize a measure, preserving the column-mapped bits which aren't serialized on a full score save.\r\n static serializeMeasure(measure: SmoMeasure) {\r\n const json: any = measure.serialize();\r\n const columnMapped : any = measure.serializeColumnMapped();\r\n Object.keys(columnMapped).forEach((key) => {\r\n json[key] = columnMapped[key];\r\n });\r\n return json;\r\n }\r\n buffer: UndoEntry[] = [];\r\n reconcile: number = -1;\r\n opCount: number;\r\n _grouping: boolean;\r\n constructor() {\r\n this.buffer = [];\r\n this.opCount = 0;\r\n this._grouping = false;\r\n }\r\n get grouping() {\r\n return this._grouping;\r\n }\r\n // Allows a set of operations to be bunched into a single group\r\n set grouping(val) {\r\n if (this._grouping === true && val === false) {\r\n const buf = this.peek();\r\n // If we have been grouping, indicate that the last buffer is the\r\n // fist part of a group\r\n if (buf) {\r\n buf.firstInGroup = true;\r\n }\r\n }\r\n this._grouping = val;\r\n }\r\n reset() {\r\n this.buffer = [];\r\n }\r\n // ### addBuffer\r\n // Description:\r\n // Add the current state of the score required to undo the next operation we\r\n // are about to perform. For instance, if we are adding a crescendo, we back up the\r\n // staff the crescendo will go on.\r\n addBuffer(title: string, type: number, selector: SmoSelector, obj: any, subtype: number) {\r\n let i = 0;\r\n let j = 0;\r\n if (typeof(type) !== 'number' || type < UndoBuffer.bufferTypes.FIRST || type > UndoBuffer.bufferTypes.LAST) {\r\n throw 'Undo failure: illegal buffer type ' + type;\r\n }\r\n const undoObj: UndoEntry = {\r\n title,\r\n type,\r\n selector,\r\n subtype,\r\n grouped: this._grouping,\r\n firstInGroup: false\r\n };\r\n if (type === UndoBuffer.bufferTypes.RECTANGLE) {\r\n // RECTANGLE obj is {score, topLeft, bottomRight}\r\n // where the last 2 are selectors\r\n const measures = [];\r\n for (i = obj.topLeft.staff; i <= obj.bottomRight.staff; ++i) {\r\n for (j = obj.topLeft.measure; j <= obj.bottomRight.measure; ++j) {\r\n measures.push(UndoBuffer.serializeMeasure(obj.score.staves[i].measures[j]));\r\n }\r\n }\r\n undoObj.json = { topLeft: JSON.parse(JSON.stringify(obj.topLeft)),\r\n bottomRight: JSON.parse(JSON.stringify(obj.bottomRight)),\r\n measures };\r\n } else if (type === UndoBuffer.bufferTypes.SCORE_ATTRIBUTES) {\r\n undoObj.json = {};\r\n smoSerialize.serializedMerge(SmoScore.preferences, obj, undoObj.json);\r\n } else if (type === UndoBuffer.bufferTypes.COLUMN) {\r\n // COLUMN obj is { score, measureIndex }\r\n const ix = obj.measureIndex;\r\n const measures: SmoMeasure[] = [];\r\n obj.score.staves.forEach((staff: SmoSystemStaff) => {\r\n measures.push(UndoBuffer.serializeMeasure(staff.measures[ix]));\r\n });\r\n undoObj.json = { measureIndex: ix, measures };\r\n } else if (type === UndoBuffer.bufferTypes.MEASURE) {\r\n // If this is a measure, preserve the column-mapped attributes\r\n undoObj.json = UndoBuffer.serializeMeasure(obj);\r\n } else if (type === UndoBuffer.bufferTypes.SCORE_MODIFIER ||\r\n type === UndoBuffer.bufferTypes.STAFF_MODIFIER) {\r\n // score modifier, already serialized\r\n undoObj.json = obj;\r\n } else {\r\n // staff or score or staffModifier\r\n undoObj.json = obj.serialize();\r\n }\r\n if (this.buffer.length >= UndoBuffer.bufferMax) {\r\n this.buffer.splice(0, 1);\r\n }\r\n this.opCount += 1;\r\n this.buffer.push(undoObj);\r\n }\r\n\r\n // ### _pop\r\n // ### Description:\r\n // Internal method to pop the top buffer off the stack.\r\n _pop(): UndoEntry | null {\r\n if (this.buffer.length < 1) {\r\n return null;\r\n }\r\n const buf: UndoEntry = this.buffer.pop() as UndoEntry;\r\n return buf;\r\n }\r\n\r\n // ## Before undoing, peek at the top action in the q\r\n // so it can be re-rendered\r\n peek(): UndoEntry | null {\r\n if (this.buffer.length < 1) {\r\n return null;\r\n }\r\n return this.buffer[this.buffer.length - 1];\r\n }\r\n peekIndex(index: number) {\r\n if (this.buffer.length - index < 1) {\r\n return null;\r\n }\r\n return this.buffer[this.buffer.length - (1 + index)];\r\n }\r\n\r\n // ## undo\r\n // ## Description:\r\n // Undo the operation at the top of the undo stack. This is done by replacing\r\n // the music as it existed before the change was made.\r\n undo(score: SmoScore, staffMap: Record, pop: boolean): SmoScore {\r\n let i = 0;\r\n let j = 0;\r\n let mix = 0;\r\n let buf: UndoEntry | null = null;\r\n let peekIndex = 0;\r\n if (pop) {\r\n buf = this._pop();\r\n } else {\r\n buf = this.peekIndex(peekIndex);\r\n if (buf) {\r\n buf = copyUndo(buf);\r\n }\r\n }\r\n if (!buf) {\r\n return score;\r\n }\r\n const grouping = buf.firstInGroup;\r\n while (buf) {\r\n if (buf.type === UndoBuffer.bufferTypes.RECTANGLE) {\r\n for (i = buf.json.topLeft.staff; i <= buf.json.bottomRight.staff; ++i) {\r\n for (j = buf.json.topLeft.measure; j <= buf.json.bottomRight.measure; ++j) {\r\n const measure = SmoMeasure.deserialize(buf.json.measures[mix]);\r\n mix += 1;\r\n const selector = SmoSelector.default;\r\n if (typeof(staffMap[i]) === 'number') {\r\n selector.staff = staffMap[i];\r\n measure.measureNumber.staffId = staffMap[i];\r\n selector.measure = j;\r\n score.replaceMeasure(selector, measure);\r\n }\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.STAFF_MODIFIER) {\r\n const modifier: StaffModifierBase = StaffModifierBase.deserialize(buf.json);\r\n if (typeof(staffMap[modifier.startSelector.staff]) === 'number') {\r\n const staff: SmoSystemStaff = score.staves[staffMap[modifier.startSelector.staff]];\r\n const existing: StaffModifierBase | undefined = staff.getModifier(modifier);\r\n if (existing) {\r\n staff.removeStaffModifier(existing);\r\n }\r\n // If we undo an add, we just remove it.\r\n if (buf.subtype !== UndoBuffer.bufferSubtypes.ADD) {\r\n if (modifier.ctor === 'SmoStaffTextBracket') {\r\n staff.addTextBracket(modifier as SmoStaffTextBracket);\r\n } else {\r\n staff.addStaffModifier(modifier);\r\n }\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE_ATTRIBUTES) {\r\n smoSerialize.serializedMerge(SmoScore.preferences, buf.json, score);\r\n } else if (buf.type === UndoBuffer.bufferTypes.COLUMN) {\r\n for (i = 0; i < score.staves.length; ++i) {\r\n const measure = SmoMeasure.deserialize(buf.json.measures[i]);\r\n const selector = SmoSelector.default;\r\n if (typeof(staffMap[i]) === 'number') {\r\n selector.staff = staffMap[i];\r\n measure.measureNumber.staffId = staffMap[i];\r\n selector.measure = buf.json.measureIndex;\r\n score.replaceMeasure(selector, measure);\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.MEASURE) {\r\n // measure expects key signature to be in concert key.\r\n if (typeof(staffMap[buf.selector.staff]) === 'number' ) {\r\n buf.selector.staff = staffMap[buf.selector.staff];\r\n const xpose = buf.json.transposeIndex ?? 0;\r\n const concertKey = SmoMusic.vexKeySigWithOffset(buf.json.keySignature, -1 * xpose);\r\n buf.json.keySignature = concertKey;\r\n const measure = SmoMeasure.deserialize(buf.json);\r\n measure.measureNumber.staffId = buf.selector.staff;\r\n score.replaceMeasure(buf.selector, measure);\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE) {\r\n // Score expects string, as deserialized score is how saving is done.\r\n score = SmoScore.deserialize(JSON.stringify(buf.json));\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE_MODIFIER) {\r\n // Currently only one type like this: SmoTextGroup\r\n if (buf.json && buf.json.ctor === 'SmoTextGroup') {\r\n const obj = SmoTextGroup.deserializePreserveId(buf.json);\r\n obj.attrs.id = buf.json.attrs.id;\r\n // undo of add is remove, undo of remove is add. Undo of update is remove and add older version\r\n if (buf.subtype === UndoBuffer.bufferSubtypes.UPDATE || buf.subtype === UndoBuffer.bufferSubtypes.ADD) {\r\n score.removeTextGroup(obj);\r\n } if (buf.subtype === UndoBuffer.bufferSubtypes.UPDATE || buf.subtype === UndoBuffer.bufferSubtypes.REMOVE) {\r\n score.addTextGroup(obj);\r\n }\r\n }\r\n } else {\r\n if (typeof(staffMap[buf.selector.staff]) === 'number') {\r\n buf.selector.staff = staffMap[buf.selector.staff];\r\n const staff = SmoSystemStaff.deserialize(buf.json);\r\n score.replaceStaff(buf.selector.staff, staff);\r\n }\r\n }\r\n const peekBuf = this.peekIndex(peekIndex + 1);\r\n // If buf is grouped and not the first in the group, also undo the next buffer\r\n if (grouping && peekBuf !== null && peekBuf.grouped && buf.firstInGroup === false) {\r\n // For the backup/full score, we actually pop the buffer. For the visible score, we \r\n // just use copies of the buffer.\r\n if (pop) {\r\n buf = this._pop();\r\n } else {\r\n peekIndex += 1;\r\n buf = this.peekIndex(peekIndex);\r\n if (buf) {\r\n buf = copyUndo(buf);\r\n }\r\n }\r\n } else {\r\n buf = null;\r\n }\r\n }\r\n return score;\r\n }\r\n}\r\n\r\n// ## SmoUndoable\r\n// Convenience functions to save the score state before operations so we can undo the operation.\r\n// Each undo-able knows which set of parameters the undo operation requires (measure, staff, score).\r\nexport class SmoUndoable {\r\n // ### undoScoreObject\r\n // Called when a score object is being modified. There is no need to update the score as it contains a\r\n // reference to the object\r\n static changeTextGroup(score: SmoScore, undoBuffer: UndoBuffer, object: any, subtype: number) {\r\n undoBuffer.addBuffer('modify text',\r\n UndoBuffer.bufferTypes.SCORE_MODIFIER, SmoSelector.default, object, subtype);\r\n if (subtype === UndoBuffer.bufferSubtypes.REMOVE) {\r\n SmoOperation.removeTextGroup(score, object);\r\n } else if (subtype === UndoBuffer.bufferSubtypes.ADD) {\r\n SmoOperation.addTextGroup(score, object);\r\n }\r\n // Update operation, there is nothing to do since the text is already\r\n // part of the score\r\n }\r\n}\r\n","export const Commissioner_MediumFont = {\r\n smufl: false,\r\n name: \"CommissionerMedium\",\r\n spacing: 50,\r\n fontFamily: \"Commisioner\",\r\n description: \"Commisioner, a sans-serif font similar to Arial\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1212,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1314\r\n },\r\n \"1\": {\r\n \"xMin\": 56,\r\n \"xMax\": 676,\r\n \"yMin\": 0,\r\n \"yMax\": 1380,\r\n \"ha\": 1380,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 874\r\n },\r\n \"2\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1020,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1120\r\n },\r\n \"3\": {\r\n \"xMin\": 84,\r\n \"xMax\": 1056,\r\n \"yMin\": -23,\r\n \"yMax\": 1401,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1150\r\n },\r\n \"4\": {\r\n \"xMin\": 56,\r\n \"xMax\": 1157,\r\n \"yMin\": 0,\r\n \"yMax\": 1373,\r\n \"ha\": 1373,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 1209\r\n },\r\n \"5\": {\r\n \"xMin\": 84,\r\n \"xMax\": 1061,\r\n \"yMin\": -23,\r\n \"yMax\": 1373,\r\n \"ha\": 1396,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1155\r\n },\r\n \"6\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1127,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1221\r\n },\r\n \"7\": {\r\n \"xMin\": 50,\r\n \"xMax\": 998,\r\n \"yMin\": 0,\r\n \"yMax\": 1373,\r\n \"ha\": 1373,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 1072\r\n },\r\n \"8\": {\r\n \"xMin\": 94,\r\n \"xMax\": 1128,\r\n \"yMin\": -23,\r\n \"yMax\": 1401,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1222\r\n },\r\n \"9\": {\r\n \"xMin\": 94,\r\n \"xMax\": 1119,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1221\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 382\r\n },\r\n \"!\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 1472,\r\n \"ha\": 1496,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 78,\r\n \"xMax\": 674,\r\n \"yMin\": 846,\r\n \"yMax\": 1489,\r\n \"ha\": 643,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 790\r\n },\r\n \"#\": {\r\n \"xMin\": 32,\r\n \"xMax\": 1344,\r\n \"yMin\": 0,\r\n \"yMax\": 1322,\r\n \"ha\": 1322,\r\n \"leftSideBearing\": 32,\r\n \"advanceWidth\": 1376\r\n },\r\n \"$\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1060,\r\n \"yMin\": -274,\r\n \"yMax\": 1606,\r\n \"ha\": 1880,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1133\r\n },\r\n \"%\": {\r\n \"xMin\": 64,\r\n \"xMax\": 1732,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 1804\r\n },\r\n \"&\": {\r\n \"xMin\": 89,\r\n \"xMax\": 1465,\r\n \"yMin\": -21,\r\n \"yMax\": 1453,\r\n \"ha\": 1474,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1490\r\n },\r\n \"'\": {\r\n \"xMin\": 78,\r\n \"xMax\": 305,\r\n \"yMin\": 846,\r\n \"yMax\": 1489,\r\n \"ha\": 643,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 421\r\n },\r\n \"(\": {\r\n \"xMin\": 108,\r\n \"xMax\": 718,\r\n \"yMin\": -250,\r\n \"yMax\": 1545,\r\n \"ha\": 1795,\r\n \"leftSideBearing\": 108,\r\n \"advanceWidth\": 790\r\n },\r\n \")\": {\r\n \"xMin\": 72,\r\n \"xMax\": 682,\r\n \"yMin\": -250,\r\n \"yMax\": 1545,\r\n \"ha\": 1795,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 790\r\n },\r\n \"*\": {\r\n \"xMin\": 52,\r\n \"xMax\": 908,\r\n \"yMin\": 578,\r\n \"yMax\": 1492,\r\n \"ha\": 914,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 960\r\n },\r\n \"+\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1068,\r\n \"yMin\": 113,\r\n \"yMax\": 1089,\r\n \"ha\": 976,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1184\r\n },\r\n \",\": {\r\n \"xMin\": 49,\r\n \"xMax\": 379,\r\n \"yMin\": -314,\r\n \"yMax\": 279,\r\n \"ha\": 593,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 474\r\n },\r\n \"-\": {\r\n \"xMin\": 116,\r\n \"xMax\": 732,\r\n \"yMin\": 503,\r\n \"yMax\": 691,\r\n \"ha\": 188,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 848\r\n },\r\n \".\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 272,\r\n \"ha\": 296,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \"/\": {\r\n \"xMin\": 49,\r\n \"xMax\": 848,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 897\r\n },\r\n \":\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 1019,\r\n \"ha\": 1043,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \";\": {\r\n \"xMin\": 67,\r\n \"xMax\": 398,\r\n \"yMin\": -314,\r\n \"yMax\": 1019,\r\n \"ha\": 1333,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 493\r\n },\r\n \"<\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 132,\r\n \"yMax\": 1068,\r\n \"ha\": 936,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n },\r\n \"=\": {\r\n \"xMin\": 124,\r\n \"xMax\": 1020,\r\n \"yMin\": 277,\r\n \"yMax\": 925,\r\n \"ha\": 648,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 1144\r\n },\r\n \">\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 132,\r\n \"yMax\": 1068,\r\n \"ha\": 936,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n },\r\n \"?\": {\r\n \"xMin\": 76,\r\n \"xMax\": 782,\r\n \"yMin\": -24,\r\n \"yMax\": 1498,\r\n \"ha\": 1522,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 872\r\n },\r\n \"@\": {\r\n \"xMin\": 91.72000000000001,\r\n \"xMax\": 1680.1678341637535,\r\n \"yMin\": -272,\r\n \"yMax\": 1366,\r\n \"ha\": 1638,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1772\r\n },\r\n \"A\": {\r\n \"xMin\": 53,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 53,\r\n \"advanceWidth\": 1401\r\n },\r\n \"B\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1227,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1303\r\n },\r\n \"C\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1272,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1369\r\n },\r\n \"D\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1380,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1471\r\n },\r\n \"E\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1081,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1189\r\n },\r\n \"F\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1061,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1150\r\n },\r\n \"G\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1333,\r\n \"yMin\": -23,\r\n \"yMax\": 1453,\r\n \"ha\": 1476,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1463\r\n },\r\n \"H\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1331,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1500\r\n },\r\n \"I\": {\r\n \"xMin\": 173,\r\n \"xMax\": 412,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 173,\r\n \"advanceWidth\": 585\r\n },\r\n \"J\": {\r\n \"xMin\": 21,\r\n \"xMax\": 430,\r\n \"yMin\": -314,\r\n \"yMax\": 1426,\r\n \"ha\": 1740,\r\n \"leftSideBearing\": 21,\r\n \"advanceWidth\": 603\r\n },\r\n \"K\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1310,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1362\r\n },\r\n \"L\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1086,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1150\r\n },\r\n \"M\": {\r\n \"xMin\": 122,\r\n \"xMax\": 1798,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1920\r\n },\r\n \"N\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1336,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1505\r\n },\r\n \"O\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1540,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1632\r\n },\r\n \"P\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1194,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1271\r\n },\r\n \"Q\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1540,\r\n \"yMin\": -341,\r\n \"yMax\": 1453,\r\n \"ha\": 1794,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1632\r\n },\r\n \"R\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1304,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1356\r\n },\r\n \"S\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1110,\r\n \"yMin\": -23,\r\n \"yMax\": 1453,\r\n \"ha\": 1476,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1183\r\n },\r\n \"T\": {\r\n \"xMin\": 58,\r\n \"xMax\": 1227,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 1285\r\n },\r\n \"U\": {\r\n \"xMin\": 152,\r\n \"xMax\": 1306,\r\n \"yMin\": -24,\r\n \"yMax\": 1426,\r\n \"ha\": 1450,\r\n \"leftSideBearing\": 152,\r\n \"advanceWidth\": 1459\r\n },\r\n \"V\": {\r\n \"xMin\": 51,\r\n \"xMax\": 1338,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 1390\r\n },\r\n \"W\": {\r\n \"xMin\": 50,\r\n \"xMax\": 2010,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 2060\r\n },\r\n \"X\": {\r\n \"xMin\": 64,\r\n \"xMax\": 1316,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 1380\r\n },\r\n \"Y\": {\r\n \"xMin\": 50,\r\n \"xMax\": 1278,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 1325\r\n },\r\n \"Z\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1258,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1354\r\n },\r\n \"[\": {\r\n \"xMin\": 177,\r\n \"xMax\": 733,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 177,\r\n \"advanceWidth\": 770\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 49,\r\n \"xMax\": 848,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 897\r\n },\r\n \"]\": {\r\n \"xMin\": 37,\r\n \"xMax\": 593,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 770\r\n },\r\n \"^\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1122,\r\n \"yMin\": 744,\r\n \"yMax\": 1373,\r\n \"ha\": 629,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1234\r\n },\r\n \"_\": {\r\n \"xMin\": -20,\r\n \"xMax\": 844,\r\n \"yMin\": -272,\r\n \"yMax\": -96,\r\n \"ha\": 176,\r\n \"leftSideBearing\": -20,\r\n \"advanceWidth\": 824\r\n },\r\n \"`\": {\r\n \"xMin\": 272,\r\n \"xMax\": 765,\r\n \"yMin\": 1146,\r\n \"yMax\": 1556,\r\n \"ha\": 410,\r\n \"leftSideBearing\": 272,\r\n \"advanceWidth\": 1200\r\n },\r\n \"a\": {\r\n \"xMin\": 94,\r\n \"xMax\": 922,\r\n \"yMin\": -21,\r\n \"yMax\": 1018,\r\n \"ha\": 1039,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1053\r\n },\r\n \"b\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1093,\r\n \"yMin\": -24,\r\n \"yMax\": 1487,\r\n \"ha\": 1511,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1184\r\n },\r\n \"c\": {\r\n \"xMin\": 89,\r\n \"xMax\": 900,\r\n \"yMin\": -20,\r\n \"yMax\": 1018,\r\n \"ha\": 1038,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 982\r\n },\r\n \"d\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1030,\r\n \"yMin\": -24,\r\n \"yMax\": 1487,\r\n \"ha\": 1511,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1161\r\n },\r\n \"e\": {\r\n \"xMin\": 89,\r\n \"xMax\": 972,\r\n \"yMin\": -23,\r\n \"yMax\": 1018,\r\n \"ha\": 1041,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1054\r\n },\r\n \"f\": {\r\n \"xMin\": 44,\r\n \"xMax\": 794,\r\n \"yMin\": 0,\r\n \"yMax\": 1492,\r\n \"ha\": 1492,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 801\r\n },\r\n \"g\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1050,\r\n \"yMin\": -407,\r\n \"yMax\": 1018,\r\n \"ha\": 1425,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1089\r\n },\r\n \"h\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1018,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1150\r\n },\r\n \"i\": {\r\n \"xMin\": 119,\r\n \"xMax\": 408,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 119,\r\n \"advanceWidth\": 530\r\n },\r\n \"j\": {\r\n \"xMin\": 0,\r\n \"xMax\": 409,\r\n \"yMin\": -391,\r\n \"yMax\": 1472,\r\n \"ha\": 1863,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 526\r\n },\r\n \"k\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1075,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1108\r\n },\r\n \"l\": {\r\n \"xMin\": 154,\r\n \"xMax\": 368,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 522\r\n },\r\n \"m\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1613,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1745\r\n },\r\n \"n\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1018,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1150\r\n },\r\n \"o\": {\r\n \"xMin\": 89,\r\n \"xMax\": 1106,\r\n \"yMin\": -24,\r\n \"yMax\": 1019,\r\n \"ha\": 1043,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1195\r\n },\r\n \"p\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1093,\r\n \"yMin\": -391,\r\n \"yMax\": 1019,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1184\r\n },\r\n \"q\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1030,\r\n \"yMin\": -391,\r\n \"yMax\": 1019,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1172\r\n },\r\n \"r\": {\r\n \"xMin\": 154,\r\n \"xMax\": 766,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 808\r\n },\r\n \"s\": {\r\n \"xMin\": 104,\r\n \"xMax\": 839,\r\n \"yMin\": -23,\r\n \"yMax\": 1018,\r\n \"ha\": 1041,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 918\r\n },\r\n \"t\": {\r\n \"xMin\": 44,\r\n \"xMax\": 774,\r\n \"yMin\": -24,\r\n \"yMax\": 1359,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 829\r\n },\r\n \"u\": {\r\n \"xMin\": 132,\r\n \"xMax\": 990,\r\n \"yMin\": -24,\r\n \"yMax\": 1002,\r\n \"ha\": 1026,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1126\r\n },\r\n \"v\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1006,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1048\r\n },\r\n \"w\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1581,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1623\r\n },\r\n \"x\": {\r\n \"xMin\": 51,\r\n \"xMax\": 1043,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 1090\r\n },\r\n \"y\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1016,\r\n \"yMin\": -391,\r\n \"yMax\": 1002,\r\n \"ha\": 1393,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1058\r\n },\r\n \"z\": {\r\n \"xMin\": 72,\r\n \"xMax\": 940,\r\n \"yMin\": 0,\r\n \"yMax\": 994,\r\n \"ha\": 994,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 1007\r\n },\r\n \"{\": {\r\n \"xMin\": 28,\r\n \"xMax\": 802,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 838\r\n },\r\n \"|\": {\r\n \"xMin\": 177,\r\n \"xMax\": 365,\r\n \"yMin\": -316,\r\n \"yMax\": 1564,\r\n \"ha\": 1880,\r\n \"leftSideBearing\": 177,\r\n \"advanceWidth\": 542\r\n },\r\n \"}\": {\r\n \"xMin\": 36,\r\n \"xMax\": 810,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 838\r\n },\r\n \"~\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 431,\r\n \"yMax\": 774,\r\n \"ha\": 343,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n }\r\n },\r\n \"resolution\": 2000,\r\n \"generatedOn\": \"2020-10-16T17:54:48.712Z\"\r\n};","export const Concert_OneFont = {\r\n smufl: false,\r\n name: \"ConcertOne\",\r\n spacing: 50,\r\n fontFamily: \"ConcertOne\",\r\n description: \"Concert One, a sans-serif rounded title font\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1016,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1118\r\n },\r\n \"1\": {\r\n \"xMin\": 58,\r\n \"xMax\": 664,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 786\r\n },\r\n \"2\": {\r\n \"xMin\": 100,\r\n \"xMax\": 1022,\r\n \"yMin\": 0,\r\n \"yMax\": 1408,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 100,\r\n \"advanceWidth\": 1060\r\n },\r\n \"3\": {\r\n \"xMin\": 54,\r\n \"xMax\": 946,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 1026\r\n },\r\n \"4\": {\r\n \"xMin\": 74,\r\n \"xMax\": 906,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1002\r\n },\r\n \"5\": {\r\n \"xMin\": 76,\r\n \"xMax\": 968,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 1026\r\n },\r\n \"6\": {\r\n \"xMin\": 122,\r\n \"xMax\": 948,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 992\r\n },\r\n \"7\": {\r\n \"xMin\": 48,\r\n \"xMax\": 966,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 1012\r\n },\r\n \"8\": {\r\n \"xMin\": 90,\r\n \"xMax\": 930,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1020\r\n },\r\n \"9\": {\r\n \"xMin\": 46,\r\n \"xMax\": 870,\r\n \"yMin\": 0,\r\n \"yMax\": 1408,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 992\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 798\r\n },\r\n \"!\": {\r\n \"xMin\": 226,\r\n \"xMax\": 556,\r\n \"yMin\": -2,\r\n \"yMax\": 1398,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 226,\r\n \"advanceWidth\": 808\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 110,\r\n \"xMax\": 766,\r\n \"yMin\": 904,\r\n \"yMax\": 1404,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 110,\r\n \"advanceWidth\": 898\r\n },\r\n \"#\": {\r\n \"xMin\": 118,\r\n \"xMax\": 1170,\r\n \"yMin\": 160,\r\n \"yMax\": 1222,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 118,\r\n \"advanceWidth\": 1268\r\n },\r\n \"$\": {\r\n \"xMin\": 142,\r\n \"xMax\": 904,\r\n \"yMin\": 6,\r\n \"yMax\": 1384,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1052\r\n },\r\n \"%\": {\r\n \"xMin\": 98,\r\n \"xMax\": 1384,\r\n \"yMin\": -6,\r\n \"yMax\": 1400,\r\n \"ha\": 1406,\r\n \"leftSideBearing\": 98,\r\n \"advanceWidth\": 1484\r\n },\r\n \"&\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1178,\r\n \"yMin\": -2,\r\n \"yMax\": 1408,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1296\r\n },\r\n \"'\": {\r\n \"xMin\": 130,\r\n \"xMax\": 374,\r\n \"yMin\": 904,\r\n \"yMax\": 1404,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 130,\r\n \"advanceWidth\": 522\r\n },\r\n \"(\": {\r\n \"xMin\": 240,\r\n \"xMax\": 814,\r\n \"yMin\": -158,\r\n \"yMax\": 1562,\r\n \"ha\": 1720,\r\n \"leftSideBearing\": 240,\r\n \"advanceWidth\": 888\r\n },\r\n \")\": {\r\n \"xMin\": 74,\r\n \"xMax\": 648,\r\n \"yMin\": -158,\r\n \"yMax\": 1562,\r\n \"ha\": 1720,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 888\r\n },\r\n \"*\": {\r\n \"xMin\": 110,\r\n \"xMax\": 1084,\r\n \"yMin\": 164,\r\n \"yMax\": 1260,\r\n \"ha\": 1096,\r\n \"leftSideBearing\": 110,\r\n \"advanceWidth\": 1194\r\n },\r\n \"+\": {\r\n \"xMin\": 190,\r\n \"xMax\": 920,\r\n \"yMin\": 356,\r\n \"yMax\": 1086,\r\n \"ha\": 730,\r\n \"leftSideBearing\": 190,\r\n \"advanceWidth\": 1102\r\n },\r\n \",\": {\r\n \"xMin\": 134,\r\n \"xMax\": 464,\r\n \"yMin\": -164,\r\n \"yMax\": 330,\r\n \"ha\": 494,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 598\r\n },\r\n \"-\": {\r\n \"xMin\": 108,\r\n \"xMax\": 838,\r\n \"yMin\": 480,\r\n \"yMax\": 724,\r\n \"ha\": 244,\r\n \"leftSideBearing\": 108,\r\n \"advanceWidth\": 966\r\n },\r\n \".\": {\r\n \"xMin\": 134,\r\n \"xMax\": 464,\r\n \"yMin\": 0,\r\n \"yMax\": 330,\r\n \"ha\": 330,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 598\r\n },\r\n \"/\": {\r\n \"xMin\": 70,\r\n \"xMax\": 826,\r\n \"yMin\": -26,\r\n \"yMax\": 1408,\r\n \"ha\": 1434,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 906\r\n },\r\n \":\": {\r\n \"xMin\": 122,\r\n \"xMax\": 454,\r\n \"yMin\": 0,\r\n \"yMax\": 854,\r\n \"ha\": 854,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 572\r\n },\r\n \";\": {\r\n \"xMin\": 120,\r\n \"xMax\": 452,\r\n \"yMin\": -166,\r\n \"yMax\": 852,\r\n \"ha\": 1018,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 596\r\n },\r\n \"<\": {\r\n \"xMin\": 162,\r\n \"xMax\": 768,\r\n \"yMin\": 126,\r\n \"yMax\": 1074,\r\n \"ha\": 948,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 930\r\n },\r\n \"=\": {\r\n \"xMin\": 180,\r\n \"xMax\": 914,\r\n \"yMin\": 290,\r\n \"yMax\": 926,\r\n \"ha\": 636,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 1102\r\n },\r\n \">\": {\r\n \"xMin\": 162,\r\n \"xMax\": 768,\r\n \"yMin\": 126,\r\n \"yMax\": 1074,\r\n \"ha\": 948,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 930\r\n },\r\n \"?\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1012,\r\n \"yMin\": 0,\r\n \"yMax\": 1420,\r\n \"ha\": 1420,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1122\r\n },\r\n \"@\": {\r\n \"xMin\": 132,\r\n \"xMax\": 1306,\r\n \"yMin\": -96,\r\n \"yMax\": 1078,\r\n \"ha\": 1174,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1494\r\n },\r\n \"A\": {\r\n \"xMin\": 74,\r\n \"xMax\": 1030,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1104\r\n },\r\n \"B\": {\r\n \"xMin\": 120,\r\n \"xMax\": 1042,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 1104\r\n },\r\n \"C\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1046,\r\n \"yMin\": -6,\r\n \"yMax\": 1408,\r\n \"ha\": 1414,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1110\r\n },\r\n \"D\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1008,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1094\r\n },\r\n \"E\": {\r\n \"xMin\": 140,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 986\r\n },\r\n \"F\": {\r\n \"xMin\": 140,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 938\r\n },\r\n \"G\": {\r\n \"xMin\": 106,\r\n \"xMax\": 1072,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 106,\r\n \"advanceWidth\": 1156\r\n },\r\n \"H\": {\r\n \"xMin\": 146,\r\n \"xMax\": 1028,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 146,\r\n \"advanceWidth\": 1166\r\n },\r\n \"I\": {\r\n \"xMin\": 168,\r\n \"xMax\": 500,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 666\r\n },\r\n \"J\": {\r\n \"xMin\": 46,\r\n \"xMax\": 980,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 1126\r\n },\r\n \"K\": {\r\n \"xMin\": 140,\r\n \"xMax\": 1064,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 1142\r\n },\r\n \"L\": {\r\n \"xMin\": 178,\r\n \"xMax\": 906,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 178,\r\n \"advanceWidth\": 968\r\n },\r\n \"M\": {\r\n \"xMin\": 156,\r\n \"xMax\": 1430,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 156,\r\n \"advanceWidth\": 1594\r\n },\r\n \"N\": {\r\n \"xMin\": 148,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 148,\r\n \"advanceWidth\": 1360\r\n },\r\n \"O\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1026,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1128\r\n },\r\n \"P\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1066,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1082\r\n },\r\n \"Q\": {\r\n \"xMin\": 122,\r\n \"xMax\": 1114,\r\n \"yMin\": -110,\r\n \"yMax\": 1408,\r\n \"ha\": 1518,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1156\r\n },\r\n \"R\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1062,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1142\r\n },\r\n \"S\": {\r\n \"xMin\": 88,\r\n \"xMax\": 950,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1014\r\n },\r\n \"T\": {\r\n \"xMin\": 10,\r\n \"xMax\": 974,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 982\r\n },\r\n \"U\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1070,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1208\r\n },\r\n \"V\": {\r\n \"xMin\": 16,\r\n \"xMax\": 992,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 16,\r\n \"advanceWidth\": 1000\r\n },\r\n \"W\": {\r\n \"xMin\": 24,\r\n \"xMax\": 1658,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 1666\r\n },\r\n \"X\": {\r\n \"xMin\": 56,\r\n \"xMax\": 1094,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 1146\r\n },\r\n \"Y\": {\r\n \"xMin\": -14,\r\n \"xMax\": 1022,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": -14,\r\n \"advanceWidth\": 1000\r\n },\r\n \"Z\": {\r\n \"xMin\": 70,\r\n \"xMax\": 982,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1042\r\n },\r\n \"[\": {\r\n \"xMin\": 240,\r\n \"xMax\": 736,\r\n \"yMin\": 2,\r\n \"yMax\": 1404,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 240,\r\n \"advanceWidth\": 836\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 70,\r\n \"xMax\": 826,\r\n \"yMin\": -26,\r\n \"yMax\": 1408,\r\n \"ha\": 1434,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 906\r\n },\r\n \"]\": {\r\n \"xMin\": 140,\r\n \"xMax\": 636,\r\n \"yMin\": 2,\r\n \"yMax\": 1404,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 836\r\n },\r\n \"^\": {\r\n \"xMin\": 174,\r\n \"xMax\": 782,\r\n \"yMin\": 762,\r\n \"yMax\": 1156,\r\n \"ha\": 394,\r\n \"leftSideBearing\": 174,\r\n \"advanceWidth\": 976\r\n },\r\n \"_\": {\r\n \"xMin\": 146,\r\n \"xMax\": 1254,\r\n \"yMin\": 2,\r\n \"yMax\": 246,\r\n \"ha\": 244,\r\n \"leftSideBearing\": 146,\r\n \"advanceWidth\": 1408\r\n },\r\n \"`\": {\r\n \"xMin\": 132,\r\n \"xMax\": 578,\r\n \"yMin\": 1102,\r\n \"yMax\": 1452,\r\n \"ha\": 350,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 698\r\n },\r\n \"a\": {\r\n \"xMin\": 84,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1020\r\n },\r\n \"b\": {\r\n \"xMin\": 120,\r\n \"xMax\": 948,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 1042\r\n },\r\n \"c\": {\r\n \"xMin\": 84,\r\n \"xMax\": 930,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1000\r\n },\r\n \"d\": {\r\n \"xMin\": 82,\r\n \"xMax\": 910,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 1020\r\n },\r\n \"e\": {\r\n \"xMin\": 92,\r\n \"xMax\": 936,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1020\r\n },\r\n \"f\": {\r\n \"xMin\": 0,\r\n \"xMax\": 724,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 750\r\n },\r\n \"g\": {\r\n \"xMin\": 92,\r\n \"xMax\": 922,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1042\r\n },\r\n \"h\": {\r\n \"xMin\": 122,\r\n \"xMax\": 956,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1042\r\n },\r\n \"i\": {\r\n \"xMin\": 154,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 626\r\n },\r\n \"j\": {\r\n \"xMin\": -44,\r\n \"xMax\": 480,\r\n \"yMin\": -400,\r\n \"yMax\": 1402,\r\n \"ha\": 1802,\r\n \"leftSideBearing\": -44,\r\n \"advanceWidth\": 626\r\n },\r\n \"k\": {\r\n \"xMin\": 150,\r\n \"xMax\": 920,\r\n \"yMin\": -2,\r\n \"yMax\": 1400,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1014\r\n },\r\n \"l\": {\r\n \"xMin\": 140,\r\n \"xMax\": 444,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 586\r\n },\r\n \"m\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1486,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1604\r\n },\r\n \"n\": {\r\n \"xMin\": 132,\r\n \"xMax\": 966,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1082\r\n },\r\n \"o\": {\r\n \"xMin\": 78,\r\n \"xMax\": 912,\r\n \"yMin\": -8,\r\n \"yMax\": 1008,\r\n \"ha\": 1016,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 990\r\n },\r\n \"p\": {\r\n \"xMin\": 132,\r\n \"xMax\": 960,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1062\r\n },\r\n \"q\": {\r\n \"xMin\": 104,\r\n \"xMax\": 932,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1062\r\n },\r\n \"r\": {\r\n \"xMin\": 132,\r\n \"xMax\": 770,\r\n \"yMin\": 0,\r\n \"yMax\": 998,\r\n \"ha\": 998,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 792\r\n },\r\n \"s\": {\r\n \"xMin\": 86,\r\n \"xMax\": 836,\r\n \"yMin\": -8,\r\n \"yMax\": 1008,\r\n \"ha\": 1016,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 910\r\n },\r\n \"t\": {\r\n \"xMin\": 60,\r\n \"xMax\": 786,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 870\r\n },\r\n \"u\": {\r\n \"xMin\": 118,\r\n \"xMax\": 952,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 118,\r\n \"advanceWidth\": 1076\r\n },\r\n \"v\": {\r\n \"xMin\": 36,\r\n \"xMax\": 844,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 876\r\n },\r\n \"w\": {\r\n \"xMin\": 24,\r\n \"xMax\": 1372,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 1396\r\n },\r\n \"x\": {\r\n \"xMin\": 84,\r\n \"xMax\": 860,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 938\r\n },\r\n \"y\": {\r\n \"xMin\": 20,\r\n \"xMax\": 892,\r\n \"yMin\": -400,\r\n \"yMax\": 1004,\r\n \"ha\": 1404,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 916\r\n },\r\n \"z\": {\r\n \"xMin\": 72,\r\n \"xMax\": 844,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 916\r\n },\r\n \"{\": {\r\n \"xMin\": 188,\r\n \"xMax\": 932,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 188,\r\n \"advanceWidth\": 1012\r\n },\r\n \"|\": {\r\n \"xMin\": 180,\r\n \"xMax\": 424,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 604\r\n },\r\n \"}\": {\r\n \"xMin\": 80,\r\n \"xMax\": 824,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 1012\r\n },\r\n \"~\": {\r\n \"xMin\": 112,\r\n \"xMax\": 802,\r\n \"yMin\": 84,\r\n \"yMax\": 398,\r\n \"ha\": 314,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 918\r\n }\r\n },\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-16T18:00:03.708Z\"\r\n};","export const MerriweatherFont = {\r\n name: \"Merriweather-Regular\",\r\n smufl: false,\r\n spacing: 50,\r\n fontFamily: \"Merriweather\",\r\n description: \"Merriweather, a serif web font by Sorkin Type\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 62,\r\n \"xMax\": 582,\r\n \"yMin\": -9,\r\n \"yMax\": 631,\r\n \"ha\": 640,\r\n \"leftSideBearing\": 62,\r\n \"advanceWidth\": 643\r\n },\r\n \"1\": {\r\n \"xMin\": 39,\r\n \"xMax\": 419,\r\n \"yMin\": 0,\r\n \"yMax\": 632,\r\n \"ha\": 632,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 440\r\n },\r\n \"2\": {\r\n \"xMin\": 47,\r\n \"xMax\": 565,\r\n \"yMin\": 0,\r\n \"yMax\": 632,\r\n \"ha\": 632,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 598\r\n },\r\n \"3\": {\r\n \"xMin\": 57,\r\n \"xMax\": 512,\r\n \"yMin\": -161,\r\n \"yMax\": 632,\r\n \"ha\": 793,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 560\r\n },\r\n \"4\": {\r\n \"xMin\": 37,\r\n \"xMax\": 625,\r\n \"yMin\": -161,\r\n \"yMax\": 680,\r\n \"ha\": 841,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 644\r\n },\r\n \"5\": {\r\n \"xMin\": 91,\r\n \"xMax\": 527,\r\n \"yMin\": -161,\r\n \"yMax\": 643,\r\n \"ha\": 804,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 594\r\n },\r\n \"6\": {\r\n \"xMin\": 76,\r\n \"xMax\": 592,\r\n \"yMin\": -11,\r\n \"yMax\": 786,\r\n \"ha\": 797,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 664\r\n },\r\n \"7\": {\r\n \"xMin\": 48,\r\n \"xMax\": 546,\r\n \"yMin\": -173,\r\n \"yMax\": 624,\r\n \"ha\": 797,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 588\r\n },\r\n \"8\": {\r\n \"xMin\": 65,\r\n \"xMax\": 572,\r\n \"yMin\": -10,\r\n \"yMax\": 752,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 633\r\n },\r\n \"9\": {\r\n \"xMin\": 70,\r\n \"xMax\": 588,\r\n \"yMin\": -167,\r\n \"yMax\": 632,\r\n \"ha\": 799,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 660\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 237\r\n },\r\n \"!\": {\r\n \"xMin\": 107,\r\n \"xMax\": 248,\r\n \"yMin\": -10,\r\n \"yMax\": 883,\r\n \"ha\": 893,\r\n \"leftSideBearing\": 107,\r\n \"advanceWidth\": 354\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 124,\r\n \"xMax\": 489,\r\n \"yMin\": 456,\r\n \"yMax\": 827,\r\n \"ha\": 371,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 612\r\n },\r\n \"#\": {\r\n \"xMin\": 81,\r\n \"xMax\": 677,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 81,\r\n \"advanceWidth\": 744\r\n },\r\n \"$\": {\r\n \"xMin\": 94,\r\n \"xMax\": 575,\r\n \"yMin\": -126,\r\n \"yMax\": 860,\r\n \"ha\": 986,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 659\r\n },\r\n \"%\": {\r\n \"xMin\": 53,\r\n \"xMax\": 981,\r\n \"yMin\": 0,\r\n \"yMax\": 751,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 53,\r\n \"advanceWidth\": 1037\r\n },\r\n \"&\": {\r\n \"xMin\": 60,\r\n \"xMax\": 739,\r\n \"yMin\": -9,\r\n \"yMax\": 752,\r\n \"ha\": 761,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 756\r\n },\r\n \"'\": {\r\n \"xMin\": 124,\r\n \"xMax\": 230,\r\n \"yMin\": 456,\r\n \"yMax\": 827,\r\n \"ha\": 371,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 353\r\n },\r\n \"(\": {\r\n \"xMin\": 67,\r\n \"xMax\": 360,\r\n \"yMin\": -184,\r\n \"yMax\": 828,\r\n \"ha\": 1012,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 430\r\n },\r\n \")\": {\r\n \"xMin\": 70,\r\n \"xMax\": 363,\r\n \"yMin\": -183,\r\n \"yMax\": 829,\r\n \"ha\": 1012,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 430\r\n },\r\n \"*\": {\r\n \"xMin\": 76,\r\n \"xMax\": 568,\r\n \"yMin\": 310,\r\n \"yMax\": 823,\r\n \"ha\": 513,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 643\r\n },\r\n \"+\": {\r\n \"xMin\": 105,\r\n \"xMax\": 556,\r\n \"yMin\": 84,\r\n \"yMax\": 547,\r\n \"ha\": 463,\r\n \"leftSideBearing\": 105,\r\n \"advanceWidth\": 661\r\n },\r\n \",\": {\r\n \"xMin\": 99,\r\n \"xMax\": 250,\r\n \"yMin\": -224,\r\n \"yMax\": 150,\r\n \"ha\": 374,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 335\r\n },\r\n \"-\": {\r\n \"xMin\": 112,\r\n \"xMax\": 516,\r\n \"yMin\": 284,\r\n \"yMax\": 357,\r\n \"ha\": 73,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 628\r\n },\r\n \".\": {\r\n \"xMin\": 63,\r\n \"xMax\": 202,\r\n \"yMin\": -10,\r\n \"yMax\": 127,\r\n \"ha\": 137,\r\n \"leftSideBearing\": 63,\r\n \"advanceWidth\": 265\r\n },\r\n \"/\": {\r\n \"xMin\": 36,\r\n \"xMax\": 394,\r\n \"yMin\": -177,\r\n \"yMax\": 781,\r\n \"ha\": 958,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 431\r\n },\r\n \":\": {\r\n \"xMin\": 102,\r\n \"xMax\": 240,\r\n \"yMin\": -10,\r\n \"yMax\": 539,\r\n \"ha\": 549,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 344\r\n },\r\n \";\": {\r\n \"xMin\": 99,\r\n \"xMax\": 250,\r\n \"yMin\": -224,\r\n \"yMax\": 539,\r\n \"ha\": 763,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 344\r\n },\r\n \"<\": {\r\n \"xMin\": 82,\r\n \"xMax\": 555,\r\n \"yMin\": 27,\r\n \"yMax\": 575,\r\n \"ha\": 548,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 669\r\n },\r\n \"=\": {\r\n \"xMin\": 102,\r\n \"xMax\": 552,\r\n \"yMin\": 127,\r\n \"yMax\": 474,\r\n \"ha\": 347,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 653\r\n },\r\n \">\": {\r\n \"xMin\": 114,\r\n \"xMax\": 587,\r\n \"yMin\": 27,\r\n \"yMax\": 575,\r\n \"ha\": 548,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 669\r\n },\r\n \"?\": {\r\n \"xMin\": 42,\r\n \"xMax\": 452,\r\n \"yMin\": -10,\r\n \"yMax\": 906,\r\n \"ha\": 916,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 487\r\n },\r\n \"@\": {\r\n \"xMin\": 93,\r\n \"xMax\": 977,\r\n \"yMin\": -253,\r\n \"yMax\": 760,\r\n \"ha\": 1013,\r\n \"leftSideBearing\": 93,\r\n \"advanceWidth\": 1078\r\n },\r\n \"A\": {\r\n \"xMin\": -13,\r\n \"xMax\": 705,\r\n \"yMin\": 0,\r\n \"yMax\": 749,\r\n \"ha\": 749,\r\n \"leftSideBearing\": -13,\r\n \"advanceWidth\": 692\r\n },\r\n \"B\": {\r\n \"xMin\": 46,\r\n \"xMax\": 649,\r\n \"yMin\": -6,\r\n \"yMax\": 751,\r\n \"ha\": 757,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 685\r\n },\r\n \"C\": {\r\n \"xMin\": 33,\r\n \"xMax\": 617,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 653\r\n },\r\n \"D\": {\r\n \"xMin\": 46,\r\n \"xMax\": 725,\r\n \"yMin\": -8,\r\n \"yMax\": 751,\r\n \"ha\": 759,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 758\r\n },\r\n \"E\": {\r\n \"xMin\": 46,\r\n \"xMax\": 630,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 651\r\n },\r\n \"F\": {\r\n \"xMin\": 43,\r\n \"xMax\": 588,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 619\r\n },\r\n \"G\": {\r\n \"xMin\": 43,\r\n \"xMax\": 721,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 740\r\n },\r\n \"H\": {\r\n \"xMin\": 50,\r\n \"xMax\": 777,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 828\r\n },\r\n \"I\": {\r\n \"xMin\": 54,\r\n \"xMax\": 348,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 403\r\n },\r\n \"J\": {\r\n \"xMin\": -6,\r\n \"xMax\": 343,\r\n \"yMin\": -179,\r\n \"yMax\": 743,\r\n \"ha\": 922,\r\n \"leftSideBearing\": -6,\r\n \"advanceWidth\": 381\r\n },\r\n \"K\": {\r\n \"xMin\": 48,\r\n \"xMax\": 727,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 726\r\n },\r\n \"L\": {\r\n \"xMin\": 48,\r\n \"xMax\": 616,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 634\r\n },\r\n \"M\": {\r\n \"xMin\": 6,\r\n \"xMax\": 984,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 990\r\n },\r\n \"N\": {\r\n \"xMin\": 50,\r\n \"xMax\": 774,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 799\r\n },\r\n \"O\": {\r\n \"xMin\": 34,\r\n \"xMax\": 689,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 722\r\n },\r\n \"P\": {\r\n \"xMin\": 48,\r\n \"xMax\": 624,\r\n \"yMin\": 0,\r\n \"yMax\": 750,\r\n \"ha\": 750,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 649\r\n },\r\n \"Q\": {\r\n \"xMin\": 36,\r\n \"xMax\": 904,\r\n \"yMin\": -198,\r\n \"yMax\": 751,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 727\r\n },\r\n \"R\": {\r\n \"xMin\": 46,\r\n \"xMax\": 705,\r\n \"yMin\": 0,\r\n \"yMax\": 751,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 704\r\n },\r\n \"S\": {\r\n \"xMin\": 62,\r\n \"xMax\": 556,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 62,\r\n \"advanceWidth\": 594\r\n },\r\n \"T\": {\r\n \"xMin\": 17,\r\n \"xMax\": 669,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 17,\r\n \"advanceWidth\": 692\r\n },\r\n \"U\": {\r\n \"xMin\": 24,\r\n \"xMax\": 725,\r\n \"yMin\": -8,\r\n \"yMax\": 743,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 740\r\n },\r\n \"V\": {\r\n \"xMin\": -16,\r\n \"xMax\": 689,\r\n \"yMin\": -8,\r\n \"yMax\": 743,\r\n \"ha\": 751,\r\n \"leftSideBearing\": -16,\r\n \"advanceWidth\": 670\r\n },\r\n \"W\": {\r\n \"xMin\": -19,\r\n \"xMax\": 1019,\r\n \"yMin\": -5,\r\n \"yMax\": 743,\r\n \"ha\": 748,\r\n \"leftSideBearing\": -19,\r\n \"advanceWidth\": 1000\r\n },\r\n \"X\": {\r\n \"xMin\": 7,\r\n \"xMax\": 710,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 7,\r\n \"advanceWidth\": 712\r\n },\r\n \"Y\": {\r\n \"xMin\": -12,\r\n \"xMax\": 658,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": -12,\r\n \"advanceWidth\": 644\r\n },\r\n \"Z\": {\r\n \"xMin\": 34,\r\n \"xMax\": 616,\r\n \"yMin\": 0,\r\n \"yMax\": 746,\r\n \"ha\": 746,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 654\r\n },\r\n \"[\": {\r\n \"xMin\": 96,\r\n \"xMax\": 338,\r\n \"yMin\": -137,\r\n \"yMax\": 804,\r\n \"ha\": 941,\r\n \"leftSideBearing\": 96,\r\n \"advanceWidth\": 428\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 30,\r\n \"xMax\": 388,\r\n \"yMin\": -177,\r\n \"yMax\": 781,\r\n \"ha\": 958,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 431\r\n },\r\n \"]\": {\r\n \"xMin\": 90,\r\n \"xMax\": 332,\r\n \"yMin\": -137,\r\n \"yMax\": 804,\r\n \"ha\": 941,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 428\r\n },\r\n \"^\": {\r\n \"xMin\": 86,\r\n \"xMax\": 579,\r\n \"yMin\": 133,\r\n \"yMax\": 748,\r\n \"ha\": 615,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 666\r\n },\r\n \"_\": {\r\n \"xMin\": -10,\r\n \"xMax\": 845,\r\n \"yMin\": -183,\r\n \"yMax\": -122,\r\n \"ha\": 61,\r\n \"leftSideBearing\": -10,\r\n \"advanceWidth\": 835\r\n },\r\n \"`\": {\r\n \"xMin\": -7,\r\n \"xMax\": 227,\r\n \"yMin\": 653,\r\n \"yMax\": 884,\r\n \"ha\": 231,\r\n \"leftSideBearing\": -7,\r\n \"advanceWidth\": 333\r\n },\r\n \"a\": {\r\n \"xMin\": 45,\r\n \"xMax\": 536,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 561\r\n },\r\n \"b\": {\r\n \"xMin\": -2,\r\n \"xMax\": 565,\r\n \"yMin\": -11,\r\n \"yMax\": 819,\r\n \"ha\": 830,\r\n \"leftSideBearing\": -2,\r\n \"advanceWidth\": 607\r\n },\r\n \"c\": {\r\n \"xMin\": 33,\r\n \"xMax\": 471,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 513\r\n },\r\n \"d\": {\r\n \"xMin\": 42,\r\n \"xMax\": 586,\r\n \"yMin\": -11,\r\n \"yMax\": 819,\r\n \"ha\": 830,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 621\r\n },\r\n \"e\": {\r\n \"xMin\": 43,\r\n \"xMax\": 503,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 544\r\n },\r\n \"f\": {\r\n \"xMin\": 31,\r\n \"xMax\": 413,\r\n \"yMin\": 0,\r\n \"yMax\": 828,\r\n \"ha\": 828,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 400\r\n },\r\n \"g\": {\r\n \"xMin\": 41,\r\n \"xMax\": 597,\r\n \"yMin\": -270,\r\n \"yMax\": 571,\r\n \"ha\": 841,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 607\r\n },\r\n \"h\": {\r\n \"xMin\": 15,\r\n \"xMax\": 630,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 659\r\n },\r\n \"i\": {\r\n \"xMin\": 42,\r\n \"xMax\": 307,\r\n \"yMin\": 0,\r\n \"yMax\": 793,\r\n \"ha\": 793,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 333\r\n },\r\n \"j\": {\r\n \"xMin\": -11,\r\n \"xMax\": 238,\r\n \"yMin\": -243,\r\n \"yMax\": 793,\r\n \"ha\": 1036,\r\n \"leftSideBearing\": -11,\r\n \"advanceWidth\": 317\r\n },\r\n \"k\": {\r\n \"xMin\": 20,\r\n \"xMax\": 624,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 600\r\n },\r\n \"l\": {\r\n \"xMin\": 37,\r\n \"xMax\": 307,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 333\r\n },\r\n \"m\": {\r\n \"xMin\": 33,\r\n \"xMax\": 970,\r\n \"yMin\": 0,\r\n \"yMax\": 568,\r\n \"ha\": 568,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 995\r\n },\r\n \"n\": {\r\n \"xMin\": 33,\r\n \"xMax\": 637,\r\n \"yMin\": 0,\r\n \"yMax\": 568,\r\n \"ha\": 568,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 664\r\n },\r\n \"o\": {\r\n \"xMin\": 45,\r\n \"xMax\": 562,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 608\r\n },\r\n \"p\": {\r\n \"xMin\": 29,\r\n \"xMax\": 586,\r\n \"yMin\": -242,\r\n \"yMax\": 570,\r\n \"ha\": 812,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 628\r\n },\r\n \"q\": {\r\n \"xMin\": 42,\r\n \"xMax\": 597,\r\n \"yMin\": -242,\r\n \"yMax\": 570,\r\n \"ha\": 812,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 609\r\n },\r\n \"r\": {\r\n \"xMin\": 47,\r\n \"xMax\": 437,\r\n \"yMin\": 0,\r\n \"yMax\": 570,\r\n \"ha\": 570,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 458\r\n },\r\n \"s\": {\r\n \"xMin\": 55,\r\n \"xMax\": 460,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 505\r\n },\r\n \"t\": {\r\n \"xMin\": 31,\r\n \"xMax\": 391,\r\n \"yMin\": -10,\r\n \"yMax\": 699,\r\n \"ha\": 709,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 407\r\n },\r\n \"u\": {\r\n \"xMin\": 36,\r\n \"xMax\": 597,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 632\r\n },\r\n \"v\": {\r\n \"xMin\": -1,\r\n \"xMax\": 575,\r\n \"yMin\": -8,\r\n \"yMax\": 555,\r\n \"ha\": 563,\r\n \"leftSideBearing\": -1,\r\n \"advanceWidth\": 568\r\n },\r\n \"w\": {\r\n \"xMin\": -7,\r\n \"xMax\": 853,\r\n \"yMin\": -8,\r\n \"yMax\": 555,\r\n \"ha\": 563,\r\n \"leftSideBearing\": -7,\r\n \"advanceWidth\": 839\r\n },\r\n \"x\": {\r\n \"xMin\": 6,\r\n \"xMax\": 591,\r\n \"yMin\": 0,\r\n \"yMax\": 555,\r\n \"ha\": 555,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 595\r\n },\r\n \"y\": {\r\n \"xMin\": -3,\r\n \"xMax\": 571,\r\n \"yMin\": -249,\r\n \"yMax\": 555,\r\n \"ha\": 804,\r\n \"leftSideBearing\": -3,\r\n \"advanceWidth\": 572\r\n },\r\n \"z\": {\r\n \"xMin\": 30,\r\n \"xMax\": 518,\r\n \"yMin\": 0,\r\n \"yMax\": 555,\r\n \"ha\": 555,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 554\r\n },\r\n \"{\": {\r\n \"xMin\": 57,\r\n \"xMax\": 431,\r\n \"yMin\": -137,\r\n \"yMax\": 806,\r\n \"ha\": 943,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 508\r\n },\r\n \"|\": {\r\n \"xMin\": 170,\r\n \"xMax\": 252,\r\n \"yMin\": -91,\r\n \"yMax\": 869,\r\n \"ha\": 960,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 422\r\n },\r\n \"}\": {\r\n \"xMin\": 77,\r\n \"xMax\": 450,\r\n \"yMin\": -137,\r\n \"yMax\": 806,\r\n \"ha\": 943,\r\n \"leftSideBearing\": 77,\r\n \"advanceWidth\": 508\r\n },\r\n \"~\": {\r\n \"xMin\": 107,\r\n \"xMax\": 584,\r\n \"yMin\": 218,\r\n \"yMax\": 379,\r\n \"ha\": 161,\r\n \"leftSideBearing\": 107,\r\n \"advanceWidth\": 692\r\n }\r\n },\r\n \"resolution\": 1000,\r\n \"generatedOn\": \"2020-10-16T18:04:00.805Z\"\r\n};","export const ArialFont = {\r\n smufl: false,\r\n name: \"Arial\",\r\n spacing: 50,\r\n Description: 'Built-in sans-serif font',\r\n bold: true,\r\n italic: true,\r\n monospaced: false,\r\n serifs: false,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1041,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \"1\": {\r\n \"xMin\": 223,\r\n \"xMax\": 763,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 223,\r\n \"advanceWidth\": 1139\r\n },\r\n \"2\": {\r\n \"xMin\": 61.840001123045234,\r\n \"xMax\": 1031,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1139\r\n },\r\n \"3\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1046,\r\n \"yMin\": -26,\r\n \"yMax\": 1472,\r\n \"ha\": 1498,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1139\r\n },\r\n \"4\": {\r\n \"xMin\": 26,\r\n \"xMax\": 1040,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 1139\r\n },\r\n \"5\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1057,\r\n \"yMin\": -25,\r\n \"yMax\": 1446,\r\n \"ha\": 1471,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \"6\": {\r\n \"xMin\": 77,\r\n \"xMax\": 1045,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 77,\r\n \"advanceWidth\": 1139\r\n },\r\n \"7\": {\r\n \"xMin\": 97,\r\n \"xMax\": 1046,\r\n \"yMin\": 0,\r\n \"yMax\": 1447,\r\n \"ha\": 1447,\r\n \"leftSideBearing\": 97,\r\n \"advanceWidth\": 1139\r\n },\r\n \"8\": {\r\n \"xMin\": 83,\r\n \"xMax\": 1049,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 83,\r\n \"advanceWidth\": 1139\r\n },\r\n \"9\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1049,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \"!\": {\r\n \"xMin\": 176,\r\n \"xMax\": 399,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 176,\r\n \"advanceWidth\": 569\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 94,\r\n \"xMax\": 631,\r\n \"yMin\": 947,\r\n \"yMax\": 1466,\r\n \"ha\": 519,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 727\r\n },\r\n \"#\": {\r\n \"xMin\": 21,\r\n \"xMax\": 1113,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 21,\r\n \"advanceWidth\": 1139\r\n },\r\n \"$\": {\r\n \"xMin\": 73,\r\n \"xMax\": 1043,\r\n \"yMin\": -211,\r\n \"yMax\": 1601,\r\n \"ha\": 1812,\r\n \"leftSideBearing\": 73,\r\n \"advanceWidth\": 1139\r\n },\r\n \"%\": {\r\n \"xMin\": 119,\r\n \"xMax\": 1695,\r\n \"yMin\": -54,\r\n \"yMax\": 1491,\r\n \"ha\": 1545,\r\n \"leftSideBearing\": 119,\r\n \"advanceWidth\": 1821\r\n },\r\n \"&\": {\r\n \"xMin\": 88,\r\n \"xMax\": 1319,\r\n \"yMin\": -34,\r\n \"yMax\": 1491,\r\n \"ha\": 1525,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1366\r\n },\r\n \"'\": {\r\n \"xMin\": 90,\r\n \"xMax\": 295,\r\n \"yMin\": 947,\r\n \"yMax\": 1466,\r\n \"ha\": 519,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 391\r\n },\r\n \"(\": {\r\n \"xMin\": 124,\r\n \"xMax\": 608,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 682\r\n },\r\n \")\": {\r\n \"xMin\": 124,\r\n \"xMax\": 608,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 682\r\n },\r\n \"*\": {\r\n \"xMin\": 64,\r\n \"xMax\": 725,\r\n \"yMin\": 867,\r\n \"yMax\": 1491,\r\n \"ha\": 624,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 797\r\n },\r\n \"+\": {\r\n \"xMin\": 114,\r\n \"xMax\": 1082,\r\n \"yMin\": 237,\r\n \"yMax\": 1206,\r\n \"ha\": 969,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 1196\r\n },\r\n \",\": {\r\n \"xMin\": 170,\r\n \"xMax\": 387,\r\n \"yMin\": -290,\r\n \"yMax\": 205,\r\n \"ha\": 495,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 569\r\n },\r\n \"-\": {\r\n \"xMin\": 65,\r\n \"xMax\": 618,\r\n \"yMin\": 440,\r\n \"yMax\": 621,\r\n \"ha\": 181,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 682\r\n },\r\n \".\": {\r\n \"xMin\": 186,\r\n \"xMax\": 391,\r\n \"yMin\": 0,\r\n \"yMax\": 205,\r\n \"ha\": 205,\r\n \"leftSideBearing\": 186,\r\n \"advanceWidth\": 569\r\n },\r\n \"/\": {\r\n \"xMin\": 0,\r\n \"xMax\": 569,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \":\": {\r\n \"xMin\": 185,\r\n \"xMax\": 390,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 185,\r\n \"advanceWidth\": 569\r\n },\r\n \";\": {\r\n \"xMin\": 170,\r\n \"xMax\": 387,\r\n \"yMin\": -290,\r\n \"yMax\": 1062,\r\n \"ha\": 1352,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 569\r\n },\r\n \"<\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1083,\r\n \"yMin\": 226,\r\n \"yMax\": 1219,\r\n \"ha\": 993,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1196\r\n },\r\n \"=\": {\r\n \"xMin\": 114,\r\n \"xMax\": 1082,\r\n \"yMin\": 417,\r\n \"yMax\": 1030,\r\n \"ha\": 613,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 1196\r\n },\r\n \">\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1083,\r\n \"yMin\": 226,\r\n \"yMax\": 1219,\r\n \"ha\": 993,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1196\r\n },\r\n \"?\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1036,\r\n \"yMin\": 0,\r\n \"yMax\": 1491,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1139\r\n },\r\n \"@\": {\r\n \"xMin\": 111,\r\n \"xMax\": 2005,\r\n \"yMin\": -431,\r\n \"yMax\": 1493,\r\n \"ha\": 1924,\r\n \"leftSideBearing\": 111,\r\n \"advanceWidth\": 2079\r\n },\r\n \"A\": {\r\n \"xMin\": -3,\r\n \"xMax\": 1369,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": -3,\r\n \"advanceWidth\": 1366\r\n },\r\n \"B\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1257,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1366\r\n },\r\n \"C\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1398,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1479\r\n },\r\n \"D\": {\r\n \"xMin\": 158,\r\n \"xMax\": 1370,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 158,\r\n \"advanceWidth\": 1479\r\n },\r\n \"E\": {\r\n \"xMin\": 162,\r\n \"xMax\": 1256,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 1366\r\n },\r\n \"F\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1157,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1251\r\n },\r\n \"G\": {\r\n \"xMin\": 109,\r\n \"xMax\": 1465,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 109,\r\n \"advanceWidth\": 1593\r\n },\r\n \"H\": {\r\n \"xMin\": 164,\r\n \"xMax\": 1314,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 164,\r\n \"advanceWidth\": 1479\r\n },\r\n \"I\": {\r\n \"xMin\": 191,\r\n \"xMax\": 385,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 191,\r\n \"advanceWidth\": 569\r\n },\r\n \"J\": {\r\n \"xMin\": 58.84976474807333,\r\n \"xMax\": 865,\r\n \"yMin\": -25,\r\n \"yMax\": 1466,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 1024\r\n },\r\n \"K\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1362,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1366\r\n },\r\n \"L\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1066,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1139\r\n },\r\n \"M\": {\r\n \"xMin\": 152,\r\n \"xMax\": 1551,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 152,\r\n \"advanceWidth\": 1706\r\n },\r\n \"N\": {\r\n \"xMin\": 156,\r\n \"xMax\": 1311,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 156,\r\n \"advanceWidth\": 1479\r\n },\r\n \"O\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1501,\r\n \"yMin\": -25,\r\n \"yMax\": 1492,\r\n \"ha\": 1517,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1593\r\n },\r\n \"P\": {\r\n \"xMin\": 158,\r\n \"xMax\": 1277,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 158,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Q\": {\r\n \"xMin\": 88,\r\n \"xMax\": 1518,\r\n \"yMin\": -114,\r\n \"yMax\": 1492,\r\n \"ha\": 1606,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1593\r\n },\r\n \"R\": {\r\n \"xMin\": 161,\r\n \"xMax\": 1453,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 161,\r\n \"advanceWidth\": 1479\r\n },\r\n \"S\": {\r\n \"xMin\": 92,\r\n \"xMax\": 1259,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1366\r\n },\r\n \"T\": {\r\n \"xMin\": 48,\r\n \"xMax\": 1210,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 1251\r\n },\r\n \"U\": {\r\n \"xMin\": 161,\r\n \"xMax\": 1314,\r\n \"yMin\": -25,\r\n \"yMax\": 1466,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 161,\r\n \"advanceWidth\": 1479\r\n },\r\n \"V\": {\r\n \"xMin\": 9,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 1366\r\n },\r\n \"W\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1910,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1933\r\n },\r\n \"X\": {\r\n \"xMin\": 9,\r\n \"xMax\": 1353,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Y\": {\r\n \"xMin\": 6,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Z\": {\r\n \"xMin\": 41,\r\n \"xMax\": 1200,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 1251\r\n },\r\n \"[\": {\r\n \"xMin\": 139,\r\n \"xMax\": 536,\r\n \"yMin\": -407,\r\n \"yMax\": 1466,\r\n \"ha\": 1873,\r\n \"leftSideBearing\": 139,\r\n \"advanceWidth\": 569\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 0,\r\n \"xMax\": 569,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \"]\": {\r\n \"xMin\": 39,\r\n \"xMax\": 436,\r\n \"yMin\": -407,\r\n \"yMax\": 1466,\r\n \"ha\": 1873,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 569\r\n },\r\n \"^\": {\r\n \"xMin\": 54,\r\n \"xMax\": 907,\r\n \"yMin\": 690,\r\n \"yMax\": 1491,\r\n \"ha\": 801,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 961\r\n },\r\n \"_\": {\r\n \"xMin\": -31,\r\n \"xMax\": 1162,\r\n \"yMin\": -407,\r\n \"yMax\": -277,\r\n \"ha\": 130,\r\n \"leftSideBearing\": -31,\r\n \"advanceWidth\": 1139\r\n },\r\n \"`\": {\r\n \"xMin\": 89,\r\n \"xMax\": 465,\r\n \"yMin\": 1194,\r\n \"yMax\": 1474,\r\n \"ha\": 280,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 682\r\n },\r\n \"a\": {\r\n \"xMin\": 74,\r\n \"xMax\": 1052,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1139\r\n },\r\n \"b\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1055,\r\n \"yMin\": -24,\r\n \"yMax\": 1466,\r\n \"ha\": 1490,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1139\r\n },\r\n \"c\": {\r\n \"xMin\": 80,\r\n \"xMax\": 1005,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 1024\r\n },\r\n \"d\": {\r\n \"xMin\": 70,\r\n \"xMax\": 991,\r\n \"yMin\": -24,\r\n \"yMax\": 1466,\r\n \"ha\": 1490,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1139\r\n },\r\n \"e\": {\r\n \"xMin\": 75,\r\n \"xMax\": 1054,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 1139\r\n },\r\n \"f\": {\r\n \"xMin\": 19,\r\n \"xMax\": 640,\r\n \"yMin\": 0,\r\n \"yMax\": 1491,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 19,\r\n \"advanceWidth\": 569\r\n },\r\n \"g\": {\r\n \"xMin\": 66,\r\n \"xMax\": 1002,\r\n \"yMin\": -431,\r\n \"yMax\": 1086,\r\n \"ha\": 1517,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1139\r\n },\r\n \"h\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1000,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"i\": {\r\n \"xMin\": 136,\r\n \"xMax\": 316,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 136,\r\n \"advanceWidth\": 455\r\n },\r\n \"j\": {\r\n \"xMin\": -94,\r\n \"xMax\": 314,\r\n \"yMin\": -431,\r\n \"yMax\": 1466,\r\n \"ha\": 1897,\r\n \"leftSideBearing\": -94,\r\n \"advanceWidth\": 455\r\n },\r\n \"k\": {\r\n \"xMin\": 136,\r\n \"xMax\": 1016,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 136,\r\n \"advanceWidth\": 1024\r\n },\r\n \"l\": {\r\n \"xMin\": 131,\r\n \"xMax\": 311,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 131,\r\n \"advanceWidth\": 455\r\n },\r\n \"m\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1574,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1706\r\n },\r\n \"n\": {\r\n \"xMin\": 135,\r\n \"xMax\": 998,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"o\": {\r\n \"xMin\": 68,\r\n \"xMax\": 1063,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 68,\r\n \"advanceWidth\": 1139\r\n },\r\n \"p\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1057,\r\n \"yMin\": -407,\r\n \"yMax\": 1086,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"q\": {\r\n \"xMin\": 72,\r\n \"xMax\": 992,\r\n \"yMin\": -407,\r\n \"yMax\": 1086,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 1139\r\n },\r\n \"r\": {\r\n \"xMin\": 133,\r\n \"xMax\": 710,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 133,\r\n \"advanceWidth\": 682\r\n },\r\n \"s\": {\r\n \"xMin\": 63,\r\n \"xMax\": 945,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 63,\r\n \"advanceWidth\": 1024\r\n },\r\n \"t\": {\r\n \"xMin\": 36,\r\n \"xMax\": 554,\r\n \"yMin\": -14,\r\n \"yMax\": 1433,\r\n \"ha\": 1447,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 569\r\n },\r\n \"u\": {\r\n \"xMin\": 131,\r\n \"xMax\": 992,\r\n \"yMin\": -24,\r\n \"yMax\": 1062,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 131,\r\n \"advanceWidth\": 1139\r\n },\r\n \"v\": {\r\n \"xMin\": 26,\r\n \"xMax\": 1000,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 1024\r\n },\r\n \"w\": {\r\n \"xMin\": 6,\r\n \"xMax\": 1463,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1479\r\n },\r\n \"x\": {\r\n \"xMin\": 15,\r\n \"xMax\": 1009,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 1024\r\n },\r\n \"y\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1006,\r\n \"yMin\": -431,\r\n \"yMax\": 1062,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1024\r\n },\r\n \"z\": {\r\n \"xMin\": 40,\r\n \"xMax\": 980,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 1024\r\n },\r\n \"{\": {\r\n \"xMin\": 57,\r\n \"xMax\": 636,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 684\r\n },\r\n \"|\": {\r\n \"xMin\": 188,\r\n \"xMax\": 345,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 188,\r\n \"advanceWidth\": 532\r\n },\r\n \"}\": {\r\n \"xMin\": 47,\r\n \"xMax\": 626,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 684\r\n },\r\n \"~\": {\r\n \"xMin\": 87,\r\n \"xMax\": 1110,\r\n \"yMin\": 557,\r\n \"yMax\": 885,\r\n \"ha\": 328,\r\n \"leftSideBearing\": 87,\r\n \"advanceWidth\": 1196\r\n }\r\n },\r\n \"fontFamily\": \"Arial\",\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-18T18:48:11.823Z\"\r\n};","export const SourceSansProFont = {\r\n smufl: false,\r\n name: \"Sans\",\r\n spacing: 50,\r\n description: \"Open-source Sans font from Adobe\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"fontFamily\": \"Source Sans Pro\",\r\n \"resolution\": 1000,\r\n \"generatedOn\": \"2020-11-01T21:31:30.347Z\",\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 44,\r\n \"xMax\": 453,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 497\r\n },\r\n \"1\": {\r\n \"xMin\": 79,\r\n \"xMax\": 439,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 497\r\n },\r\n \"2\": {\r\n \"xMin\": 36,\r\n \"xMax\": 452,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 497\r\n },\r\n \"3\": {\r\n \"xMin\": 26,\r\n \"xMax\": 446,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 497\r\n },\r\n \"4\": {\r\n \"xMin\": 17,\r\n \"xMax\": 469,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 17,\r\n \"advanceWidth\": 497\r\n },\r\n \"5\": {\r\n \"xMin\": 25,\r\n \"xMax\": 449,\r\n \"yMin\": -12,\r\n \"yMax\": 638,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 497\r\n },\r\n \"6\": {\r\n \"xMin\": 48,\r\n \"xMax\": 457,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 497\r\n },\r\n \"7\": {\r\n \"xMin\": 44,\r\n \"xMax\": 455,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 497\r\n },\r\n \"8\": {\r\n \"xMin\": 41,\r\n \"xMax\": 456,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 497\r\n },\r\n \"9\": {\r\n \"xMin\": 40,\r\n \"xMax\": 448,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 497\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 200\r\n },\r\n \"!\": {\r\n \"xMin\": 85,\r\n \"xMax\": 204,\r\n \"yMin\": -12,\r\n \"yMax\": 670,\r\n \"ha\": 682,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 289\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 80,\r\n \"xMax\": 344,\r\n \"yMin\": 431,\r\n \"yMax\": 690,\r\n \"ha\": 259,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 425\r\n },\r\n \"#\": {\r\n \"xMin\": 35,\r\n \"xMax\": 467,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 497\r\n },\r\n \"$\": {\r\n \"xMin\": 52,\r\n \"xMax\": 437,\r\n \"yMin\": -110,\r\n \"yMax\": 748,\r\n \"ha\": 858,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 497\r\n },\r\n \"%\": {\r\n \"xMin\": 35,\r\n \"xMax\": 790,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 824\r\n },\r\n \"&\": {\r\n \"xMin\": 32,\r\n \"xMax\": 594,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 32,\r\n \"advanceWidth\": 609\r\n },\r\n \"'\": {\r\n \"xMin\": 80,\r\n \"xMax\": 168,\r\n \"yMin\": 431,\r\n \"yMax\": 690,\r\n \"ha\": 259,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 249\r\n },\r\n \"(\": {\r\n \"xMin\": 82,\r\n \"xMax\": 265,\r\n \"yMin\": -176,\r\n \"yMax\": 732,\r\n \"ha\": 908,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 303\r\n },\r\n \")\": {\r\n \"xMin\": 38,\r\n \"xMax\": 221,\r\n \"yMin\": -176,\r\n \"yMax\": 732,\r\n \"ha\": 908,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 303\r\n },\r\n \"*\": {\r\n \"xMin\": 58,\r\n \"xMax\": 360,\r\n \"yMin\": 420,\r\n \"yMax\": 712,\r\n \"ha\": 292,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 418\r\n },\r\n \"+\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 104,\r\n \"yMax\": 556,\r\n \"ha\": 452,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \",\": {\r\n \"xMin\": 47,\r\n \"xMax\": 198,\r\n \"yMin\": -170,\r\n \"yMax\": 114,\r\n \"ha\": 284,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 249\r\n },\r\n \"-\": {\r\n \"xMin\": 41,\r\n \"xMax\": 271,\r\n \"yMin\": 219,\r\n \"yMax\": 282,\r\n \"ha\": 63,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 311\r\n },\r\n \".\": {\r\n \"xMin\": 65,\r\n \"xMax\": 184,\r\n \"yMin\": -12,\r\n \"yMax\": 114,\r\n \"ha\": 126,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 249\r\n },\r\n \"/\": {\r\n \"xMin\": 10,\r\n \"xMax\": 337,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 350\r\n },\r\n \":\": {\r\n \"xMin\": 65,\r\n \"xMax\": 184,\r\n \"yMin\": -12,\r\n \"yMax\": 475,\r\n \"ha\": 487,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 249\r\n },\r\n \";\": {\r\n \"xMin\": 47,\r\n \"xMax\": 198,\r\n \"yMin\": -170,\r\n \"yMax\": 475,\r\n \"ha\": 645,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 249\r\n },\r\n \"<\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 131,\r\n \"yMax\": 533,\r\n \"ha\": 402,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \"=\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 193,\r\n \"yMax\": 468,\r\n \"ha\": 275,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \">\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 131,\r\n \"yMax\": 533,\r\n \"ha\": 402,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \"?\": {\r\n \"xMin\": 38,\r\n \"xMax\": 377,\r\n \"yMin\": -12,\r\n \"yMax\": 682,\r\n \"ha\": 694,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 425\r\n },\r\n \"@\": {\r\n \"xMin\": 51,\r\n \"xMax\": 796,\r\n \"yMin\": -155,\r\n \"yMax\": 646,\r\n \"ha\": 801,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 847\r\n },\r\n \"A\": {\r\n \"xMin\": 3,\r\n \"xMax\": 541,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 3,\r\n \"advanceWidth\": 544\r\n },\r\n \"B\": {\r\n \"xMin\": 90,\r\n \"xMax\": 548,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 588\r\n },\r\n \"C\": {\r\n \"xMin\": 52,\r\n \"xMax\": 539,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 571\r\n },\r\n \"D\": {\r\n \"xMin\": 90,\r\n \"xMax\": 564,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 615\r\n },\r\n \"E\": {\r\n \"xMin\": 90,\r\n \"xMax\": 478,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 527\r\n },\r\n \"F\": {\r\n \"xMin\": 90,\r\n \"xMax\": 468,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 494\r\n },\r\n \"G\": {\r\n \"xMin\": 52,\r\n \"xMax\": 550,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 617\r\n },\r\n \"H\": {\r\n \"xMin\": 90,\r\n \"xMax\": 562,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 652\r\n },\r\n \"I\": {\r\n \"xMin\": 90,\r\n \"xMax\": 173,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 263\r\n },\r\n \"J\": {\r\n \"xMin\": 31,\r\n \"xMax\": 393,\r\n \"yMin\": -12,\r\n \"yMax\": 656,\r\n \"ha\": 668,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 480\r\n },\r\n \"K\": {\r\n \"xMin\": 90,\r\n \"xMax\": 575,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 579\r\n },\r\n \"L\": {\r\n \"xMin\": 90,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 486\r\n },\r\n \"M\": {\r\n \"xMin\": 90,\r\n \"xMax\": 637,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 727\r\n },\r\n \"N\": {\r\n \"xMin\": 90,\r\n \"xMax\": 557,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 647\r\n },\r\n \"O\": {\r\n \"xMin\": 52,\r\n \"xMax\": 613,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 664\r\n },\r\n \"P\": {\r\n \"xMin\": 90,\r\n \"xMax\": 523,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 566\r\n },\r\n \"Q\": {\r\n \"xMin\": 52,\r\n \"xMax\": 627,\r\n \"yMin\": -165,\r\n \"yMax\": 668,\r\n \"ha\": 833,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 664\r\n },\r\n \"R\": {\r\n \"xMin\": 90,\r\n \"xMax\": 544,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 569\r\n },\r\n \"S\": {\r\n \"xMin\": 42,\r\n \"xMax\": 495,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 534\r\n },\r\n \"T\": {\r\n \"xMin\": 28,\r\n \"xMax\": 508,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 536\r\n },\r\n \"U\": {\r\n \"xMin\": 87,\r\n \"xMax\": 558,\r\n \"yMin\": -12,\r\n \"yMax\": 656,\r\n \"ha\": 668,\r\n \"leftSideBearing\": 87,\r\n \"advanceWidth\": 645\r\n },\r\n \"V\": {\r\n \"xMin\": 0,\r\n \"xMax\": 515,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 515\r\n },\r\n \"W\": {\r\n \"xMin\": 23,\r\n \"xMax\": 762,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 23,\r\n \"advanceWidth\": 786\r\n },\r\n \"X\": {\r\n \"xMin\": 15,\r\n \"xMax\": 498,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 513\r\n },\r\n \"Y\": {\r\n \"xMin\": -1,\r\n \"xMax\": 477,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": -1,\r\n \"advanceWidth\": 476\r\n },\r\n \"Z\": {\r\n \"xMin\": 45,\r\n \"xMax\": 497,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 539\r\n },\r\n \"[\": {\r\n \"xMin\": 94,\r\n \"xMax\": 273,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 303\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 14,\r\n \"xMax\": 340,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 350\r\n },\r\n \"]\": {\r\n \"xMin\": 31,\r\n \"xMax\": 209,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 303\r\n },\r\n \"^\": {\r\n \"xMin\": 60,\r\n \"xMax\": 437,\r\n \"yMin\": 284,\r\n \"yMax\": 670,\r\n \"ha\": 386,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 497\r\n },\r\n \"_\": {\r\n \"xMin\": 12,\r\n \"xMax\": 488,\r\n \"yMin\": -126,\r\n \"yMax\": -71,\r\n \"ha\": 55,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 500\r\n },\r\n \"`\": {\r\n \"xMin\": 128,\r\n \"xMax\": 327,\r\n \"yMin\": 573,\r\n \"yMax\": 781,\r\n \"ha\": 208,\r\n \"leftSideBearing\": 128,\r\n \"advanceWidth\": 542\r\n },\r\n \"a\": {\r\n \"xMin\": 52,\r\n \"xMax\": 433,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 504\r\n },\r\n \"b\": {\r\n \"xMin\": 82,\r\n \"xMax\": 507,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 553\r\n },\r\n \"c\": {\r\n \"xMin\": 46,\r\n \"xMax\": 431,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 456\r\n },\r\n \"d\": {\r\n \"xMin\": 47,\r\n \"xMax\": 473,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 555\r\n },\r\n \"e\": {\r\n \"xMin\": 46,\r\n \"xMax\": 458,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 496\r\n },\r\n \"f\": {\r\n \"xMin\": 30,\r\n \"xMax\": 319,\r\n \"yMin\": 0,\r\n \"yMax\": 724,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 292\r\n },\r\n \"g\": {\r\n \"xMin\": 45,\r\n \"xMax\": 492,\r\n \"yMin\": -224,\r\n \"yMax\": 498,\r\n \"ha\": 722,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 504\r\n },\r\n \"h\": {\r\n \"xMin\": 82,\r\n \"xMax\": 471,\r\n \"yMin\": 0,\r\n \"yMax\": 712,\r\n \"ha\": 712,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 544\r\n },\r\n \"i\": {\r\n \"xMin\": 67,\r\n \"xMax\": 181,\r\n \"yMin\": 0,\r\n \"yMax\": 692,\r\n \"ha\": 692,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 246\r\n },\r\n \"j\": {\r\n \"xMin\": -40,\r\n \"xMax\": 181,\r\n \"yMin\": -217,\r\n \"yMax\": 692,\r\n \"ha\": 909,\r\n \"leftSideBearing\": -40,\r\n \"advanceWidth\": 247\r\n },\r\n \"k\": {\r\n \"xMin\": 82,\r\n \"xMax\": 486,\r\n \"yMin\": 0,\r\n \"yMax\": 712,\r\n \"ha\": 712,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 495\r\n },\r\n \"l\": {\r\n \"xMin\": 82,\r\n \"xMax\": 216,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 255\r\n },\r\n \"m\": {\r\n \"xMin\": 82,\r\n \"xMax\": 753,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 829\r\n },\r\n \"n\": {\r\n \"xMin\": 82,\r\n \"xMax\": 471,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 547\r\n },\r\n \"o\": {\r\n \"xMin\": 46,\r\n \"xMax\": 496,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 542\r\n },\r\n \"p\": {\r\n \"xMin\": 82,\r\n \"xMax\": 507,\r\n \"yMin\": -205,\r\n \"yMax\": 498,\r\n \"ha\": 703,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 555\r\n },\r\n \"q\": {\r\n \"xMin\": 47,\r\n \"xMax\": 473,\r\n \"yMin\": -205,\r\n \"yMax\": 498,\r\n \"ha\": 703,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 555\r\n },\r\n \"r\": {\r\n \"xMin\": 82,\r\n \"xMax\": 350,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 347\r\n },\r\n \"s\": {\r\n \"xMin\": 28,\r\n \"xMax\": 387,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 419\r\n },\r\n \"t\": {\r\n \"xMin\": 24,\r\n \"xMax\": 325,\r\n \"yMin\": -12,\r\n \"yMax\": 622,\r\n \"ha\": 634,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 338\r\n },\r\n \"u\": {\r\n \"xMin\": 75,\r\n \"xMax\": 462,\r\n \"yMin\": -12,\r\n \"yMax\": 486,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 544\r\n },\r\n \"v\": {\r\n \"xMin\": 12,\r\n \"xMax\": 455,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 467\r\n },\r\n \"w\": {\r\n \"xMin\": 24,\r\n \"xMax\": 694,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 718\r\n },\r\n \"x\": {\r\n \"xMin\": 14,\r\n \"xMax\": 432,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 446\r\n },\r\n \"y\": {\r\n \"xMin\": 12,\r\n \"xMax\": 455,\r\n \"yMin\": -209,\r\n \"yMax\": 486,\r\n \"ha\": 695,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 467\r\n },\r\n \"z\": {\r\n \"xMin\": 31,\r\n \"xMax\": 399,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 425\r\n },\r\n \"{\": {\r\n \"xMin\": 34,\r\n \"xMax\": 273,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 303\r\n },\r\n \"|\": {\r\n \"xMin\": 92,\r\n \"xMax\": 150,\r\n \"yMin\": -250,\r\n \"yMax\": 750,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 241\r\n },\r\n \"}\": {\r\n \"xMin\": 31,\r\n \"xMax\": 269,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 303\r\n },\r\n \"~\": {\r\n \"xMin\": 36,\r\n \"xMax\": 461,\r\n \"yMin\": 257,\r\n \"yMax\": 403,\r\n \"ha\": 146,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 497\r\n }\r\n },\r\n};","export const SourceSerifProFont = {\r\n smufl: false,\r\n name: \"Serif\",\r\n spacing: 50,\r\n description: \"Open-source Serif font from Adobe\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"fontFamily\": \"Source Serif Pro\",\r\n \"resolution\": 1000,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 41,\r\n \"xMax\": 460,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 500\r\n },\r\n \"1\": {\r\n \"xMin\": 74,\r\n \"xMax\": 445,\r\n \"yMin\": 0,\r\n \"yMax\": 654,\r\n \"ha\": 654,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 500\r\n },\r\n \"2\": {\r\n \"xMin\": 44,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 659,\r\n \"ha\": 659,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"3\": {\r\n \"xMin\": 44,\r\n \"xMax\": 460,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"4\": {\r\n \"xMin\": 24,\r\n \"xMax\": 484,\r\n \"yMin\": 0,\r\n \"yMax\": 655,\r\n \"ha\": 655,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 500\r\n },\r\n \"5\": {\r\n \"xMin\": 38,\r\n \"xMax\": 458,\r\n \"yMin\": -13,\r\n \"yMax\": 646,\r\n \"ha\": 659,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 500\r\n },\r\n \"6\": {\r\n \"xMin\": 40,\r\n \"xMax\": 457,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 500\r\n },\r\n \"7\": {\r\n \"xMin\": 51,\r\n \"xMax\": 464,\r\n \"yMin\": 0,\r\n \"yMax\": 646,\r\n \"ha\": 646,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 500\r\n },\r\n \"8\": {\r\n \"xMin\": 44,\r\n \"xMax\": 455,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"9\": {\r\n \"xMin\": 29,\r\n \"xMax\": 450,\r\n \"yMin\": -20,\r\n \"yMax\": 659,\r\n \"ha\": 679,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 500\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 233\r\n },\r\n \"!\": {\r\n \"xMin\": 80,\r\n \"xMax\": 209,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 289\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 40,\r\n \"xMax\": 315,\r\n \"yMin\": 429,\r\n \"yMax\": 737,\r\n \"ha\": 308,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 356\r\n },\r\n \"#\": {\r\n \"xMin\": 25,\r\n \"xMax\": 502,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 526\r\n },\r\n \"$\": {\r\n \"xMin\": 51,\r\n \"xMax\": 464,\r\n \"yMin\": -115,\r\n \"yMax\": 749,\r\n \"ha\": 864,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 500\r\n },\r\n \"%\": {\r\n \"xMin\": 69,\r\n \"xMax\": 792,\r\n \"yMin\": -25,\r\n \"yMax\": 669,\r\n \"ha\": 694,\r\n \"leftSideBearing\": 69,\r\n \"advanceWidth\": 861\r\n },\r\n \"&\": {\r\n \"xMin\": 27,\r\n \"xMax\": 675,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 27,\r\n \"advanceWidth\": 720\r\n },\r\n \"'\": {\r\n \"xMin\": 40,\r\n \"xMax\": 143,\r\n \"yMin\": 429,\r\n \"yMax\": 737,\r\n \"ha\": 308,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 183\r\n },\r\n \"(\": {\r\n \"xMin\": 80,\r\n \"xMax\": 314,\r\n \"yMin\": -192,\r\n \"yMax\": 748,\r\n \"ha\": 940,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 339\r\n },\r\n \")\": {\r\n \"xMin\": 25,\r\n \"xMax\": 259,\r\n \"yMin\": -192,\r\n \"yMax\": 748,\r\n \"ha\": 940,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 339\r\n },\r\n \"*\": {\r\n \"xMin\": 20,\r\n \"xMax\": 420,\r\n \"yMin\": 363,\r\n \"yMax\": 747,\r\n \"ha\": 384,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 439\r\n },\r\n \"+\": {\r\n \"xMin\": 29,\r\n \"xMax\": 502,\r\n \"yMin\": 77,\r\n \"yMax\": 577,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 531\r\n },\r\n \",\": {\r\n \"xMin\": 6,\r\n \"xMax\": 213,\r\n \"yMin\": -224,\r\n \"yMax\": 130,\r\n \"ha\": 354,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 300\r\n },\r\n \"-\": {\r\n \"xMin\": 40,\r\n \"xMax\": 272,\r\n \"yMin\": 218,\r\n \"yMax\": 284,\r\n \"ha\": 66,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 312\r\n },\r\n \".\": {\r\n \"xMin\": 79,\r\n \"xMax\": 221,\r\n \"yMin\": -13,\r\n \"yMax\": 130,\r\n \"ha\": 143,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 300\r\n },\r\n \"/\": {\r\n \"xMin\": 2,\r\n \"xMax\": 328,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 2,\r\n \"advanceWidth\": 330\r\n },\r\n \":\": {\r\n \"xMin\": 79,\r\n \"xMax\": 221,\r\n \"yMin\": -13,\r\n \"yMax\": 493,\r\n \"ha\": 506,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 300\r\n },\r\n \";\": {\r\n \"xMin\": 6,\r\n \"xMax\": 221,\r\n \"yMin\": -224,\r\n \"yMax\": 493,\r\n \"ha\": 717,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 300\r\n },\r\n \"<\": {\r\n \"xMin\": 57,\r\n \"xMax\": 474,\r\n \"yMin\": 81,\r\n \"yMax\": 578,\r\n \"ha\": 497,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 531\r\n },\r\n \"=\": {\r\n \"xMin\": 29,\r\n \"xMax\": 502,\r\n \"yMin\": 201,\r\n \"yMax\": 458,\r\n \"ha\": 257,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 531\r\n },\r\n \">\": {\r\n \"xMin\": 57,\r\n \"xMax\": 474,\r\n \"yMin\": 81,\r\n \"yMax\": 578,\r\n \"ha\": 497,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 531\r\n },\r\n \"?\": {\r\n \"xMin\": 66,\r\n \"xMax\": 350,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 416\r\n },\r\n \"@\": {\r\n \"xMin\": 36,\r\n \"xMax\": 800,\r\n \"yMin\": -155,\r\n \"yMax\": 660,\r\n \"ha\": 815,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 835\r\n },\r\n \"A\": {\r\n \"xMin\": 5,\r\n \"xMax\": 653,\r\n \"yMin\": 0,\r\n \"yMax\": 674,\r\n \"ha\": 674,\r\n \"leftSideBearing\": 5,\r\n \"advanceWidth\": 664\r\n },\r\n \"B\": {\r\n \"xMin\": 44,\r\n \"xMax\": 586,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 629\r\n },\r\n \"C\": {\r\n \"xMin\": 47,\r\n \"xMax\": 592,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 631\r\n },\r\n \"D\": {\r\n \"xMin\": 44,\r\n \"xMax\": 663,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 710\r\n },\r\n \"E\": {\r\n \"xMin\": 44,\r\n \"xMax\": 569,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 603\r\n },\r\n \"F\": {\r\n \"xMin\": 44,\r\n \"xMax\": 549,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 579\r\n },\r\n \"G\": {\r\n \"xMin\": 47,\r\n \"xMax\": 667,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 682\r\n },\r\n \"H\": {\r\n \"xMin\": 44,\r\n \"xMax\": 744,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 789\r\n },\r\n \"I\": {\r\n \"xMin\": 44,\r\n \"xMax\": 327,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 371\r\n },\r\n \"J\": {\r\n \"xMin\": -43,\r\n \"xMax\": 340,\r\n \"yMin\": -163,\r\n \"yMax\": 669,\r\n \"ha\": 832,\r\n \"leftSideBearing\": -43,\r\n \"advanceWidth\": 374\r\n },\r\n \"K\": {\r\n \"xMin\": 44,\r\n \"xMax\": 662,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 667\r\n },\r\n \"L\": {\r\n \"xMin\": 44,\r\n \"xMax\": 552,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 596\r\n },\r\n \"M\": {\r\n \"xMin\": 39,\r\n \"xMax\": 857,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 902\r\n },\r\n \"N\": {\r\n \"xMin\": 39,\r\n \"xMax\": 695,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 735\r\n },\r\n \"O\": {\r\n \"xMin\": 47,\r\n \"xMax\": 660,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 707\r\n },\r\n \"P\": {\r\n \"xMin\": 44,\r\n \"xMax\": 567,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 589\r\n },\r\n \"Q\": {\r\n \"xMin\": 47,\r\n \"xMax\": 660,\r\n \"yMin\": -216,\r\n \"yMax\": 684,\r\n \"ha\": 900,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 707\r\n },\r\n \"R\": {\r\n \"xMin\": 44,\r\n \"xMax\": 637,\r\n \"yMin\": -10,\r\n \"yMax\": 669,\r\n \"ha\": 679,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 651\r\n },\r\n \"S\": {\r\n \"xMin\": 40,\r\n \"xMax\": 472,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 512\r\n },\r\n \"T\": {\r\n \"xMin\": 20,\r\n \"xMax\": 584,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 604\r\n },\r\n \"U\": {\r\n \"xMin\": 39,\r\n \"xMax\": 693,\r\n \"yMin\": -15,\r\n \"yMax\": 669,\r\n \"ha\": 684,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 727\r\n },\r\n \"V\": {\r\n \"xMin\": 15,\r\n \"xMax\": 665,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 674\r\n },\r\n \"W\": {\r\n \"xMin\": 15,\r\n \"xMax\": 953,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 962\r\n },\r\n \"X\": {\r\n \"xMin\": 10,\r\n \"xMax\": 639,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 648\r\n },\r\n \"Y\": {\r\n \"xMin\": 15,\r\n \"xMax\": 623,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 633\r\n },\r\n \"Z\": {\r\n \"xMin\": 20,\r\n \"xMax\": 531,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 551\r\n },\r\n \"[\": {\r\n \"xMin\": 100,\r\n \"xMax\": 291,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 100,\r\n \"advanceWidth\": 320\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 2,\r\n \"xMax\": 328,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 2,\r\n \"advanceWidth\": 330\r\n },\r\n \"]\": {\r\n \"xMin\": 29,\r\n \"xMax\": 220,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 320\r\n },\r\n \"^\": {\r\n \"xMin\": 88,\r\n \"xMax\": 446,\r\n \"yMin\": 208,\r\n \"yMax\": 481,\r\n \"ha\": 273,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 531\r\n },\r\n \"_\": {\r\n \"xMin\": 40,\r\n \"xMax\": 472,\r\n \"yMin\": -66,\r\n \"yMax\": 0,\r\n \"ha\": 66,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 512\r\n },\r\n \"`\": {\r\n \"xMin\": 75,\r\n \"xMax\": 256,\r\n \"yMin\": 557,\r\n \"yMax\": 758,\r\n \"ha\": 201,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 400\r\n },\r\n \"a\": {\r\n \"xMin\": 45,\r\n \"xMax\": 503,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 509\r\n },\r\n \"b\": {\r\n \"xMin\": 25,\r\n \"xMax\": 532,\r\n \"yMin\": -13,\r\n \"yMax\": 739,\r\n \"ha\": 752,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 577\r\n },\r\n \"c\": {\r\n \"xMin\": 42,\r\n \"xMax\": 453,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 488\r\n },\r\n \"d\": {\r\n \"xMin\": 45,\r\n \"xMax\": 551,\r\n \"yMin\": -13,\r\n \"yMax\": 739,\r\n \"ha\": 752,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 567\r\n },\r\n \"e\": {\r\n \"xMin\": 45,\r\n \"xMax\": 461,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 510\r\n },\r\n \"f\": {\r\n \"xMin\": 34,\r\n \"xMax\": 426,\r\n \"yMin\": 0,\r\n \"yMax\": 749,\r\n \"ha\": 749,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 354\r\n },\r\n \"g\": {\r\n \"xMin\": 36,\r\n \"xMax\": 495,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 518\r\n },\r\n \"h\": {\r\n \"xMin\": 25,\r\n \"xMax\": 571,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 601\r\n },\r\n \"i\": {\r\n \"xMin\": 29,\r\n \"xMax\": 267,\r\n \"yMin\": 0,\r\n \"yMax\": 726,\r\n \"ha\": 726,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 298\r\n },\r\n \"j\": {\r\n \"xMin\": -83,\r\n \"xMax\": 220,\r\n \"yMin\": -249,\r\n \"yMax\": 726,\r\n \"ha\": 975,\r\n \"leftSideBearing\": -83,\r\n \"advanceWidth\": 277\r\n },\r\n \"k\": {\r\n \"xMin\": 25,\r\n \"xMax\": 547,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 547\r\n },\r\n \"l\": {\r\n \"xMin\": 25,\r\n \"xMax\": 273,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 298\r\n },\r\n \"m\": {\r\n \"xMin\": 34,\r\n \"xMax\": 872,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 901\r\n },\r\n \"n\": {\r\n \"xMin\": 34,\r\n \"xMax\": 576,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 606\r\n },\r\n \"o\": {\r\n \"xMin\": 45,\r\n \"xMax\": 504,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 549\r\n },\r\n \"p\": {\r\n \"xMin\": 35,\r\n \"xMax\": 538,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 583\r\n },\r\n \"q\": {\r\n \"xMin\": 45,\r\n \"xMax\": 556,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 557\r\n },\r\n \"r\": {\r\n \"xMin\": 34,\r\n \"xMax\": 416,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 423\r\n },\r\n \"s\": {\r\n \"xMin\": 47,\r\n \"xMax\": 395,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 434\r\n },\r\n \"t\": {\r\n \"xMin\": 9,\r\n \"xMax\": 323,\r\n \"yMin\": -13,\r\n \"yMax\": 611,\r\n \"ha\": 624,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 325\r\n },\r\n \"u\": {\r\n \"xMin\": 25,\r\n \"xMax\": 549,\r\n \"yMin\": -13,\r\n \"yMax\": 481,\r\n \"ha\": 494,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 583\r\n },\r\n \"v\": {\r\n \"xMin\": 0,\r\n \"xMax\": 496,\r\n \"yMin\": -6,\r\n \"yMax\": 475,\r\n \"ha\": 481,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 505\r\n },\r\n \"w\": {\r\n \"xMin\": 0,\r\n \"xMax\": 754,\r\n \"yMin\": -6,\r\n \"yMax\": 475,\r\n \"ha\": 481,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 764\r\n },\r\n \"x\": {\r\n \"xMin\": 10,\r\n \"xMax\": 516,\r\n \"yMin\": 0,\r\n \"yMax\": 475,\r\n \"ha\": 475,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 526\r\n },\r\n \"y\": {\r\n \"xMin\": 0,\r\n \"xMax\": 512,\r\n \"yMin\": -249,\r\n \"yMax\": 475,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 512\r\n },\r\n \"z\": {\r\n \"xMin\": 29,\r\n \"xMax\": 431,\r\n \"yMin\": 0,\r\n \"yMax\": 475,\r\n \"ha\": 475,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 456\r\n },\r\n \"{\": {\r\n \"xMin\": 40,\r\n \"xMax\": 314,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 344\r\n },\r\n \"|\": {\r\n \"xMin\": 96,\r\n \"xMax\": 155,\r\n \"yMin\": -250,\r\n \"yMax\": 750,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 96,\r\n \"advanceWidth\": 251\r\n },\r\n \"}\": {\r\n \"xMin\": 30,\r\n \"xMax\": 304,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 344\r\n },\r\n \"~\": {\r\n \"xMin\": 49,\r\n \"xMax\": 482,\r\n \"yMin\": 268,\r\n \"yMax\": 422,\r\n \"ha\": 154,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 531\r\n }\r\n },\r\n \"generatedOn\": \"2020-11-01T21:35:39.674Z\"\r\n};","export const TimesFont = {\r\n smufl: false,\r\n name: \"Times New Roman\",\r\n spacing: 50,\r\n Description: 'Built-in serif font',\r\n bold: true,\r\n italic: true,\r\n monospaced: false,\r\n serifs: true,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 49,\r\n \"xMax\": 975,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 1024\r\n },\r\n \"1\": {\r\n \"xMin\": 227,\r\n \"xMax\": 811,\r\n \"yMin\": 0,\r\n \"yMax\": 1383,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 227,\r\n \"advanceWidth\": 1024\r\n },\r\n \"2\": {\r\n \"xMin\": 61,\r\n \"xMax\": 965,\r\n \"yMin\": 0,\r\n \"yMax\": 1383,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1024\r\n },\r\n \"3\": {\r\n \"xMin\": 88,\r\n \"xMax\": 883,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1024\r\n },\r\n \"4\": {\r\n \"xMin\": 25,\r\n \"xMax\": 967,\r\n \"yMin\": 0,\r\n \"yMax\": 1384,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1024\r\n },\r\n \"5\": {\r\n \"xMin\": 66,\r\n \"xMax\": 898,\r\n \"yMin\": -27,\r\n \"yMax\": 1409,\r\n \"ha\": 1436,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1024\r\n },\r\n \"6\": {\r\n \"xMin\": 70,\r\n \"xMax\": 958,\r\n \"yMin\": -27,\r\n \"yMax\": 1401,\r\n \"ha\": 1428,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1024\r\n },\r\n \"7\": {\r\n \"xMin\": 41,\r\n \"xMax\": 920,\r\n \"yMin\": -16,\r\n \"yMax\": 1356,\r\n \"ha\": 1372,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 1024\r\n },\r\n \"8\": {\r\n \"xMin\": 115,\r\n \"xMax\": 911,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 115,\r\n \"advanceWidth\": 1024\r\n },\r\n \"9\": {\r\n \"xMin\": 61,\r\n \"xMax\": 940,\r\n \"yMin\": -41,\r\n \"yMax\": 1383,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1024\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 512\r\n },\r\n \"!\": {\r\n \"xMin\": 266,\r\n \"xMax\": 488,\r\n \"yMin\": -22,\r\n \"yMax\": 1383,\r\n \"ha\": 1405,\r\n \"leftSideBearing\": 266,\r\n \"advanceWidth\": 682\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 157.2000021972655,\r\n \"xMax\": 678.2500021457677,\r\n \"yMin\": 881,\r\n \"yMax\": 1385,\r\n \"ha\": 504,\r\n \"leftSideBearing\": 157,\r\n \"advanceWidth\": 836\r\n },\r\n \"#\": {\r\n \"xMin\": 10,\r\n \"xMax\": 1016,\r\n \"yMin\": -1,\r\n \"yMax\": 1356,\r\n \"ha\": 1357,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1024\r\n },\r\n \"$\": {\r\n \"xMin\": 90,\r\n \"xMax\": 936,\r\n \"yMin\": -180,\r\n \"yMax\": 1492,\r\n \"ha\": 1672,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1024\r\n },\r\n \"%\": {\r\n \"xMin\": 125,\r\n \"xMax\": 1581,\r\n \"yMin\": -30,\r\n \"yMax\": 1388,\r\n \"ha\": 1418,\r\n \"leftSideBearing\": 125,\r\n \"advanceWidth\": 1706\r\n },\r\n \"&\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1536,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1593\r\n },\r\n \"'\": {\r\n \"xMin\": 97.20000219726548,\r\n \"xMax\": 273.2500021457677,\r\n \"yMin\": 881,\r\n \"yMax\": 1385,\r\n \"ha\": 504,\r\n \"leftSideBearing\": 97,\r\n \"advanceWidth\": 369\r\n },\r\n \"(\": {\r\n \"xMin\": 98,\r\n \"xMax\": 623,\r\n \"yMin\": -363,\r\n \"yMax\": 1383,\r\n \"ha\": 1746,\r\n \"leftSideBearing\": 98,\r\n \"advanceWidth\": 682\r\n },\r\n \")\": {\r\n \"xMin\": 59,\r\n \"xMax\": 584,\r\n \"yMin\": -363,\r\n \"yMax\": 1383,\r\n \"ha\": 1746,\r\n \"leftSideBearing\": 59,\r\n \"advanceWidth\": 682\r\n },\r\n \"*\": {\r\n \"xMin\": 137.96078522291893,\r\n \"xMax\": 886.039214777081,\r\n \"yMin\": 543,\r\n \"yMax\": 1383,\r\n \"ha\": 840,\r\n \"leftSideBearing\": 137,\r\n \"advanceWidth\": 1024\r\n },\r\n \"+\": {\r\n \"xMin\": 61,\r\n \"xMax\": 1093,\r\n \"yMin\": 2,\r\n \"yMax\": 1034,\r\n \"ha\": 1032,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1155\r\n },\r\n \",\": {\r\n \"xMin\": 115,\r\n \"xMax\": 399,\r\n \"yMin\": -291,\r\n \"yMax\": 208,\r\n \"ha\": 499,\r\n \"leftSideBearing\": 115,\r\n \"advanceWidth\": 512\r\n },\r\n \"-\": {\r\n \"xMin\": 80,\r\n \"xMax\": 584,\r\n \"yMin\": 396,\r\n \"yMax\": 525,\r\n \"ha\": 129,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 682\r\n },\r\n \".\": {\r\n \"xMin\": 143,\r\n \"xMax\": 371,\r\n \"yMin\": -22,\r\n \"yMax\": 205,\r\n \"ha\": 227,\r\n \"leftSideBearing\": 143,\r\n \"advanceWidth\": 512\r\n },\r\n \"/\": {\r\n \"xMin\": -17,\r\n \"xMax\": 586,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": -17,\r\n \"advanceWidth\": 569\r\n },\r\n \":\": {\r\n \"xMin\": 166,\r\n \"xMax\": 394,\r\n \"yMin\": -22,\r\n \"yMax\": 943,\r\n \"ha\": 965,\r\n \"leftSideBearing\": 166,\r\n \"advanceWidth\": 569\r\n },\r\n \";\": {\r\n \"xMin\": 164,\r\n \"xMax\": 448,\r\n \"yMin\": -290,\r\n \"yMax\": 943,\r\n \"ha\": 1233,\r\n \"leftSideBearing\": 164,\r\n \"advanceWidth\": 569\r\n },\r\n \"<\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1098,\r\n \"yMin\": -15,\r\n \"yMax\": 1051,\r\n \"ha\": 1066,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1155\r\n },\r\n \"=\": {\r\n \"xMin\": 61,\r\n \"xMax\": 1093,\r\n \"yMin\": 246,\r\n \"yMax\": 791,\r\n \"ha\": 545,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1155\r\n },\r\n \">\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1098,\r\n \"yMin\": -15,\r\n \"yMax\": 1051,\r\n \"ha\": 1066,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1155\r\n },\r\n \"?\": {\r\n \"xMin\": 139,\r\n \"xMax\": 848,\r\n \"yMin\": -15,\r\n \"yMax\": 1383,\r\n \"ha\": 1398,\r\n \"leftSideBearing\": 139,\r\n \"advanceWidth\": 909\r\n },\r\n \"@\": {\r\n \"xMin\": 238,\r\n \"xMax\": 1657,\r\n \"yMin\": -29,\r\n \"yMax\": 1386,\r\n \"ha\": 1415,\r\n \"leftSideBearing\": 238,\r\n \"advanceWidth\": 1886\r\n },\r\n \"A\": {\r\n \"xMin\": 31,\r\n \"xMax\": 1445,\r\n \"yMin\": 0,\r\n \"yMax\": 1380,\r\n \"ha\": 1380,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 1479\r\n },\r\n \"B\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1214,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1366\r\n },\r\n \"C\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1296,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1366\r\n },\r\n \"D\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1403,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1479\r\n },\r\n \"E\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1251\r\n },\r\n \"F\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1119,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1139\r\n },\r\n \"G\": {\r\n \"xMin\": 66,\r\n \"xMax\": 1452,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1479\r\n },\r\n \"H\": {\r\n \"xMin\": 39,\r\n \"xMax\": 1438,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 1479\r\n },\r\n \"I\": {\r\n \"xMin\": 37,\r\n \"xMax\": 642,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 682\r\n },\r\n \"J\": {\r\n \"xMin\": 20,\r\n \"xMax\": 758,\r\n \"yMin\": -28,\r\n \"yMax\": 1356,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 797\r\n },\r\n \"K\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1479,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"L\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1224,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1251\r\n },\r\n \"M\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1768,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1821\r\n },\r\n \"N\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1450,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1479\r\n },\r\n \"O\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1409,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"P\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1110,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1139\r\n },\r\n \"Q\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1435,\r\n \"yMin\": -364.28571588721996,\r\n \"yMax\": 1383,\r\n \"ha\": 1747.28571588722,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"R\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1347,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1366\r\n },\r\n \"S\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1006,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1139\r\n },\r\n \"T\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1214,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1251\r\n },\r\n \"U\": {\r\n \"xMin\": 29,\r\n \"xMax\": 1444,\r\n \"yMin\": -28,\r\n \"yMax\": 1356,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 1479\r\n },\r\n \"V\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1428,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1479\r\n },\r\n \"W\": {\r\n \"xMin\": 10,\r\n \"xMax\": 1906,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1933\r\n },\r\n \"X\": {\r\n \"xMin\": 20,\r\n \"xMax\": 1449,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 1479\r\n },\r\n \"Y\": {\r\n \"xMin\": 45,\r\n \"xMax\": 1441,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 1479\r\n },\r\n \"Z\": {\r\n \"xMin\": 18,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1251\r\n },\r\n \"[\": {\r\n \"xMin\": 180,\r\n \"xMax\": 612,\r\n \"yMin\": -319,\r\n \"yMax\": 1355,\r\n \"ha\": 1674,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 682\r\n },\r\n \"\\\\\": {\r\n \"xMin\": -17,\r\n \"xMax\": 586,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": -17,\r\n \"advanceWidth\": 569\r\n },\r\n \"]\": {\r\n \"xMin\": 70,\r\n \"xMax\": 502,\r\n \"yMin\": -319,\r\n \"yMax\": 1355,\r\n \"ha\": 1674,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 682\r\n },\r\n \"^\": {\r\n \"xMin\": 49,\r\n \"xMax\": 914,\r\n \"yMin\": 608,\r\n \"yMax\": 1355,\r\n \"ha\": 747,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 961\r\n },\r\n \"_\": {\r\n \"xMin\": 0,\r\n \"xMax\": 1024,\r\n \"yMin\": -255,\r\n \"yMax\": -153,\r\n \"ha\": 102,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 1024\r\n },\r\n \"`\": {\r\n \"xMin\": 39,\r\n \"xMax\": 499,\r\n \"yMin\": 1037,\r\n \"yMax\": 1392.509803639748,\r\n \"ha\": 355.50980363974804,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 682\r\n },\r\n \"a\": {\r\n \"xMin\": 76,\r\n \"xMax\": 905,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 909\r\n },\r\n \"b\": {\r\n \"xMin\": 6,\r\n \"xMax\": 958,\r\n \"yMin\": -20,\r\n \"yMax\": 1399,\r\n \"ha\": 1419,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1024\r\n },\r\n \"c\": {\r\n \"xMin\": 51,\r\n \"xMax\": 843,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 909\r\n },\r\n \"d\": {\r\n \"xMin\": 55,\r\n \"xMax\": 1006,\r\n \"yMin\": -20,\r\n \"yMax\": 1399,\r\n \"ha\": 1419,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 1024\r\n },\r\n \"e\": {\r\n \"xMin\": 51,\r\n \"xMax\": 868,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 909\r\n },\r\n \"f\": {\r\n \"xMin\": 41,\r\n \"xMax\": 783,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 682\r\n },\r\n \"g\": {\r\n \"xMin\": 57,\r\n \"xMax\": 963,\r\n \"yMin\": -446,\r\n \"yMax\": 942,\r\n \"ha\": 1388,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1024\r\n },\r\n \"h\": {\r\n \"xMin\": 18,\r\n \"xMax\": 997,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1024\r\n },\r\n \"i\": {\r\n \"xMin\": 33,\r\n \"xMax\": 516,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 569\r\n },\r\n \"j\": {\r\n \"xMin\": -142,\r\n \"xMax\": 397,\r\n \"yMin\": -446,\r\n \"yMax\": 1399,\r\n \"ha\": 1845,\r\n \"leftSideBearing\": -142,\r\n \"advanceWidth\": 569\r\n },\r\n \"k\": {\r\n \"xMin\": 14,\r\n \"xMax\": 1029,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 1024\r\n },\r\n \"l\": {\r\n \"xMin\": 39,\r\n \"xMax\": 523,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 569\r\n },\r\n \"m\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1587,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1593\r\n },\r\n \"n\": {\r\n \"xMin\": 33,\r\n \"xMax\": 993,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1024\r\n },\r\n \"o\": {\r\n \"xMin\": 59,\r\n \"xMax\": 963,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 59,\r\n \"advanceWidth\": 1024\r\n },\r\n \"p\": {\r\n \"xMin\": 10,\r\n \"xMax\": 964,\r\n \"yMin\": -443,\r\n \"yMax\": 944,\r\n \"ha\": 1387,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1024\r\n },\r\n \"q\": {\r\n \"xMin\": 49,\r\n \"xMax\": 999,\r\n \"yMin\": -443,\r\n \"yMax\": 942.0135137169275,\r\n \"ha\": 1385.0135137169275,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 1024\r\n },\r\n \"r\": {\r\n \"xMin\": 10,\r\n \"xMax\": 685,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 682\r\n },\r\n \"s\": {\r\n \"xMin\": 104,\r\n \"xMax\": 713,\r\n \"yMin\": -20,\r\n \"yMax\": 942.0263161804552,\r\n \"ha\": 962.0263161804552,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 797\r\n },\r\n \"t\": {\r\n \"xMin\": 27,\r\n \"xMax\": 572,\r\n \"yMin\": -18,\r\n \"yMax\": 1186,\r\n \"ha\": 1204,\r\n \"leftSideBearing\": 27,\r\n \"advanceWidth\": 569\r\n },\r\n \"u\": {\r\n \"xMin\": 18,\r\n \"xMax\": 981,\r\n \"yMin\": -21,\r\n \"yMax\": 921,\r\n \"ha\": 942,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1024\r\n },\r\n \"v\": {\r\n \"xMin\": 39,\r\n \"xMax\": 976,\r\n \"yMin\": -28,\r\n \"yMax\": 921,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 1024\r\n },\r\n \"w\": {\r\n \"xMin\": 43,\r\n \"xMax\": 1423,\r\n \"yMin\": -28,\r\n \"yMax\": 921,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 1479\r\n },\r\n \"x\": {\r\n \"xMin\": 35,\r\n \"xMax\": 989,\r\n \"yMin\": 0,\r\n \"yMax\": 921,\r\n \"ha\": 921,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1024\r\n },\r\n \"y\": {\r\n \"xMin\": 29,\r\n \"xMax\": 976,\r\n \"yMin\": -445,\r\n \"yMax\": 921,\r\n \"ha\": 1366,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 1024\r\n },\r\n \"z\": {\r\n \"xMin\": 55,\r\n \"xMax\": 855,\r\n \"yMin\": 0,\r\n \"yMax\": 921,\r\n \"ha\": 921,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 909\r\n },\r\n \"{\": {\r\n \"xMin\": 205,\r\n \"xMax\": 717,\r\n \"yMin\": -377,\r\n \"yMax\": 1397,\r\n \"ha\": 1774,\r\n \"leftSideBearing\": 205,\r\n \"advanceWidth\": 983\r\n },\r\n \"|\": {\r\n \"xMin\": 137,\r\n \"xMax\": 273,\r\n \"yMin\": -512,\r\n \"yMax\": 1535,\r\n \"ha\": 2047,\r\n \"leftSideBearing\": 137,\r\n \"advanceWidth\": 410\r\n },\r\n \"}\": {\r\n \"xMin\": 266,\r\n \"xMax\": 778,\r\n \"yMin\": -377,\r\n \"yMax\": 1397,\r\n \"ha\": 1774,\r\n \"leftSideBearing\": 266,\r\n \"advanceWidth\": 983\r\n },\r\n \"~\": {\r\n \"xMin\": 82,\r\n \"xMax\": 1028,\r\n \"yMin\": 380,\r\n \"yMax\": 666,\r\n \"ha\": 286,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 1108\r\n }\r\n },\r\n \"fontFamily\": \"Times\",\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-18T19:03:12.514Z\"\r\n};","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoArticulation, SmoOrnament } from '../../smo/data/noteModifiers';\r\ndeclare var $: any;\r\n\r\n\r\nexport class ArticulationButtons extends SuiButton {\r\n static get articulationIdMap(): Record {\r\n return {\r\n accentButton: SmoArticulation.articulations.accent,\r\n tenutoButton: SmoArticulation.articulations.tenuto,\r\n staccatoButton: SmoArticulation.articulations.staccato,\r\n marcatoButton: SmoArticulation.articulations.marcato,\r\n pizzicatoButton: SmoArticulation.articulations.pizzicato,\r\n fermataButton: SmoArticulation.articulations.fermata,\r\n mordentButton: SmoOrnament.ornaments.mordent,\r\n mordentInvertedButton: SmoOrnament.ornaments.mordentInverted,\r\n trillButton: SmoOrnament.ornaments.trill,\r\n breathButton: 'breath',\r\n caesuraButton: 'caesura',\r\n pedalOpenButton: 'pedalOpen',\r\n pedalClosedButton: 'pedalClosed',\r\n scoopButton: SmoOrnament.ornaments.scoop,\r\n dropButton: SmoOrnament.ornaments.fall_short,\r\n dropLongButton: SmoOrnament.ornaments.dropLong,\r\n doitButton: SmoOrnament.ornaments.doit,\r\n doitLongButton: SmoOrnament.ornaments.doitLong,\r\n flipButton: SmoOrnament.ornaments.flip,\r\n smearButton: SmoOrnament.ornaments.smear\r\n };\r\n }\r\n static get constructors(): Record {\r\n return {\r\n accentButton: 'SmoArticulation',\r\n tenutoButton: 'SmoArticulation',\r\n staccatoButton: 'SmoArticulation',\r\n marcatoButton: 'SmoArticulation',\r\n pizzicatoButton: 'SmoArticulation',\r\n fermataButton: 'SmoArticulation',\r\n mordentButton: 'SmoOrnament',\r\n mordentInvertedButton: 'SmoOrnament',\r\n trillButton: 'SmoOrnament',\r\n breathButton: 'SmoOrnament',\r\n pedalOpenButton: 'SmoOrnament',\r\n pedalClosedButton: 'SmoOrnament',\r\n caesuraButton: 'SmoOrnament',\r\n scoopButton: 'SmoOrnament',\r\n dropButton: 'SmoOrnament',\r\n dropLongButton: 'SmoOrnament',\r\n doitButton: 'SmoOrnament',\r\n doitLongButton: 'SmoOrnament',\r\n flipButton: 'SmoOrnament',\r\n smearButton: 'SmoOrnament',\r\n };\r\n }\r\n articulation: string;\r\n ctor: string;\r\n showState: boolean = false;\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.articulation = ArticulationButtons.articulationIdMap[this.buttonData.id];\r\n this.ctor = ArticulationButtons.constructors[this.buttonData.id];\r\n }\r\n _toggleArticulation() {\r\n this.showState = !this.showState;\r\n this.view.toggleArticulation(this.articulation, this.ctor);\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, '_toggleArticulation', null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class BeamButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n operation() {\r\n if (this.buttonData.id === 'breakBeam') {\r\n this.view.toggleBeamGroup();\r\n } else if (this.buttonData.id === 'beamSelections') {\r\n this.view.beamSelections();\r\n } else if (this.buttonData.id === 'toggleBeamDirection') {\r\n this.view.toggleBeamDirection();\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.operation();\r\n });\r\n }\r\n }","import { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { CompleteNotifier } from '../common';\r\n\r\n/**\r\n * Button actions are one of the following. \r\n * - collapse... buttons are used to expand/collapse button groups in a ribbon.\r\n * all buttons with these classes have 'ctor' constructor, and perform actions based on \r\n * their bind method\r\n * - menu brings up a modal menu with class 'ctor'\r\n * - modal brings up a modal dialog with class 'ctor'\r\n * - collapseChildMenu brings up a modal menu, and is also collapsable.\r\n */\r\nexport type ButtonAction = 'menu' | 'modal' | 'collapseChild' | 'collapseChildMenu' | 'collapseParent' | 'collapseGrandchild' | 'collapseMore';\r\n/**\r\n * structure of a button object.\r\n * @param leftText - can be used in place of an icon for display\r\n * @param rightText - usually used to represent a keyboard shortcut\r\n * @param classes - to control button display\r\n * @param icon - icon for the button face\r\n * @param action - indicates to the button the action to perform\r\n * @param ctor - the constructor of the button object\r\n * @param group - the logical group, used to group the ribbon buttons\r\n * @param id - unique ID for DOM selector\r\n * @param dataElements - can be used to give buttons in a group basic parameters\r\n */\r\nexport interface ButtonDefinition {\r\n leftText: string,\r\n rightText: string,\r\n classes: string,\r\n icon: string,\r\n action: ButtonAction,\r\n ctor: string,\r\n group: string,\r\n id: string\r\n dataElements?: {\r\n interval: string,\r\n direction: string\r\n }\r\n }\r\n \r\n// Button labels are translatable \r\nexport interface ButtonLabel {\r\n buttonId: string,\r\n buttonText: string\r\n}\r\n\r\n// Buttons perform any variety of functions, so they need access to all the rendering logic\r\n// as well as all the event sources.\r\n// Sometimes they invoke menus which invoke modals, etc.\r\nexport interface SuiButtonParams {\r\n ctor: string,\r\n buttonId: string,\r\n buttonElement: string,\r\n buttonData: ButtonDefinition,\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier\r\n }\r\n export abstract class SuiButton {\r\n buttonId: string;\r\n buttonElement: string;\r\n view: SuiScoreViewOperations;\r\n buttonData: ButtonDefinition;\r\n eventSource: BrowserEventSource;\r\n menus: SuiMenuManager;\r\n completeNotifier: CompleteNotifier | null;\r\n constructor(params: SuiButtonParams) {\r\n this.buttonId = params.buttonId;\r\n this.buttonElement = params.buttonElement;\r\n this.view = params.view;\r\n this.buttonData = params.buttonData;\r\n this.eventSource = params.eventSource;\r\n this.menus = params.menus;\r\n this.completeNotifier = params.completeNotifier;\r\n }\r\n abstract bind(): void;\r\n }\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class ChordButtons extends SuiButton {\r\n interval: number;\r\n direction: number;\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.interval = parseInt($(this.buttonElement).attr('data-interval'), 10);\r\n this.direction = parseInt($(this.buttonElement).attr('data-direction'), 10);\r\n }\r\n collapseChord() {\r\n this.view.collapseChord();\r\n }\r\n setInterval() {\r\n this.view.setInterval(this.interval * this.direction);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n if ($(this.buttonElement).attr('id') === 'CollapseChordButton') {\r\n this.collapseChord();\r\n return;\r\n }\r\n this.setInterval();\r\n });\r\n }\r\n}","import { ButtonDefinition, SuiButton, SuiButtonParams } from './button';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { CompleteNotifier } from '../common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SuiMenuParams } from '../menus/menu';\r\ndeclare var $: any;\r\n\r\n\r\nexport interface SuiCollapsableButtonParams {\r\n ctor: string,\r\n buttonId: string,\r\n buttonElement: string,\r\n buttonData: ButtonDefinition,\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier\r\n buttons: ButtonDefinition[]\r\n}\r\n\r\nexport function buttonIsCollapsible(action: string): boolean {\r\n return ['collapseChild', 'collapseChildMenu', 'collapseGrandchild', 'collapseMore'].indexOf(action) >= 0;\r\n}\r\n\r\nexport function buttonIsBindable(action: string): boolean {\r\n return ['collapseChildMenu', 'menu', 'modal'].indexOf(action) >= 0;\r\n}\r\nexport class CollapseRibbonControl extends SuiButton {\r\n static get paramArray() {\r\n return ['ribbonButtons', 'keyCommands', 'controller', 'view', 'menus', 'buttonData', 'buttonElement',\r\n 'eventSource'];\r\n }\r\n childButtons: ButtonDefinition[];\r\n constructor(parameters: SuiCollapsableButtonParams) {\r\n super(parameters);\r\n smoSerialize.filteredMerge(CollapseRibbonControl.paramArray, parameters, this);\r\n this.childButtons = parameters.buttons.filter((cb) =>\r\n cb.group === this.buttonData.group &&\r\n buttonIsCollapsible(cb.action)\r\n );\r\n }\r\n _toggleExpand() {\r\n this.childButtons.forEach((cb) => {\r\n const el = $('#' + cb.id);\r\n $(el).toggleClass('collapsed');\r\n $(el).toggleClass('expanded');\r\n });\r\n\r\n $(this.buttonElement).closest('div').toggleClass('expanded');\r\n $(this.buttonElement).toggleClass('expandedChildren');\r\n if ($(this.buttonElement).hasClass('expandedChildren')) {\r\n const leftSpan = $(this.buttonElement).find('.ribbon-button-text');\r\n $(leftSpan).text('');\r\n $(leftSpan).removeClass(this.buttonData.icon);\r\n $(this.buttonElement).addClass('icon icon-circle-left');\r\n } else {\r\n $(this.buttonElement).removeClass('icon-circle-left');\r\n const leftSpan = $(this.buttonElement).find('.ribbon-button-text');\r\n $(leftSpan).addClass(this.buttonData.icon);\r\n $(leftSpan).text(this.buttonData.leftText);\r\n }\r\n // Expand may change music dom, redraw\r\n $('body').trigger('forceScrollEvent');\r\n }\r\n bind() {\r\n $(this.buttonElement).closest('div').addClass('collapseContainer');\r\n this.eventSource.domClick(this.buttonElement, this, '_toggleExpand', null);\r\n this.childButtons.forEach((cb) => {\r\n const ctor = eval('globalThis.Smo.' + cb.ctor);\r\n if ((typeof (ctor) === 'function') && this.completeNotifier) {\r\n const el = $('#' + cb.id);\r\n const params: SuiButtonParams = {\r\n ctor: cb.ctor,\r\n buttonId: cb.id,\r\n buttonData: cb,\r\n buttonElement: el,\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n eventSource: this.eventSource,\r\n menus: this.menus\r\n }\r\n const btn = new ctor(params);\r\n if (typeof (btn.bind) === 'function') {\r\n btn.bind();\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\n// ## ExtendedCollapseParent\r\n// Muse-style '...' buttons for less-common operations\r\nexport class ExtendedCollapseParent extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n $(this.buttonElement).closest('.collapseContainer').toggleClass('expanded-more');\r\n });\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { BrowserEventSource } from '../eventSource';\r\ndeclare var $: any;\r\n\r\n/**\r\n * These are the quick-buttons that show up on the left of the button ribbon.\r\n * @category SuiButton\r\n */\r\nexport class DisplaySettings extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n if (this.buttonData.id === 'selectPart') {\r\n this.eventSource.bindScoreChangeHandler(this, 'handleScoreChange');\r\n this.enablePartSelection();\r\n }\r\n }\r\n enablePartSelection() {\r\n const partMap = this.view.getPartMap();\r\n const disable = partMap.keys.length < 1;\r\n $(this.buttonElement[0]).prop('disabled', disable);\r\n }\r\n handleScoreChange(ev: any) {\r\n if (this.view.isPartExposed()) {\r\n this.buttonData.rightText = this.view.score.staves[0].partInfo.partName;\r\n } else {\r\n this.buttonData.rightText = 'Select Part';\r\n }\r\n $(this.buttonElement[0]).find('.ribbon-button-hotkey').text(this.buttonData.rightText);\r\n this.enablePartSelection();\r\n }\r\n\r\n refresh() {\r\n this.view.refreshViewport();\r\n }\r\n zoomout() {\r\n const globalLayout = this.view.score.layoutManager!.getGlobalLayout();\r\n globalLayout.zoomScale *= 1.1;\r\n this.view.updateZoom(globalLayout.zoomScale);\r\n }\r\n zoomin() {\r\n const globalLayout = this.view.score.layoutManager!.getGlobalLayout();\r\n globalLayout.zoomScale = globalLayout.zoomScale / 1.1;\r\n this.view.updateZoom(globalLayout.zoomScale);\r\n }\r\n playButton2() {\r\n this.view.playFromSelection();\r\n }\r\n stopButton2() {\r\n this.view.stopPlayer();\r\n }\r\n async selectPart() {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n await this.view.renderPromise();\r\n this.menus.slashMenuMode(this.completeNotifier);\r\n this.menus.createMenu('SuiPartSelectionMenu');\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class DurationButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.buttonData = parameters.buttonData;\r\n }\r\n setDuration() {\r\n if (this.buttonData.id === 'GrowDuration') {\r\n this.view.batchDurationOperation('doubleDuration');\r\n } else if (this.buttonData.id === 'LessDuration') {\r\n this.view.batchDurationOperation('halveDuration');\r\n } else if (this.buttonData.id === 'GrowDurationDot') {\r\n this.view.batchDurationOperation('dotDuration');\r\n } else if (this.buttonData.id === 'LessDurationDot') {\r\n this.view.batchDurationOperation('undotDuration');\r\n } else if (this.buttonData.id === 'TripletButton') {\r\n this.view.makeTuplet(3);\r\n } else if (this.buttonData.id === 'QuintupletButton') {\r\n this.view.makeTuplet(5);\r\n } else if (this.buttonData.id === 'SeptupletButton') {\r\n this.view.makeTuplet(7);\r\n } else if (this.buttonData.id === 'NoTupletButton') {\r\n this.view.unmakeTuplet();\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.setDuration();\r\n });\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoBarline, SmoRepeatSymbol } from '../../smo/data/measureModifiers';\r\ndeclare var $: any;\r\n\r\n\r\nexport class MeasureButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n endRepeat() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.endRepeat);\r\n }\r\n startRepeat() {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.startRepeat);\r\n }\r\n singleBarStart() {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.singleBar);\r\n }\r\n singleBarEnd() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.singleBar);\r\n }\r\n doubleBar() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.doubleBar);\r\n }\r\n endBar() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.endBar);\r\n }\r\n coda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Coda);\r\n }\r\n toCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.ToCoda);\r\n }\r\n segno() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Segno);\r\n }\r\n dsAlCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DsAlCoda);\r\n }\r\n dcAlCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DcAlCoda);\r\n }\r\n dsAlFine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DsAlFine);\r\n }\r\n dcAlFine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DcAlFine);\r\n }\r\n fine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Fine);\r\n }\r\n nthEnding() {\r\n this.view.addEnding();\r\n }\r\n handleEvent(event: any, method: string) {\r\n (this as any)[method]();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, 'handleEvent', this.buttonData.id);\r\n }\r\n}","import { SuiButton, ButtonDefinition, SuiButtonParams } from './button';\r\nimport { SmoMicrotone } from '../../smo/data/noteModifiers';\r\nimport { SuiOscillator } from '../../render/audio/oscillator';\r\ndeclare var $: any;\r\n\r\nexport class MicrotoneButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n applyButton(el: ButtonDefinition) {\r\n const defs = SmoMicrotone.defaults;\r\n defs.tone = el.id;\r\n const tn = new SmoMicrotone(defs);\r\n this.view.addRemoveMicrotone(tn);\r\n SuiOscillator.playSelectionNow(this.view.tracker.selections[0], this.view.score, 1);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.applyButton(this.buttonData);\r\n });\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class NavigationButtons extends SuiButton {\r\n static get directionsTrackerMap(): Record {\r\n return {\r\n navLeftButton: 'moveSelectionLeft',\r\n navRightButton: 'moveSelectionRight',\r\n navUpButton: 'moveSelectionUp',\r\n navDownButton: 'moveSelectionDown',\r\n navFastForward: 'moveSelectionRightMeasure',\r\n navRewind: 'moveSelectionLeftMeasure',\r\n navGrowLeft: 'growSelectionLeft',\r\n navGrowRight: 'growSelectionRight'\r\n };\r\n }\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n _moveTracker() {\r\n (this.view.tracker as any)[NavigationButtons.directionsTrackerMap[this.buttonData.id]]();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, '_moveTracker', null);\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { IsPitchLetter } from '../../smo/data/common';\r\ndeclare var $: any;\r\n\r\nexport class NoteButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n setPitch() {\r\n if (this.buttonData.id === 'UpNoteButton') {\r\n this.view.transposeSelections(1);\r\n } else if (this.buttonData.id === 'DownNoteButton') {\r\n this.view.transposeSelections(-1);\r\n } else if (this.buttonData.id === 'UpOctaveButton') {\r\n this.view.transposeSelections(12);\r\n } else if (this.buttonData.id === 'DownOctaveButton') {\r\n this.view.transposeSelections(-12);\r\n } else if (this.buttonData.id === 'ToggleAccidental') {\r\n this.view.toggleEnharmonic();\r\n } else if (this.buttonData.id === 'ToggleCourtesy') {\r\n this.view.toggleCourtesyAccidentals();\r\n } else if (this.buttonData.id === 'ToggleRestButton') {\r\n this.view.makeRest();\r\n } else if (this.buttonData.id === 'ToggleSlashButton') {\r\n this.view.toggleSlash();\r\n } else if (this.buttonData.id === 'AddGraceNote') {\r\n this.view.addGraceNote();\r\n } else if (this.buttonData.id === 'SlashGraceNote') {\r\n this.view.slashGraceNotes();\r\n } else if (this.buttonData.id === 'RemoveGraceNote') {\r\n this.view.removeGraceNote();\r\n } else if (this.buttonData.id === 'XNoteHead') {\r\n this.view.setNoteHead('x2');\r\n } else if (this.buttonData.id === 'TriUpNoteHead') {\r\n this.view.setNoteHead('T2');\r\n } else if (this.buttonData.id === 'CircleXNoteHead') {\r\n this.view.setNoteHead('X3');\r\n } else if (this.buttonData.id === 'DiamondNoteHead') {\r\n this.view.setNoteHead('D2');\r\n } else {\r\n if (IsPitchLetter(this.buttonData.rightText)) {\r\n this.view.setPitch(this.buttonData.rightText);\r\n }\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.setPitch();\r\n });\r\n }\r\n}","import { SuiButton, ButtonDefinition, SuiButtonParams } from './button';\r\nimport { SuiAudioPlayer } from '../../render/audio/player';\r\ndeclare var $: any;\r\n\r\nexport class PlayerButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n playButton() {\r\n this.view.playFromSelection();\r\n }\r\n stopButton() {\r\n this.view.stopPlayer();\r\n }\r\n pauseButton() {\r\n this.view.pausePlayer();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, getDomContainer } from '../../common/htmlHelpers';\r\nimport { ButtonDefinition, ButtonAction } from './button';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { CompleteNotifier, RibbonLayout } from '../common';\r\nexport { RibbonLayout } from '../common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { SuiLibraryDialog } from '../dialogs/library';\r\nimport { SuiTempoDialog } from '../dialogs/tempo';\r\nimport { SuiInstrumentDialog } from '../dialogs/instrument';\r\nimport { ButtonLabel } from './button';\r\nimport { SuiPiano } from '../../render/sui/piano';\r\nimport { CollapseRibbonControl } from './collapsable';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiHelp } from '../help';\r\nimport { SmoUiConfiguration } from '../configuration';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SuiModalButtonTypes = 'SuiLibraryDialog' | 'SuiTempoDialog' | 'SuiInstrumentDialog';\r\nexport var SuiModalButtonStrings = ['SuiLibraryDialog', 'SuiTempoDialog', 'SuiInstrumentDialog'];\r\nexport function isModalButtonType(but: string | SuiModalButtonTypes): but is SuiModalButtonTypes {\r\n return SuiModalButtonStrings.indexOf(but) >= 0;\r\n}\r\n\r\n/**\r\n * Parameters for creating the global button ribbon object. The button ribbon supports a \r\n * button panel in 'top' and 'left' areas, with support for R-to-L languages. Button groups \r\n * are collapsible. The content of ribbonButtons determines which buttons show up. \r\n * ribbon layout determines which show up top vs. left\r\n * @param {BrowserEventSource} eventSource - buttons will use this to bind click events\r\n * @param {CompleteNotifier} completeNotifier - buttons that bring up menus and dialogs will pass this to the dialogs\r\n * @param {SuiTracker} tracker - some buttons act on the current selection\r\n * @param {SuiMenuManager} menus - some buttons invoke a menu\r\n * @param {ButtonDefinition[]} - the buttons\r\n * @param {RibbonLayout} ribbons - where the buttons appear\r\n * @see {ButtonDefinition} for how to create/modify buttons\r\n * @see {defaultRibbonLayout} for buttons supported from the demo application\r\n */\r\nexport interface SuiRibbonParams {\r\n config: SmoUiConfiguration\r\n eventSource: BrowserEventSource,\r\n view: SuiScoreViewOperations,\r\n completeNotifier: CompleteNotifier,\r\n tracker: SuiTracker,\r\n menus: SuiMenuManager,\r\n ribbonButtons: ButtonDefinition[],\r\n ribbons: RibbonLayout\r\n}\r\n// ## RibbonButtons\r\n// Render the ribbon buttons based on group, function, and underlying UI handler.\r\n// Also handles UI events.\r\n// ### RibbonButton methods\r\n// ---\r\nexport class RibbonButtons {\r\n static get paramArray() {\r\n return ['ribbonButtons', 'ribbons', 'keyCommands', 'controller', 'menus', 'eventSource', 'view'];\r\n }\r\n static _buttonHtml(containerClass: string, buttonId: string, buttonClass: string, buttonText: string, buttonIcon: string, buttonKey: string) {\r\n const b = buildDom;\r\n const r = b('div').classes(containerClass).append(b('button').attr('id', buttonId).classes(buttonClass).append(\r\n b('span').classes('left-text').append(\r\n b('span').classes('text-span').text(buttonText)).append(\r\n b('span').classes('ribbon-button-text icon ' + buttonIcon))).append(\r\n b('span').classes('ribbon-button-hotkey').text(buttonKey)));\r\n return r.dom();\r\n }\r\n\r\n static translateButtons: ButtonLabel[] = [];\r\n controller: CompleteNotifier;\r\n config: SmoUiConfiguration;\r\n eventSource: BrowserEventSource;\r\n view: SuiScoreViewOperations;\r\n menus: SuiMenuManager;\r\n ribbons: RibbonLayout;\r\n ribbonButtons: ButtonDefinition[];\r\n collapsables: CollapseRibbonControl[] = [];\r\n collapseChildren: any[] = [];\r\n\r\n constructor(params: SuiRibbonParams) {\r\n this.controller = params.completeNotifier;\r\n this.config = params.config;\r\n this.eventSource = params.eventSource;\r\n this.view = params.view;\r\n this.menus = params.menus;\r\n this.ribbonButtons = params.ribbonButtons;\r\n this.ribbons = params.ribbons;\r\n this.collapsables = [];\r\n this.collapseChildren = [];\r\n }\r\n async _executeButtonModal(buttonElement: string, buttonData: ButtonDefinition) {\r\n if (isModalButtonType(buttonData.ctor)) {\r\n const params = {\r\n eventSource: this.eventSource,\r\n completeNotifier: this.controller,\r\n view: this.view,\r\n ctor: buttonData.ctor,\r\n id: buttonData.id,\r\n startPromise: null,\r\n tracker: this.view.tracker\r\n };\r\n if (buttonData.ctor === 'SuiInstrumentDialog') {\r\n createAndDisplayDialog(SuiInstrumentDialog, params);\r\n } else if (buttonData.ctor === 'SuiLibraryDialog') {\r\n await SuiLibraryDialog.createAndDisplay(params, this.config);\r\n } else {\r\n createAndDisplayDialog(SuiTempoDialog, params);\r\n }\r\n } else if (buttonData.ctor === 'helpModal') {\r\n SuiHelp.displayHelp();\r\n }\r\n }\r\n _executeButtonMenu(buttonElement: string, buttonData: ButtonDefinition) {\r\n this.menus.slashMenuMode(this.controller);\r\n this.menus.createMenu(buttonData.ctor);\r\n }\r\n\r\n async _executeButton(buttonElement: string, buttonData: ButtonDefinition) {\r\n if (buttonData.action === 'modal') {\r\n this._executeButtonModal(buttonElement, buttonData);\r\n return;\r\n }\r\n if (buttonData.action === 'menu' || buttonData.action === 'collapseChildMenu') {\r\n this._executeButtonMenu(buttonElement, buttonData);\r\n }\r\n }\r\n\r\n _bindButton(buttonElement: string, buttonData: ButtonDefinition) {\r\n this.eventSource.domClick(buttonElement, this, '_executeButton', buttonData);\r\n }\r\n _createCollapsibleButtonGroups(selector: string | HTMLElement) {\r\n let containerClass: string = '';\r\n // Now all the button elements have been bound. Join child and parent buttons\r\n // For all the children of a button group, add it to the parent group\r\n this.collapseChildren.forEach((b) => {\r\n containerClass = 'ribbonButtonContainer';\r\n if (b.action === 'collapseGrandchild') {\r\n containerClass = 'ribbonButtonContainerMore';\r\n }\r\n const buttonHtml = RibbonButtons._buttonHtml(\r\n containerClass, b.id, b.classes, b.leftText, b.icon, b.rightText);\r\n if (b.dataElements) {\r\n const bkeys = Object.keys(b.dataElements);\r\n bkeys.forEach((bkey) => {\r\n var de = b.dataElements[bkey];\r\n $(buttonHtml).find('button').attr('data-' + bkey, de);\r\n });\r\n }\r\n // Bind the child button actions\r\n const parent = $(selector).find('.collapseContainer[data-group=\"' + b.group + '\"]');\r\n $(parent).append(buttonHtml);\r\n const el = $(selector).find('#' + b.id);\r\n this._bindButton(el, b);\r\n });\r\n\r\n this.collapsables.forEach((cb) => {\r\n // Bind the events of the parent button\r\n cb.bind();\r\n });\r\n }\r\n\r\n static isCollapsible(action: ButtonAction) {\r\n return ['collapseChild', 'collapseChildMenu', 'collapseGrandchild', 'collapseMore'].indexOf(action) >= 0;\r\n }\r\n\r\n // ### _createButtonHtml\r\n // For each button, create the html and bind the events based on\r\n // the button's configured action.\r\n _createRibbonHtml(buttonAr: string[], selector: string | HTMLElement) {\r\n let buttonClass = '';\r\n buttonAr.forEach((buttonId) => {\r\n const buttonData = this.ribbonButtons.find((e) =>\r\n e.id === buttonId\r\n );\r\n if (buttonData) {\r\n if (buttonData.leftText) {\r\n RibbonButtons.translateButtons.push({ buttonId: buttonData.id, buttonText: buttonData.leftText });\r\n }\r\n // collapse child is hidden until the parent button is selected, exposing the button group\r\n if (RibbonButtons.isCollapsible(buttonData.action)) {\r\n this.collapseChildren.push(buttonData);\r\n }\r\n if (buttonData.action !== 'collapseChild') {\r\n // else the button has a specific action, such as a menu or dialog, or a parent button\r\n // for translation, add the menu name to the button class\r\n buttonClass = buttonData.classes;\r\n if (buttonData.action === 'menu' || buttonData.action === 'modal') {\r\n buttonClass += ' ' + buttonData.ctor;\r\n }\r\n const buttonHtml = RibbonButtons._buttonHtml('ribbonButtonContainer',\r\n buttonData.id, buttonClass, buttonData.leftText, buttonData.icon, buttonData.rightText);\r\n $(buttonHtml).attr('data-group', buttonData.group);\r\n $(selector).append(buttonHtml);\r\n const buttonElement = $('#' + buttonData.id);\r\n // If this is a collabsable button, create it, otherwise bind its execute function.\r\n if (buttonData.action === 'collapseParent') {\r\n $(buttonHtml).addClass('collapseContainer');\r\n // collapseParent\r\n this.collapsables.push(new CollapseRibbonControl({\r\n ctor: buttonData.ctor,\r\n buttons: this.ribbonButtons,\r\n view: this.view,\r\n menus: this.menus,\r\n eventSource: this.eventSource,\r\n completeNotifier: this.controller,\r\n buttonId: buttonData.id,\r\n buttonElement,\r\n buttonData\r\n }));\r\n } else {\r\n this.eventSource.domClick(buttonElement, this, '_executeButton', buttonData);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n addButton(button: ButtonDefinition, parentElement: string | HTMLElement) {\r\n this.ribbonButtons.push(button);\r\n this.createRibbon([button.id], parentElement);\r\n }\r\n\r\n createRibbon(buttonDataArray: string[], parentElement: string | HTMLElement) {\r\n this._createRibbonHtml(buttonDataArray, parentElement);\r\n this._createCollapsibleButtonGroups(parentElement);\r\n }\r\n\r\n display() {\r\n if (this.config.leftControls) {\r\n const leftControl = getDomContainer(this.config.leftControls);\r\n if (leftControl) {\r\n $(leftControl).html('');\r\n const lbuttons = this.ribbons.left;\r\n this.createRibbon(lbuttons, leftControl);\r\n }\r\n }\r\n if (this.config.topControls) {\r\n const topControl = getDomContainer(this.config.topControls);\r\n if (topControl) {\r\n const tbuttons = this.ribbons.top;\r\n this.createRibbon(tbuttons, topControl); \r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\n","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoInstrument } from '../../smo/data/staffModifiers';\r\nimport { Clef } from '../../smo/data/common';\r\n\r\ndeclare var $: any;\r\n\r\nexport class StaveButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n addClef(clef: Clef, clefName: string) {\r\n var instrument: SmoInstrument = new SmoInstrument(SmoInstrument.defaults);\r\n instrument.instrumentName = clefName;\r\n instrument.keyOffset = 0;\r\n instrument.clef = clef;\r\n this.view.changeInstrument(instrument, this.view.tracker.selections);\r\n }\r\n clefTreble() {\r\n this.addClef('treble', 'Treble Instrument');\r\n }\r\n clefBass() {\r\n this.addClef('bass', 'Bass Instrument');\r\n }\r\n clefAlto() {\r\n this.addClef('alto', 'Alto Instrument');\r\n }\r\n clefTenor() {\r\n this.addClef('tenor', 'Tenor Instrument');\r\n }\r\n clefPercussion() {\r\n this.addClef('percussion', 'Tenor Instrument');\r\n }\r\n _clefMove(index: number) {\r\n this.view.moveStaffUpDown(index);\r\n }\r\n clefMoveUp() {\r\n this._clefMove(-1);\r\n }\r\n clefMoveDown() {\r\n this._clefMove(1);\r\n }\r\n bind() {\r\n const self = this;\r\n $(this.buttonElement).off('click').on('click', () => {\r\n const id = self.buttonData.id;\r\n if (typeof ((this as any)[id]) === 'function') {\r\n (this as any)[id]();\r\n }\r\n });\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SuiTextBlockDialog } from '../dialogs/textBlock';\r\nimport { SuiLyricDialog } from '../dialogs/lyric';\r\nimport { SuiChordChangeDialog } from '../dialogs/chordChange';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\ndeclare var $: any;\r\n\r\nexport class TextButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n lyrics() {\r\n const sel = this.view.tracker.selections[0];\r\n const note = sel.note;\r\n if (!note) {\r\n return;\r\n }\r\n const lyrics = note.getTrueLyrics();\r\n const lyric = lyrics.length > 0 ? lyrics[0] : null;\r\n\r\n createAndDisplayDialog(SuiLyricDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'lyricDialog',\r\n ctor: 'SuiLyricDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: lyric\r\n }\r\n );\r\n // tracker, selection, controller\r\n }\r\n chordChanges() {\r\n const sel = this.view.tracker.selections[0];\r\n const note = sel.note;\r\n if (!note) {\r\n return;\r\n }\r\n const lyrics = note.getChords();\r\n const lyric = lyrics.length > 0 ? null : lyrics[0];\r\n createAndDisplayDialog(SuiChordChangeDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'chordDialog',\r\n ctor: 'SuiChordChangeDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: lyric\r\n }\r\n );\r\n }\r\n rehearsalMark() {\r\n this.view.toggleRehearsalMark();\r\n }\r\n _invokeMenu(cmd: string) {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n this.menus.slashMenuMode(this.completeNotifier);\r\n this.menus.createMenu(cmd);\r\n }\r\n\r\n addTextMenu() {\r\n createAndDisplayDialog(SuiTextBlockDialog, {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'chordDialog',\r\n ctor: 'SuiChordChangeDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: null\r\n });\r\n }\r\n addDynamicsMenu() {\r\n this._invokeMenu('SuiDynamicsMenu');\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class VoiceButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n doAction() {\r\n let voiceIx = 0;\r\n if (this.buttonData.id === 'V2Button') {\r\n voiceIx = 1;\r\n } else if (this.buttonData.id === 'V3Button') {\r\n voiceIx = 2;\r\n } else if (this.buttonData.id === 'V4Button') {\r\n voiceIx = 3;\r\n } else if (this.buttonData.id === 'VXButton') {\r\n this.view.depopulateVoice();\r\n return;\r\n }\r\n this.view.populateVoice(voiceIx);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.doAction();\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Support for converting Smo object model to MIDI\r\n * @module /ui/dialog/adapter\r\n */\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { CompleteNotifier } from '../common';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { DialogDefinition, SuiDialogBase } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\ndeclare var $: any;\r\n\r\n/**\r\n * An adapter is the glue logic between UI components and the score view.\r\n * An adapter consists mostly of accessors (get/set) for the component data. The \r\n * components have their initial values set from the adapter get, and changes to components\r\n * result in sets to the adapter. The adapter can then update the score.\r\n * For dialogs that use this pattern,\r\n * the dialog automatically creates the components and binds their values with the \r\n * adapter. \r\n * @method commit - called when OK button of dialog is clicked\r\n * @method cancel - called when cancel button of dialog is clicked\r\n * @method remove - optional. Called when 'remove' button is clicked, for artifacts like dynamics that can be removed.\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentAdapter {\r\n view: SuiScoreViewOperations;\r\n constructor(view: SuiScoreViewOperations) {\r\n this.view = view;\r\n }\r\n abstract commit(): Promise;\r\n abstract cancel(): Promise;\r\n remove(): Promise {\r\n return PromiseHelpers.emptyPromise();\r\n };\r\n}\r\n\r\n/** \r\n * A dialog that uses the adapter pattern takes the adapter as argument.\r\n * Other than that it's the same as normal dialog parameters\r\n * The adapter type is a generic, so that the specific dialog can reference the \r\n * specific adapter class\r\n * @param ctor constructor for reflection\r\n * @param id ID for dom placement\r\n * @param tracker\r\n * @param completeNotifier UI component to notify when dialog is complete\r\n * @param startProise UI component that notifies us when to display\r\n * @param view\r\n * @param eventSource where to register for KB and mouse events\r\n * @param undoBuffer where to undo things we change\r\n * @param adapter an adapter which has getters and setters for all of the dialog components. The adapter should\r\n * read the values from the actual score, and update the score with the component values.\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDialogAdapterParams {\r\n ctor: string,\r\n id: string,\r\n tracker: SuiTracker,\r\n completeNotifier: CompleteNotifier,\r\n startPromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n undoBuffer?: UndoBuffer,\r\n // definition: DialogDefinition,\r\n adapter: T\r\n}\r\n\r\n/**\r\n * SuiDialogAdapterBase is the base class for dialogs that use the adapter pattern\r\n * (almost all of them). \r\n * @typeParam T a class that implements the Adapter interface and fulfills the \r\n * adapter data contract, with getters and setters from the components\r\n * @category SuiDialog\r\n */\r\nexport class SuiDialogAdapterBase extends SuiDialogBase {\r\n adapter: T;\r\n constructor(def: DialogDefinition, params: SuiDialogAdapterParams) {\r\n super(def, params);\r\n this.adapter = params.adapter;\r\n }\r\n /**\r\n * Call the components bind() methods to activate them. Also, verify that each \r\n * adapter meets the contract with the components\r\n */\r\n bindComponents() {\r\n this.components.forEach((component) => {\r\n // do some runtime validation of the adapter\r\n if (typeof((this.adapter as any)[component.smoName]) === 'undefined') {\r\n throw ('Dialog ' + this.label + ' has component ' + component.smoName + ' but no setter in the adapter ');\r\n }\r\n component.bind();\r\n });\r\n }\r\n /**\r\n * Called before dialog is displayed.\r\n * components that interface (bind) with the adapter are called 'bound' components.\r\n * On initialize, update the component with the score value, as told by the adapter.\r\n */\r\n initialValue() {\r\n this.components.forEach((comp) => {\r\n (comp as any).setValue((this.adapter as any)[comp.smoName]);\r\n });\r\n }\r\n /**\r\n * When a component changes, it notifies the parent dialog. Usually, we just\r\n * proxy the call to the adapter. The specific dialog can override this method if \r\n * something in the UI needs to change as a result of the component state (e.g. \r\n * show or hide another component)\r\n */\r\n changed() {\r\n this.components.forEach((comp) => {\r\n if (comp.changeFlag) {\r\n (this.adapter as any)[comp.smoName] = (comp as any).getValue();\r\n }\r\n });\r\n }\r\n /**\r\n * If there is any 'saving' to be done when the dialog clicks OK, \r\n * that is handled by the adapter. Else it can be a noop.\r\n */\r\n async commit(): Promise {\r\n await this.adapter.commit();\r\n }\r\n /**\r\n * If there is any undo or restore to be done when the dialog clicks OK, \r\n * that is handled by the adapter. Else it can be a noop.\r\n */\r\n async cancel(): Promise {\r\n await this.adapter.cancel();\r\n }\r\n /**\r\n * For score artifacts that can be removed, \r\n */\r\n async remove() {\r\n await this.adapter.remove();\r\n }\r\n /**\r\n * Binds the main dialog buttons. For OK/Cancel/remove, the logic calls the appropriate \r\n * derived function, which calls the appropriate adapter method, then calls complete()\r\n * to restore the event handling loop to the application\r\n */\r\n bindElements() {\r\n var dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.commit();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.cancel();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.remove();\r\n this.complete();\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiToggleComponent } from './components/toggle';\r\n\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Insert some number of measures\r\n * @category SuiDialog\r\n */\r\nexport class SuiInsertMeasures extends SuiDialogBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Insert Measures',\r\n elements:\r\n [{\r\n smoName: 'measureCount',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Measures to Insert'\r\n }, {\r\n smoName: 'append',\r\n control: 'SuiToggleComponent',\r\n label: 'Append to Selection'\r\n }],\r\n staticText: []\r\n };\r\n measure: SmoMeasure;\r\n selection: SmoSelection;\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiInsertMeasures.dialogElements,\r\n parameters);\r\n this.selection = this.view.tracker.selections[0];\r\n const selection = parameters.view.tracker.selections[0];\r\n const measure = selection.measure;\r\n this.measure = measure;\r\n if (!this.startPromise) {\r\n this.startPromise = new Promise((resolve) => {\r\n resolve();\r\n });\r\n }\r\n }\r\n async commit() { \r\n await this.view.addMeasures(this.appendCtrl.getValue(), this.measureCountCtrl.getValue());\r\n }\r\n\r\n get measureCountCtrl(): SuiRockerComponent {\r\n return this.cmap.measureCountCtrl as SuiRockerComponent;\r\n }\r\n get appendCtrl(): SuiToggleComponent {\r\n return this.cmap.appendCtrl as SuiToggleComponent;\r\n }\r\n populateInitial() {\r\n this.measureCountCtrl.setValue(1);\r\n }\r\n // noop\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoArpeggio, SmoArpeggioType, isArpeggioType } from '../../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport class SuiArpeggioAdapter extends SuiComponentAdapter {\r\n arpeggio: SmoArpeggio;\r\n backup: SmoArpeggio;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.arpeggio = new SmoArpeggio({ type: 'none' });\r\n this.backup = new SmoArpeggio({ type: 'none' });\r\n const selections = view.tracker.selections;\r\n if (selections.length && selections[0].note) {\r\n if (selections[0].note.arpeggio) {\r\n this.arpeggio = new SmoArpeggio({ type: selections[0].note.arpeggio.typeString });\r\n }\r\n this.backup = new SmoArpeggio({ type: this.arpeggio.typeString });\r\n }\r\n this.view = view;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addRemoveArpeggio(this.backup.typeString);\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get arpeggioType() {\r\n return this.arpeggio.typeString;\r\n }\r\n set arpeggioType(value: SmoArpeggioType) {\r\n if (isArpeggioType(value)) {\r\n this.view.addRemoveArpeggio(value);\r\n this.changed = true;\r\n }\r\n }\r\n}\r\n/**\r\n * export const SmoArpeggioTypes = ['directionless', 'rasquedo_up', 'rasquedo_down',\r\n 'roll_up', 'roll_down', 'brush_up', 'brush_down', 'none'];\r\n */\r\nexport class SuiArpeggioDialog extends SuiDialogAdapterBase {\r\n /**\r\n * The template used to create the dialog components\r\n */\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Arpeggio', elements:\r\n [{\r\n smoName: 'arpeggioType',\r\n control: 'SuiDropdownComponent',\r\n label: 'Arpeggio Type',\r\n options: [{\r\n value: 'directionless',\r\n label: 'Plain'\r\n }, {\r\n value: 'rasquedo_up',\r\n label: 'Rasquedo Up'\r\n }, {\r\n value: 'rasquedo_down',\r\n label: 'Rasquedo Down'\r\n }, {\r\n value: 'roll_up',\r\n label: 'Roll Up'\r\n }, {\r\n value: 'roll_down',\r\n label: 'Roll Down'\r\n }, {\r\n value: 'brush_up',\r\n label: 'Brush Up'\r\n }, {\r\n value: 'brush_down',\r\n label: 'Brush Down'\r\n }, { \r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiArpeggioDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiArpeggioAdapter(params.view);\r\n super(SuiArpeggioDialog.dialogElements, { adapter, ...params });\r\n this.modifier = params.modifier;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoAudioPlayerSettings, SmoAudioPlayerType, IsOscillatorType } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiAudioSettingsAdapter extends SuiComponentAdapter {\r\n settings: SmoAudioPlayerSettings;\r\n backup: SmoAudioPlayerSettings;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.settings = new SmoAudioPlayerSettings(view.score.audioSettings);\r\n this.backup = new SmoAudioPlayerSettings(view.score.audioSettings);\r\n }\r\n get enableReverb(): boolean {\r\n return this.settings.reverbEnable;\r\n }\r\n set enableReverb(value: boolean) {\r\n this.settings.reverbEnable = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get playerType(): string {\r\n return this.settings.playerType;\r\n }\r\n set playerType(value: string) {\r\n if (value !== 'sampler') {\r\n this.settings.playerType = 'synthesizer';\r\n } else {\r\n this.settings.playerType = 'sampler';\r\n }\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get waveform(): string {\r\n return this.settings.waveform;\r\n }\r\n set waveform(value: string) {\r\n if (IsOscillatorType(value)) {\r\n this.settings.waveform = value;\r\n }\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get reverbDelay(): number {\r\n return this.settings.reverbDelay;\r\n }\r\n set reverbDelay(value: number) {\r\n this.settings.reverbDelay = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get reverbDecay(): number {\r\n return this.settings.reverbDecay;\r\n } \r\n set reverbDecay(value: number) {\r\n this.settings.reverbDecay = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n async cancel() {\r\n await this.view.updateAudioSettings(this.backup);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiAudioSettingsDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Audio Settings',\r\n elements: [{\r\n smoName: 'enableReverb',\r\n control: 'SuiToggleComponent',\r\n label: 'Enable Reverb'\r\n }, {\r\n smoName: 'playerType',\r\n control: 'SuiDropdownComponent',\r\n label: 'Audio Playback Engine',\r\n options: [{\r\n value: 'sampler', label: 'Sampler'\r\n }, {\r\n value: 'synthesizer', label: 'Analog SoftSynth'\r\n }]\r\n }, {\r\n smoName: 'waveform',\r\n control: 'SuiDropdownComponent',\r\n label: 'Waveform (Synth only)',\r\n options: [{\r\n value: 'sine', label: 'Sine'\r\n }, {\r\n value: 'sawtooth', label: 'sawtooth'\r\n }, {\r\n value: 'square', label: 'square'\r\n }, {\r\n value: 'triangle', label: 'triangle'\r\n }, {\r\n value: 'custom', label: 'custom'\r\n }]\r\n }, {\r\n smoName: 'reverbDelay',\r\n control: 'SuiRockerComponent',\r\n label: 'Delay Time (if reverb) in seconds',\r\n dataType: 'float'\r\n }, {\r\n smoName: 'reverbDecay',\r\n control: 'SuiRockerComponent',\r\n label: 'Decay Time (if reverb) in seconds',\r\n dataType: 'float'\r\n }],\r\n staticText: []\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiAudioSettingsAdapter(params.view);\r\n super(SuiAudioSettingsDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiChordComponent } from './components/noteText';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport {KeyEvent } from '../../smo/data/common';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SuiInlineText } from '../../render/sui/textRender';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { EventHandler } from '../eventSource';\r\n\r\ndeclare var $: any;\r\n/**\r\n * Dialog for running a chord change editing session.\r\n * @category SuiDialog\r\n */\r\nexport class SuiChordChangeDialog extends SuiDialogBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Edit Chord Symbol', elements:\r\n [{\r\n smoName: 'verse',\r\n defaultValue: 0,\r\n control: 'SuiDropdownComponent',\r\n label: 'Ordinality',\r\n classes: 'hide-when-editing',\r\n startRow: true,\r\n options: [{\r\n value: 0,\r\n label: '1'\r\n }, {\r\n value: 1,\r\n label: '2'\r\n }, {\r\n value: 2,\r\n label: '3'\r\n }]\r\n }, {\r\n smoName: 'translateY',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing',\r\n control: 'SuiRockerComponent',\r\n label: 'Y Adjustment (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'chordEditor',\r\n defaultValue: 0,\r\n classes: 'show-always',\r\n control: 'SuiChordComponent',\r\n label: 'Edit Text',\r\n options: []\r\n }, {\r\n smoName: 'chordSymbol',\r\n defaultValue: '',\r\n classes: 'show-when-editing',\r\n control: 'SuiDropdownComponent',\r\n label: 'Chord Symbol',\r\n startRow: true,\r\n options: [{\r\n value: 'csymDiminished',\r\n label: 'Dim'\r\n }, {\r\n value: 'csymHalfDiminished',\r\n label: 'Half dim'\r\n }, {\r\n value: 'csymDiagonalArrangementSlash',\r\n label: 'Slash'\r\n }, {\r\n value: 'csymMajorSeventh',\r\n label: 'Maj7'\r\n }]\r\n }, {\r\n smoName: 'textPosition',\r\n defaultValue: SuiInlineText.textTypes.normal,\r\n classes: 'show-when-editing',\r\n control: 'SuiDropdownComponent',\r\n label: 'Text Position',\r\n startRow: true,\r\n options: [{\r\n value: SuiInlineText.textTypes.superScript,\r\n label: 'Superscript'\r\n }, {\r\n value: SuiInlineText.textTypes.subScript,\r\n label: 'Subscript'\r\n }, {\r\n value: SuiInlineText.textTypes.normal,\r\n label: 'Normal'\r\n }]\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Font'\r\n }, {\r\n smoName: 'adjustWidth',\r\n classes: 'hide-when-editing',\r\n control: 'SuiToggleComponent',\r\n label: 'Adjust Note Width',\r\n options: []\r\n }],\r\n staticText: [\r\n { label: 'Edit Chord Symbol' },\r\n { undo: 'Undo Chord Symbols' },\r\n { doneEditing: 'Done Editing Chord Symbols' }\r\n ]\r\n };\r\n lyric: SmoLyric | null = null;\r\n selector: SmoSelector | null = null;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiChordChangeDialog.dialogElements, parameters);\r\n parameters.ctor = 'SuiChordChangeDialog';\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'SELECTIONPOS'];\r\n }\r\n get chordEditorCtrl(): SuiChordComponent {\r\n return this.cmap.chordEditorCtrl as SuiChordComponent;\r\n }\r\n get chordSymbolCtrl(): SuiDropdownComponent {\r\n return this.cmap.chordSymbolCtrl as SuiDropdownComponent;\r\n }\r\n get translateYCtrl(): SuiRockerComponent {\r\n return this.cmap.translateYCtrl as SuiRockerComponent;\r\n }\r\n get textPositionCtrl(): SuiRockerComponent {\r\n return this.cmap.textPositionCtrl as SuiRockerComponent;\r\n }\r\n get adjustWidthCtrl(): SuiToggleComponent {\r\n return this.cmap.adjustWidthCtrl as SuiToggleComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n changed() {\r\n let val = '';\r\n if (this.chordSymbolCtrl.changeFlag && this.chordEditorCtrl.running) {\r\n val = '@' + this.chordSymbolCtrl.getValue() + '@';\r\n var kv:KeyEvent;\r\n /* type: string, shiftKey: boolean, ctrlKey: boolean, altKey: boolean, key: string, keyCode: string,\r\n code: string*/\r\n this.chordEditorCtrl.evKey({\r\n type: 'keydown',\r\n shiftKey: false,\r\n ctrlKey: false,\r\n altKey: false,\r\n key: val,\r\n code: val,\r\n event: null,\r\n keyCode: '0'\r\n });\r\n // Move focus outside the element so it doesn't intercept keys\r\n this.chordSymbolCtrl.unselect();\r\n }\r\n if (this.translateYCtrl.changeFlag) {\r\n if (this.lyric && this.selector) {\r\n this.lyric.translateY = this.translateYCtrl.getValue();\r\n this.view.addOrUpdateLyric(this.selector, this.lyric);\r\n }\r\n }\r\n if (this.textPositionCtrl.changeFlag) {\r\n this.chordEditorCtrl.setTextType(this.textPositionCtrl.getValue());\r\n $(this.textPositionCtrl._getInputElement())[0].selectedIndex = -1;\r\n $(this.textPositionCtrl._getInputElement()).blur();\r\n }\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.view.setChordFont(fontInfo);\r\n }\r\n if (this.adjustWidthCtrl.changeFlag) {\r\n this.view.score.setChordAdjustWidth(this.adjustWidthCtrl.getValue());\r\n }\r\n }\r\n setLyric(selector: SmoSelector, lyric: SmoLyric) {\r\n this.selector = selector;\r\n this.lyric = lyric;\r\n this.translateYCtrl.setValue(lyric.translateY);\r\n }\r\n\r\n display() {\r\n super.display();\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.session && this.chordEditorCtrl.session.lyric) {\r\n const lyric = this.chordEditorCtrl.session.lyric;\r\n this.adjustWidthCtrl.setValue(lyric.adjustNoteWidthChord);\r\n this.fontCtrl.setValue({\r\n family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size, weight: 'normal'\r\n });\r\n }\r\n }\r\n\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').remove();\r\n // this.chordEditorCtrl.setView(this.eventSource, this.view);\r\n this.chordEditorCtrl.startEditSession();\r\n }\r\n\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n async evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n if (!this.chordEditorCtrl.running) {\r\n return;\r\n }\r\n const edited = await this.chordEditorCtrl.evKey(evdata);\r\n if (edited) {\r\n evdata.stopPropagation();\r\n }\r\n }\r\n }\r\n\r\n _complete() {\r\n if (this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.endSession();\r\n }\r\n this.view.renderer.setDirty();\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.complete();\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoClefChange } from '../../smo/data/noteModifiers';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { IsClef }from '../../smo/data/common';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\n\r\nexport class SuiClefChangeAdapter extends SuiComponentAdapter {\r\n clefChange: SmoClefChange;\r\n backup: SmoClefChange;\r\n smoNote: SmoNote | null = null;\r\n changed: boolean = false;\r\n\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.clefChange = new SmoClefChange(SmoClefChange.defaults);\r\n this.backup = new SmoClefChange(SmoClefChange.defaults);\r\n const selections = view.tracker.selections;\r\n if (selections.length && selections[0].note) {\r\n this.smoNote = selections[0].note;\r\n if (selections[0].note.clefNote) {\r\n const params = SmoClefChange.defaults;\r\n params.clef = selections[0].note.clefNote.clef;\r\n this.clefChange = new SmoClefChange(params);\r\n this.backup = new SmoClefChange(params);\r\n } else if (IsClef(this.smoNote.clef)) {\r\n this.clefChange.clef = this.smoNote.clef;\r\n this.backup.clef = this.smoNote.clef;\r\n }\r\n }\r\n this.view = view;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addRemoveClefChange(this.backup);\r\n }\r\n }\r\n async commit() {\r\n return;\r\n }\r\n get clefType() {\r\n return this.clefChange.clef;\r\n }\r\n set clefType(value: string) { \r\n if (IsClef(value)) {\r\n // this.view.addRemoveArpeggio(value);\r\n this.changed = true;\r\n this.clefChange.clef = value;\r\n this.view.addRemoveClefChange(this.clefChange);\r\n }\r\n }\r\n}\r\n/**\r\n * clefs same as new part\r\n */\r\nexport class SuiClefChangeDialog extends SuiDialogAdapterBase {\r\n /**\r\n * The template used to create the dialog components\r\n */\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Change Clef', elements:\r\n [ {\r\n smoName: 'clefType',\r\n control: 'SuiDropdownComponent',\r\n label: 'Clef',\r\n options: [ {\r\n label: 'Treble Clef Staff',\r\n value: 'treble'\r\n }, {\r\n label: 'Bass Clef Staff',\r\n value: 'bass'\r\n }, {\r\n label: 'Alto Clef Staff',\r\n value: 'alto'\r\n }, {\r\n label: 'Tenor',\r\n value: 'tenor'\r\n }, {\r\n label: 'Percussion',\r\n value: 'percussion'\r\n }] \r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiClefChangeDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiClefChangeAdapter(params.view);\r\n super(SuiClefChangeDialog.dialogElements, { adapter, ...params });\r\n this.modifier = params.modifier;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoModifier } from '../../../smo/data/score';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../../eventSource';\r\n/**\r\n * A component is a part of a dialog box that accepts some input.\r\n */\r\ndeclare var $: any;\r\n/**\r\n * Dialogs controls options, like dropdowns\r\n * @category SuiDialogParams\r\n */\r\nexport interface DialogDefinitionOption {\r\n label: string,\r\n value: number | string\r\n}\r\n/**\r\n * DialogDefinition is a JSON-like structure that each dialog has\r\n * to define the components. Specific components can define\r\n * additional params by extending this, these are the basics.\r\n * @param {smoName} - the name the dialog uses to reference it \r\n * @param {control} - constructor of the control\r\n * @param {label} - label of the element, can be translated\r\n * @param {increment} - used by components that have increment arrows\r\n * @param {defaultValue} - thinking of removing this\r\n * @param {dataType} - used to narrow the type by some components\r\n * @param {classes} - can be used in rendering\r\n * @category SuiDialogParams\r\n */\r\nexport interface DialogDefinitionElement {\r\n smoName: string,\r\n control: string,\r\n label: string,\r\n startRow?: boolean,\r\n options?: DialogDefinitionOption[]\r\n increment?: number,\r\n defaultValue?: number | string,\r\n dataType?: string,\r\n classes?: string,\r\n}\r\n\r\n/**\r\n * for base component constructors\r\n * @param {id} - unique ID for the control DOM\r\n * @param {classes} - additional classes for styling added to DOM\r\n * @param {label} - default label for the component\r\n * @param {smoName} - the variable in the dialog that the componenet maps to\r\n * @param {control} - the constructor of the UI control\r\n * @param {parentComponent} - for composite components, the top-level\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiBaseComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n parentComponent?: SuiComponentParent\r\n}\r\n/**\r\n * components know about their parent dialog via the \r\n * DialogNotifier interface. It allows a component to \r\n * notify parent of changing contents.\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiDialogNotifier {\r\n /**\r\n * Called by the component when the state is changed. Dialog\r\n * will then query the component (getValue()) and set the \r\n * correct score value.\r\n */\r\n abstract changed(): void;\r\n /**\r\n * returns the DOM id of the dialog.\r\n */\r\n abstract getId(): string;\r\n /**\r\n * returns the top DOM node for the dialog\r\n */\r\n abstract get dgDom(): any;\r\n /**\r\n * gets the view from the parent\r\n */\r\n abstract getView(): SuiScoreViewOperations;\r\n /**\r\n * gets the 'modifier' from parent dialog, used by \r\n * text editors. Most components won't need this.\r\n */\r\n abstract getModifier(): SmoModifier | null;\r\n /**\r\n * Gets the static text for the current language.\r\n * this is used by components that have different text labels for different states.\r\n */\r\n abstract getStaticText(): Record;\r\n /**\r\n * Used by text editing components that are also event sinks\r\n */\r\n abstract getEventSource(): BrowserEventSource;\r\n}\r\n/**\r\n * base class for Dialog components. Notifies parent \r\n * dialog of state change via `change()`\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentBase {\r\n changeFlag: boolean = false;\r\n css: string;\r\n dialog: SuiDialogNotifier;\r\n id: string;\r\n label: string;\r\n control: string;\r\n smoName: string;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiBaseComponentParams) {\r\n this.changeFlag = false;\r\n this.css = parameters.classes;\r\n this.dialog = dialog;\r\n this.id = parameters.id;\r\n this.label = parameters.label;\r\n this.control = parameters.control;\r\n this.smoName = parameters.smoName;\r\n }\r\n /**\r\n * Called by the dialog after rendering, so the derived class can \r\n * bind the html controls\r\n */\r\n abstract bind(): void;\r\n /**\r\n * Return the html that lives in side the component DOM. Implemented by the\r\n * base class.\r\n */\r\n abstract get html(): any;\r\n\r\n /**\r\n * Called by the derived class when the value changes. The change flag is set to true, so the dialog will \r\n * know which component changed.\r\n */\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.dialog.changed();\r\n this.changeFlag = false;\r\n }\r\n /**\r\n * combine component classes with string, used for composites\r\n * @param classes string ot append\r\n * @returns combined strings\r\n */\r\n makeClasses(classes: string) {\r\n if (this.css) {\r\n return classes + ' ' + this.css;\r\n }\r\n return classes;\r\n }\r\n get parameterId() {\r\n return this.dialog.getId() + '-' + this.smoName;\r\n }\r\n show() {\r\n $('#' + this.parameterId).removeClass('hide');\r\n }\r\n hide() {\r\n $('#' + this.parameterId).addClass('hide');\r\n }\r\n}\r\n\r\n/**\r\n * Parent components are really containers for other components\r\n * For instance, FontComponent has size, family, weight, etc.\r\n * \r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentParent extends SuiComponentBase {\r\n /**\r\n * For parent component, their changed method is called by child, and then the \r\n * parent calls the dialog changed()\r\n */\r\n abstract changed(): void;\r\n}\r\n\r\n\r\n","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * \r\n */\r\nexport interface SuiButtonComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n icon: string\r\n}\r\n// ## SuiToggleComponent\r\n// Simple on/off behavior. No value just used to notifiy parent dialog\r\nexport class SuiButtonComponent extends SuiComponentBase {\r\n icon: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiButtonComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.icon = parameter.icon;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n this.icon = typeof(this.icon) === 'undefined' ? '' : this.icon;\r\n const r = b('div').classes(this.makeClasses('buttonControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'button').classes(this.icon)\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n setValue() {\r\n }\r\n getValue() {\r\n return null;\r\n }\r\n bind() {\r\n const input = this._getInputElement();\r\n $(input).off('click').on('click',\r\n () => {\r\n this.handleChanged();\r\n });\r\n }\r\n}\r\n\r\nexport interface SuiButtonCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n icon: string,\r\n parentControl: SuiComponentParent\r\n}\r\n// ### SuiButtonComposite\r\n// Dropdown component that can be part of a composite control.\r\nexport class SuiButtonComposite extends SuiButtonComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiButtonCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","import { SuiDialogNotifier, DialogDefinitionElement, SuiComponentParent } from '../components/baseComponent';\r\nimport { SuiToggleCompositeParams, SuiToggleComposite } from '../components/toggle';\r\nimport { SuiDropdownCompositeParams, SuiDropdownComposite } from '../components/dropdown';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n \r\nexport interface CheckboxDropdownComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n toggleElement: DialogDefinitionElement,\r\n dropdownElement: DialogDefinitionElement\r\n}\r\n\r\n// ## CheckboxDropdownComponent\r\n// A checkbox that enables a dropdown component, for optional or dependent parameter\r\nexport class CheckboxDropdownComponent extends SuiComponentParent {\r\n // { dropdownElement: {...}, toggleElement: }\r\n toggleCtrl: SuiToggleComposite;\r\n dropdownCtrl: SuiDropdownComposite;\r\n constructor(dialog: SuiDialogNotifier, parameter: CheckboxDropdownComponentParams) {\r\n super(dialog, parameter);\r\n const toggleParams: SuiToggleCompositeParams = {\r\n id: this.id + parameter.toggleElement.smoName,\r\n classes: '',\r\n parentControl: this,\r\n ...parameter.toggleElement\r\n }\r\n const dropdownParams: SuiDropdownCompositeParams = {\r\n id: this.id + parameter.dropdownElement.smoName,\r\n classes: '',\r\n defaultValue: '',\r\n parentControl: this,\r\n ...parameter.dropdownElement\r\n }\r\n this.toggleCtrl = new SuiToggleComposite(this.dialog, toggleParams);\r\n this.dropdownCtrl = new SuiDropdownComposite(this.dialog, dropdownParams);\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl checkboxDropdown'))\r\n .attr('id', this.parameterId);\r\n q.append(this.toggleCtrl.html);\r\n q.append(this.dropdownCtrl.html);\r\n return q;\r\n }\r\n\r\n bind() {\r\n this.toggleCtrl.bind();\r\n this.dropdownCtrl.bind();\r\n }\r\n changed() {\r\n if (this.toggleCtrl.getValue()) {\r\n $('#' + this.parameterId).addClass('checked');\r\n } else {\r\n $('#' + this.parameterId).removeClass('checked');\r\n }\r\n this.handleChanged();\r\n }\r\n}\r\n","import { SuiDialogNotifier, SuiComponentBase, SuiBaseComponentParams } from './baseComponent';\r\nimport { SuiDragSession } from '../../../render/sui/textEdit';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n// ## SuiDragText\r\n// A component that lets you drag the text you are editing to anywhere on the score.\r\n// The text is not really part of the dialog but the location of the text appears\r\n// in other dialog fields.\r\nexport class SuiDragText extends SuiComponentBase {\r\n dragging: boolean = false;\r\n running: boolean = false;\r\n staticText: Record;\r\n altLabel: string;\r\n value: string = '';\r\n session: SuiDragSession | null = null;\r\n view: SuiScoreViewOperations;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter);\r\n this.dragging = false;\r\n this.running = false;\r\n this.staticText = this.dialog.getStaticText();\r\n this.altLabel = this.staticText.draggerLabel;\r\n this.value = '';\r\n this.view = this.dialog.getView();\r\n }\r\n\r\n get html() {\r\n var b = buildDom;\r\n var id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('cbDragTextDialog smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'checkbox').classes('toggleTextEdit')\r\n .attr('id', id + '-input').append(\r\n b('span').classes('icon icon-move'))\r\n .append(\r\n b('label').attr('for', id + '-input').text(this.label)));\r\n return r;\r\n }\r\n show(){}\r\n hide(){}\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n stopEditSession() {\r\n $('body').removeClass('text-move');\r\n $(this._getInputElement()).find('span.icon').removeClass('icon-checkmark').addClass('icon-move');\r\n if (this.session && this.session.dragging) {\r\n this.session.dragging = false;\r\n this.session.endDrag();\r\n }\r\n if (this.session) {\r\n this.session.unrender();\r\n }\r\n this.handleChanged();\r\n this.running = false;\r\n }\r\n startEditSession() {\r\n $('body').addClass('text-move');\r\n this.session = new SuiDragSession({\r\n textGroup: (this.dialog as any).modifier,\r\n context: this.view.renderer.pageMap,\r\n scroller: this.view.tracker.scroller\r\n });\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n $(this._getInputElement()).find('span.icon').removeClass('icon-enlarge').addClass('icon-checkmark');\r\n this.running = true;\r\n }\r\n mouseMove(e: any) {\r\n if (this.session && this.session.dragging) {\r\n this.session.mouseMove(e);\r\n }\r\n }\r\n mouseDown(e: any) {\r\n if (this.session && !this.session.dragging) {\r\n this.session.startDrag(e);\r\n this.dragging = true;\r\n }\r\n }\r\n mouseUp(e: any) {\r\n if (this.session && this.session.dragging) {\r\n this.session.endDrag();\r\n this.dragging = false;\r\n }\r\n }\r\n\r\n bind() {\r\n const self = this;\r\n $(this._getInputElement()).off('click').on('click', () => {\r\n if (self.running) {\r\n self.stopEditSession();\r\n } else {\r\n self.startEditSession();\r\n }\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support dropdown compontents\r\n * @module /ui/dialogs/components/dropdown\r\n */\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent, DialogDefinitionOption } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * constructor params for {@link SuiDropdownComponent}\r\n * @param id id in DOM\r\n * @param classes\r\n * @param type indicates the data type of the value\r\n * @param increment not used\r\n * @param label\r\n * @param smoName variable name in dialog/adapter\r\n * @param control name of constructor\r\n * @param disabledOption\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDropdownComponentParams {\r\n id: string,\r\n classes: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n dataType?: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\n/**\r\n * single-select dropdown list\r\n * @category SuiDialog\r\n */\r\nexport class SuiDropdownComponent extends SuiComponentBase {\r\n options: DialogDefinitionOption[];\r\n disabledOption: string;\r\n dataType: string;\r\n value: string = '';\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiDropdownComponentParams) {\r\n super(dialog, parameter);\r\n this.options = parameter.options!;\r\n this.disabledOption = parameter.disabledOption ?? '';\r\n this.dataType = parameter.dataType ?? 'string';\r\n }\r\n checkDefault(s: any, b: any) {\r\n if (this.disabledOption.length) {\r\n s.prop('required', true).append(b('option').attr('selected', 'selected').prop('disabled', true).text(this.disabledOption));\r\n }\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.id;\r\n const r = b('div').classes(this.makeClasses('dropdownControl smoControl')).attr('id', id).attr('data-param', this.smoName);\r\n const s = b('select');\r\n this.checkDefault(s, b);\r\n this.options.forEach((option) => {\r\n s.append(\r\n b('option').attr('value', option.value.toString()).text(option.label));\r\n });\r\n r.append(s).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n\r\n unselect() {\r\n $(this._getInputElement())[0].selectedIndex = -1;\r\n $(this._getInputElement()).blur();\r\n }\r\n\r\n _getInputElement() {\r\n var pid = this.id;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('select');\r\n }\r\n getValue(): string | number {\r\n const input = this._getInputElement();\r\n const option = input.find('option:selected');\r\n let val = $(option).val();\r\n val = (this.dataType.toLowerCase() === 'int') ? parseInt(val, 10) : val;\r\n val = (this.dataType.toLowerCase() === 'float') ? parseFloat(val) : val;\r\n if (typeof(val) === 'undefined') {\r\n val = $(input).find('option:first').val();\r\n $(input).find('option:first').prop('selected', true);\r\n }\r\n return val;\r\n }\r\n setValue(value: string | number) {\r\n const input = this._getInputElement();\r\n $(input).val(value);\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n const self = this;\r\n $(input).off('change').on('change',\r\n () => {\r\n self.handleChanged();\r\n });\r\n }\r\n}\r\n/**\r\n * constructor params for {@link SuiDropdownComposite}\r\n * element, often a checkbox\r\n * @param {id} - unique ID for the control DOM\r\n * @param {classes} - additional classes for styling added to DOM\r\n * @param {label} - default label for the component\r\n * @param {smoName} - the variable in the dialog that the componenet maps to\r\n * @param {control} - the constructor of the UI control\r\n * @param {parentComponent} - for composite components, the top-level\r\n * @category SuiDialogParams\r\n * */\r\nexport interface SuiDropdownCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n dataType?: string,\r\n options?: DialogDefinitionOption[],\r\n parentControl: SuiComponentParent\r\n}\r\n/**\r\n * A dropdown composite mixes a dropdown with some other \r\n * @category SuiDialog\r\n */\r\nexport class SuiDropdownComposite extends SuiDropdownComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiDropdownCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\nimport { SuiFileInput } from '../../fileio/fileInput';\r\ndeclare var $: any;\r\nexport interface SuiFileDownloadComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n// ## SuiFileDownloadComponent\r\n// Download a test file using the file input.\r\nexport class SuiFileDownloadComponent extends SuiComponentBase {\r\n defaultValue: string;\r\n value: any = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiFileDownloadComponentParams) {\r\n super(dialog, parameter);\r\n this.defaultValue = parameter.defaultValue ?? '';\r\n this.dialog = dialog;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('select-file')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'file').classes('file-button')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n async _handleUploadedFiles(evt: any) {\r\n const localFile = new SuiFileInput(evt);\r\n await localFile.loadAsync();\r\n this.value = localFile.value;\r\n this.handleChanged();\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(value: any) {\r\n this.value = value;\r\n }\r\n bind() {\r\n const self = this;\r\n $('#' + this.parameterId).find('input').off('change').on('change', async (e: any) => {\r\n await self._handleUploadedFiles(e);\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\nimport { SuiDropdownComposite } from './dropdown';\r\nimport { SuiRockerComposite } from './rocker';\r\nimport { SuiToggleComposite } from './toggle';\r\nimport { SmoScoreText } from '../../../smo/data/scoreText';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SourceSerifProFont } from '../../../styles/font_metrics/ssp-serif-metrics';\r\nimport { SourceSansProFont } from '../../../styles/font_metrics/ssp-sans-metrics';\r\nimport { FontInfo } from '../../../common/vex';\r\ndeclare var $: any;\r\n\r\nexport interface SuiFontComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n// ## SuiFontComponent\r\n// Dialog component that lets user choose and customize fonts.\r\nexport class SuiFontComponent extends SuiComponentBase {\r\n familyPart: SuiDropdownComposite;\r\n sizePart: SuiRockerComposite;\r\n italicsCtrl: SuiToggleComposite;\r\n boldCtrl: SuiToggleComposite;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiFontComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n const familyId = this.id + 'fontFamily';\r\n const sizeId = this.id + 'fontSize';\r\n\r\n this.familyPart = new SuiDropdownComposite(this.dialog,\r\n {\r\n id: familyId,\r\n smoName: 'fontFamily',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Font Family',\r\n parentControl: this,\r\n options: [\r\n { label: 'Arial', value: 'Arial' },\r\n { label: 'Times New Roman', value: 'Times New Roman' },\r\n { label: 'Serif', value: SourceSerifProFont.fontFamily },\r\n { label: 'Sans', value: SourceSansProFont.fontFamily },\r\n { label: 'Roboto Slab', value: 'Roboto Slab' },\r\n { label: 'Petaluma', value: 'Petaluma Script' },\r\n { label: 'Commissioner', value: 'Commissioner' },\r\n { label: 'Concert One', value: 'ConcertOne' },\r\n { label: 'Merriweather', value: 'Merriweather' }\r\n ]\r\n });\r\n this.sizePart = new SuiRockerComposite(\r\n this.dialog,\r\n {\r\n id: sizeId,\r\n smoName: 'fontSize',\r\n defaultValue: 1,\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Font Size',\r\n dataType: 'float',\r\n increment: 0.1\r\n },\r\n );\r\n this.italicsCtrl = new SuiToggleComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'italic',\r\n smoName: 'italic',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Italics'\r\n }\r\n );\r\n this.boldCtrl = new SuiToggleComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'bold',\r\n smoName: 'bold',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Bold'\r\n }\r\n );\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl')).attr('id', this.id);\r\n if (this.label) {\r\n q.append(b('h3').classes('font-purpose').text(this.label));\r\n }\r\n q.append(this.familyPart.html);\r\n q.append(this.sizePart.html);\r\n q.append(this.boldCtrl.html);\r\n q.append(this.italicsCtrl.html);\r\n\r\n return q;\r\n }\r\n\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('select');\r\n }\r\n getValue(): FontInfo {\r\n return {\r\n family: this.familyPart.getValue().toString(),\r\n size: this.sizePart.getValue(),\r\n weight: this.boldCtrl.getValue() ? 'bold' : 'normal',\r\n style: this.italicsCtrl.getValue() ? 'italic' : 'normal'\r\n };\r\n }\r\n setValue(value: FontInfo) {\r\n let italics = false;\r\n // upconvert font size, all font sizes now in points.\r\n if (typeof(value.size) !== 'number') {\r\n value.size = SmoScoreText.fontPointSize(value.size);\r\n }\r\n if (value.style && value.style === 'italic') {\r\n italics = true;\r\n }\r\n const boldString = SmoScoreText.weightString(value.weight);\r\n const bold = boldString === 'bold';\r\n this.boldCtrl.setValue(bold);\r\n this.italicsCtrl.setValue(italics);\r\n this.familyPart.setValue(value.family ?? 'Arial');\r\n this.sizePart.setValue(value.size);\r\n }\r\n\r\n bind() {\r\n this.familyPart.bind();\r\n this.sizePart.bind();\r\n this.boldCtrl.bind();\r\n this.italicsCtrl.bind();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiLyricSession, SuiChordSession } from '../../../render/sui/textEdit';\r\nimport { SuiInlineText } from '../../../render/sui/textRender';\r\nimport { KeyEvent } from '../../../smo/data/common';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SmoSelection, SmoSelector } from '../../../smo/xform/selections';\r\nimport { BrowserEventSource } from '../../eventSource';\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { SmoLyric } from '../../../smo/data/noteModifiers';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * This has the text editing dialog components for notes, such as lyrics. \r\n * Unlike components that are\r\n * actual dialog controls, these actually run a text editing session of some kind.\r\n * \r\n * \r\n *\r\n*\r\n* The heirarchy of text editing objects goes:\r\n* dialog -> component -> session -> editor\r\n*\r\n* ### editor\r\n* handles low-level events and renders the preview using one\r\n* of the text layout objects.\r\n*\r\n* ### session\r\n* creates and destroys editors, e.g. for lyrics that have a Different\r\n* editor instance for each note.\r\n*\r\n* ### component\r\n* is defined in the dialog, and creates/destroys the session based on input from\r\n* the dialog\r\n*\r\n* ### dialog\r\n* manages the coponent session, as well as other components of the text like font etc.\r\n */\r\n\r\n\r\nexport interface SuiNoteTextParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n verse?: number\r\n}\r\n/**\r\n * Base class for text editor components that navigate to\r\n * different notes.\r\n * */\r\nexport abstract class SuiNoteTextComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n selection: SmoSelection;\r\n selector: SmoSelector;\r\n eventSource: BrowserEventSource;\r\n session: SuiLyricSession | null = null;\r\n value: SmoLyric | null = null;\r\n started: boolean = false;\r\n staticText: Record;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.view = this.dialog.getView();\r\n this.eventSource = this.dialog.getEventSource();\r\n this.selection = this.view.tracker.selections[0];\r\n this.selector = JSON.parse(JSON.stringify(this.selection.selector));\r\n this.staticText = this.dialog.getStaticText();\r\n }\r\n abstract startEditSession(): void;\r\n abstract endSession(): void;\r\n mouseMove(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n show() {}\r\n hide() {}\r\n\r\n mouseClick(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n get running() {\r\n return this.session && this.session.isRunning;\r\n }\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.session) {\r\n return await this.session.evKey(evdata);\r\n }\r\n return false;\r\n }\r\n setDialogLyric() {\r\n if (this.session && this.session.lyric) {\r\n (this.dialog as any).setLyric(this.selector, this.session.lyric);\r\n }\r\n }\r\n\r\n async moveSelectionRight() {\r\n if (this.session) {\r\n await this.session.advanceSelection(false);\r\n this.setDialogLyric();\r\n }\r\n }\r\n async moveSelectionLeft() {\r\n if (this.session) {\r\n this.session.advanceSelection(true);\r\n this.setDialogLyric();\r\n }\r\n }\r\n async removeText() {\r\n if (this.session) {\r\n await this.session.removeLyric();\r\n }\r\n }\r\n\r\n async _bind() {\r\n $(this._getInputElement()).off('click').on('click', async () => {\r\n if (this.session && this.session.isRunning) {\r\n this.endSession();\r\n } else {\r\n this.startEditSession();\r\n }\r\n });\r\n $('#' + this.parameterId + '-left').off('click').on('click', async () => {\r\n await this.moveSelectionLeft();\r\n });\r\n $('#' + this.parameterId + '-right').off('click').on('click', async () => {\r\n await this.moveSelectionRight();\r\n });\r\n $('#' + this.parameterId + '-remove').off('click').on('click', async () => {\r\n await this.removeText();\r\n });\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n}\r\n\r\n/** \r\n * manage a lyric session that moves from note to note and adds lyrics.\r\n * @category SuiDialog\r\n**/\r\nexport class SuiLyricComponent extends SuiNoteTextComponent {\r\n altLabel: string;\r\n verse: number;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.altLabel = this.staticText.doneEditing;\r\n this.started = false;\r\n this.verse = parameter.verse ?? 0;\r\n }\r\n get html() {\r\n var b = buildDom;\r\n var id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('cbLyricEdit smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('div').classes('toggleEdit')\r\n .append(b('button').classes('toggleTextEdit')\r\n .attr('id', id + '-toggleInput').append(\r\n b('span').classes('icon icon-pencil'))).append(\r\n b('label').attr('for', id + '-toggleInput').text(this.label)))\r\n .append(b('div').classes('show-when-editing')\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-left').classes('icon-arrow-left buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-right').classes('icon-arrow-right buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-remove').classes('icon-cross buttonComponent')))\r\n );\r\n return r;\r\n }\r\n\r\n async endSession() {\r\n this.started = false;\r\n console.log('ending text session');\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n if (this.session) {\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n }\r\n\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n console.log('starting text session');\r\n if (this.started) {\r\n return;\r\n }\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiLyricSession({\r\n renderer: this.view.renderer,\r\n selector: this.selector,\r\n scroller: this.view.tracker.scroller,\r\n verse: this.verse,\r\n score: this.view.score,\r\n view: this.view\r\n }\r\n );\r\n this.started = true;\r\n $('body').addClass('text-edit');\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n this.session.startSession();\r\n this.setDialogLyric();\r\n }\r\n\r\n bind() {\r\n this._bind();\r\n }\r\n}\r\n\r\n// ## SuiChordComponent\r\n// manage a chord editing session that moves from note to note and adds chord symbols.\r\nexport class SuiChordComponent extends SuiNoteTextComponent {\r\n altLabel: string;\r\n verse: number;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.session = null;\r\n this.dialog = dialog;\r\n this.selection = this.view.tracker.selections[0];\r\n this.selector = JSON.parse(JSON.stringify(this.selection.selector));\r\n this.altLabel = this.staticText.doneEditing;\r\n this.verse = 0;\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('cbChordEdit smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('div').classes('toggleEdit')\r\n .append(b('button').classes('toggleTextEdit')\r\n .attr('id', id + '-toggleInput').append(\r\n b('span').classes('icon icon-pencil'))).append(\r\n b('label').attr('for', id + '-toggleInput').text(this.label)))\r\n\r\n .append(b('div').classes('show-when-editing')\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-left').classes('icon-arrow-left buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-right').classes('icon-arrow-right buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-remove').classes('icon-cross buttonComponent')))\r\n );\r\n return r;\r\n }\r\n\r\n endSession() {\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n\r\n if (this.session) {\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n }\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiChordSession({\r\n renderer: this.view.renderer,\r\n selector: this.selector,\r\n scroller: this.view.tracker.scroller,\r\n verse: 0,\r\n view: this.view,\r\n score: this.view.score\r\n }\r\n );\r\n $('body').addClass('text-edit');\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n this.session.startSession();\r\n this.setDialogLyric();\r\n }\r\n bind() {\r\n this._bind();\r\n }\r\n setTextType(type: string | number) {\r\n if (this.session) {\r\n this.session.textType = parseInt(type.toString(), 10);\r\n }\r\n }\r\n getTextType() {\r\n if (this.session) {\r\n return this.session.textType;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n}\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent, SuiBaseComponentParams } from '../components/baseComponent';\r\nimport { Pitch, PitchLetter } from '../../../smo/data/common';\r\nimport { SmoMusic } from '../../../smo/data/music';\r\nimport { DomBuilder, buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SuiDropdownComposite } from './dropdown';\r\nimport { SuiRockerComposite } from './rocker';\r\nimport { SuiButtonComposite } from './button';\r\nimport { SmoTabStave } from '../../../smo/data/staffModifiers';\r\ndeclare var $: any;\r\nexport interface SuiPitchComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n\r\nexport class SuiPitchComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n staticText: Record;\r\n letterCtrl: SuiDropdownComposite;\r\n accidentalCtrl: SuiDropdownComposite;\r\n octaveCtrl: SuiRockerComposite;\r\n defaultValue: Pitch;\r\n\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.view = this.dialog.getView();\r\n this.defaultValue = { letter: 'c', accidental: 'n', octave: 4 };\r\n const letterName = this.smoName + 'Letter';\r\n const accidentalName = this.smoName + 'Accidental';\r\n const octaveName = this.smoName + 'Octave';\r\n this.staticText = this.dialog.getStaticText();\r\n this.letterCtrl = new SuiDropdownComposite(this.dialog, {\r\n smoName: letterName,\r\n control: 'SuiDropdownComposite',\r\n label: ' ',\r\n parentControl: this,\r\n classes: '',\r\n id: letterName,\r\n options: [\r\n { value: 'a', label: 'A' },\r\n { value: 'b', label: 'B' },\r\n { value: 'c', label: 'C' },\r\n { value: 'd', label: 'D' },\r\n { value: 'e', label: 'E' },\r\n { value: 'f', label: 'F' },\r\n { value: 'g', label: 'G' }\r\n ]\r\n });\r\n\r\n this.accidentalCtrl = new SuiDropdownComposite(this.dialog, {\r\n smoName: accidentalName,\r\n control: 'SuiDropdownComposite',\r\n label: ' ',\r\n parentControl: this,\r\n classes: '',\r\n id: accidentalName,\r\n options: [\r\n { value: 'n', label: '' },\r\n { value: 'n', label: '#' },\r\n { value: 'n', label: 'b' },\r\n ]\r\n });\r\n this.octaveCtrl = new SuiRockerComposite(this.dialog, {\r\n id: octaveName,\r\n classes: '',\r\n dataType: 'int',\r\n increment: 1,\r\n defaultValue: 4,\r\n label: 'Octave',\r\n smoName: octaveName,\r\n control: 'SuiRockerComposite',\r\n parentControl: this\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl pitchContainer'))\r\n .attr('id', this.parameterId);\r\n q.append(this.letterCtrl.html);\r\n q.append(this.accidentalCtrl.html);\r\n q.append(this.octaveCtrl.html);\r\n return q;\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n getValue(): Pitch {\r\n return {\r\n letter: this.letterCtrl.getValue() as PitchLetter,\r\n accidental: this.accidentalCtrl.getValue().toString(),\r\n octave: this.octaveCtrl.getValue()\r\n };\r\n }\r\n setValue(val: Pitch) {\r\n this.letterCtrl.setValue(val.letter);\r\n this.accidentalCtrl.setValue(val.accidental);\r\n this.octaveCtrl.setValue(val.octave);\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n bind() {\r\n this.letterCtrl.bind();\r\n this.accidentalCtrl.bind();\r\n this.octaveCtrl.bind();\r\n }\r\n}\r\nexport interface SuiPitchCompositeParams extends SuiPitchComponentParams {\r\n parentControl: SuiComponentParent\r\n}\r\nexport class SuiPitchComposite extends SuiPitchComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiPitchCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\nexport interface SuiPitchArrayItem {\r\n buttonCtrl: SuiButtonComposite,\r\n pitchCtrl: SuiPitchComposite,\r\n pitch: Pitch\r\n}\r\nexport interface SuiPitchArrayParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n pitches?: Pitch[]\r\n}\r\n\r\n// this allows us to use the pitch array for different purposes, to support reset\r\nexport type getDefaultPitchesFcn = () => Pitch[];\r\nexport const getTabNotePitchesFcn: getDefaultPitchesFcn = () => { return SmoTabStave.defaultStringPitches };\r\n\r\nexport class SuiPitchArrayComponent extends SuiComponentParent {\r\n getButtonControlName(index: number) {\r\n return `${this.id}-delButton-${index}`;\r\n }\r\n getPitchControlName(index: number) {\r\n return `${this.id}-pitchCtrl-${index}`;\r\n }\r\n resetButton: SuiButtonComposite;\r\n pitchControls: SuiPitchArrayItem[] = [];\r\n pitches: Pitch[];\r\n createdShell: boolean = false;\r\n defaultPitchFinder: getDefaultPitchesFcn;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiBaseComponentParams, def: getDefaultPitchesFcn) {\r\n super(dialog, parameters);\r\n this.defaultPitchFinder = def;\r\n this.pitches = this.defaultPitchFinder();\r\n this.setPitchControls(); \r\n this.resetButton = new SuiButtonComposite(this.dialog, {\r\n id: `${this.id}-resetButton`,\r\n classes: '',\r\n label: 'Reset Pitches',\r\n smoName: `${this.id}-resetButton`,\r\n control: 'SuiButtonComposite',\r\n icon: 'icon-cross',\r\n parentControl: this\r\n });\r\n }\r\n setPitchControls() {\r\n this.pitchControls = [];\r\n for (var i = 0; i < this.pitches.length; ++i) {\r\n const pitch = this.pitches[i];\r\n const buttonControlName = this.getButtonControlName(i);\r\n const pitchControlName = this.getPitchControlName(i);\r\n const buttonCtrl: SuiButtonComposite = new SuiButtonComposite(this.dialog, {\r\n id: buttonControlName,\r\n classes: '',\r\n label: 'Delete',\r\n smoName: buttonControlName,\r\n control: 'SuiButtonComposite',\r\n icon: 'icon-cross',\r\n parentControl: this\r\n });\r\n const pitchCtrl: SuiPitchComposite = new SuiPitchComposite(this.dialog, {\r\n id: pitchControlName,\r\n classes: '',\r\n label: ' ',\r\n smoName: pitchControlName,\r\n control: 'SuiPitchComposite',\r\n parentControl: this\r\n });\r\n this.pitchControls.push({\r\n buttonCtrl, pitchCtrl, pitch\r\n });\r\n }\r\n }\r\n bind() {\r\n this.resetButton.bind();\r\n this.pitchControls.forEach((pc) => {\r\n pc.buttonCtrl.bind();\r\n pc.pitchCtrl.bind();\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n if (!this.createdShell) {\r\n // First time, create shell for component.\r\n this.createdShell = true; \r\n const q = b('div').classes(this.makeClasses('multiControl smoControl pitch-array-parent')).\r\n attr('id', this.parameterId);\r\n return q;\r\n } \r\n const q = b('div').classes('pitch-array-container').append(b('div').append(this.resetButton.html));\r\n this.pitchControls.forEach((row) => {\r\n q.append(b('div').classes('pitch-array-item').append(row.buttonCtrl.html).append(row.pitchCtrl.html));\r\n });\r\n return q;\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n setValue(pitches: Pitch[]) {\r\n this.pitches = pitches;\r\n this.setPitchControls();\r\n this.updateControls();\r\n for (var i = 0; i < this.pitchControls.length; ++i) {\r\n const pc = this.pitchControls[i];\r\n pc.pitchCtrl.setValue(pitches[i]);\r\n }\r\n }\r\n getValue() {\r\n const rv: Pitch[] = [];\r\n for (var i = 0; i < this.pitchControls.length; ++i) {\r\n const pc = this.pitchControls[i];\r\n rv.push(pc.pitchCtrl.getValue());\r\n }\r\n return rv;\r\n }\r\n updateControls() {\r\n const updateEl = this.getInputElement();\r\n $(updateEl).html('');\r\n $(updateEl).append(this.html.dom());\r\n $(updateEl).find('input').prop('disabled', false);\r\n $(updateEl).find('.toggle-disabled input').prop('checked', true);\r\n $(updateEl).find('.toggle-remove-row input').prop('checked', true);\r\n $(updateEl).find('.toggle-add-row input').prop('checked', false);\r\n $(updateEl).find('.toggle-disabled input').prop('disabled', true);\r\n this.bind();\r\n }\r\n changed() {\r\n let removed = false;\r\n const pitches: Pitch[] = [];\r\n this.pitchControls.forEach((pc) => {\r\n if (pc.buttonCtrl.changeFlag) {\r\n removed = true;\r\n } else {\r\n pitches.push(pc.pitchCtrl.getValue());\r\n }\r\n }); \r\n if (removed && this.pitchControls.length < 2) {\r\n return; // don't let user delete all the strings\r\n }\r\n // If the user asked to reset, update the pitches to default\r\n // then reset.\r\n if (this.resetButton.changeFlag) {\r\n this.pitches = this.defaultPitchFinder();\r\n this.pitches.sort((a, b) => SmoMusic.smoPitchToInt(a) > SmoMusic.smoPitchToInt(b) ? -1 : 1);\r\n } else {\r\n this.pitches = pitches;\r\n }\r\n this.setValue(this.pitches);\r\n this.handleChanged();\r\n }\r\n}\r\nexport class SuiPitchArrayComponentTab extends SuiPitchArrayComponent {\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiBaseComponentParams, def: getDefaultPitchesFcn) {\r\n super(dialog, parameters, getTabNotePitchesFcn);\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * @module /ui/dialog/components/rocker\r\n * **/\r\n import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Basic dialog component info.\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiRockerComponentParams {\r\n id: string,\r\n classes: string,\r\n dataType?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n\r\n/**\r\n * A numeric input box with +- buttons. Adjustable type and scale\r\n * */\r\nexport class SuiRockerComponent extends SuiComponentBase {\r\n static get dataTypes() {\r\n return ['int', 'float', 'percent'];\r\n }\r\n static get increments(): Record {\r\n return { 'int': 1, 'float': 0.1, 'percent': 10 };\r\n }\r\n static get parsers(): Record {\r\n return { 'int': '_getIntValue', 'float': '_getFloatValue', 'percent': '_getPercentValue' };\r\n }\r\n initialValue: number = 0;\r\n dataType: string;\r\n increment: number = 1;\r\n parser: string;\r\n constructor(dialog: SuiDialogNotifier, params: SuiRockerComponentParams) {\r\n super(dialog, params);\r\n this.dataType = params.dataType ?? 'int';\r\n this.increment = params.increment ?? SuiRockerComponent.increments[this.dataType];\r\n if (SuiRockerComponent.dataTypes.indexOf(this.dataType) < 0) {\r\n throw new Error('dialog element invalid type ' + this.dataType);\r\n }\r\n if (this.dataType === 'int' && this.increment < 1) {\r\n throw new Error('int component with decimal increment');\r\n }\r\n this.parser = SuiRockerComponent.parsers[this.dataType];\r\n this.dialog = dialog;\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('rockerControl smoControl')).attr('id', id).attr('data-param', this.smoName)\r\n .append(\r\n b('button').classes('increment').append(\r\n b('span').classes('icon icon-circle-up'))).append(\r\n b('button').classes('decrement').append(\r\n b('span').classes('icon icon-circle-down'))).append(\r\n b('input').attr('type', 'text').classes('rockerInput')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n\r\n get parameterId() {\r\n return this.id;\r\n }\r\n handleChange() {\r\n this.changeFlag = true;\r\n this.dialog.changed();\r\n this.changeFlag = false;\r\n }\r\n\r\n bind() {\r\n const pid = this.parameterId;\r\n const input = this._getInputElement();\r\n let val = 0;\r\n $('#' + pid).find('button.increment').off('click').on('click',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (this.dataType === 'percent') {\r\n val = 100 * val;\r\n }\r\n $(input).val(val + this.increment);\r\n this.handleChanged();\r\n }\r\n );\r\n $('#' + pid).find('button.decrement').off('click').on('click',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (this.dataType === 'percent') {\r\n val = 100 * val;\r\n }\r\n $(input).val(val - this.increment);\r\n this.handleChanged();\r\n }\r\n );\r\n $(input).off('blur').on('blur',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (val !== this.initialValue) {\r\n this.initialValue = val;\r\n this.handleChanged();\r\n }\r\n }\r\n );\r\n }\r\n\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n _getIntValue() {\r\n let val:number = parseInt(this._getInputElement().val(), 10);\r\n val = isNaN(val) ? 0 : val;\r\n return val;\r\n }\r\n _getFloatValue() {\r\n let val = parseFloat(this._getInputElement().val());\r\n val = isNaN(val) ? 1.0 : val;\r\n return val;\r\n }\r\n _getPercentValue() {\r\n let val = parseFloat(this._getInputElement().val());\r\n val = isNaN(val) ? 1 : val;\r\n return val / 100;\r\n }\r\n _setIntValue(val: string | number) {\r\n this._getInputElement().val(val);\r\n }\r\n setValue(value: number) {\r\n if (this.dataType === 'percent') {\r\n value = value * 100;\r\n }\r\n this._setIntValue(value);\r\n this.initialValue = value;\r\n }\r\n getValue() {\r\n return (this as any)[this.parser]();\r\n }\r\n}\r\n/**\r\n * Create rocker composite\r\n * @param{id}\r\n */\r\nexport interface SuiRockerCompositeParams {\r\n id: string,\r\n classes: string,\r\n dataType?: string,\r\n increment?: number,\r\n defaultValue: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n parentControl: SuiComponentParent\r\n}\r\nexport class SuiRockerComposite extends SuiRockerComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiRockerCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { SuiToggleCompositeParams, SuiToggleComposite } from './toggle';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SmoSystemGroup } from '../../../smo/data/scoreModifiers';\r\ndeclare var $: any;\r\nexport interface StaffAddControlRow {\r\n showCtrl: SuiToggleComposite\r\n}\r\nexport interface StaffAddRemoveComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport class StaffAddRemoveComponent extends SuiComponentBase {\r\n staffRows: StaffAddControlRow[] = [];\r\n view: SuiScoreViewOperations;\r\n createdShell: boolean = false;\r\n staticText: Record;\r\n modifier: SmoSystemGroup | null = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: StaffAddRemoveComponentParams) {\r\n super(dialog, parameter);\r\n this.view = this.dialog.getView();\r\n this.staticText = dialog.getStaticText();\r\n this.label = this.staticText['includeStaff'];\r\n }\r\n setControlRows() {\r\n const mod = this.modifier!;\r\n let i = mod.startSelector.staff;\r\n this.staffRows = [];\r\n this.view.storeScore.staves.forEach((staff) => {\r\n const name = this.label + ' ' + (staff.staffId + 1);\r\n const id = 'show-' + i;\r\n const elementParams: SuiToggleCompositeParams = {\r\n smoName: id,\r\n classes: 'toggle-add-row',\r\n control: 'SuiToggleComponent',\r\n label: name,\r\n parentControl: this,\r\n id: id\r\n } \r\n // Toggle add of last row + 1\r\n if (staff.staffId === mod.endSelector.staff + 1) {\r\n\r\n const rowElement = new SuiToggleComposite(this.dialog, elementParams);\r\n rowElement.parentControl = this;\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n } else if (staff.staffId > mod.startSelector.staff &&\r\n staff.staffId === mod.endSelector.staff) {\r\n elementParams.classes = 'toggle-remove-row';\r\n // toggle remove of ultimate row, other than first row\r\n const rowElement = new SuiToggleComposite(this.dialog, elementParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n } else if ((staff.staffId <= mod.endSelector.staff) &&\r\n (staff.staffId >= mod.startSelector.staff)) {\r\n // toggle remove of ultimate row, other than first row\r\n elementParams.classes = 'toggle-disabled';\r\n const rowElement = new SuiToggleComposite(this.dialog,elementParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n }\r\n i += 1;\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n // a little hacky. The first time we create an empty html shell for the control\r\n // subsequent times, we fill the html with the row information\r\n if (!this.createdShell) {\r\n this.createdShell = true;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl staffContainer')).attr('id', this.parameterId);\r\n return q;\r\n } else {\r\n const q = b('div').classes(this.makeClasses('smoControl'));\r\n this.staffRows.forEach((row) => {\r\n q.append(row.showCtrl.html);\r\n });\r\n return q;\r\n }\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n getValue() {\r\n if (!this.modifier) {\r\n throw 'No staff groups set for staff group component';\r\n }\r\n const mod = this.modifier;\r\n let nextStaff = mod.startSelector.staff;\r\n const maxMeasure = mod.endSelector.measure;\r\n mod.endSelector = JSON.parse(JSON.stringify(mod.startSelector));\r\n this.staffRows.forEach((staffRow) => {\r\n if (staffRow.showCtrl.getValue()) {\r\n mod.endSelector = { staff: nextStaff, measure: maxMeasure, voice: 0, tick: 0, pitches: [] };\r\n nextStaff += 1;\r\n }\r\n });\r\n return this.modifier;\r\n }\r\n setValue(staffGroup: SmoSystemGroup) {\r\n this.modifier = staffGroup;\r\n this.updateGroupMembership();\r\n }\r\n changed() {\r\n this.getValue(); // update modifier\r\n this.handleChanged();\r\n this.updateGroupMembership();\r\n }\r\n bind() {\r\n if (!this.modifier) {\r\n return;\r\n }\r\n // Can't bind before initial set of modifier\r\n this.staffRows.forEach((row) => {\r\n row.showCtrl.bind();\r\n });\r\n }\r\n updateGroupMembership() {\r\n const updateEl = this.getInputElement();\r\n this.setControlRows();\r\n $(updateEl).html('');\r\n $(updateEl).append(this.html.dom());\r\n $(updateEl).find('input').prop('disabled', false);\r\n $(updateEl).find('.toggle-disabled input').prop('checked', true);\r\n $(updateEl).find('.toggle-remove-row input').prop('checked', true);\r\n $(updateEl).find('.toggle-add-row input').prop('checked', false);\r\n $(updateEl).find('.toggle-disabled input').prop('disabled', true);\r\n this.bind();\r\n }\r\n}\r\nexport interface StaffCheckComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface StaffCheckControlRow {\r\n showCtrl: SuiToggleComposite\r\n}\r\nexport interface StaffCheckValue {\r\n show: boolean;\r\n}\r\nexport class StaffCheckComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n staffRows: StaffCheckControlRow[];\r\n constructor(dialog: SuiDialogNotifier, parameter: StaffCheckComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.view = this.dialog.getView();\r\n this.staffRows = [];\r\n let previousStaff: string | null = null;\r\n this.view.storeScore.staves.forEach((staff) => {\r\n ;\r\n let name = 'View ' + staff.partInfo.partName;\r\n if (staff.partInfo.stavesBefore > 0 && previousStaff) {\r\n name = previousStaff + ' (2)';\r\n }\r\n previousStaff = name;\r\n const id = 'show-' + staff.staffId;\r\n const toggleParams: SuiToggleCompositeParams = {\r\n smoName: id,\r\n classes: 'hide-when-editing',\r\n control: 'SuiToggleComponent',\r\n label: name,\r\n id: id,\r\n parentControl: this\r\n }\r\n const rowElement = new SuiToggleComposite(this.dialog, toggleParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl staffContainer'));\r\n this.staffRows.forEach((row) => {\r\n q.append(row.showCtrl.html);\r\n });\r\n return q;\r\n }\r\n // Is this used for compound controls?\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('.staffContainer');\r\n }\r\n /* export interface StaffCheckValue {\r\n show: boolean;\r\n}*/\r\n getValue(): StaffCheckValue[] {\r\n const rv = [];\r\n let i = 0;\r\n for (i = 0; i < this.staffRows.length; ++i) {\r\n const show = this.staffRows[i].showCtrl.getValue();\r\n rv.push({ show });\r\n }\r\n return rv;\r\n }\r\n setValue(rows: StaffCheckValue[]) {\r\n let i = 0;\r\n rows.forEach((row) => {\r\n this.staffRows[i].showCtrl.setValue(row.show);\r\n i += 1;\r\n });\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n bind() {\r\n this.staffRows.forEach((row) => {\r\n row.showCtrl.bind();\r\n });\r\n }\r\n}\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from '../components/baseComponent';\r\nimport { SuiToggleComposite } from '../components/toggle';\r\nimport { SuiTextInputComposite } from '../components/textInput';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\ndeclare var $: any;\r\nexport interface TextCheckComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface TextCheckPair {\r\n checked: boolean,\r\n text: string\r\n}\r\nexport class TextCheckComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n staticText: Record;\r\n toggleCtrl: SuiToggleComposite;\r\n textCtrl: SuiTextInputComposite;\r\n defaultValue: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: TextCheckComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.view = this.dialog.getView();\r\n this.defaultValue = '';\r\n const toggleName = this.smoName + 'Toggle';\r\n const textName = this.smoName + 'Text';\r\n this.staticText = this.dialog.getStaticText();\r\n const label = this.staticText[textName];\r\n const show = this.staticText.show;\r\n this.toggleCtrl = new SuiToggleComposite(this.dialog, {\r\n smoName: toggleName,\r\n control: 'SuiToggleComposite',\r\n label: show,\r\n parentControl: this,\r\n classes: '',\r\n id: toggleName\r\n });\r\n this.textCtrl = new SuiTextInputComposite(this.dialog, {\r\n smoName: textName,\r\n defaultValue: this.defaultValue,\r\n control: 'SuiTextInputComposite',\r\n label,\r\n parentControl: this,\r\n classes: '',\r\n id: toggleName\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl textCheckContainer'))\r\n .attr('id', this.parameterId);\r\n q.append(this.textCtrl.html);\r\n q.append(this.toggleCtrl.html);\r\n return q;\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n getValue(): TextCheckPair {\r\n return {\r\n checked: this.toggleCtrl.getValue(),\r\n text: this.textCtrl.getValue()\r\n };\r\n }\r\n setValue(val: TextCheckPair) {\r\n this.toggleCtrl.setValue(val.checked);\r\n this.textCtrl.setValue(val.text);\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n bind() {\r\n this.toggleCtrl.bind();\r\n this.textCtrl.bind();\r\n }\r\n}\r\n","import { SmoScoreText, SmoTextGroup } from '../../../smo/data/scoreText';\r\nimport { KeyEvent } from '../../../smo/data/common';\r\nimport { SuiTextSession } from '../../../render/sui/textEdit';\r\nimport { SuiScroller } from '../../../render/sui/scroller';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SuiDialogNotifier, SuiComponentBase, SuiComponentParent } from './baseComponent';\r\nimport { SuiButtonComposite } from './button';\r\nimport { SuiRockerComposite } from './rocker';\r\nimport { SuiDropdownComposite } from './dropdown';\r\nimport { SuiInlineText } from '../../../render/sui/textRender';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\n\r\ndeclare var $: any;\r\n\r\n// ## SuiTextInPlace\r\n// Edit the text in an SVG element, in the same scale etc. as the text in the score SVG DOM.\r\n// This component just manages the text editing component of hte renderer.\r\nexport interface SuiTextInPlaceParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport class SuiTextInPlace extends SuiComponentBase {\r\n scroller: SuiScroller;\r\n editMode: boolean = false;\r\n value: SmoTextGroup;\r\n staticText: Record;\r\n altLabel: string;\r\n view: SuiScoreViewOperations;\r\n session: SuiTextSession | null = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextInPlaceParams) {\r\n super(dialog, parameter);\r\n this.scroller = dialog.getView().scroller;\r\n this.value = new SmoTextGroup(SmoTextGroup.defaults);\r\n this.view = this.dialog.getView();\r\n const modifier = this.dialog.getModifier();\r\n if (modifier && SmoTextGroup.isTextGroup(modifier)) {\r\n this.value = modifier;\r\n }\r\n this.staticText = this.dialog.getStaticText();\r\n this.altLabel = this.staticText.editorLabel;\r\n }\r\n show() {}\r\n hide() {}\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('cbTextInPlace smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'checkbox').classes('toggleTextEdit')\r\n .attr('id', id + '-input').append(\r\n b('span').classes('icon icon-pencil'))\r\n .append(\r\n b('label').attr('for', id + '-input').text(this.label)));\r\n return r;\r\n }\r\n endSession() {\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n this.value.skipRender = false;\r\n\r\n if (this.session) {\r\n this.session.textGroup.tryParseUnicode();\r\n this.value = this.session.textGroup;\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n this.handleChanged();\r\n }\r\n get isRunning() {\r\n return this.session && this.session.isRunning;\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n mouseMove(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n _renderInactiveBlocks() {\r\n const modifier = this.value;\r\n const context = this.view.renderer.pageMap.getRendererFromModifier(this.value).getContext();\r\n context.save();\r\n context.setFillStyle('#ddd');\r\n const svgPage = this.view.renderer.pageMap.getRendererFromModifier(this.value);\r\n modifier.textBlocks.forEach((block) => {\r\n const st = block.text;\r\n if (st.attrs.id !== this.value.getActiveBlock().attrs.id && svgPage) {\r\n const svgText = SuiInlineText.fromScoreText(st, svgPage, this.view.renderer.pageMap, this.scroller);\r\n if (st.logicalBox) {\r\n svgText.startX += st.logicalBox.x - st.x;\r\n svgText.startY += (st.y - st.logicalBox.y) - st.logicalBox.height / 2;\r\n }\r\n const sgrp = context.openGroup();\r\n sgrp.classList.add('inactive-text');\r\n sgrp.classList.add('suiInlineText');\r\n svgText.render();\r\n context.closeGroup();\r\n }\r\n });\r\n context.restore();\r\n }\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n const modifier = this.value;\r\n modifier.skipRender = true;\r\n let pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.value);\r\n $(pageContext.svg).find('#' + modifier.attrs.id).remove();\r\n this._renderInactiveBlocks();\r\n const ul = modifier.ul();\r\n\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiTextSession({\r\n renderer: this.view.renderer,\r\n scroller: this.scroller,\r\n x: ul.x,\r\n y: ul.y,\r\n textGroup: modifier,\r\n text: modifier.getActiveBlock().text,\r\n scoreText: modifier.getActiveBlock()\r\n });\r\n $('body').addClass('text-edit');\r\n this.value = this.session.textGroup;\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n // Erase the original since we are going to edit it now.\r\n if (this.value) {\r\n this.value.elements.forEach((el) => {\r\n el.remove();\r\n });\r\n this.value.elements = [];\r\n }\r\n this.session.startSession();\r\n // blur the button so key events don't get passed to it.\r\n $(this._getInputElement()).blur();\r\n }\r\n evKey(evdata: KeyEvent) {\r\n if (this.session) {\r\n this.session.evKey(evdata);\r\n }\r\n }\r\n bind() {\r\n $(this._getInputElement()).off('click').on('click', () => {\r\n if (this.session && this.session.isRunning) {\r\n this.endSession();\r\n } else {\r\n this.startEditSession();\r\n }\r\n });\r\n }\r\n}\r\n\r\n\r\nexport interface SuiTextBlockComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface SuiTextBlockValue {\r\n modifier: SmoTextGroup,\r\n activeScoreText: SmoScoreText\r\n}\r\nexport class SuiTextBlockComponent extends SuiComponentParent {\r\n addBlockCtrl: SuiButtonComposite;\r\n toggleBlockCtrl: SuiButtonComposite;\r\n removeBlockCtrl: SuiButtonComposite;\r\n relativePositionCtrl: SuiDropdownComposite;\r\n justificationCtrl: SuiDropdownComposite;\r\n spacingCtrl: SuiRockerComposite;\r\n modifier: SmoTextGroup;\r\n activeScoreText: SmoScoreText;\r\n\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextBlockComponentParams) {\r\n super(dialog, parameter);\r\n this.addBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'addBlock',\r\n smoName: 'addBlock',\r\n parentControl: this,\r\n icon: 'icon-plus',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Add Text Block'\r\n });\r\n\r\n this.toggleBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'toggleBlock',\r\n smoName: 'toggleBlock',\r\n parentControl: this,\r\n icon: 'icon-arrow-right',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Next Block'\r\n });\r\n\r\n this.removeBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'removeBlock',\r\n smoName: 'removeBlock',\r\n parentControl: this,\r\n icon: 'icon-minus',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Remove Block'\r\n });\r\n this.relativePositionCtrl = new SuiDropdownComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'relativePosition',\r\n smoName: 'relativePosition',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Block Positions',\r\n options: [{\r\n value: SmoTextGroup.relativePositions.ABOVE,\r\n label: 'Above'\r\n }, {\r\n value: SmoTextGroup.relativePositions.BELOW,\r\n label: 'Below'\r\n }, {\r\n value: SmoTextGroup.relativePositions.LEFT,\r\n label: 'Left'\r\n }, {\r\n value: SmoTextGroup.relativePositions.RIGHT,\r\n label: 'Right'\r\n }]\r\n }\r\n );\r\n this.justificationCtrl = new SuiDropdownComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'justification',\r\n smoName: 'justification',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Justification',\r\n options: [{\r\n value: SmoTextGroup.justifications.LEFT,\r\n label: 'Left'\r\n }, {\r\n value: SmoTextGroup.justifications.RIGHT,\r\n label: 'Right'\r\n }, {\r\n value: SmoTextGroup.justifications.CENTER,\r\n label: 'Center'\r\n }]\r\n });\r\n this.spacingCtrl = new SuiRockerComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'spacing',\r\n smoName: 'spacing',\r\n defaultValue: 0,\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Spacing',\r\n dataType: 'float',\r\n increment: 0.1\r\n },\r\n );\r\n const mod = this.dialog.getModifier();\r\n if (mod && SmoTextGroup.isTextGroup(mod)) {\r\n this.modifier = mod;\r\n } else {\r\n this.modifier = new SmoTextGroup(SmoTextGroup.defaults);\r\n }\r\n this.activeScoreText = this.modifier.textBlocks[0].text;\r\n }\r\n changed() {\r\n if (this.addBlockCtrl.changeFlag && this.modifier) {\r\n const nt = new SmoScoreText(this.activeScoreText);\r\n this.modifier.addScoreText(nt);\r\n this.activeScoreText = nt;\r\n this.modifier.setActiveBlock(nt);\r\n this._updateMultiiFields();\r\n }\r\n if (this.relativePositionCtrl.changeFlag) {\r\n this.modifier.setRelativePosition(parseInt(this.relativePositionCtrl.getValue().toString(), 10));\r\n }\r\n if (this.justificationCtrl.changeFlag) {\r\n this.modifier.justification = parseInt(this.justificationCtrl.getValue().toString(), 10);\r\n }\r\n if (this.removeBlockCtrl.changeFlag) {\r\n this.modifier.removeBlock(this.activeScoreText);\r\n this.activeScoreText = this.modifier.firstBlock();\r\n this._updateMultiiFields();\r\n }\r\n if (this.toggleBlockCtrl.changeFlag) {\r\n const curIx = this.modifier.indexOf(this.activeScoreText);\r\n const newIx = (curIx + 1) % this.modifier.textBlocks.length;\r\n this.activeScoreText = this.modifier.textBlocks[newIx].text;\r\n this.modifier.setActiveBlock(this.activeScoreText);\r\n }\r\n if (this.spacingCtrl.changeFlag) {\r\n const val = this.spacingCtrl.getValue();\r\n if (val >= 0) {\r\n this.modifier.spacing = val;\r\n }\r\n }\r\n this.handleChanged();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl'));\r\n q.append(this.addBlockCtrl.html);\r\n q.append(this.removeBlockCtrl.html);\r\n q.append(this.toggleBlockCtrl.html);\r\n q.append(this.relativePositionCtrl.html);\r\n q.append(this.justificationCtrl.html);\r\n q.append(this.spacingCtrl.html);\r\n\r\n return q;\r\n }\r\n\r\n _getInputElement() {\r\n return $(this.dialog.dgDom.element).find('#' + this.parameterId);\r\n }\r\n getValue() {\r\n return {\r\n activeScoreText: this.activeScoreText,\r\n modifier: this.modifier\r\n };\r\n }\r\n _updateMultiiFields() {\r\n const fields = [this.justificationCtrl, this.relativePositionCtrl,\r\n this.removeBlockCtrl, this.toggleBlockCtrl, this.spacingCtrl];\r\n fields.forEach((field) => {\r\n if (this.modifier.textBlocks.length < 2) {\r\n $('#' + field.parameterId).addClass('hide');\r\n } else {\r\n $('#' + field.parameterId).removeClass('hide');\r\n }\r\n });\r\n }\r\n setValue(value: SuiTextBlockValue) {\r\n this.activeScoreText = value.activeScoreText;\r\n this.modifier = value.modifier;\r\n this.relativePositionCtrl.setValue(this.modifier.relativePosition);\r\n this._updateMultiiFields();\r\n this.justificationCtrl.setValue(this.modifier.justification);\r\n this.spacingCtrl.setValue(this.modifier.spacing);\r\n }\r\n\r\n bind() {\r\n this.addBlockCtrl.bind();\r\n this.relativePositionCtrl.bind();\r\n this.justificationCtrl.bind();\r\n this.removeBlockCtrl.bind();\r\n this.toggleBlockCtrl.bind();\r\n this.spacingCtrl.bind();\r\n }\r\n}\r\n\r\n","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * parameters for text input component (simple text entry, not SVG text)\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiTextInputComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n/**\r\n * Simple text input, like for a filename. Not the text editing component.\r\n */\r\nexport class SuiTextInputComponent extends SuiComponentBase {\r\n defaultValue: string = '';\r\n value: string = '';\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextInputComponentParams) {\r\n super(dialog, parameter);\r\n\r\n this.dialog = dialog;\r\n this.value = '';\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('text-input smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'text').classes('file-name')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(val: string) {\r\n this.value = val;\r\n $('#' + this.parameterId).find('input').val(val);\r\n }\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n bind() {\r\n const self = this;\r\n $('#' + this.parameterId).find('input').off('change').on('change', () => {\r\n self.value = $(this._getInputElement()).val();\r\n self.handleChanged();\r\n });\r\n }\r\n}\r\nexport interface SuiTextInputCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n parentControl: SuiComponentParent\r\n}\r\nexport class SuiTextInputComposite extends SuiTextInputComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiTextInputCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiDialogNotifier, DialogDefinitionElement, SuiComponentParent } from '../components/baseComponent';\r\nimport { SuiDropdownCompositeParams, SuiDropdownComposite } from '../components/dropdown';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SmoSelection } from '../../../smo/xform/selections';\r\nimport { SmoTie, TieLine } from '../../../smo/data/staffModifiers';\r\nimport { SmoNote } from '../../../smo/data/note';\r\ndeclare var $: any;\r\n\r\nexport interface PitchTieControlRow {\r\n leftControl: SuiDropdownComposite,\r\n rightControl: SuiDropdownComposite\r\n}\r\nexport interface TieMappingComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n toggleElement: DialogDefinitionElement,\r\n dropdownElement: DialogDefinitionElement\r\n}\r\n// ## TieMappingComponent\r\n// Represent the pitches in 2 notes that can be individually tied together\r\nexport class TieMappingComponent extends SuiComponentParent {\r\n // { dropdownElement: {...}, toggleElement: }\r\n startSelection: SmoSelection | null;\r\n endSelection: SmoSelection | null;\r\n modifier: SmoTie;\r\n controlRows: PitchTieControlRow[] = [];\r\n constructor(dialog: SuiDialogNotifier, parameter: TieMappingComponentParams) {\r\n super(dialog, parameter);\r\n let i = 0;\r\n const modifier = this.dialog.getModifier();\r\n if (modifier && SmoTie.isTie(modifier)) {\r\n this.modifier = modifier;\r\n } else { // should not happen\r\n this.modifier = new SmoTie(SmoTie.defaults);\r\n }\r\n this.startSelection = SmoSelection.noteFromSelector(\r\n this.dialog.getView().score, this.modifier.startSelector);\r\n this.endSelection = SmoSelection.noteFromSelector(\r\n this.dialog.getView().score, this.modifier.endSelector);\r\n if (this.startSelection === null || this.startSelection.note === null ||\r\n this.endSelection === null || this.endSelection.note === null) {\r\n return;\r\n }\r\n const pitchCount = Math.max(this.startSelection.note.pitches.length, this.endSelection.note.pitches.length);\r\n\r\n this.controlRows = [];\r\n for (i = 0; i < pitchCount; ++i) {\r\n const smoName = 'Line-' + (i + 1);\r\n const defaultValue = -1;\r\n const leftParams: SuiDropdownCompositeParams = {\r\n id: this.id + smoName + '-left',\r\n smoName: smoName + '-left',\r\n classes: 'leftControl',\r\n control: 'SuiDropdownComposite',\r\n label: dialog.getStaticText()['fromNote'],\r\n options: this._generateOptions(this.startSelection.note),\r\n parentControl: this\r\n }\r\n const leftControl = new SuiDropdownComposite(this.dialog, leftParams);\r\n const rightParams: SuiDropdownCompositeParams = {\r\n id: this.id + smoName + '-right',\r\n smoName: smoName + '-right',\r\n classes: 'rightControl',\r\n control: 'SuiDropdownComposite',\r\n label: dialog.getStaticText()['toNote'],\r\n options: this._generateOptions(this.endSelection.note),\r\n parentControl: this\r\n\r\n }\r\n const rightControl = new SuiDropdownComposite(this.dialog, rightParams);\r\n this.controlRows.push({ leftControl, rightControl });\r\n }\r\n }\r\n bind() {\r\n this.controlRows.forEach((row) => {\r\n row.rightControl.bind();\r\n row.leftControl.bind();\r\n });\r\n }\r\n\r\n _generateOptions(note: SmoNote) {\r\n const options = [];\r\n let index = 0;\r\n let label = '';\r\n options.push({ value: -1, label: 'No Line' });\r\n note.pitches.forEach((pitch) => {\r\n const value = index;\r\n label = pitch.letter.toUpperCase();\r\n if (pitch.accidental !== 'n') {\r\n label += pitch.accidental;\r\n }\r\n label += pitch.octave;\r\n options.push({ value, label });\r\n index += 1;\r\n });\r\n return options;\r\n }\r\n getValue() {\r\n const lines: TieLine[] = [];\r\n this.controlRows.forEach((row) => {\r\n const left: number = parseInt(row.leftControl.getValue().toString(), 10);\r\n const right: number = parseInt(row.rightControl.getValue().toString(), 10);\r\n if (left >= 0 && right >= 0) {\r\n lines.push({ from: left, to: right });\r\n }\r\n });\r\n return lines;\r\n }\r\n setValue(modifier: TieLine[]) {\r\n let i = 0;\r\n for (i = 0; i < this.controlRows.length; ++i) {\r\n const row = this.controlRows[i];\r\n if (modifier.length > i) {\r\n row.leftControl.setValue(modifier[i].from);\r\n row.rightControl.setValue(modifier[i].to);\r\n }\r\n }\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl dropdownPair'))\r\n .attr('id', this.parameterId);\r\n this.controlRows.forEach((row) => {\r\n q.append(row.leftControl.html).append(row.rightControl.html);\r\n });\r\n return q;\r\n }\r\n}","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * parameters for simple on-off toggle\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiToggleComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n/**\r\n * Simple boolean checkbox component\r\n */\r\nexport class SuiToggleComponent extends SuiComponentBase {\r\n defaultValue: boolean = false;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiToggleComponentParams) {\r\n super(dialog, parameter);\r\n this.defaultValue = false;\r\n this.dialog = dialog;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('toggleControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'checkbox').classes('toggleInput')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n setValue(value: boolean) {\r\n $(this._getInputElement()).prop('checked', value);\r\n }\r\n getValue() {\r\n return $(this._getInputElement()).prop('checked');\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n $(input).off('change').on('change',\r\n () => {\r\n this.handleChanged();\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Params for toggle combined with another component\r\n */\r\nexport interface SuiToggleCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n defaultValue?: string | number,\r\n dataType?: string,\r\n parentControl: SuiComponentParent\r\n}\r\n// ### SuiToggleComposite\r\n// Dropdown component that can be part of a composite control.\r\nexport class SuiToggleComposite extends SuiToggleComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiToggleCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n\r\nexport interface TreeComponentOption {\r\n label: string,\r\n value: string | undefined, \r\n parent: string | undefined,\r\n format: string,\r\n expanded: boolean\r\n}\r\n\r\nexport interface SuiTreeComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n root: string,\r\n options: TreeComponentOption[]\r\n}\r\n// ### SuiDropdownComponent\r\n// simple dropdown select list.\r\nexport class SuiTreeComponent extends SuiComponentBase {\r\n persistControls: boolean = false;\r\n tree: Record = {};\r\n options: TreeComponentOption[] = [];\r\n root: string;\r\n value: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTreeComponentParams) {\r\n super(dialog, parameter);\r\n this.root = parameter.root;\r\n this.value = this.root;\r\n this.options = parameter.options;\r\n this.calculateOptionTree();\r\n }\r\n calculateOptionTree() {\r\n this.tree = {};\r\n this.options.forEach((option) => {\r\n if (option.parent) {\r\n if (!(this.tree[option.parent])) {\r\n this.tree[option.parent] = [];\r\n }\r\n this.tree[option.parent].push(option);\r\n }\r\n });\r\n }\r\n getNodesWithParent(parent: string | undefined) {\r\n return this.options.filter((oo) => oo.parent === parent);\r\n }\r\n appendOptionRecurse(b: any, option: TreeComponentOption, level: number) {\r\n const children = this.getNodesWithParent(option.value);\r\n let treeClass = 'tree-branch';\r\n let buttonClass = 'expander';\r\n if (option.format === 'library' && children.length > 0) {\r\n if (this.persistControls && option.expanded) {\r\n buttonClass += ' expanded icon-minus';\r\n }\r\n if (this.persistControls && !option.expanded) {\r\n buttonClass += ' collapsed icon-plus';\r\n treeClass += ' collapsed';\r\n }\r\n }\r\n const current = b('li').classes(treeClass).attr('data-value', option.value).attr('data-level', level);\r\n current.append(b('button').classes(buttonClass));\r\n current.append(b('a').classes('tree-link').text(option.label));\r\n if (option.format === 'library') {\r\n current.append(b('span').classes('file-type icon-book'));\r\n } else {\r\n current.append(b('span').classes('file-type icon-file-music'));\r\n }\r\n children.forEach((child) => {\r\n current.append(b('ul').append(this.appendOptionRecurse(b, child, level + 1)));\r\n });\r\n return current;\r\n }\r\n _createTree(builder: any, ul: any) {\r\n // this.checkDefault(s, b);\r\n const options = this.getNodesWithParent(this.root);\r\n options.forEach((option) => {\r\n ul.append(this.appendOptionRecurse(builder, option, 0));\r\n });\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('dropdownControl smoControl')).attr('id', id).attr('data-param', this.smoName);\r\n const ul = b('ul').classes('tree tree-root');\r\n this._createTree(b, ul);\r\n r.append(ul);\r\n this.persistControls = true;\r\n return r;\r\n }\r\n updateOptions(options: TreeComponentOption[]) {\r\n this.options = options;\r\n this.calculateOptionTree();\r\n const parentEl = $(this._getInputElement());\r\n const oldUl = $(parentEl).find('ul.tree-root');\r\n $(oldUl).remove();\r\n const b = buildDom;\r\n const ul = b('ul').classes('tree tree-root');\r\n this._createTree(b, ul);\r\n $(parentEl).append(ul.dom());\r\n this.bind();\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid);\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(value: string) {\r\n $('ul.tree li').removeClass('selected');\r\n const option = this.options.find((o) => o.value === value);\r\n const input = this._getInputElement();\r\n const li = $(input).find('li[data-value=\"' + value + '\"]');\r\n $(li).addClass('selected');\r\n if (option && option.format === 'library') {\r\n $(li).find('button').first().addClass('expanded icon-minus');\r\n }\r\n this.bindTreeControls();\r\n }\r\n bindTreeControls() {\r\n $('ul.tree button.expanded').off('click').on('click', (evt: any) => {\r\n const button = evt.currentTarget;\r\n $(button).removeClass('expanded').removeClass('icon-minus').addClass('icon-plus').addClass('collapsed');\r\n $(button).closest('li').addClass('collapsed');\r\n this.bindTreeControls();\r\n });\r\n $('ul.tree button.collapsed').off('click').on('click', (evt: any) => {\r\n const button = evt.currentTarget;\r\n $(button).addClass('expanded').addClass('icon-minus').removeClass('icon-plus').removeClass('collapsed');\r\n $(button).closest('li').removeClass('collapsed');\r\n this.bindTreeControls();\r\n });\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n this.bindTreeControls();\r\n $(input).find('a.tree-link').each((ix: number, el: any) => {\r\n $(el).removeClass('selected');\r\n $(el).off('click').on('click', (ev: any) => {\r\n $(this._getInputElement()).find('li').removeClass('selected');\r\n const li = $(ev.currentTarget).closest('li.tree-branch');\r\n $(li).addClass('selected');\r\n this.value = $(li).attr('data-value');\r\n this.handleChanged();\r\n });\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { buildDom, InputTrapper, draggable, createTopDomContainer } from '../../common/htmlHelpers';\r\n// import { SmoTranslator } from '../i18n/language';\r\nimport { SmoModifier } from '../../smo/data/score';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { CompleteNotifier } from '../common';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SuiDialogNotifier, DialogDefinitionElement, \r\n SuiComponentBase, DialogDefinitionOption, SuiBaseComponentParams } from './components/baseComponent';\r\nimport { SuiScroller } from '../../render/sui/scroller';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { EventHandler } from '../eventSource';\r\nimport { SmoUiConfiguration } from '../configuration';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n/**\r\n * The JSON dialog template is a declaritive structore for the html of the dialog\r\n * and components. \r\n * @param label for the dialog itself\r\n * @param elements a series of elements that define the component\r\n * @param staticText a hash of text for the dialog and components to use\r\n * @category SuiDialog\r\n */\r\nexport interface DialogDefinition {\r\n label: string,\r\n elements: DialogDefinitionElement[],\r\n staticText: Record[]\r\n}\r\n/**\r\n * A translation of the labels in DialogDefintionElement\r\n * @param label the component label\r\n * @param id used as a key in translation tool\r\n * @param options options for dropdown and other array components\r\n * @category SuiDialog\r\n */\r\nexport interface DialogTranslationElement {\r\n label: string,\r\n id: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\n/**\r\n * A translation of all the strings in the dialog itself, used \r\n * when switching languages.\r\n * @param ctor the constructor for the dialog class, used to call static methods\r\n * @param label the translated label\r\n * @param dialogElements the translated component json\r\n * @param staticText translated misc text \r\n * @category SuiDialog\r\n */\r\nexport interface DialogTranslation {\r\n ctor: string,\r\n label: string,\r\n dialogElements: DialogTranslationElement[],\r\n staticText: Record\r\n}\r\n\r\n/**\r\n * Dialog params always contain basic information about the runtime\r\n * for modal functionality\r\n * @param ctor dialog constructor\r\n * @param id DOM id for the dialog\r\n * @param tracker to get and set selections\r\n * @param completeNotifier used to take over key/mouse control\r\n * @param startPromise used if this is called from another modal element\r\n * @param view the MVVM object to change the score\r\n * @param eventSource event source to register for additional events like mouseup\r\n * @param undoBuffer used to create undo\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDialogParams {\r\n ctor: string,\r\n id: string,\r\n tracker: SuiTracker,\r\n completeNotifier: CompleteNotifier,\r\n startPromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n // definition: DialogDefinition,\r\n modifier?: any,\r\n config?: SmoUiConfiguration\r\n}\r\n\r\n/**\r\n * internal interface used to create the DOM\r\n * @internal\r\n */\r\nexport interface SuiDomParams {\r\n id: string,\r\n top: number,\r\n left: number,\r\n label: string\r\n}\r\n/**\r\n * DOM interface for the dialog\r\n * @param element parent element\r\n * @param trapper used to trap focus events for the dialog\r\n */\r\nexport interface DialogDom {\r\n element: any,\r\n trapper: any\r\n}\r\n\r\n/**\r\n * Note: Most dialogs will inherit from SuiDialogAdapter, not SuiDialogBase.\r\n * You will only want to inherit from SuiDialogBase under 2 conditions:\r\n * 1. the dialog is triviailly simple, like an alert box that makes no changes to the score, or\r\n * 2. the dialog is extremely complicated in how it interacts with the user, such that a form-based approach won't work\r\n * @category SuiDialog\r\n */\r\n export abstract class SuiDialogBase extends SuiDialogNotifier {\r\n static get displayOptions(): Record {\r\n return {\r\n BINDCOMPONENTS: 'bindComponents', DRAGGABLE: 'makeDraggable',\r\n KEYBOARD_CAPTURE: 'captureKeyboardPromise', GLOBALPOS: 'positionGlobally',\r\n SELECTIONPOS: 'positionFromSelection', MODIFIERPOS: 'positionFromModifier',\r\n HIDEREMOVE: 'hideRemoveButton'\r\n };\r\n }\r\n // ### printXlate\r\n // print json with string labels to use as a translation file seed.\r\n static printTranslate(_class: string): DialogTranslation {\r\n const output: DialogTranslationElement[] = [];\r\n const xx: any = eval('globalThis.Smo.' + _class);\r\n xx.dialogElements.elements.forEach((element: DialogDefinitionElement) => {\r\n const component: Partial = {};\r\n if (element.label) {\r\n component.label = element.label ?? '';\r\n component.id = element.smoName;\r\n if (element.options) {\r\n component.options = [];\r\n\r\n element.options.forEach((option) => {\r\n component.options!.push({ value: option.value, label: option.label });\r\n });\r\n }\r\n output.push(component as DialogTranslationElement);\r\n }\r\n });\r\n // convert static text from an array of name/value pairs to a record for translation\r\n const staticText: Record = {};\r\n const dialogStaticText: Record[] = xx.dialogElements.staticText;\r\n if (dialogStaticText) {\r\n dialogStaticText.forEach((st) => {\r\n const key = Object.keys(st)[0];\r\n staticText[key] = st[key];\r\n });\r\n }\r\n return { ctor: xx.ctor, label: xx.dialogElements.label, dialogElements: output, staticText };\r\n }\r\n static getStaticText(staticText: Record[]) {\r\n const rv: Record = {};\r\n staticText.forEach((st) => {\r\n const key = Object.keys(st)[0];\r\n rv[key] = st[key];\r\n });\r\n return rv;\r\n }\r\n id: string;\r\n ctor: string;\r\n boundKeyboard: boolean;\r\n components: SuiComponentBase[] = [];\r\n boundComponents: SuiComponentBase[] = [];\r\n cmap: Record = {};\r\n scroller: SuiScroller;\r\n closeDialogPromise: Promise;\r\n label: string;\r\n staticText: Record[] = [];\r\n startPromise: Promise | null;\r\n dialogElements: DialogDefinition;\r\n eventSource: BrowserEventSource;\r\n view: SuiScoreViewOperations;\r\n completeNotifier: CompleteNotifier;\r\n modifier: any;\r\n dgDom: DialogDom;\r\n displayOptions: string[] = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'GLOBALPOS', 'HIDEREMOVE'];\r\n keydownHandler: EventHandler | null = null;\r\n // ### SuiDialogBase ctor\r\n // Creates the DOM element for the dialog and gets some initial elements\r\n constructor(dialogElements: DialogDefinition, parameters: SuiDialogParams) {\r\n super();\r\n this.id = parameters.id;\r\n this.boundKeyboard = false;\r\n this.scroller = parameters.view.tracker.scroller;\r\n this.label = dialogElements.label;\r\n this.eventSource = parameters.eventSource;\r\n this.view = parameters.view;\r\n this.completeNotifier = parameters.completeNotifier;\r\n this.modifier = parameters.modifier;\r\n this.ctor = parameters.ctor;\r\n\r\n this.closeDialogPromise = new Promise((resolve) => {\r\n $('body').off('dialogDismiss').on('dialogDismiss', () => {\r\n resolve();\r\n });\r\n });\r\n this.staticText = dialogElements.staticText;\r\n\r\n // If this dialog was spawned by a menu, wait for the menu to dismiss\r\n // before continuing.\r\n // this.startPromise = parameters.closeMenuPromise;\r\n this.startPromise = parameters.startPromise;\r\n\r\n this.dialogElements = dialogElements;\r\n\r\n const left = $('.musicRelief').offset().left + $('.musicRelief').width() / 2;\r\n const top = $('.musicRelief').offset().top + $('.musicRelief').height() / 2;\r\n\r\n this.dgDom = this._constructDialog(dialogElements, {\r\n id: 'dialog-' + this.id,\r\n top,\r\n left,\r\n label: this.label\r\n });\r\n\r\n // SmoTranslator.registerDialog(this.ctor);\r\n }\r\n // ### display\r\n // make3 the modal visible. bind events and elements.\r\n display() {\r\n $('body').addClass('showAttributeDialog');\r\n this.bindComponents();\r\n this.bindElements();\r\n this.applyDisplayOptions();\r\n this.initialValue();\r\n }\r\n\r\n // ### bindElements\r\n // bing the generic controls in most dialogs.\r\n bindElements() {\r\n var dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.commit();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n if (this.modifier) {\r\n this.modifier.cancel();\r\n }\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.complete();\r\n });\r\n }\r\n bindComponents() {\r\n this.components.forEach((component) => {\r\n component.bind();\r\n });\r\n }\r\n initialValue(){\r\n if (this.modifier === null) {\r\n return;\r\n }\r\n this.boundComponents.forEach((comp) => {\r\n (comp as any).setValue((this.modifier as any)[comp.smoName]);\r\n });\r\n }\r\n changed() {\r\n if (this.modifier === null) {\r\n return;\r\n }\r\n this.boundComponents.forEach((comp) => {\r\n if (comp.changeFlag) {\r\n (this.modifier as any)[comp.smoName] = (comp as any).getValue();\r\n }\r\n });\r\n }\r\n getId(): string {\r\n return this.id;\r\n }\r\n getModifier() : SmoModifier | null {\r\n return this.modifier ?? null;\r\n }\r\n getEventSource() {\r\n return this.eventSource;\r\n }\r\n getStaticText() {\r\n return SuiDialogBase.getStaticText(this.staticText);\r\n }\r\n async commit(): Promise {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get closeModalPromise(): Promise {\r\n return this.closeDialogPromise;\r\n }\r\n // ### position\r\n // For dialogs based on selections, tries to place the dialog near the selection and also\r\n // to scroll so the dialog is in view\r\n static position(box: SvgBox, dgDom: DialogDom, scroller: SuiScroller) {\r\n let y = (box.y + box.height) - scroller.netScroll.y;\r\n let x = 0;\r\n\r\n // TODO: adjust if db is clipped by the browser.\r\n const dge = $(dgDom.element).find('.attributeModal');\r\n const dgeHeight: number = $(dge).height();\r\n const maxY: number = $('.musicRelief').height();\r\n const maxX: number = $('.musicRelief').width();\r\n const offset: any = $('.dom-container').offset();\r\n y = y - (offset.top as number);\r\n\r\n const offsetY = dgeHeight + y > window.innerHeight ? (dgeHeight + y) - window.innerHeight : 0;\r\n y = (y < 0) ? -y : y - offsetY;\r\n\r\n y = (y > maxY || y < 0) ? maxY / 2 : y;\r\n\r\n $(dge).css('top', '' + y + 'px');\r\n\r\n x = box.x - scroller.netScroll.x;\r\n x = x - (offset.left as number);\r\n const w: number = $(dge).width();\r\n x = (x > window.innerWidth / 2) ? x - (w + 25) : x + (w + 25);\r\n\r\n x = (x < 0 || x > maxX) ? maxX / 2 : x;\r\n $(dge).css('left', '' + x + 'px');\r\n }\r\n getView() {\r\n return this.view;\r\n }\r\n applyDisplayOptions() {\r\n $('body').addClass('showAttributeDialog');\r\n this.displayOptions.forEach((option) => {\r\n (this as any)[SuiDialogBase.displayOptions[option]]();\r\n });\r\n }\r\n // ### position\r\n // Position the dialog near a selection. If the dialog is not visible due\r\n // to scrolling, make sure it is visible.\r\n position(box: SvgBox) {\r\n SuiDialogBase.position(box, this.dgDom, this.view.tracker.scroller);\r\n }\r\n hideRemoveButton() {\r\n $(this.dgDom.element).find('.remove-button').remove();\r\n }\r\n // ### positionModifier()\r\n positionFromModifier() {\r\n if (!this.modifier || this.modifier.logicalBox === null) {\r\n this.positionGlobally();\r\n return;\r\n }\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.modifier);\r\n const screenBox = this.view.renderer.pageMap.svgToClient(this.modifier.logicalBox);\r\n this.position(screenBox);\r\n }\r\n // ### positionGlobally\r\n // position the dialog box in the center of the current scroll region\r\n positionGlobally() {\r\n const box = SvgHelpers.boxPoints(250, 250, 1, 1);\r\n SuiDialogBase.position(box, this.dgDom, this.view.tracker.scroller);\r\n }\r\n // ### postionFromSelection\r\n // set initial position of dialog based on first selection\r\n positionFromSelection() {\r\n const note: SmoNote | null = this.view.tracker.selections[0].note;\r\n if (note && note.logicalBox) {\r\n const screenBox = this.view.renderer.pageMap.svgToClient(note.logicalBox);\r\n this.position(screenBox);\r\n }\r\n }\r\n // ### build the html for the dialog, based on the instance-specific components.\r\n _constructDialog(dialogElements: DialogDefinition, parameters: SuiDomParams) {\r\n createTopDomContainer('.attributeDialog');\r\n const id = parameters.id;\r\n const b = buildDom;\r\n const r = b('div').classes('attributeModal').attr('id', 'attr-modal-' + id)\r\n .css('top', parameters.top + 'px').css('left', parameters.left + 'px')\r\n .append(b('spanb').classes('draggable button').append(b('span').classes('icon icon-move jsDbMove')))\r\n .append(b('h2').classes('dialog-label').text(this.label));\r\n\r\n var ctrl = b('div').classes('smoControlContainer');\r\n dialogElements.elements.filter((de) => de.control).forEach((de) => {\r\n let ctor = null;\r\n if (typeof (de.control) === 'function') {\r\n ctor = de.control;\r\n } else {\r\n ctor = eval('globalThis.Smo.' + de.control);\r\n }\r\n const classes = de.classes ? de.classes : '';\r\n const compParams: SuiBaseComponentParams = {\r\n classes, id: id + de.smoName, ...de\r\n }\r\n const control: SuiComponentBase = new ctor(this, compParams);\r\n this.components.push(control);\r\n this.cmap[de.smoName + 'Ctrl'] = control;\r\n ctrl.append(control.html);\r\n });\r\n r.append(ctrl);\r\n r.append(\r\n b('div').classes('buttonContainer').append(\r\n b('button').classes('ok-button button-left').text('OK')).append(\r\n b('button').classes('cancel-button button-center').text('Cancel')).append(\r\n b('button').classes('remove-button button-right').text('Remove').append(\r\n b('span').classes('icon icon-cancel-circle'))));\r\n $('.attributeDialog').html('');\r\n\r\n $('.attributeDialog').append(r.dom());\r\n\r\n const trapper = new InputTrapper('.attributeDialog');\r\n trapper.trap();\r\n $('.attributeDialog').find('.cancel-button').focus();\r\n return {\r\n element: $('.attributeDialog'),\r\n trapper\r\n };\r\n }\r\n // ### Complete\r\n // Dialogs take over the keyboard, so release that and trigger an event\r\n // that the dialog is closing that can resolve any outstanding promises.\r\n complete() {\r\n if (this.boundKeyboard && this.keydownHandler) {\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').trigger('dialogDismiss');\r\n this.dgDom.trapper.close();\r\n }\r\n // ### makeDraggable\r\n // generic code to make the dialog box draggable so it doesn't\r\n // get in front of stuff.\r\n makeDraggable() {\r\n createTopDomContainer('.draganime');\r\n const cb = () => { };\r\n draggable({\r\n parent: $(this.dgDom.element).find('.attributeModal'),\r\n handle: $(this.dgDom.element).find('.jsDbMove'),\r\n animateDiv: '.draganime',\r\n cb,\r\n moveParent: true\r\n });\r\n }\r\n // ### captureKeyboardPromise\r\n // capture keyboard events until the dialog closes,\r\n // then give control back to the current keyboard\r\n async captureKeyboardPromise() {\r\n if (!(this.startPromise)) {\r\n this.completeNotifier.unbindKeyboardForModal(this);\r\n this.bindKeyboard();\r\n return;\r\n }\r\n if (this.startPromise) {\r\n await this.startPromise;\r\n this.completeNotifier.unbindKeyboardForModal(this);\r\n this.bindKeyboard();\r\n }\r\n }\r\n\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n }\r\n }\r\n\r\n // ### bindKeyboard\r\n // generic logic to grab keyboard elements for modal\r\n bindKeyboard() {\r\n this.boundKeyboard = true;\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n }\r\n}\r\nexport function dialogConstructor(type: { new(parameters: SuiDialogParams): T; }, parameters: SuiDialogParams ): T {\r\n return new type(parameters);\r\n}\r\nexport function createAndDisplayDialog(ctor: new (parameters: SuiDialogParams) => T, parameters: SuiDialogParams): T {\r\n const instance: T = dialogConstructor(ctor, parameters);\r\n instance.display();\r\n return instance;\r\n}\r\n","import { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoDynamicText, SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport class SuiDynamicDialogAdapter extends SuiComponentAdapter {\r\n modifier: SmoDynamicText;\r\n backup: SmoDynamicText;\r\n selection: SmoSelection;\r\n constructor(view: SuiScoreViewOperations, modifier: SmoDynamicText) {\r\n super(view);\r\n this.modifier = modifier;\r\n this.backup = new SmoDynamicText(this.modifier);\r\n this.selection = this.view.tracker.modifierSelections[0].selection!;\r\n }\r\n async cancel() {\r\n await this.view.addDynamic(this.selection, this.backup);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get xOffset() {\r\n return this.modifier.xOffset;\r\n }\r\n async remove() {\r\n await this.view.removeDynamic(this.modifier);\r\n }\r\n set xOffset(value: number) {\r\n this.modifier.xOffset = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get fontSize() {\r\n return this.modifier.fontSize;\r\n }\r\n set fontSize(value: number) {\r\n this.modifier.fontSize = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get yOffsetLine() {\r\n return this.modifier.yOffsetLine;\r\n }\r\n set yOffsetLine(value: number) {\r\n this.modifier.yOffsetLine = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get yOffsetPixels() {\r\n return this.modifier.yOffsetPixels;\r\n }\r\n set yOffsetPixels(value: number) {\r\n this.modifier.yOffsetPixels = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get text() {\r\n return this.modifier.text;\r\n }\r\n set text(value: string) {\r\n this.modifier.text = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n}\r\n// ## SuiDynamicModifierDialog\r\n// This is a poorly named class, it just allows you to placeText\r\n// dynamic text so it doesn't collide with something.\r\nexport class SuiDynamicModifierDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = {\r\n label: 'Dynamics Properties', elements:\r\n [{\r\n smoName: 'yOffsetLine',\r\n defaultValue: 11,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Line'\r\n }, {\r\n smoName: 'yOffsetPixels',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset Px'\r\n }, {\r\n smoName: 'xOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset'\r\n }, {\r\n smoName: 'text',\r\n defaultValue: SmoDynamicText.dynamics.P,\r\n options: [{\r\n value: SmoDynamicText.dynamics.P,\r\n label: 'Piano'\r\n }, {\r\n value: SmoDynamicText.dynamics.PP,\r\n label: 'Pianissimo'\r\n }, {\r\n value: SmoDynamicText.dynamics.MP,\r\n label: 'Mezzo-Piano'\r\n }, {\r\n value: SmoDynamicText.dynamics.MF,\r\n label: 'Mezzo-Forte'\r\n }, {\r\n value: SmoDynamicText.dynamics.F,\r\n label: 'Forte'\r\n }, {\r\n value: SmoDynamicText.dynamics.FF,\r\n label: 'Fortissimo'\r\n }, {\r\n value: SmoDynamicText.dynamics.SFZ,\r\n label: 'Sforzando'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'Text'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiDynamicDialogAdapter(parameters.view, parameters.modifier);\r\n super(SuiDynamicModifierDialog.dialogElements, { adapter, ...parameters });\r\n this.view.groupUndo(true);\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","\r\nimport { SmoModifier } from '../../smo/data/score';\r\nimport { SuiDialogBase, SuiDialogParams, createAndDisplayDialog } from './dialog';\r\nimport { SuiHairpinAttributesDialog } from './hairpin';\r\nimport { SuiSlurAttributesDialog } from './slur';\r\nimport { SuiVoltaAttributeDialog } from './volta';\r\nimport { SuiLyricDialog } from './lyric';\r\nimport { SuiTieAttributesDialog } from './tie';\r\nimport { SuiDynamicModifierDialog } from './dynamics';\r\nimport { SuiTextBlockDialog } from './textBlock';\r\nimport { SuiTextBracketDialog } from './textBracket';\r\n\r\nexport type ModifiersWithDialogs = 'SmoStaffHairpin' | 'SmoTie' | 'SmoSlur' | 'SmoDynamicText' | 'SmoVolta' | 'SmoScoreText' | 'SmoLoadScore' | 'SmoLyric';\r\nexport var ModifiersWithDialogNames = ['SmoStaffHairpin', 'SmoTie', 'SmoSlur', 'SmoDynamicText', 'SmoVolta',\r\n 'SmoScoreText', 'SmoLoadScore', 'SmoLyric', 'SmoTextGroup', 'SmoStaffTextBracket'];\r\n\r\nexport function isModifierWithDialog(modifier: SmoModifier) {\r\n return ModifiersWithDialogNames.indexOf(modifier.attrs.type) >= 0;\r\n}\r\n/**\r\n * Dialogs bound to selectable elements like slurs, dynamics, are created \r\n * directly from a button/menu option\r\n * @category SuiDialog\r\n */\r\n export class SuiModifierDialogFactory {\r\n static createModifierDialog(modifier: SmoModifier, parameters: SuiDialogParams): SuiDialogBase | null {\r\n if (!isModifierWithDialog(modifier)) {\r\n return null;\r\n }\r\n const ctor = modifier.attrs.type;\r\n parameters.modifier = modifier;\r\n if (ctor === 'SmoStaffHairpin') {\r\n return createAndDisplayDialog(SuiHairpinAttributesDialog, parameters);\r\n } else if (ctor === 'SmoTie') {\r\n return createAndDisplayDialog(SuiTieAttributesDialog, parameters);\r\n } else if (ctor === 'SmoSlur') {\r\n return createAndDisplayDialog(SuiSlurAttributesDialog, parameters);\r\n } else if (ctor === 'SmoDynamicText') {\r\n return createAndDisplayDialog(SuiDynamicModifierDialog, parameters);\r\n } else if (ctor === 'SmoVolta') {\r\n return createAndDisplayDialog(SuiVoltaAttributeDialog, parameters);\r\n } else if (ctor === 'SmoTextGroup') {\r\n return createAndDisplayDialog(SuiTextBlockDialog, parameters);\r\n } else if (ctor === 'SmoStaffTextBracket') {\r\n return createAndDisplayDialog(SuiTextBracketDialog, parameters);\r\n } else {\r\n return createAndDisplayDialog(SuiLyricDialog, parameters);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiDialogBase, SuiDialogParams, DialogDefinition } from './dialog';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { XmlToSmo } from '../../smo/mxml/xmlToSmo';\r\nimport { SmoToXml } from '../../smo/mxml/smoToXml';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiFileDownloadComponent } from './components/fileDownload';\r\nimport { SuiDialogAdapterBase, SuiComponentAdapter } from './adapter';\r\nimport { addFileLink } from '../../common/htmlHelpers';\r\nimport { SmoToMidi } from '../../smo/midi/smoToMidi';\r\nimport { MidiToSmo } from '../../smo/midi/midiToSmo';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoToVex } from '../../render/vex/toVex';\r\ndeclare var $: any;\r\n// declare var MidiParser: any;\r\ndeclare var parseMidi: any;\r\ndeclare var JSZip: any;\r\n\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\nexport class SuiSmoLoadAdapter extends SuiComponentAdapter {\r\n jsonFile: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.jsonFile;\r\n }\r\n set loadFile(value: string) {\r\n this.jsonFile = value;\r\n }\r\n async commit() {\r\n let scoreWorks = false;\r\n if (this.jsonFile.length > 0) {\r\n try {\r\n const score = SmoScore.deserialize(this.jsonFile);\r\n scoreWorks = true;\r\n await this.view.changeScore(score);\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n/**\r\n * Load a SMO JSON file\r\n * @category SuiDialog\r\n */\r\nexport class SuiLoadFileDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n }\r\n ],\r\n staticText: []\r\n };\r\n get loadFileCtrl() {\r\n return this.cmap['loadFileCtrl'] as SuiFileDownloadComponent;\r\n }\r\n modifier: SuiSmoLoadAdapter;\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiSmoLoadAdapter(parameters.view);\r\n parameters.ctor = 'SuiLoadFileDialog';\r\n super(SuiLoadFileDialog.dialogElements, { adapter, ...parameters });\r\n this.modifier = adapter;\r\n }\r\n changed() {\r\n super.changed();\r\n const enable = this.modifier.loadFile.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n async commit() {\r\n await this.modifier.commit();\r\n }\r\n}\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\n export class SuiXmlLoadAdapter extends SuiComponentAdapter {\r\n xmlFile: string = '';\r\n changeScore: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.xmlFile;\r\n }\r\n set loadFile(value: string) {\r\n this.xmlFile = value;\r\n }\r\n async commit() {\r\n try {\r\n const self = this;\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(this.xmlFile, 'text/xml');\r\n const score = XmlToSmo.convert(xml);\r\n score.layoutManager!.zoomToWidth($('body').width());\r\n this.changeScore = true;\r\n await this.view.changeScore(score);\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n\r\n/**\r\n * Load a music XML file\r\n * @category SuiDialog\r\n */\r\nexport class SuiLoadMxmlDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n },\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiLoadMxmlDialog';\r\n const adapter = new SuiXmlLoadAdapter(parameters.view);\r\n super(SuiLoadMxmlDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n changed() {\r\n super.changed();\r\n const enable = this.adapter.loadFile.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n}\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\n export class SuiMidiLoadAdapter extends SuiComponentAdapter {\r\n midiFile: any = null;\r\n changeScore: boolean = false;\r\n quantize: number = MidiToSmo.quantizeTicksDefault;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.midiFile;\r\n }\r\n set loadFile(value: any) {\r\n this.midiFile = value;\r\n }\r\n get quantizeDuration() {\r\n return this.quantize;\r\n }\r\n set quantizeDuration(value: number) {\r\n this.quantize = value;\r\n }\r\n async commit() {\r\n try {\r\n // midi parser expects data in UintArray form\r\n const ar = new Uint8Array(this.midiFile);\r\n const midi: any = parseMidi(ar);\r\n const midiParser = new MidiToSmo(midi, this.quantize);\r\n await this.view.changeScore(midiParser.convert());\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiLoadMidiDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n }, {\r\n smoName: 'quantizeDuration',\r\n defaultValue: SmoScore.engravingFonts.Bravura,\r\n control: 'SuiDropdownComponent',\r\n dataType: 'int',\r\n label: 'Quantize to:',\r\n options: [{\r\n value: 1024,\r\n label: '1/16th note'\r\n }, {\r\n value: 512,\r\n label: '1/32nd note'\r\n }, {\r\n value: 2048,\r\n label: '1/8th note'\r\n }]\r\n }, \r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiLoadMidiDialog';\r\n const adapter = new SuiMidiLoadAdapter(parameters.view);\r\n super(SuiLoadMidiDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n changed() {\r\n super.changed();\r\n const enable = this.adapter?.loadFile?.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n}\r\n\r\nexport class SuiPrintFileDialog extends SuiDialogBase {\r\n static dialogElements: DialogDefinition = {\r\n label: 'Print Complete',\r\n elements: [],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiPrintFileDialog';\r\n super(SuiPrintFileDialog.dialogElements, parameters);\r\n }\r\n\r\n changed() { }\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n $('body').removeClass('printing');\r\n this.view.renderer.restoreLayoutAfterPrint();\r\n window.dispatchEvent(new Event('resize'));\r\n this.complete();\r\n });\r\n\r\n $(dgDom.element).find('.cancel-button').remove();\r\n $(dgDom.element).find('.remove-button').remove();\r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiVexSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n page: number = 0;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fileName = this.view.score.scoreInfo.name;\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n\r\n get pageToRender() {\r\n return this.page;\r\n }\r\n set pageToRender(val: number) {\r\n this.page = val;\r\n }\r\n\r\n async _saveScore() {\r\n const vexText = SmoToVex.convert(this.view.score, { div: 'smoo', page: this.page });\r\n if (!this.fileName.endsWith('.js')) {\r\n this.fileName = this.fileName + '.js';\r\n }\r\n /* TODO: zip multiple render files\r\n const zipname = this.fileName.replace('.js', 'zip');\r\n const zipFile = new JSZip();\r\n zipFile.file(this.fileName, vexText);\r\n const content = await zipFile.generateAsync({ type: 'blob' });\r\n addFileLink(zipname, content, $('.saveLink')); */\r\n addFileLink(this.fileName, vexText, $('.saveLink'));\r\n $('.saveLink a')[0].click();\r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n const rawFile = filename.split('.')[0];\r\n if (!filename) {\r\n filename = 'vexRender.js';\r\n }\r\n if (filename.indexOf('.js') < 0) {\r\n filename = filename + '.js';\r\n }\r\n await this._saveScore();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveVexDialog extends SuiDialogAdapterBase{\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save as Vex Code',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }, {\r\n smoName: 'pageToRender',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Page',\r\n dataType: 'int',\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) { \r\n parameters.ctor = 'SuiVexSaveDialog';\r\n const adapter = new SuiVexSaveAdapter(parameters.view);\r\n super(SuiSaveVexDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\nexport class SuiSmoSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fileName = this.view.score.scoreInfo.name;\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveScore() {\r\n const json = this.view.storeScore.serialize();\r\n const jsonText = JSON.stringify(json);\r\n if (!this.fileName.endsWith('.json')) {\r\n this.fileName = this.fileName + '.json';\r\n }\r\n addFileLink(this.fileName, jsonText, $('.saveLink'));\r\n $('.saveLink a')[0].click(); \r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n const rawFile = filename.split('.')[0];\r\n if (!filename) {\r\n filename = 'myScore.json';\r\n }\r\n if (filename.indexOf('.json') < 0) {\r\n filename = filename + '.json';\r\n }\r\n const scoreInfo = this.view.score.scoreInfo;\r\n scoreInfo.name = rawFile;\r\n scoreInfo.version = scoreInfo.version + 1;\r\n await this.view.updateScoreInfo(scoreInfo);\r\n this._saveScore();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveFileDialog extends SuiDialogAdapterBase{\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) { \r\n parameters.ctor = 'SuiSaveFileDialog';\r\n const adapter = new SuiSmoSaveAdapter(parameters.view);\r\n super(SuiSaveFileDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\nexport class SuiSaveJsonValidationAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveScore() {\r\n const json = this.view.storeScore.serialize({ useDictionary: false, skipStaves: false });\r\n const jsonText = JSON.stringify(json);\r\n if (!this.fileName.endsWith('.json')) {\r\n this.fileName = this.fileName + '.json';\r\n }\r\n addFileLink(this.fileName, jsonText, $('.saveLink'));\r\n $('.saveLink a')[0].click(); \r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n const rawFile = filename.split('.')[0];\r\n if (!filename) {\r\n filename = 'myScore.json';\r\n }\r\n if (filename.indexOf('.json') < 0) {\r\n filename = filename + '.json';\r\n }\r\n const scoreInfo = this.view.score.scoreInfo;\r\n scoreInfo.name = rawFile;\r\n scoreInfo.version = scoreInfo.version + 1;\r\n await this.view.updateScoreInfo(scoreInfo);\r\n this._saveScore();\r\n }\r\n // noop\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n\r\nexport class SuiXmlSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveXml() {\r\n const dom = SmoToXml.convert(this.view.storeScore);\r\n const ser = new XMLSerializer();\r\n const xmlText = ser.serializeToString(dom);\r\n if (!this.fileName.endsWith('.xml') && !this.fileName.endsWith('.mxml')) {\r\n this.fileName = this.fileName + '.xml';\r\n }\r\n addFileLink(this.fileName, xmlText, $('.saveLink'));\r\n $('.saveLink a')[0].click();\r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n if (!filename) {\r\n filename = 'myScore.xml';\r\n }\r\n if (filename.indexOf('.xml') < 0) {\r\n filename = filename + '.xml';\r\n }\r\n this.view.score.scoreInfo.version += 1;\r\n this._saveXml();\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n // noop\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveXmlDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiSaveXmlDialog';\r\n const adapter = new SuiXmlSaveAdapter(parameters.view);\r\n super(SuiSaveXmlDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\nexport class SuiSaveJsonValidationDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Export SMO XML',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiSaveJsonValidationDialog';\r\n const adapter = new SuiSaveJsonValidationAdapter(parameters.view);\r\n super(SuiSaveJsonValidationDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\n\r\nexport class SuiMidiSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveScore() {\r\n const bytes = SmoToMidi.convert(this.view.storeScore);\r\n if (!this.fileName.endsWith('.mid')) {\r\n this.fileName = this.fileName + '.mid';\r\n }\r\n addFileLink(this.fileName, bytes, $('.saveLink'), 'audio/midi');\r\n $('.saveLink a')[0].click();\r\n }\r\n\r\n async commit() {\r\n let filename = this.fileName;\r\n if (!filename) {\r\n filename = 'myScore.mid';\r\n }\r\n if (filename.indexOf('.mid') < 0) {\r\n filename = filename + '.mid';\r\n }\r\n this.view.score.scoreInfo.version += 1;\r\n this._saveScore();\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveMidiDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score as Midi',\r\n elements:\r\n [{\r\n smoName: 'saveFileName',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiSaveMidiDialog';\r\n const adapter = new SuiMidiSaveAdapter(parameters.view);\r\n super(SuiSaveMidiDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { FontInfo } from '../../common/vex';\r\nimport { SmoScore, isEngravingFont } from '../../smo/data/score';\r\nimport { FontPurpose } from '../../smo/data/scoreModifiers';\r\nimport { SmoScoreText } from '../../smo/data/scoreText';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\nexport class SuiScoreFontAdapter extends SuiComponentAdapter {\r\n fonts: FontPurpose[];\r\n backups: FontPurpose[];\r\n changed: boolean = false;\r\n static get defaultFont(): FontInfo {\r\n return {\r\n family: 'Merriweather',\r\n size: 14,\r\n weight: 'normal',\r\n style: 'normal'\r\n };\r\n }\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fonts = this.view.score.fonts;\r\n this.backups = JSON.parse(JSON.stringify(this.fonts));\r\n this.view = view;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n this.fonts = this.backups;\r\n // This takes advantage of setter/getter side-effect\r\n this.engravingFont = this.engravingFont;\r\n this.lyricFont = this.lyricFont;\r\n this.chordFont = this.chordFont;\r\n }\r\n return PromiseHelpers.emptyPromise()\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n changeFont(purpose: number, name: string, fontInfo: FontInfo): FontPurpose {\r\n const fontSize = SmoScoreText.fontPointSize(fontInfo.size);\r\n const fontFamily = fontInfo.family ?? 'Arial';\r\n const fp: FontPurpose = {\r\n name,\r\n purpose,\r\n family: fontFamily,\r\n size: fontSize,\r\n custom: false\r\n };\r\n const fonts: FontPurpose[] = this.fonts.filter((ff) => ff.purpose !== purpose);\r\n fonts.push(fp);\r\n this.fonts = fonts;\r\n this.changed = true;\r\n return fp;\r\n }\r\n\r\n toInfo(fontPurpose: FontPurpose): FontInfo {\r\n return {\r\n weight: 'normal',\r\n style: 'normal',\r\n ...fontPurpose\r\n };\r\n }\r\n getInfo(purpose: number): FontInfo {\r\n const font = this.fonts.find((ff) => ff.purpose === purpose);\r\n if (font) {\r\n return this.toInfo(font);\r\n }\r\n return SuiScoreFontAdapter.defaultFont;\r\n }\r\n // Only family can be editor for engraving font, so parameter is just a string\r\n get engravingFont(): string {\r\n const font = this.fonts.find((ff) => ff.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (font) {\r\n return this.toInfo(font).family ?? 'Arial';\r\n }\r\n return 'Bravura';\r\n }\r\n set engravingFont(value: string) {\r\n this.changed = true;\r\n const current = this.getInfo(SmoScore.fontPurposes.ENGRAVING);\r\n current.family = value;\r\n const fp = this.changeFont(SmoScore.fontPurposes.ENGRAVING, 'engraving', current);\r\n if (isEngravingFont(fp.family)) {\r\n this.view.setEngravingFontFamily(fp.family);\r\n }\r\n }\r\n set chordFont(fontInfo: FontInfo) {\r\n const fp = this.changeFont(SmoScore.fontPurposes.CHORDS, 'chords', fontInfo);\r\n this.view.setChordFont(this.toInfo(fp));\r\n\r\n this.changed = true;\r\n }\r\n get chordFont(): FontInfo {\r\n return this.getInfo(SmoScore.fontPurposes.CHORDS);\r\n }\r\n set lyricFont(fontInfo: FontInfo) {\r\n this.changed = true;\r\n const fp = this.changeFont(SmoScore.fontPurposes.LYRICS, 'lyrics', fontInfo);\r\n this.view.setLyricFont(this.toInfo(fp));\r\n }\r\n get lyricFont(): FontInfo {\r\n return this.getInfo(SmoScore.fontPurposes.LYRICS);\r\n }\r\n}\r\nexport class SuiScoreFontDialog extends SuiDialogAdapterBase {\r\n // ### dialogElements\r\n // all dialogs have elements define the controls of the dialog.\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Fonts', elements:\r\n [{\r\n smoName: 'engravingFont',\r\n defaultValue: SmoScore.engravingFonts.Bravura,\r\n control: 'SuiDropdownComponent',\r\n label: 'Engraving Font',\r\n options: [{\r\n value: 'Bravura',\r\n label: 'Bravura'\r\n }, {\r\n value: 'Gonville',\r\n label: 'Gonville'\r\n }, {\r\n value: 'Petaluma',\r\n label: 'Petaluma'\r\n }, {\r\n value: 'Leland',\r\n label: 'Leland'\r\n }]\r\n }, {\r\n smoName: 'chordFont',\r\n classes: 'chord-font-component',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Chord Font'\r\n }, {\r\n smoName: 'lyricFont',\r\n classes: 'lyric-font-component',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Lyric Font'\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiScoreFontDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScoreFontAdapter(params.view);\r\n super(SuiScoreFontDialog.dialogElements, { adapter, ...params });\r\n this.modifier = params.modifier;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager, SmoGlobalLayout } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiGlobalLayoutAdapter extends SuiComponentAdapter {\r\n scoreLayout: SmoGlobalLayout;\r\n backup: SmoGlobalLayout;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.scoreLayout = this.view.score.layoutManager!.globalLayout;\r\n this.backup = this.view.score.layoutManager!.getGlobalLayout();\r\n this.view = view;\r\n }\r\n // TODO: writeValue is not called in a global context\r\n async writeValue(attr: GlobalLayoutAttributes, value: number) {\r\n if (this.scoreLayout[attr] === value) {\r\n return;\r\n }\r\n this.scoreLayout[attr] = value;\r\n await this.view.setGlobalLayout(this.scoreLayout)\r\n this.changed = true;\r\n }\r\n get noteSpacing() {\r\n return this.scoreLayout.noteSpacing;\r\n }\r\n set noteSpacing(value: number) {\r\n this.writeValue('noteSpacing', value);\r\n }\r\n get pageWidth() {\r\n return this.scoreLayout.pageWidth;\r\n }\r\n set pageWidth(value: number) {\r\n this.writeValue('pageWidth', value);\r\n }\r\n get pageHeight() {\r\n return this.scoreLayout.pageHeight;\r\n }\r\n set pageHeight(value: number) {\r\n this.writeValue('pageHeight', value);\r\n }\r\n get svgScale() {\r\n return this.scoreLayout.svgScale;\r\n }\r\n set svgScale(value: number) {\r\n this.writeValue('svgScale', value);\r\n }\r\n get zoomScale() {\r\n return this.scoreLayout.zoomScale;\r\n }\r\n set zoomScale(value: number) {\r\n this.writeValue('zoomScale', value);\r\n }\r\n get maxMeasureSystem() {\r\n return this.scoreLayout.maxMeasureSystem;\r\n }\r\n set maxMeasureSystem(value: number) {\r\n this.writeValue('maxMeasureSystem', value);\r\n }\r\n\r\n get pageSize() {\r\n const sz = SmoScore.pageSizeFromDimensions(this.scoreLayout.pageWidth, this.scoreLayout.pageHeight);\r\n if (sz === null) {\r\n return 'custom';\r\n }\r\n return sz;\r\n }\r\n set pageSize(value: string) {\r\n if (value === 'custom') {\r\n return;\r\n }\r\n if (SmoScore.pageDimensions[value]) {\r\n const dims = SmoScore.pageDimensions[value];\r\n this.scoreLayout.pageWidth = dims.width;\r\n this.scoreLayout.pageHeight = dims.height;\r\n }\r\n this.view.setGlobalLayout(this.scoreLayout)\r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.setGlobalLayout(this.backup);\r\n }\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiGlobalLayoutDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Global Settings', elements:\r\n [{\r\n smoName: 'noteSpacing',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.noteSpacing,\r\n control: 'SuiRockerComponent',\r\n dataType: 'percent',\r\n label: 'Note Spacing'\r\n }, {\r\n smoName: 'pageSize',\r\n defaultValue: SmoScore.pageSizes[0],\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Size',\r\n options: [\r\n {\r\n value: 'letter',\r\n label: 'Letter (Portrait)'\r\n }, {\r\n value: 'letterLandscape',\r\n label: 'Letter (Landscape)'\r\n }, {\r\n value: 'tabloid',\r\n label: 'Tabloid (11x17)'\r\n }, {\r\n value: 'A4',\r\n label: 'A4'\r\n }, {\r\n value: 'custom',\r\n label: 'Custom'\r\n }]\r\n }, {\r\n smoName: 'pageWidth',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageWidth,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Width (px)'\r\n }, {\r\n smoName: 'pageHeight',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageHeight,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Height (px)'\r\n }, {\r\n smoName: 'zoomScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.zoomScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Zoom',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'svgScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.svgScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Note size',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'maxMeasureSystem',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.maxMeasureSystem,\r\n control: 'SuiRockerComponent',\r\n label: 'Max Measure/System (0=auto)',\r\n dataType: 'int'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiGlobalLayoutAdapter(params.view);\r\n super(SuiGlobalLayoutDialog.dialogElements, { adapter, ...params });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoStaffHairpin, } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SmoHairpinNumberParams = 'xOffsetLeft' | 'xOffsetRight' | 'yOffset' | 'height' | 'position';\r\nexport class SuiHairpinAdapter extends SuiComponentAdapter {\r\n backup: SmoStaffHairpin;\r\n hairpin: SmoStaffHairpin;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, hairpin: SmoStaffHairpin) {\r\n super(view);\r\n this.hairpin = hairpin;\r\n this.view = view;\r\n this.backup = new SmoStaffHairpin(this.hairpin);\r\n this.backup.attrs.id = hairpin.attrs.id;\r\n this.backup.associatedStaff = hairpin.associatedStaff;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addOrUpdateStaffModifier(this.hairpin, this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.hairpin);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async updateValue(param: SmoHairpinNumberParams, val: number) {\r\n const current = new SmoStaffHairpin(this.hairpin);\r\n this.hairpin[param] = val;\r\n await this.view.addOrUpdateStaffModifier(current, this.hairpin);\r\n this.changed = true;\r\n }\r\n get xOffsetLeft() {\r\n return this.hairpin.xOffsetLeft;\r\n }\r\n set xOffsetLeft(val: number) {\r\n this.updateValue('xOffsetLeft', val);\r\n }\r\n get xOffsetRight() {\r\n return this.hairpin.xOffsetRight;\r\n }\r\n set xOffsetRight(val: number) {\r\n this.updateValue('xOffsetRight', val);\r\n }\r\n get yOffset() {\r\n return this.hairpin.yOffset;\r\n }\r\n set yOffset(val: number) {\r\n this.updateValue('yOffset', val);\r\n }\r\n get height() {\r\n return this.hairpin.height;\r\n }\r\n set height(val: number) {\r\n this.updateValue('height', val);\r\n }\r\n get position() {\r\n return this.hairpin.position;\r\n }\r\n set position(val: number) {\r\n this.updateValue('position', val);\r\n }\r\n}\r\nexport class SuiHairpinAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Hairpin Properties', elements:\r\n [{\r\n smoName: 'height',\r\n defaultValue: 10,\r\n control: 'SuiRockerComponent',\r\n label: 'Height'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Shift'\r\n }, {\r\n smoName: 'xOffsetRight',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Right Shift'\r\n }, {\r\n smoName: 'xOffsetLeft',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Left Shift'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiHairpinAdapter(parameters.view, parameters.modifier);\r\n super(SuiHairpinAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef } from '../../smo/data/common';\r\nimport { SmoInstrument, SmoInstrumentNumParamType, SmoInstrumentStringParamType } from '../../smo/data/staffModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SuiSampleMedia } from '../../render/audio/samples';\r\n\r\nexport class SuiInstrumentAdapter extends SuiComponentAdapter {\r\n instrument: SmoInstrument;\r\n backup: SmoInstrument;\r\n selections: SmoSelection[];\r\n selector: SmoSelector;\r\n applies: number = SuiInstrumentDialog.applyTo.selected;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n this.instrument = new SmoInstrument(this.view.score.getStaffInstrument(selection.selector));\r\n this.selections = SmoSelection.getMeasureList(this.view.tracker.selections);\r\n this.selector = JSON.parse(JSON.stringify(this.selections[0].selector));\r\n this.backup = new SmoInstrument(this.instrument);\r\n }\r\n writeNumParam(paramName: SmoInstrumentNumParamType, value: number) {\r\n this.instrument[paramName] = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n writeStringParam(paramName: SmoInstrumentStringParamType, value: string) {\r\n this.instrument[paramName] = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n\r\n get transposeIndex() {\r\n return this.instrument.keyOffset;\r\n }\r\n set transposeIndex(value: number) {\r\n this.writeNumParam('keyOffset', value);\r\n }\r\n get instrumentName() {\r\n return this.instrument.instrumentName;\r\n }\r\n get subFamily() {\r\n return this.instrument.instrument;\r\n }\r\n set subFamily(value: string) {\r\n this.writeStringParam('instrument', value);\r\n this.instrument.family = SuiSampleMedia.getFamilyForInstrument(value);\r\n }\r\n set instrumentName(value: string) {\r\n this.writeStringParam('instrumentName', value);\r\n }\r\n get clef(): Clef {\r\n return this.instrument.clef;\r\n }\r\n set clef(value: Clef) {\r\n this.instrument.clef = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n get applyTo() {\r\n return this.applies;\r\n }\r\n set applyTo(value: number) {\r\n this.applies = value;\r\n if (value === SuiInstrumentDialog.applyTo.score) {\r\n this.selections = SmoSelection.selectionsToEnd(this.view.score, this.selector.staff, 0);\r\n } else if (this.applyTo === SuiInstrumentDialog.applyTo.remaining) {\r\n this.selections = SmoSelection.selectionsToEnd(this.view.score, this.selector.staff, this.selector.measure);\r\n } else {\r\n this.selections = this.view.tracker.selections;\r\n }\r\n }\r\n async commit() {\r\n // hack: the family name for musicxml purposes is here.\r\n this.instrument.family = SuiSampleMedia.getFamilyForInstrument(this.instrument.instrument);\r\n await this.view.changeInstrument(this.instrument, this.selections);\r\n }\r\n async cancel() {\r\n await this.view.changeInstrument(this.backup, this.selections);\r\n }\r\n async remove() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiInstrumentDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Instrument Properties',\r\n elements:\r\n [{\r\n smoName: 'transposeIndex',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose Index (1/2 steps)',\r\n }, {\r\n smoName: 'instrumentName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Name'\r\n }, {\r\n smoName: 'subFamily',\r\n control: 'SuiDropdownComponent',\r\n label: 'Sample Sound',\r\n options: [{\r\n value: 'piano',\r\n label:'Grand Piano'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass (bowed)'\r\n }, {\r\n value: 'jazzBass',\r\n label: 'Bass (plucked)'\r\n }, {\r\n value: 'eGuitar',\r\n label: 'Electric Guitar'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'trombone',\r\n label: 'Trombone'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'flute',\r\n label: 'Flute'\r\n }, {\r\n value: 'altoSax',\r\n label: 'Eb Alto Sax'\r\n }, {\r\n value: 'tenorSax',\r\n label: 'Bb Tenor Sax'\r\n }, {\r\n value: 'bariSax',\r\n label: 'Eb Bari Sax'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }, {\r\n smoName: 'clef',\r\n control: 'SuiDropdownComponent',\r\n label: 'Clef',\r\n options: [{\r\n value: 'treble',\r\n label:'Treble'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass'\r\n }, {\r\n value: 'tenor',\r\n label: 'Tenor'\r\n }, {\r\n value: 'alto',\r\n label: 'Alto'\r\n }, {\r\n label: 'Percussion',\r\n value: 'percussion'\r\n }]\r\n }, {\r\n smoName: 'applyTo',\r\n defaultValue: SuiInstrumentDialog.applyTo.score,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Apply To',\r\n options: [{\r\n value: SuiInstrumentDialog.applyTo.score,\r\n label: 'Score'\r\n }, {\r\n value: SuiInstrumentDialog.applyTo.selected,\r\n label: 'Selected Measures'\r\n }, {\r\n value: SuiInstrumentDialog.applyTo.remaining,\r\n label: 'Remaining Measures'\r\n }]\r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiInstrumentAdapter(parameters.view);\r\n super(SuiInstrumentDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { SmoLibrary } from '../fileio/library';\r\nimport { SuiDialogParams } from './dialog';\r\nimport { DialogDefinitionOption } from './components/baseComponent';\r\nimport { TreeComponentOption, SuiTreeComponent } from './components/tree';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoUiConfiguration } from '../configuration';\r\n\r\ndeclare var $: any;\r\n\r\nexport interface LibraryDefinitionElement {\r\n smoName: string,\r\n control: string,\r\n root: string,\r\n label: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\nexport interface LibraryDefinition {\r\n label: string,\r\n elements: LibraryDefinitionElement[],\r\n staticText: Record[]\r\n}\r\nexport class SuiLibraryAdapter extends SuiComponentAdapter {\r\n topLib: SmoLibrary;\r\n elements: LibraryDefinition | null = null;\r\n selectedUrl: string = '';\r\n libHash: Record = {};\r\n config: SmoUiConfiguration;\r\n selectedLib: SmoLibrary | null;\r\n tree: Record = {};\r\n // If the selected lib is a leaf node (a score), this is the same as that\r\n selectedScore: SmoLibrary | null = null;\r\n constructor(view: SuiScoreViewOperations, config: SmoUiConfiguration) {\r\n super(view);\r\n this.config = config;\r\n this.topLib = new SmoLibrary({ url: this.config.libraryUrl });\r\n this.libHash = {};\r\n this.selectedLib = null;\r\n }\r\n loadPromise() {\r\n\r\n }\r\n initialize(): Promise {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n self.topLib.load().then(() => {\r\n self.libHash[self.topLib.url!] = self.topLib;\r\n resolve();\r\n });\r\n });\r\n }\r\n static addChildRecurse(options: TreeComponentOption[], parent: SmoLibrary, child: SmoLibrary) {\r\n options.push({ label: child.metadata.name, value: child.url, parent: parent.url, format: child.format, expanded: false });\r\n child.children.forEach((gchild) => {\r\n SuiLibraryAdapter.addChildRecurse(options, child, gchild);\r\n });\r\n }\r\n static createOptions(topLib: SmoLibrary) {\r\n const options: TreeComponentOption[] = [];\r\n topLib.children.forEach((child) => {\r\n SuiLibraryAdapter.addChildRecurse(options, topLib, child);\r\n });\r\n return options;\r\n }\r\n buildTreeRecurse(children: SmoLibrary[]) {\r\n children.forEach((child) => {\r\n this.tree[child.url!] = child;\r\n this.buildTreeRecurse(child.children);\r\n });\r\n }\r\n buildTree() {\r\n this.tree = {};\r\n this.buildTreeRecurse(this.topLib.children);\r\n }\r\n async commit() { \r\n }\r\n async cancel() {\r\n }\r\n async loadOptions(options: TreeComponentOption[]): Promise {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n if (self.selectedLib!.format === 'library') {\r\n if (!self.selectedLib!.loaded) {\r\n self.selectedLib!.load().then(() => {\r\n const nops = SuiLibraryAdapter.createOptions(self.topLib);\r\n nops.forEach((option) => {\r\n options.push(option);\r\n });\r\n resolve();\r\n });\r\n } else {\r\n const nops = SuiLibraryAdapter.createOptions(self.topLib);\r\n nops.forEach((option) => {\r\n options.push(option);\r\n });\r\n resolve();\r\n }\r\n }\r\n else {\r\n self.selectedScore = this.selectedLib;\r\n resolve();\r\n }\r\n });\r\n }\r\n async _loadScore() {\r\n await this.view.loadRemoteScore(this.selectedScore!.url!);\r\n }\r\n get selectedLibrary(): SmoLibrary | null {\r\n return this.selectedLib;\r\n }\r\n get smoLibrary() {\r\n return this.selectedUrl;\r\n }\r\n set smoLibrary(value: string) {\r\n this.selectedUrl = value;\r\n this.buildTree();\r\n this.selectedLib = this.tree[this.selectedUrl];\r\n if (this.selectedLib.format !== 'library') {\r\n this.selectedScore = this.selectedLib;\r\n } else {\r\n this.selectedScore = null;\r\n }\r\n }\r\n}\r\n// ## SuiLibraryDialog\r\n// Traverse the library nodes or load a score\r\nexport class SuiLibraryDialog extends SuiDialogAdapterBase {\r\n static dialogElements: LibraryDefinition = {\r\n label: 'Music Library', elements: [{\r\n smoName: 'smoLibrary',\r\n control: 'SuiTreeComponent',\r\n root: '',\r\n label: 'Selection',\r\n options: []\r\n }],\r\n staticText: []\r\n };\r\n static _createElements(topLib: SmoLibrary) {\r\n const elements: LibraryDefinition = JSON.parse(JSON.stringify(SuiLibraryDialog.dialogElements));\r\n const tree = elements.elements[0];\r\n tree.root = topLib.url!;\r\n (tree.options as any) = SuiLibraryAdapter.createOptions(topLib);\r\n return elements;\r\n }\r\n static _createAndDisplay(parameters: SuiDialogParams, adapter: SuiLibraryAdapter) {\r\n const elements = SuiLibraryDialog._createElements(adapter.topLib);\r\n const dg = new SuiLibraryDialog(parameters, elements, adapter);\r\n dg.display();\r\n }\r\n /** Library requires a load first, so createAndDisplayDialog won't work on it */\r\n static async createAndDisplay(parameters: SuiDialogParams, config: SmoUiConfiguration) {\r\n const adapter = new SuiLibraryAdapter(parameters.view, config);\r\n await adapter.initialize();\r\n SuiLibraryDialog._createAndDisplay(parameters, adapter);\r\n }\r\n constructor(parameters: SuiDialogParams, dialogElements: LibraryDefinition, adapter: SuiLibraryAdapter) {\r\n super(dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n if (this.adapter.selectedScore !== null) {\r\n await this.adapter._loadScore();\r\n } else {\r\n this.complete();\r\n }\r\n }\r\n get smoLibraryCtrl() {\r\n return this.cmap.smoLibraryCtrl as SuiTreeComponent;\r\n }\r\n async changed() {\r\n const okButton = $(this.dgDom.element).find('.ok-button');\r\n super.changed();\r\n if (this.adapter.selectedLib!.format === 'library') {\r\n $(okButton).prop('disabled', true);\r\n const options: TreeComponentOption[] = [];\r\n await this.adapter.loadOptions(options);\r\n this.smoLibraryCtrl.updateOptions(options);\r\n $(this.smoLibraryCtrl._getInputElement()).find('li[data-value=\"'+this.smoLibraryCtrl.getValue()+'\"] button.expander').click();\r\n } else {\r\n $(okButton).prop('disabled', false);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiLyricComponent } from './components/noteText';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoSelector, SmoSelection } from '../../smo/xform/selections'\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { SmoRenderConfiguration } from '../../render/sui/configuration';\r\nimport { EventHandler } from '../eventSource';\r\n\r\ndeclare var $: any;\r\n\r\nfunction isSmoLyric(modifier: any):modifier is SmoLyric {\r\n return modifier?.ctor === 'SmoLyric';\r\n}\r\nexport class SuiLyricDialog extends SuiDialogBase {\r\n static get ctor() {\r\n return 'SuiLyricDialog';\r\n }\r\n static get idleLyricTime() {\r\n return 5000;\r\n }\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Lyric Editor', elements:\r\n [{\r\n smoName: 'verse',\r\n defaultValue: 0,\r\n control: 'SuiDropdownComponent',\r\n label: 'Verse',\r\n classes: 'hide-when-editing',\r\n startRow: true,\r\n options: [{\r\n value: 0,\r\n label: '1'\r\n }, {\r\n value: 1,\r\n label: '2'\r\n }, {\r\n value: 2,\r\n label: '3'\r\n }, {\r\n value: 3,\r\n label: '4'\r\n }\r\n ]\r\n }, {\r\n smoName: 'translateY',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Adjustment (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Font'\r\n }, {\r\n smoName: 'lyricEditor',\r\n defaultValue: 0,\r\n classes: 'show-always',\r\n control: 'SuiLyricComponent',\r\n label: 'Edit Lyrics',\r\n options: []\r\n },\r\n ], staticText: [\r\n { doneEditing: 'Done Editing Lyrics' },\r\n { undo: 'Undo Lyrics' },\r\n { label: 'Lyric Editor' }\r\n ]\r\n };\r\n originalRefreshTimer: number;\r\n modifier: SmoLyric | null = null;\r\n selector: SmoSelector | null = null;\r\n config: SmoRenderConfiguration;\r\n verse: number = 0;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiLyricDialog.dialogElements, parameters);\r\n this.config = this.view.config;\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'SELECTIONPOS'];\r\n this.originalRefreshTimer = this.config.idleRedrawTime;\r\n this.config.idleRedrawTime = SuiLyricDialog.idleLyricTime;\r\n this.verse = 0;\r\n }\r\n get lyricEditorCtrl(): SuiLyricComponent {\r\n return this.cmap.lyricEditorCtrl as SuiLyricComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n get translateYCtrl(): SuiRockerComponent {\r\n return this.cmap.translateYCtrl as SuiRockerComponent;\r\n }\r\n get verseCtrl(): SuiDropdownComponent {\r\n return this.cmap.verseCtrl as SuiDropdownComponent;\r\n }\r\n display() {\r\n super.display();\r\n $(this.dgDom.element).find('.smoControl').each((ix: number, ctrl: any) => {\r\n if (!$(ctrl).hasClass('cbLyricEdit')) {\r\n $(ctrl).addClass('fold-textedit');\r\n }\r\n });\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n\r\n if (this.lyricEditorCtrl.session && this.lyricEditorCtrl.session.lyric) {\r\n const lyric = this.lyricEditorCtrl.session.lyric;\r\n this.fontCtrl.setValue({\r\n family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size,\r\n weight: 'normal'\r\n });\r\n }\r\n }\r\n setLyric(selector: SmoSelector, lyric: SmoLyric) {\r\n this.modifier = lyric;\r\n this.verse = lyric.verse;\r\n this.selector = selector;\r\n this.translateYCtrl.setValue(lyric.translateY);\r\n }\r\n _focusSelection() {\r\n const selection = this.lyricEditorCtrl.session?.selection;\r\n const note = selection?.note;\r\n const box: SvgBox | null = note?.logicalBox ?? null;\r\n if (box) {\r\n this.view.scroller.scrollVisibleBox(this.view.renderer.pageMap.svgToClient(box));\r\n }\r\n }\r\n changed() {\r\n this.lyricEditorCtrl.verse = parseInt(this.verseCtrl.getValue().toString(), 10);\r\n\r\n // TODO: make these undoable\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.view.setLyricFont({ 'family': fontInfo.family, size: fontInfo.size, weight: 'normal' });\r\n }\r\n if (this.translateYCtrl && this.modifier && this.selector) {\r\n this.modifier.translateY = this.translateYCtrl.getValue();\r\n this.view.addOrUpdateLyric(this.selector, this.modifier);\r\n }\r\n }\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').remove();\r\n this.lyricEditorCtrl.startEditSession();\r\n }\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n async evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n if (!this.lyricEditorCtrl.running) {\r\n return;\r\n }\r\n const edited = await this.lyricEditorCtrl.evKey(evdata);\r\n if (edited) {\r\n evdata.stopPropagation();\r\n }\r\n }\r\n }\r\n _complete() {\r\n if (this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.endSession();\r\n }\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.config.idleRedrawTime = this.originalRefreshTimer;\r\n this.complete();\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.lyricEditorCtrl && this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.lyricEditorCtrl && this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoMeasureFormat, SmoMeasureFormatNumberAttributes, SmoMeasueFormatBooleanAttributes } from '../../smo/data/measureModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiMeasureFormatAdapter extends SuiComponentAdapter {\r\n format: SmoMeasureFormat;\r\n backup: SmoMeasureFormat;\r\n measure: SmoMeasure;\r\n renumberIndex: number;\r\n originalIndex: number;\r\n edited: boolean = false;\r\n constructor(view: SuiScoreViewOperations, measure: SmoMeasure) {\r\n super(view);\r\n this.format = measure.format;\r\n this.renumberIndex = this.originalIndex = measure.measureNumber.localIndex;\r\n this.backup = new SmoMeasureFormat(this.format);\r\n this.measure = measure;\r\n }\r\n writeNumber(param: SmoMeasureFormatNumberAttributes, value: number) {\r\n this.format.measureIndex = this.measure.measureNumber.measureIndex;\r\n this.format[param] = value;\r\n this.view.setMeasureFormat(this.format);\r\n this.edited = true;\r\n }\r\n writeBoolean(param: SmoMeasueFormatBooleanAttributes, value: boolean) {\r\n this.format.measureIndex = this.measure.measureNumber.measureIndex;\r\n this.format[param] = value;\r\n this.view.setMeasureFormat(this.format);\r\n this.edited = true;\r\n }\r\n async commit(){\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.edited) {\r\n await this.view.setMeasureFormat(this.backup);\r\n }\r\n if (this.localIndex !== this.originalIndex) {\r\n await this.view.renumberMeasures(this.measure.measureNumber.measureIndex, this.originalIndex);\r\n }\r\n }\r\n get padLeft() {\r\n return this.format.padLeft;\r\n }\r\n set padLeft(value: number) {\r\n if (value > 0) {\r\n $('.attributeDialog .attributeModal').addClass('pad-left-select');\r\n } else {\r\n $('.attributeDialog .attributeModal').removeClass('pad-left-select');\r\n }\r\n this.writeNumber('padLeft', value);\r\n }\r\n get skipMeasureCount() {\r\n return this.format.skipMeasureCount;\r\n }\r\n set skipMeasureCount(value: boolean) {\r\n this.writeBoolean('skipMeasureCount', value);\r\n }\r\n get localIndex(): number {\r\n return this.renumberIndex;\r\n }\r\n set localIndex(value: number) {\r\n if (this.renumberIndex !== value && value >= 0) {\r\n this.renumberIndex = value;\r\n this.view.renumberMeasures(this.measure.measureNumber.measureIndex, this.localIndex);\r\n }\r\n }\r\n get forceRest() {\r\n return this.format.forceRest;\r\n }\r\n set forceRest(value: boolean) {\r\n this.writeBoolean('forceRest', value);\r\n }\r\n get repeatSymbol() {\r\n return this.measure.repeatSymbol;\r\n }\r\n set repeatSymbol(value: boolean) {\r\n const repeatCount = value ? 1 : 0;\r\n this.view.updateRepeatCount(repeatCount);\r\n this.measure.repeatSymbol = value;\r\n this.measure.repeatCount = repeatCount;\r\n }\r\n get restBreak() {\r\n return this.format.restBreak;\r\n }\r\n set restBreak(value: boolean) {\r\n this.writeBoolean('restBreak', value);\r\n }\r\n get customStretch() {\r\n return this.format.customStretch;\r\n }\r\n set customStretch(value: number) {\r\n this.writeNumber('customStretch', value);\r\n }\r\n get customProportion() {\r\n return this.format.proportionality;\r\n }\r\n set customProportion(value: number) {\r\n this.writeNumber('proportionality', value);\r\n }\r\n get autoJustify() {\r\n return this.format.autoJustify;\r\n }\r\n set autoJustify(value: boolean) {\r\n this.writeBoolean('autoJustify', value);\r\n }\r\n get padAllInSystem() {\r\n return this.format.padAllInSystem;\r\n }\r\n set padAllInSystem(value: boolean) {\r\n this.writeBoolean('padAllInSystem', value);\r\n }\r\n get systemBreak() {\r\n return this.format.systemBreak;\r\n }\r\n set systemBreak(value: boolean) {\r\n this.writeBoolean('systemBreak', value);\r\n }\r\n}\r\n// ## measureDialogs.js\r\n// This file contains dialogs that affect all measures at a certain position,\r\n// such as tempo or time signature.\r\nexport class SuiMeasureDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Measure Properties',\r\n elements:\r\n [{\r\n smoName: 'padLeft',\r\n control: 'SuiRockerComponent',\r\n label: 'Pad Left (px)'\r\n }, {\r\n smoName: 'customStretch',\r\n control: 'SuiRockerComponent',\r\n label: 'Stretch Contents'\r\n }, {\r\n smoName: 'customProportion',\r\n control: 'SuiRockerComponent',\r\n increment: 10,\r\n label: 'Proportionalality'\r\n }, {\r\n smoName: 'localIndex',\r\n control: 'SuiRockerComponent',\r\n increment: 1,\r\n label: 'Measure Number'\r\n }, {\r\n smoName: 'padAllInSystem',\r\n control: 'SuiToggleComponent',\r\n label: 'Pad all measures in system'\r\n }, {\r\n smoName: 'autoJustify',\r\n control: 'SuiToggleComponent',\r\n label: 'Justify Columns'\r\n }, {\r\n smoName: 'restBreak',\r\n control: 'SuiToggleComponent',\r\n label: 'Break Multimeasure Rest in Part'\r\n }, {\r\n smoName: 'forceRest',\r\n control: 'SuiToggleComponent',\r\n label: 'Force Multimeasure Rest'\r\n }, {\r\n smoName: 'repeatSymbol',\r\n control: 'SuiToggleComponent',\r\n label: 'Repeat Symbol'\r\n }, {\r\n smoName: 'skipMeasureCount',\r\n control: 'SuiToggleComponent',\r\n label: 'Skip in max measure count'\r\n }, {\r\n smoName: 'systemBreak',\r\n control: 'SuiToggleComponent',\r\n label: 'System break before this measure'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const selection = parameters.view.tracker.selections[0];\r\n const measure = selection.measure;\r\n const adapter = new SuiMeasureFormatAdapter(parameters.view, measure);\r\n super(SuiMeasureDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef } from '../../smo/data/common';\r\nimport { SmoInstrument, SmoInstrumentNumParamType, SmoInstrumentStringParamType } from '../../smo/data/staffModifiers';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoSystemStaffParams, SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiNewPartAdapter extends SuiComponentAdapter {\r\n instrument: SmoInstrument;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n this.instrument = new SmoInstrument(this.view.score.getStaffInstrument(selection.selector));\r\n }\r\n writeNumParam(paramName: SmoInstrumentNumParamType, value: number) {\r\n this.instrument[paramName] = value;\r\n }\r\n writeStringParam(paramName: SmoInstrumentStringParamType, value: string) {\r\n this.instrument[paramName] = value;\r\n }\r\n get transposeIndex() {\r\n return this.instrument.keyOffset;\r\n }\r\n set transposeIndex(value: number) {\r\n this.writeNumParam('keyOffset', value);\r\n }\r\n get instrumentName() {\r\n return this.instrument.instrumentName;\r\n }\r\n get subFamily() {\r\n return this.instrument.instrument;\r\n }\r\n set subFamily(value: string) {\r\n this.writeStringParam('instrument', value);\r\n }\r\n set instrumentName(value: string) {\r\n this.writeStringParam('instrumentName', value);\r\n }\r\n get clef(): Clef {\r\n return this.instrument.clef;\r\n }\r\n set clef(value: Clef) {\r\n this.instrument.clef = value;\r\n }\r\n async commit() {\r\n const staffParams: SmoSystemStaffParams = SmoSystemStaff.defaults;\r\n staffParams.staffId = this.view.storeScore.staves.length;\r\n staffParams.measureInstrumentMap[0] = this.instrument;\r\n await this.view.addStaff(staffParams);\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiNewPartDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Instrument Properties',\r\n elements:\r\n [{\r\n smoName: 'transposeIndex',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose Index (1/2 steps)',\r\n }, {\r\n smoName: 'instrumentName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Name'\r\n }, {\r\n smoName: 'subFamily',\r\n control: 'SuiDropdownComponent',\r\n label: 'Sample Sound',\r\n options: [{\r\n value: 'piano',\r\n label:'Grand Piano'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }, {\r\n smoName: 'clef',\r\n control: 'SuiDropdownComponent',\r\n label: 'Clef',\r\n options: [ {\r\n label: 'Treble Clef Staff',\r\n value: 'treble'\r\n }, {\r\n label: 'Bass Clef Staff',\r\n value: 'bass'\r\n }, {\r\n label: 'Alto Clef Staff',\r\n value: 'alto'\r\n }, {\r\n label: 'Tenor',\r\n value: 'tenor'\r\n }, {\r\n label: 'Percussion',\r\n value: 'percussion'\r\n }] \r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiNewPartAdapter(parameters.view);\r\n super(SuiNewPartDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoPageLayout, SmoLayoutManager } from '../../smo/data/scoreModifiers';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { DialogDefinitionOption } from './components/baseComponent';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiPageLayoutAdapter extends SuiComponentAdapter {\r\n static get layoutTypes(): Record {\r\n return {\r\n 'all': -1,\r\n 'remaining': -2,\r\n 'page': -3\r\n }\r\n }\r\n layouts: SmoPageLayout[];\r\n backup: SmoPageLayout[] = [];\r\n currentPage: number;\r\n changed: boolean = false;\r\n currentLayout: SmoPageLayout;\r\n layoutManager: SmoLayoutManager;\r\n view: SuiScoreViewOperations\r\n applyTo: number = SuiPageLayoutAdapter.layoutTypes.all;\r\n options: DialogDefinitionOption[] = [];\r\n async updateLayouts() {\r\n let i = 0;\r\n let startPage = this.currentPage;\r\n let endPage = this.layouts.length;\r\n if (this.applyTo === SuiPageLayoutAdapter.layoutTypes.page) {\r\n endPage = startPage;\r\n } else if (this.applyTo === SuiPageLayoutAdapter.layoutTypes.all) {\r\n startPage = 0;\r\n }\r\n await this.view.setPageLayouts(this.currentLayout, startPage, endPage);\r\n this.changed = true;\r\n }\r\n get enablePages() {\r\n return this.layouts.length > 1;\r\n }\r\n get applyToPage() {\r\n return this.applyTo;\r\n }\r\n set applyToPage(value: number) {\r\n this.applyTo = value;\r\n this.updateLayouts();\r\n }\r\n set leftMargin(value: number) {\r\n this.currentLayout.leftMargin = value;\r\n this.updateLayouts();\r\n }\r\n get leftMargin() {\r\n return this.currentLayout.leftMargin;\r\n }\r\n get rightMargin() {\r\n return this.currentLayout.rightMargin;\r\n }\r\n set rightMargin(value: number) {\r\n this.currentLayout.rightMargin = value;\r\n this.updateLayouts();\r\n }\r\n get topMargin() {\r\n return this.currentLayout.topMargin;\r\n }\r\n set topMargin(value) {\r\n this.currentLayout.topMargin = value;\r\n this.updateLayouts();\r\n }\r\n get bottomMargin() {\r\n return this.currentLayout.bottomMargin;\r\n }\r\n set bottomMargin(value) {\r\n this.currentLayout.bottomMargin = value;\r\n this.updateLayouts();\r\n }\r\n get interGap() {\r\n return this.currentLayout.interGap;\r\n }\r\n set interGap(value) {\r\n this.currentLayout.interGap = value;\r\n this.updateLayouts();\r\n }\r\n get intraGap() {\r\n return this.currentLayout.intraGap;\r\n }\r\n set intraGap(value) {\r\n this.currentLayout.intraGap = value;\r\n this.updateLayouts();\r\n }\r\n async cancel() {\r\n let i = 0;\r\n if (!this.changed) {\r\n return;\r\n }\r\n for (i = 0; i < this.backup.length; ++i) {\r\n // Avoid multiple page rerender...\r\n await this.view.setPageLayout(this.backup[i], i);\r\n }\r\n \r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n let i = 0;\r\n this.view = view;\r\n this.layoutManager = this.view.score.layoutManager!;\r\n this.currentPage = this.view.getFocusedPage();\r\n for (i = 0; i < this.layoutManager.pageLayouts.length; ++i) {\r\n this.backup.push(new SmoPageLayout(this.layoutManager.pageLayouts[i]));\r\n }\r\n for (i = 1; i < this.layoutManager.pageLayouts.length; ++i) {\r\n this.options.push({ value: i + 1, label: 'Page ' + (i + 1) });\r\n }\r\n this.layouts = this.layoutManager.getPageLayouts();\r\n this.currentLayout = this.layoutManager.pageLayouts[this.currentPage];\r\n if (this.layoutManager.pageLayouts.length === 1) {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.all;\r\n } else {\r\n if (this.currentPage >= 1) {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.remaining;\r\n } else {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.all;\r\n }\r\n }\r\n }\r\n}\r\n// ## SuiLayoutDialog\r\n// The layout dialog has page-specific layout parameters\r\nexport class SuiPageLayoutDialog extends SuiDialogAdapterBase {\r\n static get layoutParams() {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n // ### dialogElements\r\n // all dialogs have elements define the controls of the dialog.\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Page Layouts', elements:\r\n [{\r\n smoName: 'applyToPage',\r\n defaultValue: -1,\r\n control: 'SuiDropdownComponent',\r\n label: 'Apply to Page',\r\n dataType: 'int',\r\n options: [{\r\n value: -1,\r\n label: 'All'\r\n }, {\r\n value: -2,\r\n label: 'All Remaining'\r\n }, {\r\n value: 1,\r\n label: 'Page 1'\r\n }]\r\n }, {\r\n smoName: 'leftMargin',\r\n defaultValue: SmoPageLayout.defaults.leftMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Left Margin (px)'\r\n }, {\r\n smoName: 'rightMargin',\r\n defaultValue: SmoPageLayout.defaults.rightMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Right Margin (px)'\r\n }, {\r\n smoName: 'topMargin',\r\n defaultValue: SmoPageLayout.defaults.topMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Top Margin (px)'\r\n }, {\r\n smoName: 'bottomMargin',\r\n defaultValue: SmoPageLayout.defaults.bottomMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Bottom Margin (px)'\r\n }, {\r\n smoName: 'interGap',\r\n defaultValue: SmoPageLayout.defaults.interGap,\r\n control: 'SuiRockerComponent',\r\n label: 'Inter-System Margin'\r\n }, {\r\n smoName: 'intraGap',\r\n defaultValue: SmoPageLayout.defaults.intraGap,\r\n control: 'SuiRockerComponent',\r\n label: 'Intra-System Margin'\r\n }],\r\n staticText: [\r\n { all: 'Entire Score' },\r\n { remaining: 'Remaining Pages' },\r\n { current: 'Current Page' }\r\n ]\r\n };\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiPageLayoutAdapter(params.view);\r\n super(SuiPageLayoutDialog.dialogElements, { adapter, ...params });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoPartInfo, SmoPartInfoStringType } from '../../smo/data/partInfo';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { ViewMapEntry } from '../../render/sui/scoreView';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiPartInfoAdapter extends SuiComponentAdapter {\r\n partInfo: SmoPartInfo;\r\n backup: SmoPartInfo;\r\n selection: SmoSelection;\r\n changed: boolean = false;\r\n expandedMultimeasure: boolean = false;\r\n currentView: ViewMapEntry[] = [];\r\n resetPart: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.currentView = this.view.getView();\r\n const selector = SmoSelector.default;\r\n this.selection = SmoSelection.measureSelection(this.view.score, selector.staff, selector.measure)!;\r\n this.partInfo = new SmoPartInfo(this.selection.staff.partInfo);\r\n this.backup = new SmoPartInfo(this.selection.staff.partInfo);\r\n }\r\n async update() {\r\n this.changed = true;\r\n // Since update will change the displayed score, wait for any display change to complete first.\r\n await this.view.renderer.updatePromise();\r\n await this.view.updatePartInfo(this.partInfo);\r\n // If we are expanding rests, we need to reload the part after setting the \r\n // part change. So we update the part display a second time with the new value.\r\n if (this.resetPart) {\r\n this.view.resetPartView();\r\n await this.view.updatePartInfo(this.partInfo);\r\n this.resetPart = false;\r\n }\r\n }\r\n writeLayoutValue(attr: GlobalLayoutAttributes, value: number) {\r\n // no change?\r\n if (this.partInfo.layoutManager.globalLayout[attr] === value) {\r\n return;\r\n }\r\n this.partInfo.layoutManager.globalLayout[attr] = value;\r\n this.update();\r\n }\r\n writeStringValue(attr: SmoPartInfoStringType, value: string) {\r\n if (this.partInfo[attr] === value) {\r\n return;\r\n }\r\n this.partInfo[attr] = value;\r\n this.changed = true;\r\n }\r\n get expandMultimeasureRest() {\r\n return this.partInfo.expandMultimeasureRests;\r\n }\r\n set expandMultimeasureRest(value: boolean) {\r\n this.partInfo.expandMultimeasureRests = value;\r\n // If expanding rests, we need to re-read the score, so end\r\n if (value === true) {\r\n this.resetPart = true;\r\n }\r\n this.update();\r\n }\r\n get noteSpacing() {\r\n return this.partInfo.layoutManager.globalLayout.noteSpacing;\r\n }\r\n set noteSpacing(value: number) {\r\n this.writeLayoutValue('noteSpacing', value);\r\n }\r\n get pageWidth() {\r\n return this.partInfo.layoutManager.globalLayout.pageWidth;\r\n }\r\n set pageWidth(value: number) {\r\n this.writeLayoutValue('pageWidth', value);\r\n }\r\n get pageHeight() {\r\n return this.partInfo.layoutManager.globalLayout.pageHeight;\r\n }\r\n set pageHeight(value: number) {\r\n this.writeLayoutValue('pageHeight', value);\r\n }\r\n get svgScale() {\r\n return this.partInfo.layoutManager.globalLayout.svgScale;\r\n }\r\n set svgScale(value: number) {\r\n this.writeLayoutValue('svgScale', value);\r\n }\r\n get maxMeasureSystem() {\r\n return this.partInfo.layoutManager.globalLayout.maxMeasureSystem;\r\n }\r\n set maxMeasureSystem(value: number) {\r\n this.writeLayoutValue('maxMeasureSystem', value);\r\n }\r\n get zoomScale() {\r\n return this.partInfo.layoutManager.globalLayout.zoomScale;\r\n }\r\n set zoomScale(value: number) {\r\n this.writeLayoutValue('zoomScale', value);\r\n }\r\n get pageSize() {\r\n const sz = SmoScore.pageSizeFromDimensions(this.partInfo.layoutManager.globalLayout.pageWidth, this.partInfo.layoutManager.globalLayout.pageHeight);\r\n if (sz === null) {\r\n return 'custom';\r\n }\r\n return sz;\r\n }\r\n set pageSize(value: string) {\r\n if (value === 'custom') {\r\n return;\r\n }\r\n if (SmoScore.pageDimensions[value]) {\r\n const dims = SmoScore.pageDimensions[value];\r\n this.partInfo.layoutManager.globalLayout.pageWidth = dims.width;\r\n this.partInfo.layoutManager.globalLayout.pageHeight = dims.height;\r\n }\r\n this.update();\r\n }\r\n get partName(): string {\r\n return this.partInfo.partName;\r\n }\r\n set partName(value: string) {\r\n this.writeStringValue('partName', value);\r\n }\r\n get partAbbreviation(): string {\r\n return this.partInfo.partAbbreviation;\r\n }\r\n set partAbbreviation(value: string) {\r\n this.writeStringValue('partAbbreviation', value);\r\n }\r\n get includeNext(): boolean {\r\n return this.partInfo.stavesAfter === 1 && this.partInfo.stavesBefore === 0;\r\n }\r\n set includeNext(value: boolean) {\r\n const oldValue = this.partInfo.stavesAfter;\r\n if (value) {\r\n this.partInfo.stavesAfter = 1;\r\n } else {\r\n this.partInfo.stavesAfter = 0;\r\n }\r\n if (oldValue !== this.partInfo.stavesAfter) {\r\n // special case for a 2-stave score. The score and the part are the same so we stick to \r\n // score view.\r\n if (this.partInfo.stavesAfter === 1 && this.view.storeScore.staves.length === 2) {\r\n this.update().then(() => {\r\n this.view.viewAll();\r\n });\r\n return;\r\n }\r\n }\r\n this.update();\r\n }\r\n get cueInScore(): boolean {\r\n return this.partInfo.cueInScore;\r\n }\r\n set cueInScore(value: boolean) {\r\n this.partInfo.cueInScore = value;\r\n this.update();\r\n }\r\n get preserveTextGroups(): boolean {\r\n return this.partInfo.preserveTextGroups;\r\n }\r\n set preserveTextGroups(value: boolean) {\r\n if (value === true && this.partInfo.textGroups.length === 0) {\r\n this.view.score.textGroups.forEach((tg) => {\r\n const ngrp: SmoTextGroup = SmoTextGroup.deserializePreserveId(tg.serialize()) as SmoTextGroup;\r\n this.partInfo.textGroups.push(ngrp);\r\n });\r\n }\r\n this.partInfo.preserveTextGroups = value;\r\n this.update();\r\n }\r\n async commit() {\r\n if (this.changed) {\r\n await this.update();\r\n }\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n this.partInfo = this.backup;\r\n await this.update();\r\n }\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiPartInfoDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Part Settings', elements:\r\n [{\r\n smoName: 'partName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Name'\r\n }, {\r\n smoName: 'partAbbreviation',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Abbrev.'\r\n }, {\r\n smoName: 'preserveTextGroups',\r\n control: 'SuiToggleComponent',\r\n label: 'Part-specific text'\r\n }, {\r\n smoName: 'cueInScore',\r\n control: 'SuiToggleComponent',\r\n label: 'Show as Cues in score'\r\n }, {\r\n smoName: 'includeNext',\r\n control: 'SuiToggleComponent',\r\n label: 'Include Next Staff in Part'\r\n }, {\r\n smoName: 'expandMultimeasureRest',\r\n control: 'SuiToggleComponent',\r\n label: 'Expand Multimeasure Rests'\r\n }, {\r\n smoName: 'noteSpacing',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.noteSpacing,\r\n control: 'SuiRockerComponent',\r\n dataType: 'percent',\r\n label: 'Note Spacing'\r\n }, {\r\n smoName: 'pageSize',\r\n defaultValue: SmoScore.pageSizes[0],\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Size',\r\n options: [\r\n {\r\n value: 'letter',\r\n label: 'Letter (Portrait)'\r\n }, {\r\n value: 'letterLandscape',\r\n label: 'Letter (Landscape)'\r\n }, {\r\n value: 'tabloid',\r\n label: 'Tabloid (11x17)'\r\n }, {\r\n value: 'A4',\r\n label: 'A4'\r\n }, {\r\n value: 'custom',\r\n label: 'Custom'\r\n }]\r\n }, {\r\n smoName: 'pageWidth',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageWidth,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Width (px)'\r\n }, {\r\n smoName: 'pageHeight',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageHeight,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Height (px)'\r\n }, {\r\n smoName: 'zoomScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.zoomScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Zoom',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'svgScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.svgScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Note size',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'maxMeasureSystem',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.maxMeasureSystem,\r\n control: 'SuiRockerComponent',\r\n label: 'Max Measures/System (0=auto)',\r\n dataType: 'int'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiPartInfoAdapter(params.view);\r\n super(SuiPartInfoDialog.dialogElements, { adapter, ...params });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n if (this.cmap.includeNextCtrl.changeFlag) {\r\n const includeNext = this.cmap.includeNextCtrl as SuiToggleComponent;\r\n if (includeNext.getValue()) {\r\n const partMap = this.view.getPartMap();\r\n if (this.view.storeScore.staves.length === 2) {\r\n this.complete();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScorePreferences } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nconst deepCopy = (x: any) => JSON.parse(JSON.stringify(x));\r\n\r\nexport class SuiScorePreferencesAdapter extends SuiComponentAdapter {\r\n preferences: SmoScorePreferences;\r\n backup: SmoScorePreferences;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.preferences = new SmoScorePreferences(view.score.preferences);\r\n this.backup = JSON.parse(JSON.stringify(this.preferences));\r\n }\r\n get autoAdvance(): boolean {\r\n return this.preferences.autoAdvance;\r\n }\r\n set autoAdvance(value: boolean) {\r\n this.preferences.autoAdvance = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get autoPlay(): boolean {\r\n return this.preferences.autoPlay;\r\n }\r\n set autoPlay(value: boolean) {\r\n this.preferences.autoPlay = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get showPiano(): boolean {\r\n return this.preferences.showPiano;\r\n }\r\n set showPiano(value: boolean) {\r\n this.preferences.showPiano = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get hideEmptyLines(): boolean {\r\n return this.preferences.hideEmptyLines;\r\n }\r\n set hideEmptyLines(value: boolean) {\r\n this.preferences.hideEmptyLines = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get defaultDupleDuration() {\r\n return this.preferences.defaultDupleDuration;\r\n }\r\n set defaultDupleDuration(value: number) {\r\n this.preferences.defaultDupleDuration = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get defaultTripleDuration() {\r\n return this.preferences.defaultTripleDuration;\r\n }\r\n set defaultTripleDuration(value: number) {\r\n this.preferences.defaultTripleDuration = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get transposingScore() {\r\n return this.preferences.transposingScore;\r\n }\r\n set transposingScore(value: boolean) {\r\n this.preferences.transposingScore = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n async cancel() {\r\n const p1 = JSON.stringify(this.preferences);\r\n const p2 = JSON.stringify(this.backup);\r\n if (p1 !== p2) {\r\n await this.view.updateScorePreferences(this.backup);\r\n }\r\n }\r\n commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiScorePreferencesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Preferences',\r\n elements: [{\r\n smoName: 'autoAdvance',\r\n control: 'SuiToggleComponent',\r\n label: 'Auto-advance after pitch'\r\n }, {\r\n smoName: 'autoPlay',\r\n control: 'SuiToggleComponent',\r\n label: 'Auto-play sounds for note entry'\r\n }, {\r\n smoName: 'showPiano',\r\n control: 'SuiToggleComponent',\r\n label: 'Show Piano widget'\r\n }, {\r\n smoName: 'transposingScore',\r\n control: 'SuiToggleComponent',\r\n label: 'Tranpose Score'\r\n }, {\r\n smoName: 'hideEmptyLines',\r\n control: 'SuiToggleComponent',\r\n label: 'Hide Empty Lines'\r\n }, {\r\n smoName: 'defaultDupleDuration',\r\n control: 'SuiDropdownComponent',\r\n label: 'Default Duration (even meter)',\r\n dataType: 'int',\r\n options: [{\r\n value: 4096,\r\n label: '1/4'\r\n }, {\r\n value: 2048,\r\n label: '1/8'\r\n }]\r\n }, {\r\n smoName: 'defaultTripleDuration',\r\n control: 'SuiDropdownComponent',\r\n label: 'Default Duration (triple meter)',\r\n dataType: 'int',\r\n options: [{\r\n value: 6144,\r\n label: 'dotted 1/4'\r\n }, {\r\n value: 2048,\r\n label: '1/8'\r\n }]\r\n }],\r\n staticText: []\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScorePreferencesAdapter(params.view);\r\n super(SuiScorePreferencesDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScoreInfo, SmoScoreInfoKeys } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupPurpose } from '../../smo/data/scoreText';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { TextCheckPair } from './components/textCheck';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiScoreIdentificationAdapter extends SuiComponentAdapter {\r\n scoreInfo: SmoScoreInfo;\r\n backup: SmoScoreInfo;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.scoreInfo = this.view.score.scoreInfo;\r\n this.backup = JSON.parse(JSON.stringify(this.scoreInfo));\r\n }\r\n get title(): string {\r\n return this.scoreInfo.title;\r\n }\r\n set title(value: string) {\r\n this.scoreInfo.title = value;\r\n }\r\n get subTitle(): string {\r\n return this.scoreInfo.subTitle;\r\n }\r\n set subTitle(value: string) {\r\n this.scoreInfo.subTitle = value;\r\n }\r\n get composer(): string {\r\n return this.scoreInfo.composer;\r\n }\r\n set composer(value: string) {\r\n this.scoreInfo.composer = value;\r\n }\r\n get copyright(): string {\r\n return this.scoreInfo.copyright;\r\n }\r\n set copyright(value: string) {\r\n this.scoreInfo.copyright = value;\r\n }\r\n get name() {\r\n return this.scoreInfo.name;\r\n }\r\n set name(value: string) {\r\n this.scoreInfo.name = value;\r\n }\r\n async commit() {\r\n await this.view.updateScoreInfo(this.scoreInfo);\r\n }\r\n cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n// ## SuiScoreIdentificationDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiScoreIdentificationDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Preferences', elements:\r\n [{\r\n smoName: 'name',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Score Name',\r\n }, {\r\n smoName: 'title',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Title',\r\n }, {\r\n smoName: 'subTitle',\r\n control: 'SuiTextInputComponent',\r\n label: 'Sub Title',\r\n }, {\r\n smoName: 'composer',\r\n control: 'SuiTextInputComponent',\r\n label: 'Composer',\r\n }, {\r\n smoName: 'copyright',\r\n control: 'SuiTextInputComponent',\r\n label: 'Copyright'\r\n }],\r\n staticText: [\r\n { titleText: 'Title' },\r\n { subTitleText: 'Sub-title' },\r\n { copyrightText: 'Copyright' },\r\n { composerText: 'Composer' },\r\n { show: 'Show' }\r\n ]\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiScoreIdentificationDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScoreIdentificationAdapter(params.view);\r\n super(SuiScoreIdentificationDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { ViewMapEntry } from '../../render/sui/scoreView';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { StaffCheckComponent } from './components/staffComponents';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nconst deepCopy = (x: any) => JSON.parse(JSON.stringify(x));\r\nexport class SuiScoreViewAdapter extends SuiComponentAdapter {\r\n originalView: ViewMapEntry[];\r\n currentView: ViewMapEntry[];\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.currentView = this.view.getView();\r\n this.originalView = JSON.parse(JSON.stringify(this.currentView));\r\n }\r\n async cancel() {\r\n const s1 = JSON.stringify(this.originalView);\r\n const s2 = JSON.stringify(this.currentView);\r\n if (s1 !== s2) {\r\n this.view.setView(this.originalView);\r\n }\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async commit() {\r\n const s1 = JSON.stringify(this.originalView);\r\n const s2 = JSON.stringify(this.currentView);\r\n if (s1 !== s2) {\r\n this.view.setView(this.currentView);\r\n }\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get scoreView(): ViewMapEntry[] {\r\n return this.currentView;\r\n }\r\n set scoreView(value: ViewMapEntry[]) {\r\n this.currentView = value;\r\n }\r\n}\r\n// ## SuiScoreViewDialog\r\n// decide which rows of the score to look at\r\nexport class SuiScoreViewDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score View', elements:\r\n [{\r\n smoName: 'scoreView',\r\n control: 'StaffCheckComponent',\r\n label: 'Show staff',\r\n }],\r\n staticText: []\r\n };\r\n originalValue: number[];\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiScoreViewAdapter(parameters.view);\r\n super(SuiScoreViewDialog.dialogElements, { adapter, ...parameters });\r\n this.originalValue = JSON.parse(JSON.stringify(this.view.getView()));\r\n }\r\n get scoreViewCtrl() {\r\n return this.cmap.scoreViewCtrl as StaffCheckComponent;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoSlur, SlurNumberParams } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SlurNumber = 'spacing' | 'thickness' | 'xOffset' | 'yOffset' | 'position' | 'position_end' | 'cp1x'\r\n| 'cp1y' | 'cp2x' | 'cp2y';\r\nexport type SlurBool = 'invert';\r\nexport class SuiSlurAdapter extends SuiComponentAdapter {\r\nslur: SmoSlur;\r\nbackup: SmoSlur;\r\nchanged: boolean = false;\r\nupdating: boolean = false;\r\nconstructor(view: SuiScoreViewOperations, slur: SmoSlur) {\r\n super(view);\r\n this.slur = slur;\r\n this.view = view;\r\n this.backup = new SmoSlur(this.slur);\r\n // Set the same id so the erase works\r\n this.backup.attrs.id = slur.attrs.id;\r\n this.backup.associatedStaff = this.slur.associatedStaff;\r\n}\r\nwriteSlurNumber(view: SuiScoreViewOperations, slur: SmoSlur, key: SlurNumber, value: number) {\r\n const current = new SmoSlur(slur);\r\n slur[key] = value;\r\n view.addOrUpdateStaffModifier(current, slur);\r\n this.changed = true;\r\n}\r\nwriteSlurBool(view: SuiScoreViewOperations, slur: SmoSlur, key: SlurBool, value: boolean) {\r\n const current = new SmoSlur(slur);\r\n slur[key] = value;\r\n view.addOrUpdateStaffModifier(current, slur);\r\n this.changed = true;\r\n}\r\nasync cancel() {\r\n if (!this.changed) {\r\n return;\r\n }\r\n await this.view.addOrUpdateStaffModifier(this.slur, this.backup);\r\n}\r\nasync commit() {\r\n return PromiseHelpers.emptyPromise();\r\n}\r\nget resetAll(): boolean {\r\n return false;\r\n}\r\nset resetAll(value: boolean) {\r\n this.resetDefaults = value;\r\n const slurs: SmoSlur[] = [];\r\n const self = this;\r\n this.updating = true;\r\n const updateSlur = async (score: SmoScore, slur: SmoSlur) => {\r\n const params = SmoOperation.getDefaultSlurDirection(score, slur.startSelector, slur.endSelector, SmoSlur.positions.AUTO, SmoSlur.orientations.AUTO);\r\n const original = new SmoSlur(slur);\r\n SlurNumberParams.forEach((key) => {\r\n slur[key] = params[key]; \r\n });\r\n await self.view.addOrUpdateStaffModifier(original, slur);\r\n }\r\n new Promise((resolve) => {\r\n const nextSlur = () => {\r\n setTimeout(() => {\r\n if (slurs.length) {\r\n const slur = slurs.pop();\r\n updateSlur(self.view.score, slur!).then(() => {\r\n nextSlur();\r\n });\r\n } else {\r\n self.updating = false;\r\n resolve();\r\n }\r\n }, 1);\r\n }\r\n nextSlur();\r\n });\r\n this.view.score.staves.forEach((staff) => {\r\n staff.modifiers.filter((x) => x.ctor === 'SmoSlur').forEach((smoObj) => {\r\n const slur = smoObj as SmoSlur;\r\n slurs.push(slur);\r\n });\r\n });\r\n this.changed = true;\r\n}\r\nget resetDefaults(): boolean {\r\n return false;\r\n}\r\nset resetDefaults(value: boolean) {\r\n const params = SmoOperation.getDefaultSlurDirection(this.view.score, this.slur.startSelector, this.slur.endSelector, SmoSlur.positions.AUTO, SmoSlur.orientations.AUTO);\r\n SlurNumberParams.forEach((key) => {\r\n this.slur[key] = params[key]; \r\n });\r\n this.view.addOrUpdateStaffModifier(this.backup, this.slur);\r\n this.changed = true;\r\n}\r\nget cp2y(): number {\r\n return this.slur.cp2y;\r\n}\r\nset cp2y(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp2y', value);\r\n} \r\nget cp2x(): number {\r\n return this.slur.cp2x;\r\n}\r\nset cp2x(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp2x', value);\r\n} \r\nget cp1y(): number {\r\n return this.slur.cp1y;\r\n}\r\nset cp1y(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp1y', value);\r\n} \r\nget cp1x(): number {\r\n return this.slur.cp1x;\r\n}\r\nset cp1x(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp1x', value);\r\n} \r\nget invert(): boolean {\r\n return this.slur.invert;\r\n}\r\nset invert(value: boolean) {\r\n this.writeSlurBool(this.view, this.slur, 'invert', value);\r\n}\r\nget position_end(): number {\r\n return this.slur.position_end;\r\n}\r\nset position_end(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'position_end', value);\r\n}\r\nget position(): number {\r\n return this.slur.position;\r\n}\r\nset position(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'position', value);\r\n}\r\nget yOffset(): number {\r\n return this.slur.yOffset;\r\n}\r\nset yOffset(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'yOffset', value);\r\n}\r\nget xOffset(): number {\r\n return this.slur.xOffset;\r\n}\r\nset xOffset(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'xOffset', value);\r\n}\r\nget thickness(): number {\r\n return this.slur.thickness;\r\n}\r\nset thickness(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'thickness', value);\r\n}\r\nget spacing(): number {\r\n return this.slur.spacing;\r\n}\r\nset spacing(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'spacing', value);\r\n}\r\nasync remove() {\r\n await this.view.removeStaffModifier(this.backup);\r\n}\r\n}\r\nexport class SuiSlurAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = { \r\n label: 'Slur Properties', elements: [{\r\n smoName: 'spacing',\r\n defaultValue: 2,\r\n control: 'SuiRockerComponent',\r\n label: 'Spacing'\r\n }, {\r\n smoName: 'thickness',\r\n defaultValue: 2,\r\n control: 'SuiRockerComponent',\r\n label: 'Thickness'\r\n }, {\r\n smoName: 'xOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 10,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }, {\r\n smoName: 'position',\r\n defaultValue: SmoSlur.positions.HEAD,\r\n dataType: 'int',\r\n options: [{\r\n value: SmoSlur.positions.HEAD,\r\n label: 'Head'\r\n }, {\r\n value: SmoSlur.positions.TOP,\r\n label: 'Top'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'Start Position'\r\n }, {\r\n smoName: 'position_end',\r\n defaultValue: SmoSlur.positions.HEAD,\r\n dataType: 'int',\r\n options: [{\r\n value: SmoSlur.positions.HEAD,\r\n label: 'Head'\r\n }, {\r\n value: SmoSlur.positions.TOP,\r\n label: 'Top'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'End Position'\r\n }, {\r\n smoName: 'invert',\r\n control: 'SuiToggleComponent',\r\n label: 'Invert'\r\n }, {\r\n smoName: 'resetDefaults',\r\n control: 'SuiToggleComponent',\r\n label: 'Defaults'\r\n }, {\r\n smoName: 'resetAll',\r\n control: 'SuiToggleComponent',\r\n label: 'Reset All Slurs'\r\n }, {\r\n smoName: 'cp1x',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1 X'\r\n }, {\r\n smoName: 'cp1y',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1 Y'\r\n }, {\r\n smoName: 'cp2x',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2 X'\r\n }, {\r\n smoName: 'cp2y',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2 Y'\r\n }], staticText: []\r\n };\r\n disableClose() {\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', true);\r\n $(this.dgDom.element).find('.cancel-button').prop('disabled', true);\r\n $(this.dgDom.element).find('.remove-button').prop('disabled', true);\r\n }\r\n enableClose() {\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', false);\r\n $(this.dgDom.element).find('.cancel-button').prop('disabled', false);\r\n $(this.dgDom.element).find('.remove-button').prop('disabled', false);\r\n }\r\n modalPromise() {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n const checkComplete = () => {\r\n setTimeout(() => {\r\n if (self.adapter.updating === false) { \r\n resolve();\r\n } else {\r\n checkComplete();\r\n } \r\n }, 200);\r\n };\r\n checkComplete();\r\n });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.adapter.updating) {\r\n const self = this;\r\n this.disableClose();\r\n this.modalPromise().then(() => {\r\n self.enableClose();\r\n });\r\n }\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiSlurAdapter(parameters.view, parameters.modifier);\r\n super(SuiSlurAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiStaffGroupDialogAdapter extends SuiComponentAdapter {\r\n staffGroup: SmoSystemGroup;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n // Reset the view so we can see all the staves\r\n this.view.viewAll();\r\n const staffGroup = this.view.score.getSystemGroupForStaff(selection);\r\n if (!staffGroup) {\r\n const params = SmoSystemGroup.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(selection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(selection.selector));\r\n this.staffGroup = new SmoSystemGroup(params);\r\n } else {\r\n this.staffGroup = staffGroup;\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get leftConnector() {\r\n return this.staffGroup.leftConnector;\r\n }\r\n set leftConnector(val: number) {\r\n this.staffGroup.leftConnector = val;\r\n this.view.addOrUpdateStaffGroup(this.staffGroup);\r\n }\r\n get staffGroups() {\r\n return this.staffGroup;\r\n }\r\n set staffGroups(val: SmoSystemGroup) {\r\n this.staffGroup = val;\r\n this.view.addOrUpdateStaffGroup(this.staffGroup);\r\n }\r\n}\r\n// ## SuiStaffGroupDialog\r\n// A staff group is a grouping of staves that can be bracketed and justified\r\nexport class SuiStaffGroupDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Staff Group', elements:\r\n [{\r\n smoName: 'staffGroups',\r\n control: 'StaffAddRemoveComponent',\r\n label: 'Staves in Group',\r\n }, {\r\n smoName: 'leftConnector',\r\n control: 'SuiDropdownComponent',\r\n dataType: 'int',\r\n label: 'Left Connector',\r\n options: [\r\n {\r\n value: SmoSystemGroup.connectorTypes.bracket,\r\n label: 'Bracket'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.brace,\r\n label: 'Brace'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.single,\r\n label: 'Single'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.double,\r\n label: 'Double'\r\n }]\r\n }],\r\n staticText: [\r\n { includeStaff: 'Include Staff' }\r\n ]\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiStaffGroupDialog(parameters);\r\n dg.display();\r\n }\r\n getModifier() {\r\n return this.adapter.staffGroups;\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiStaffGroupDialogAdapter(parameters.view);\r\n super(SuiStaffGroupDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoTabStave } from '../../smo/data/staffModifiers';\r\nimport { Pitch } from '../../smo/data/common';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\n\r\nexport class SuiTabStaveAdapter extends SuiComponentAdapter {\r\n selections: SmoSelection[];\r\n tabStave: SmoTabStave;\r\n constructor(view: SuiScoreViewOperations, modifier?: SmoTabStave) {\r\n super(view);\r\n this.selections = SmoSelection.getMeasureList(this.view.tracker.selections);\r\n if (modifier) {\r\n this.tabStave = modifier;\r\n } else {\r\n const tabStave = this.selections[0].staff.getTabStaveForMeasure(this.selections[0].selector);\r\n if (tabStave) {\r\n this.tabStave = tabStave\r\n } else {\r\n this.tabStave = new SmoTabStave(SmoTabStave.defaults);\r\n this.tabStave.startSelector = JSON.parse(JSON.stringify(this.selections[0].selector));\r\n this.tabStave.endSelector = JSON.parse(JSON.stringify(this.selections[this.selections.length - 1].selector));\r\n }\r\n }\r\n }\r\n get numLines(): number {\r\n return this.tabStave.numLines;\r\n }\r\n set numLines(value: number) {\r\n this.tabStave.numLines = value;\r\n }\r\n set spacing(value: number) {\r\n this.tabStave.spacing = value;\r\n }\r\n get spacing(): number {\r\n return this.tabStave.spacing;\r\n }\r\n get showStems(): boolean {\r\n return this.tabStave.showStems;\r\n }\r\n set showStems(value: boolean) {\r\n this.tabStave.showStems = value;\r\n }\r\n get allMeasures(): boolean {\r\n return this.tabStave.allMeasures;\r\n }\r\n set allMeasures(value: boolean) {\r\n this.tabStave.allMeasures = value;\r\n }\r\n get stringPitches(): Pitch[] {\r\n return this.tabStave.stringPitches;\r\n }\r\n set stringPitches(value: Pitch[]) {\r\n this.tabStave.stringPitches = value;\r\n this.numLines = this.tabStave.stringPitches.length;\r\n }\r\n resetStrings() {\r\n this.tabStave.stringPitches = SmoTabStave.defaultStringPitches;\r\n }\r\n async commit() {\r\n this.view.updateTabStave(this.tabStave);\r\n }\r\n async cancel() {\r\n }\r\n async remove() { \r\n return await this.view.removeTabStave();\r\n }\r\n}\r\nexport class SuiTabStaveDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Tab Properties',\r\n elements:\r\n [{smoName: 'stringPitches',\r\n control:'SuiPitchArrayComponentTab', \r\n label: 'Pitches'\r\n }, {\r\n smoName: 'spacing',\r\n defaultValue: 13,\r\n control: 'SuiRockerComponent',\r\n label: 'Space between lines'\r\n }, {\r\n smoName: 'showStems',\r\n control: 'SuiToggleComponent',\r\n label: 'Show Stems'\r\n }, {\r\n smoName: 'allMeasures',\r\n control: 'SuiToggleComponent',\r\n label: 'Apply to all measures'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiTabStaveAdapter(parameters.view, parameters.modifier);\r\n super(SuiTabStaveDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoTempoText, SmoTempoNumberAttribute, SmoTempoStringAttribute, SmoTempoBooleanAttribute } from '../../smo/data/measureModifiers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\n\r\n\r\nexport class SuiTempoAdapter extends SuiComponentAdapter {\r\n smoTempoText: SmoTempoText;\r\n backup: SmoTempoText;\r\n applyToAllVal: boolean = false; \r\n applyToSelection: boolean = false;\r\n edited: boolean = false;\r\n measure: SmoMeasure;\r\n constructor(view: SuiScoreViewOperations, measure: SmoMeasure) {\r\n super(view);\r\n this.measure = measure;\r\n this.smoTempoText = new SmoTempoText(measure.tempo);\r\n this.backup = new SmoTempoText(this.smoTempoText);\r\n }\r\n writeNumber(param: SmoTempoNumberAttribute, value: number) {\r\n this.smoTempoText[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n writeBoolean(param: SmoTempoBooleanAttribute, value: boolean) {\r\n this.smoTempoText[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n writeString(param: SmoTempoStringAttribute, value: string) {\r\n (this.smoTempoText as any)[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n async remove() {\r\n await this.view.removeTempo(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n }\r\n async cancel() {\r\n await this.view.updateTempoScore(this.measure, this.backup, this.applyToAll, this.applyToSelection);\r\n }\r\n get applyToAll() {\r\n return this.applyToAllVal;\r\n }\r\n set applyToAll(val: boolean) {\r\n this.applyToAllVal = val;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n async commit(){\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get tempoText() {\r\n return this.smoTempoText.tempoText;\r\n }\r\n set tempoText(value: string) {\r\n this.writeString('tempoText', value);\r\n }\r\n get tempoMode() {\r\n return this.smoTempoText.tempoMode;\r\n }\r\n set tempoMode(value: string) {\r\n this.writeString('tempoMode', value);\r\n }\r\n get customText() {\r\n return this.smoTempoText.customText;\r\n }\r\n set customText(value: string) {\r\n this.writeString('customText', value);\r\n }\r\n get bpm() {\r\n return this.smoTempoText.bpm;\r\n }\r\n set bpm(value: number) {\r\n this.writeNumber('bpm', value);\r\n }\r\n get display() {\r\n return this.smoTempoText.display;\r\n }\r\n set display(value: boolean) {\r\n this.writeBoolean('display', value);\r\n }\r\n get beatDuration() {\r\n return this.smoTempoText.beatDuration;\r\n }\r\n set beatDuration(value: number) {\r\n this.writeNumber('beatDuration', value);\r\n }\r\n get yOffset() {\r\n return this.smoTempoText.yOffset;\r\n }\r\n set yOffset(value: number) {\r\n this.writeNumber('yOffset', value);\r\n }\r\n}\r\n// ## SuiTempoDialog\r\n// Allow user to choose a tempo or tempo change.\r\nexport class SuiTempoDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Tempo Properties',\r\n elements: [\r\n {\r\n smoName: 'tempoMode',\r\n defaultValue: SmoTempoText.tempoModes.durationMode,\r\n control: 'SuiDropdownComponent',\r\n label: 'Tempo Mode',\r\n options: [{\r\n value: 'duration',\r\n label: 'Duration (Beats/Minute)'\r\n }, {\r\n value: 'text',\r\n label: 'Tempo Text'\r\n }, {\r\n value: 'custom',\r\n label: 'Specify text and duration'\r\n }\r\n ]\r\n },\r\n {\r\n smoName: 'customText',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Custom Text',\r\n classes: 'hide-when-text-mode'\r\n },\r\n {\r\n smoName: 'bpm',\r\n defaultValue: 120,\r\n control: 'SuiRockerComponent',\r\n label: 'Notes/Minute'\r\n },\r\n {\r\n smoName: 'beatDuration',\r\n defaultValue: 4096,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Unit for Beat',\r\n options: [{\r\n value: 4096,\r\n label: 'Quarter Note',\r\n }, {\r\n value: 2048,\r\n label: '1/8 note'\r\n }, {\r\n value: 6144,\r\n label: 'Dotted 1/4 note'\r\n }, {\r\n value: 8192,\r\n label: '1/2 note'\r\n }\r\n ]\r\n },\r\n {\r\n smoName: 'tempoText',\r\n defaultValue: SmoTempoText.tempoTexts.allegro,\r\n control: 'SuiDropdownComponent',\r\n label: 'Tempo Text',\r\n classes: 'hide-when-not-text-mode',\r\n options: [{\r\n value: SmoTempoText.tempoTexts.larghissimo,\r\n label: 'Larghissimo'\r\n }, {\r\n value: SmoTempoText.tempoTexts.grave,\r\n label: 'Grave'\r\n }, {\r\n value: SmoTempoText.tempoTexts.lento,\r\n label: 'Lento'\r\n }, {\r\n value: SmoTempoText.tempoTexts.largo,\r\n label: 'Largo'\r\n }, {\r\n value: SmoTempoText.tempoTexts.larghetto,\r\n label: 'Larghetto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.adagio,\r\n label: 'Adagio'\r\n }, {\r\n value: SmoTempoText.tempoTexts.adagietto,\r\n label: 'Adagietto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andante_moderato,\r\n label: 'Andante moderato'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andante,\r\n label: 'Andante'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andantino,\r\n label: 'Andantino'\r\n }, {\r\n value: SmoTempoText.tempoTexts.moderator,\r\n label: 'Moderato'\r\n }, {\r\n value: SmoTempoText.tempoTexts.allegretto,\r\n label: 'Allegretto',\r\n }, {\r\n value: SmoTempoText.tempoTexts.allegro,\r\n label: 'Allegro'\r\n }, {\r\n value: SmoTempoText.tempoTexts.vivace,\r\n label: 'Vivace'\r\n }, {\r\n value: SmoTempoText.tempoTexts.presto,\r\n label: 'Presto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.prestissimo,\r\n label: 'Prestissimo'\r\n }\r\n ]\r\n }, {\r\n smoName: 'applyToAll',\r\n control: 'SuiToggleComponent',\r\n label: 'Apply to all future measures?'\r\n }, {\r\n smoName: 'applyToSelection',\r\n control: 'SuiToggleComponent',\r\n label: 'Apply to selection?'\r\n }, {\r\n smoName: 'display',\r\n control: 'SuiToggleComponent',\r\n label: 'Display Tempo'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }\r\n ],\r\n staticText: []\r\n };\r\n showHideCustom(): void {\r\n if (this.adapter.tempoMode === 'custom') {\r\n this.cmap.customTextCtrl.show();\r\n } else {\r\n this.cmap.customTextCtrl.hide();\r\n }\r\n }\r\n changed() {\r\n super.changed();\r\n this.showHideCustom();\r\n }\r\n initialValue() {\r\n super.initialValue();\r\n this.showHideCustom();\r\n }\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n const measures = SmoSelection.getMeasureList(parameters.view.tracker.selections)\r\n .map((sel) => sel.measure);\r\n const measure = measures[0];\r\n const adapter = new SuiTempoAdapter(parameters.view, measure);\r\n super(SuiTempoDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScoreText, SmoTextGroup } from '../../smo/data/scoreText';\r\n\r\nimport { closeDialogPromise } from '../../common/htmlHelpers';\r\n\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SvgHelpers, OutlineInfo } from '../../render/sui/svgHelpers';\r\nimport { SuiTextEditor } from '../../render/sui/textEdit';\r\n\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiDragText } from './components/dragText';\r\nimport { SuiTextInPlace } from './components/textInPlace';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { SuiHelp } from '../help';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { SuiTextBlockComponent } from './components/textInPlace';\r\n\r\nimport { EventHandler } from '../eventSource';\r\nimport { SuiInlineText } from '../../render/sui/textRender';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTextBlockDialog extends SuiDialogBase {\r\n get textEditorCtrl(): SuiTextInPlace {\r\n return this.cmap.textEditorCtrl as SuiTextInPlace;\r\n }\r\n get insertCodeCtrl(): SuiDropdownComponent {\r\n return this.cmap.insertCodeCtrl as SuiDropdownComponent;\r\n }\r\n get textDraggerCtrl(): SuiDragText {\r\n return this.cmap.textDraggerCtrl as SuiDragText;\r\n }\r\n get yCtrl(): SuiRockerComponent {\r\n return this.cmap.yCtrl as SuiRockerComponent;\r\n }\r\n get xCtrl(): SuiRockerComponent {\r\n return this.cmap.xCtrl as SuiRockerComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n get textBlockCtrl(): SuiTextBlockComponent {\r\n return this.cmap.textBlockCtrl as SuiTextBlockComponent;\r\n }\r\n get paginationCtrl(): SuiDropdownComponent {\r\n return this.cmap.paginationCtrl as SuiDropdownComponent;\r\n }\r\n get attachToSelectorCtrl(): SuiToggleComponent {\r\n return this.cmap.attachToSelectorCtrl as SuiToggleComponent;\r\n }\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Text Properties', elements:\r\n [{\r\n smoName: 'textEditor',\r\n defaultValue: 0,\r\n control: 'SuiTextInPlace',\r\n classes: 'show-always hide-when-moving',\r\n label: 'Edit Text',\r\n options: []\r\n }, {\r\n smoName: 'insertCode',\r\n classes: 'show-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Insert Special',\r\n options: [\r\n { value: '@@@', label: 'Pages' },\r\n { value: '###', label: 'Page Number' }\r\n ]\r\n }, {\r\n smoName: 'textDragger',\r\n classes: 'hide-when-editing show-when-moving',\r\n defaultValue: 0,\r\n control: 'SuiDragText',\r\n label: 'Move Text',\r\n options: []\r\n }, {\r\n smoName: 'x',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'X Position (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'y',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Y Position (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing hide-when-moving',\r\n defaultValue: SmoScoreText.fontFamilies.times,\r\n control: 'SuiFontComponent',\r\n label: 'Font Information'\r\n },\r\n {\r\n smoName: 'textBlock',\r\n classes: 'hide-when-editing hide-when-moving',\r\n defaultValue: '',\r\n control: 'SuiTextBlockComponent',\r\n label: 'Text Block Properties'\r\n },\r\n { // {every:'every',even:'even',odd:'odd',once:'once'}\r\n smoName: 'pagination',\r\n defaultValue: SmoTextGroup.paginations.ONCE,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Behavior',\r\n startRow: true,\r\n options: [{ value: SmoTextGroup.paginations.ONCE, label: 'Once' },\r\n { value: SmoTextGroup.paginations.EVERY, label: 'Every' },\r\n { value: SmoTextGroup.paginations.ODD, label: 'Odd' },\r\n { value: SmoTextGroup.paginations.SUBSEQUENT, label: 'Subsequent' }\r\n ]\r\n }, {\r\n smoName: 'attachToSelector',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Attach to Selection'\r\n }],\r\n staticText: [\r\n { label: 'Text Properties' },\r\n { editorLabel: 'Done Editing Text' },\r\n { draggerLabel: 'Done Dragging Text' }\r\n ]\r\n };\r\n edited: boolean;\r\n isNew: boolean;\r\n modifier: SmoTextGroup;\r\n activeScoreText: SmoScoreText;\r\n textElement: any;\r\n mouseMoveHandler: EventHandler | null;\r\n mouseUpHandler: EventHandler | null;\r\n mouseDownHandler: EventHandler | null;\r\n mouseClickHandler: EventHandler | null;\r\n outlineRect: OutlineInfo | null = null;\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n let edited = false;\r\n let isNew = false;\r\n const tracker = parameters.view.tracker;\r\n ['staffModifier', 'suggestion'].forEach((outlineType) => {\r\n if (tracker.outlines[outlineType]) {\r\n SvgHelpers.eraseOutline(tracker.outlines[outlineType]);\r\n }\r\n });\r\n const layout = parameters.view.score.layoutManager!.getGlobalLayout();\r\n\r\n // Create a new text modifier, if this is new text. Else use selection\r\n if (!parameters.modifier) {\r\n isNew = true;\r\n const textParams = SmoScoreText.defaults;\r\n const newText = new SmoScoreText(textParams);\r\n // convert scroll from screen coord to svg coord\r\n const svgScroll = tracker.renderer.pageMap.clientToSvg(SvgHelpers.smoBox(tracker.scroller.scrollState));\r\n newText.y += svgScroll.y;\r\n newText.x += svgScroll.x;\r\n if (tracker.selections.length > 0) {\r\n const sel = tracker.selections[0].measure.svg;\r\n if (typeof (sel.logicalBox) !== 'undefined') {\r\n if (sel.logicalBox.y >= newText.y) {\r\n newText.y = sel.logicalBox.y;\r\n newText.x = sel.logicalBox.x;\r\n }\r\n }\r\n }\r\n const grpParams = SmoTextGroup.defaults;\r\n grpParams.textBlocks = [{ text: newText, position: SmoTextGroup.relativePositions.LEFT, activeText: true }];\r\n const newGroup = new SmoTextGroup(grpParams);\r\n parameters.modifier = newGroup;\r\n parameters.modifier.setActiveBlock(newText);\r\n parameters.view.addTextGroup(parameters.modifier);\r\n edited = true;\r\n } else {\r\n // Make sure there is a score text to start the editing.\r\n parameters.modifier.setActiveBlock(parameters.modifier.textBlocks[0].text);\r\n }\r\n super(SuiTextBlockDialog.dialogElements, parameters);\r\n this.isNew = isNew;\r\n this.modifier = parameters.modifier;\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS']\r\n this.edited = edited;\r\n this.view.groupUndo(true);\r\n this.activeScoreText = this.modifier.getActiveBlock();\r\n this.mouseMoveHandler = null;\r\n this.mouseUpHandler = null;\r\n this.mouseDownHandler = null;\r\n this.mouseClickHandler = null;\r\n }\r\n populateInitial() {\r\n this.textBlockCtrl.setValue({\r\n activeScoreText: this.activeScoreText,\r\n modifier: this.modifier\r\n });\r\n const fontFamily = this.activeScoreText.fontInfo.family;\r\n const fontSize = this.activeScoreText.fontInfo.size;\r\n this.fontCtrl.setValue({\r\n family: fontFamily,\r\n size: fontSize,\r\n style: this.activeScoreText.fontInfo.style,\r\n weight: this.activeScoreText.fontInfo.weight\r\n });\r\n this.attachToSelectorCtrl.setValue(this.modifier.attachToSelector);\r\n const ul = this.modifier.ul();\r\n this.xCtrl.setValue(ul.x);\r\n this.yCtrl.setValue(ul.y);\r\n this.paginationCtrl.setValue(this.modifier.pagination);\r\n this.highlightActiveRegion();\r\n }\r\n display() {\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.activeScoreText);\r\n const svg = pageContext.svg;\r\n this.textElement = $(svg).find('.' + this.activeScoreText.attrs.id)[0];\r\n $('body').addClass('showAttributeDialog');\r\n $('body').addClass('textEditor');\r\n this.applyDisplayOptions();\r\n this.populateInitial();\r\n this.bindElements();\r\n if (!this.modifier.logicalBox) {\r\n this.view.renderer.renderTextGroup(this.modifier);\r\n }\r\n\r\n // If this control has not been edited this session, assume they want to\r\n // edit the text and just right into that.\r\n if (!this.modifier.edited) {\r\n this.modifier.edited = true;\r\n layoutDebug.addDialogDebug('text transform db: startEditSession');\r\n this.textEditorCtrl.startEditSession();\r\n }\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseUpHandler = this.eventSource.bindMouseUpHandler(this, 'mouseUp');\r\n this.mouseDownHandler = this.eventSource.bindMouseDownHandler(this, 'mouseDown');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n }\r\n _resetAttachToSelector() {\r\n this.modifier.attachToSelector = false;\r\n this.modifier.selector = SmoTextGroup.defaults.selector;\r\n this.modifier.musicXOffset = SmoTextGroup.defaults.musicXOffset;\r\n this.modifier.musicYOffset = SmoTextGroup.defaults.musicYOffset;\r\n }\r\n _activateAttachToSelector() {\r\n this.modifier.attachToSelector = true;\r\n this.modifier.selector = JSON.parse(JSON.stringify(this.view.tracker.selections[0].selector));\r\n if (this.modifier.logicalBox) {\r\n this.modifier.musicXOffset = this.modifier.logicalBox.x - this.view.tracker.selections[0].measure.svg.logicalBox.x;\r\n this.modifier.musicYOffset = this.modifier.logicalBox.y - this.view.tracker.selections[0].measure.svg.logicalBox.y;\r\n }\r\n }\r\n\r\n changed() {\r\n this.edited = true;\r\n if (this.insertCodeCtrl.changeFlag && this.textEditorCtrl.session) {\r\n const val = this.insertCodeCtrl.getValue().toString().split('');\r\n val.forEach((key) => {\r\n this.evKey({ key });\r\n });\r\n this.insertCodeCtrl.unselect();\r\n }\r\n\r\n if (this.textBlockCtrl.changeFlag) {\r\n const nval = this.textBlockCtrl.getValue();\r\n this.activeScoreText = nval.activeScoreText;\r\n this.highlightActiveRegion();\r\n }\r\n if (this.textEditorCtrl.changeFlag) {\r\n this.highlightActiveRegion();\r\n }\r\n\r\n if (this.attachToSelectorCtrl.changeFlag) {\r\n const toSet = this.attachToSelectorCtrl.getValue();\r\n if (toSet) {\r\n this._activateAttachToSelector();\r\n this.paginationCtrl.setValue(SmoTextGroup.paginations.ONCE);\r\n this.modifier.pagination = SmoTextGroup.paginations.ONCE;\r\n } else {\r\n this._resetAttachToSelector();\r\n }\r\n }\r\n\r\n const pos = this.modifier.ul();\r\n\r\n // position can change from drag or by dialog - only update from\r\n // dialog entries if that changed.\r\n if (this.xCtrl.changeFlag) {\r\n this.modifier.offsetX(this.xCtrl.getValue() - pos.x);\r\n }\r\n if (this.yCtrl.changeFlag) {\r\n this.modifier.offsetY(this.yCtrl.getValue() - pos.y);\r\n }\r\n if (this.textDraggerCtrl.changeFlag) {\r\n this.xCtrl.setValue(pos.x);\r\n this.yCtrl.setValue(pos.y);\r\n }\r\n\r\n if (this.paginationCtrl.changeFlag) {\r\n this.modifier.pagination = parseInt(this.paginationCtrl.getValue().toString(), 10);\r\n // Pagination and attach to measure don't mix.\r\n this._resetAttachToSelector();\r\n this.attachToSelectorCtrl.setValue(false);\r\n }\r\n\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.activeScoreText.fontInfo.family = fontInfo.family;\r\n // transitioning away from non-point-based font size units\r\n this.activeScoreText.fontInfo.size = fontInfo.size;\r\n this.activeScoreText.fontInfo.weight = fontInfo.weight;\r\n this.activeScoreText.fontInfo.style = fontInfo.style;\r\n }\r\n // Use layout context because render may have reset svg.\r\n this.view.updateTextGroup(this.modifier);\r\n }\r\n highlightActiveRegion() {\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.activeScoreText);\r\n const svg = pageContext.svg;\r\n if (this.activeScoreText.logicalBox) {\r\n const stroke = SuiTextEditor.strokes['text-highlight'];\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context: pageContext,\r\n classes: '',\r\n stroke,\r\n box: this.activeScoreText.logicalBox,\r\n scroll: this.scroller.scrollState,\r\n timeOff: 1000\r\n };\r\n }\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect.box = this.activeScoreText.logicalBox;\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n }\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n this.textEditorCtrl.evKey(evdata);\r\n }\r\n }\r\n\r\n // ### Event handlers, passed from dialog\r\n mouseUp() {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseUp(null);\r\n }\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseMove(ev);\r\n } else if (this.textEditorCtrl && this.textEditorCtrl.isRunning) {\r\n this.textEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.textEditorCtrl && this.textEditorCtrl.isRunning) {\r\n this.textEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n\r\n mouseDown(ev: any) {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseDown(ev);\r\n }\r\n }\r\n\r\n _complete() {\r\n this.view.groupUndo(false);\r\n this.modifier.setActiveBlock(null);\r\n this.view.tracker.updateMap(); // update the text map\r\n this.view.renderer.setDirty();\r\n if (this.mouseDownHandler) {\r\n this.eventSource.unbindMouseDownHandler(this.mouseDownHandler);\r\n }\r\n if (this.mouseUpHandler) {\r\n this.eventSource.unbindMouseUpHandler(this.mouseUpHandler);\r\n }\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n }\r\n // Hack - this comes from SuiInlineText and SuiTextEdit.\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.complete();\r\n }\r\n _removeText() {\r\n this.view.removeTextGroup(this.modifier);\r\n }\r\n\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this.view.updateTextGroup(this.modifier);\r\n this._complete();\r\n });\r\n\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n if (this.edited) {\r\n this.modifier.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n this.modifier.elements = [];\r\n this.view.undo();\r\n }\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => {\r\n this._removeText();\r\n this._complete();\r\n });\r\n }\r\n}\r\n\r\nexport class helpModal {\r\n static createAndDisplay() {\r\n SuiHelp.displayHelp();\r\n return closeDialogPromise();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoStaffTextBracket, SmoTextBracketNumberType, SmoTextBracketStringType} from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTextBracketAdapter extends SuiComponentAdapter {\r\n backup: SmoStaffTextBracket;\r\n bracket: SmoStaffTextBracket;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, bracket: SmoStaffTextBracket) {\r\n super(view);\r\n this.bracket = bracket;\r\n this.view = view;\r\n this.backup = new SmoStaffTextBracket(this.bracket);\r\n this.backup.attrs.id = bracket.attrs.id;\r\n this.backup.associatedStaff = bracket.associatedStaff;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.removeTextBracket(this.bracket);\r\n await this.view.addOrReplaceTextBracket(this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.bracket);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async updateValue(param: SmoTextBracketNumberType, val: number) {\r\n const current = new SmoStaffTextBracket(this.bracket);\r\n this.bracket[param] = parseInt(val.toString(), 10);\r\n await this.view.addOrUpdateStaffModifier(current, this.bracket);\r\n this.changed = true;\r\n }\r\n async updateText(param: SmoTextBracketStringType, val: string) {\r\n const current = new SmoStaffTextBracket(this.bracket);\r\n this.bracket[param] = val;\r\n await this.view.addOrUpdateStaffModifier(current, this.bracket);\r\n this.changed = true;\r\n }\r\n get text() {\r\n return this.bracket.text;\r\n }\r\n set text(val: string) {\r\n this.updateText('text', val);\r\n }\r\n get superscript() {\r\n return this.bracket.superscript;\r\n }\r\n set superscript(val: string) {\r\n this.updateText('superscript', val);\r\n }\r\n get position() {\r\n return this.bracket.position;\r\n }\r\n set position(val: number) {\r\n this.updateValue('position', val);\r\n }\r\n get line() {\r\n return this.bracket.line;\r\n }\r\n set line(val: number) {\r\n this.updateValue('line', val);\r\n }\r\n}\r\nexport class SuiTextBracketDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Text Bracket Properties', elements:\r\n [{\r\n smoName: 'line',\r\n defaultValue: 1,\r\n control: 'SuiRockerComponent',\r\n label: 'Line'\r\n }, {\r\n smoName: 'position',\r\n control: 'SuiDropdownComponent',\r\n label: 'Position',\r\n options: [\r\n {\r\n value: '1',\r\n label: 'Above'\r\n }, {\r\n value: '-1',\r\n label: 'Below'\r\n }]\r\n }, {\r\n smoName: 'text',\r\n control: 'SuiTextInputComponent',\r\n label: 'Text'\r\n }, {\r\n smoName: 'superscript',\r\n control: 'SuiTextInputComponent',\r\n label: 'SubText'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiTextBracketAdapter(parameters.view, parameters.modifier);\r\n super(SuiTextBracketDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoTie, TieLine } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type TieNumber = 'tie_spacing' | 'cp1' | 'cp2' | 'first_x_shift' | 'last_x_shift' | 'y_shift';\r\n\r\nexport class SuiTieAdapter extends SuiComponentAdapter {\r\n tie: SmoTie;\r\n backup: SmoTie;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, tie: SmoTie) {\r\n super(view);\r\n this.tie = tie;\r\n this.backup = new SmoTie(tie);\r\n // Make it have same ID so remove works.\r\n this.backup.attrs.id = tie.attrs.id;\r\n this.backup.associatedStaff = tie.associatedStaff;\r\n }\r\n writeTieNumber(value: number, param: TieNumber) {\r\n this.tie[param] = value;\r\n this.view.addOrUpdateStaffModifier(this.backup, this.tie);\r\n this.changed = true;\r\n }\r\n get lines(): TieLine[] {\r\n return this.tie.lines;\r\n }\r\n set lines(value: TieLine[]) {\r\n this.tie.lines = JSON.parse(JSON.stringify(value));\r\n this.view.addOrUpdateStaffModifier(this.backup, this.tie);\r\n }\r\n get tie_spacing(): number {\r\n return this.tie.tie_spacing;\r\n }\r\n set tie_spacing(value: number) {\r\n this.writeTieNumber(value, 'tie_spacing');\r\n } \r\n get first_x_shift(): number {\r\n return this.tie.first_x_shift;\r\n }\r\n set first_x_shift(value: number) {\r\n this.writeTieNumber(value, 'first_x_shift');\r\n } \r\n get last_x_shift(): number {\r\n return this.tie.last_x_shift;\r\n }\r\n set last_x_shift(value: number) {\r\n this.writeTieNumber(value, 'last_x_shift');\r\n } \r\n get y_shift(): number {\r\n return this.tie.y_shift;\r\n }\r\n set y_shift(value: number) {\r\n this.writeTieNumber(value, 'y_shift');\r\n } \r\n get cp1(): number {\r\n return this.tie.cp1;\r\n }\r\n set cp1(value: number) {\r\n this.writeTieNumber(value, 'cp1');\r\n }\r\n get cp2(): number {\r\n return this.tie.cp2;\r\n }\r\n set cp2(value: number) {\r\n this.writeTieNumber(value, 'cp2');\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addOrUpdateStaffModifier(this.backup, this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.backup);\r\n }\r\n}\r\nexport class SuiTieAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Tie Properties',\r\n staticText: [\r\n { label: 'Tie Properties' },\r\n { fromNote: 'From Note' },\r\n { toNote: 'To Note' }\r\n ], elements: [{\r\n smoName: 'lines',\r\n control: 'TieMappingComponent',\r\n label: 'Lines'\r\n }, {\r\n smoName: 'cp1',\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1'\r\n }, {\r\n smoName: 'cp2',\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2'\r\n }, {\r\n smoName: 'first_x_shift',\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset 1'\r\n }, {\r\n smoName: 'last_x_shift',\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset 2'\r\n }, {\r\n smoName: 'y_shift',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }, {\r\n smoName: 'tie_spacing',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Tie Spacing'\r\n }],\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n if (!parameters.modifier) {\r\n throw new Error('modifier attribute dialog must have modifier');\r\n }\r\n const tie = parameters.modifier as SmoTie;\r\n const adapter = new SuiTieAdapter(parameters.view, tie);\r\n super(SuiTieAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { TimeSignature } from '../../smo/data/measureModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTimeSignatureAdapter extends SuiComponentAdapter {\r\n measure: SmoMeasure;\r\n backup: TimeSignature;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.measure = this.view.tracker.selections[0].measure;\r\n this.backup = new TimeSignature(this.measure.timeSignature);\r\n }\r\n get numerator() {\r\n return this.measure.timeSignature.actualBeats;\r\n }\r\n set numerator(value: number) {\r\n this.measure.timeSignature.actualBeats = value;\r\n }\r\n get denominator() {\r\n return this.measure.timeSignature.beatDuration;\r\n }\r\n set denominator(value: number) {\r\n this.measure.timeSignature.beatDuration = value;\r\n }\r\n get display() {\r\n return this.measure.timeSignature.display;\r\n }\r\n set display(value: boolean) {\r\n this.measure.timeSignature.display = value;\r\n }\r\n get useSymbol() {\r\n return this.measure.timeSignature.useSymbol;\r\n }\r\n set useSymbol(value: boolean) {\r\n this.measure.timeSignature.useSymbol = value;\r\n }\r\n get customString() {\r\n return this.measure.timeSignature.displayString;\r\n }\r\n set customString(value: string) {\r\n const tr = value.trim();\r\n if (!(tr.indexOf('/') >= 0)) {\r\n if (tr === 'C' || tr === 'C|') {\r\n this.measure.timeSignature.displayString = tr;\r\n return;\r\n }\r\n }\r\n const ar = tr.split('/');\r\n if (isNaN(parseInt(ar[0], 10)) || isNaN(parseInt(ar[1], 10))) {\r\n this.measure.timeSignature.displayString = '';\r\n return;\r\n }\r\n this.measure.timeSignature.displayString = tr;\r\n }\r\n async commit() {\r\n await this.view.setTimeSignature(this.measure.timeSignature);\r\n }\r\n async cancel() {\r\n this.measure.timeSignature = this.backup;\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiTimeSignatureDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Custom Time Signature',\r\n elements:\r\n [\r\n {\r\n smoName: 'numerator',\r\n defaultValue: 3,\r\n control: 'SuiRockerComponent',\r\n label: 'Beats/Measure',\r\n },\r\n {\r\n smoName: 'denominator',\r\n defaultValue: 8,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Beat Value',\r\n options: [{\r\n value: 16,\r\n label: '16',\r\n }, {\r\n value: 8,\r\n label: '8',\r\n }, {\r\n value: 4,\r\n label: '4'\r\n }, {\r\n value: 2,\r\n label: '2'\r\n }]\r\n }, {\r\n smoName: 'display',\r\n control: 'SuiToggleComponent',\r\n label: 'Display',\r\n }, {\r\n smoName: 'useSymbol',\r\n control: 'SuiToggleComponent',\r\n label: 'Common/Cut',\r\n }, {\r\n smoName: 'customString',\r\n control: 'SuiTextInputComponent',\r\n label: 'Custom',\r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiTimeSignatureAdapter(parameters.view);\r\n super(SuiTimeSignatureDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager, SmoGlobalLayout } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\n\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTransposeScoreAdapter extends SuiComponentAdapter {\r\n transposeOffset: number = 0;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.view = view;\r\n }\r\n // TODO: writeValue is not called in a global context\r\n get offset() {\r\n return this.transposeOffset;\r\n }\r\n set offset(value: number) {\r\n if (value > -13 && value < 13) {\r\n this.transposeOffset = value;\r\n }\r\n }\r\n async commit() { \r\n if (this.transposeOffset !== 0) {\r\n this.view.transposeScore(this.transposeOffset);\r\n }\r\n }\r\n async cancel() {\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiTransposeScoreDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Transpose Score', elements:\r\n [{\r\n smoName: 'offset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose (1/2 steps)'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiTransposeScoreAdapter(params.view);\r\n super(SuiTransposeScoreDialog.dialogElements, { adapter, ...params });\r\n }\r\n changed() {\r\n super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition,SuiDialogParams } from './dialog';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport type SmoVoltaNumberParam = 'startBar' | 'endBar' | 'xOffsetStart' | 'xOffsetEnd' | 'yOffset' | 'number';\r\n\r\nexport class SuiVoltaAdapter extends SuiComponentAdapter {\r\n volta: SmoVolta;\r\n backup: SmoVolta;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, volta: SmoVolta) {\r\n super(view);\r\n this.volta = volta;\r\n this.backup = new SmoVolta(this.volta); \r\n }\r\n async remove() {\r\n await this.view.removeEnding(this.volta);\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.updateEnding(this.backup);\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n updateVolta(param: SmoVoltaNumberParam, value: number) {\r\n this.volta[param] = value;\r\n this.view.updateEnding(this.volta);\r\n this.changed = true;\r\n }\r\n get startBar() {\r\n return this.volta.startBar;\r\n }\r\n set startBar(val: number) {\r\n this.updateVolta('startBar', val);\r\n }\r\n get endBar() {\r\n return this.volta.endBar;\r\n }\r\n set endBar(val: number) {\r\n this.updateVolta('endBar', val);\r\n }\r\n get xOffsetStart() {\r\n return this.volta.xOffsetStart;\r\n }\r\n set xOffsetStart(val: number) {\r\n this.updateVolta('xOffsetStart', val);\r\n }\r\n get xOffsetEnd() {\r\n return this.volta.xOffsetEnd;\r\n }\r\n set xOffsetEnd(val: number) {\r\n this.updateVolta('xOffsetEnd', val);\r\n }\r\n get yOffset() {\r\n return this.volta.yOffset;\r\n }\r\n set yOffset(val: number) {\r\n this.updateVolta('yOffset', val);\r\n }\r\n get number() {\r\n return this.volta.number;\r\n }\r\n set number(val: number) {\r\n this.updateVolta('number', val);\r\n }\r\n} \r\n// ## SuiVoltaAttributeDialog\r\n// aka first and second endings\r\nexport class SuiVoltaAttributeDialog extends SuiDialogAdapterBase {\r\n\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Volta Properties', elements:\r\n [{\r\n smoName: 'number',\r\n defaultValue: 1,\r\n control: 'SuiRockerComponent',\r\n label: 'number'\r\n }, {\r\n smoName: 'xOffsetStart',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X1 Offset'\r\n }, {\r\n smoName: 'xOffsetEnd',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X2 Offset'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n if (parameters.modifier.logicalBox === null) {\r\n return null;\r\n }\r\n const dg = new SuiVoltaAttributeDialog(parameters);\r\n dg.display();\r\n return dg;\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiVoltaAdapter(parameters.view, parameters.modifier)\r\n super(SuiVoltaAttributeDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { KeyEvent } from '../smo/data/common';\r\n\r\ndeclare var $: any;\r\nimport { scoreChangeEvent } from '../render/sui/renderState';\r\n\r\n/**\r\n * Event handler for smoosic. Any UI element can have any number\r\n * of event handlers. For modals, event handlers are added/removed \r\n * as the gain/relinquish control\r\n * @param sink - an object that implements:\r\n * @param method - the callback method on sink\r\n * @param symbol - used to distinguish handler instances of the same type\r\n */\r\nexport interface EventHandler {\r\n sink: any,\r\n method: string,\r\n symbol: Symbol\r\n}\r\n/**\r\n * This is the event generating interface for Smoosic. It is kept as \r\n * skeletal as possible so applications can call event handling methods from\r\n * their own event logic.\r\n * @category SuiUiBase\r\n */\r\nexport class BrowserEventSource {\r\n keydownHandlers: EventHandler[];\r\n mouseMoveHandlers: EventHandler[];\r\n mouseClickHandlers: EventHandler[];\r\n mouseUpHandlers: EventHandler[];\r\n mouseDownHandlers: EventHandler[];\r\n scoreChangeHandlers: EventHandler[] = [];\r\n domTriggers: EventHandler[];\r\n handleMouseMove: ((ev: any) => void) | null = null;\r\n handleMouseClick: ((ev: any) => void) | null = null;\r\n handleMouseUp: ((ev: any) => void) | null = null;\r\n handleMouseDown: ((ev: any) => void) | null = null;\r\n\r\n handleKeydown: (ev: KeyEvent) => void;\r\n handleScoreChangeEvent: (ev: KeyEvent) => void;\r\n renderElement: any;\r\n constructor() {\r\n this.keydownHandlers = [];\r\n this.mouseMoveHandlers = [];\r\n this.mouseClickHandlers = [];\r\n this.mouseUpHandlers = [];\r\n this.mouseDownHandlers = [];\r\n this.domTriggers = [];\r\n this.handleKeydown = this.evKey.bind(this);\r\n this.handleScoreChangeEvent = this.evScoreChange.bind(this);\r\n window.addEventListener(\"keydown\", this.handleKeydown as any, true);\r\n window.addEventListener(scoreChangeEvent, this.handleScoreChangeEvent as any, true);\r\n }\r\n\r\n async evKey(event: KeyEvent) {\r\n let i = 0;\r\n for (i = 0; i < this.keydownHandlers.length; ++i) {\r\n const handler = this.keydownHandlers[i]\r\n await handler.sink[handler.method](event);\r\n }\r\n }\r\n async evScoreChange(event: any) {\r\n let i = 0;\r\n for (i = 0; i < this.scoreChangeHandlers.length; ++i) {\r\n const handler = this.scoreChangeHandlers[i]\r\n await handler.sink[handler.method](event);\r\n }\r\n }\r\n mouseMove(event: any) {\r\n this.mouseMoveHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseClick(event: any) {\r\n this.mouseClickHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseDown(event: any) {\r\n this.mouseDownHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseUp(event: any) {\r\n this.mouseUpHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n setRenderElement(renderElement: any) {\r\n this.renderElement = renderElement;\r\n var self = this;\r\n this.handleMouseMove = this.mouseMove.bind(this);\r\n this.handleMouseClick = this.mouseClick.bind(this);\r\n this.handleMouseUp = this.mouseUp.bind(this);\r\n this.handleMouseDown = this.mouseDown.bind(this);\r\n $(document)[0].addEventListener(\"mousemove\", this.handleMouseMove);\r\n $(this.renderElement)[0].addEventListener(\"click\", this.handleMouseClick);\r\n $(document)[0].addEventListener(\"mouseup\", this.handleMouseUp);\r\n $(document)[0].addEventListener(\"mousedown\", this.handleMouseDown);\r\n }\r\n\r\n _unbindHandlerArray(arSrc: EventHandler[], arDest: EventHandler[], handler: EventHandler) {\r\n arSrc.forEach((htest) => {\r\n if (handler.symbol !== htest.symbol) {\r\n arDest.push(htest);\r\n }\r\n });\r\n }\r\n\r\n unbindMouseMoveHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseMoveHandlers, handlers, handler);\r\n this.mouseMoveHandlers = handlers;\r\n }\r\n unbindMouseDownHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseDownHandlers, handlers, handler);\r\n this.mouseDownHandlers = handlers;\r\n }\r\n unbindMouseUpHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseUpHandlers, handlers, handler);\r\n this.mouseUpHandlers = handlers;\r\n }\r\n unbindMouseClickHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseClickHandlers, handlers, handler);\r\n this.mouseClickHandlers = handlers;\r\n }\r\n\r\n unbindKeydownHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.keydownHandlers, handlers, handler);\r\n this.keydownHandlers = handlers;\r\n }\r\n\r\n // ### bindKeydownHandler\r\n // add a handler for the evKey event, for keyboard data.\r\n bindKeydownHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.keydownHandlers.push(handler as EventHandler);\r\n return handler;\r\n }\r\n\r\n bindMouseMoveHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseMoveHandlers.push(handler as EventHandler);\r\n return handler;\r\n }\r\n\r\n bindMouseUpHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseUpHandlers.push(handler);\r\n return handler;\r\n }\r\n bindScoreChangeHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.scoreChangeHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n bindMouseDownHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseDownHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n bindMouseClickHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseClickHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n domClick(selector: string, sink: any, method: string, args: any) {\r\n $(selector).off('click').on('click', function (ev: any) {\r\n sink[method](ev, args);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from '../common/htmlHelpers';\r\nimport { SuiEventHandler } from '../application/eventHandler';\r\nimport { SuiScoreView } from '../render/sui/scoreView';\r\ndeclare var $: any;\r\n\r\nexport class SuiExceptionHandler {\r\n view: SuiScoreView;\r\n thrown: boolean;\r\n static _instance: SuiExceptionHandler;\r\n constructor(params: any) {\r\n this.view = params.view;\r\n this.thrown = false;\r\n SuiExceptionHandler._instance = this;\r\n }\r\n static get instance() {\r\n return SuiExceptionHandler._instance;\r\n }\r\n exceptionHandler(e: any) {\r\n let stack = '';\r\n let doing = '';\r\n let scoreString = '';\r\n if (this.thrown) {\r\n return;\r\n }\r\n this.thrown = true;\r\n if (SuiEventHandler.reentry) {\r\n return;\r\n }\r\n\r\n SuiEventHandler.reentry = true;\r\n scoreString = 'Could not serialize score.';\r\n try {\r\n scoreString = JSON.stringify(this.view.score.serialize(), null, ' ');\r\n } catch (e: any) {\r\n if (e.message) {\r\n scoreString += ' ' + e.message;\r\n }\r\n }\r\n const message = e.message;\r\n stack = 'No stack trace available';\r\n\r\n try {\r\n if (e.error && e.error.stack) {\r\n stack = e.error.stack;\r\n } else if (e.stack) {\r\n stack = e.stack;\r\n }\r\n } catch (e2: any) {\r\n stack = 'Error with stack: ' + e2.message;\r\n }\r\n doing = 'Last operation not available.';\r\n\r\n const lastOp = this.view.storeUndo.peek();\r\n if (lastOp) {\r\n doing = lastOp.title;\r\n }\r\n const url = 'https://github.com/AaronDavidNewman/Smoosic/issues';\r\n const bodyObject = JSON.stringify({\r\n message,\r\n stack,\r\n lastOperation: doing,\r\n scoreString\r\n }, null, ' ');\r\n createTopDomContainer('.bugDialog');\r\n const b = buildDom;\r\n const r = b('div').classes('bug-modal').append(\r\n b('img').attr('src', '../styles/images/logo.png').classes('bug-logo'))\r\n .append(b('button').classes('icon icon-cross bug-dismiss-button'))\r\n .append(b('span').classes('bug-title').text('oh nooooo! You\\'ve found a bug'))\r\n .append(b('p').text('It would be helpful if you would submit a bug report, and copy the data below into an issue'))\r\n .append(b('div')\r\n .append(b('textarea').attr('id', 'bug-text-area').text(bodyObject))\r\n .append(\r\n b('div').classes('button-container').append(b('button').classes('bug-submit-button').text('Submit Report'))));\r\n\r\n $('.bugDialog').html('');\r\n $('.bugDialog').append(r.dom());\r\n\r\n $('.bug-dismiss-button').off('click').on('click', () => {\r\n $('body').removeClass('bugReport');\r\n if (lastOp) {\r\n this.view.storeUndo.undo(this.view.score, {}, true);\r\n this.view.renderer.render();\r\n SuiEventHandler.reentry = false;\r\n }\r\n });\r\n $('.bug-submit-button').off('click').on('click', () => {\r\n $('#bug-text-area').select();\r\n document.execCommand('copy');\r\n window.open(url, 'Report Smoosic issues');\r\n });\r\n $('body').addClass('bugReport');\r\n if (!this.thrown) {\r\n this.thrown = true;\r\n throw (e);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\ndeclare var JSZip: any;\r\n// ## SuiFileInput\r\n// Get a string or binary file from a file input control and transparently\r\n// decompress it if it's mxml file (compressed). This will read any text or\r\n// binary file,\r\n// but it will only unzip .mxml files first and has a consistent async interface\r\nexport class SuiFileInput {\r\n compressed: boolean = false;\r\n binary: boolean = false;\r\n value: any;\r\n event: any;\r\n constructor(evt: any) {\r\n this.compressed = false;\r\n this.binary = false;\r\n this.value = null;\r\n this.event = evt;\r\n if (evt.target.files[0].name.endsWith('.mxl')) {\r\n this.compressed = true;\r\n this.binary = true;\r\n } else if (evt.target.files[0].name.endsWith('.mid')) {\r\n this.binary = true;\r\n }\r\n }\r\n _handleZip() {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n JSZip.loadAsync(self.value).then((zip: any) => {\r\n // Find the real xml file in the zip (not metadata)\r\n const filename =\r\n Object.keys(zip.files).find((ss) => ss.indexOf('META') < 0 && ss.endsWith('xml'));\r\n zip.file(filename).async('text').then((str: any) => {\r\n self.value = str;\r\n resolve();\r\n });\r\n });\r\n });\r\n }\r\n loadAsync() {\r\n const self = this;\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (file) => {\r\n if (file === null || file.target === null || file.target.result === null) {\r\n reject();\r\n return;\r\n }\r\n self.value = file.target.result;\r\n if (!self.compressed) {\r\n resolve();\r\n } else {\r\n self._handleZip().then(() => {\r\n resolve();\r\n });\r\n }\r\n };\r\n if (self.binary) {\r\n reader.readAsArrayBuffer(self.event.target.files[0])\r\n } else {\r\n reader.readAsText(self.event.target.files[0]);\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiXhrLoader } from './xhrLoader';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nexport interface kvPair { [key: string]: string }\r\nexport interface LibraryParams {\r\n loaded: boolean;\r\n parentLib: kvPair;\r\n url: string | undefined;\r\n format: string;\r\n metadata: kvPair;\r\n children: SmoLibrary[];\r\n data: any;\r\n}\r\n\r\n// ## SmoLibrary\r\n// A class to organize smoosic files (or any format smoosic accepts) into libraries.\r\nexport class SmoLibrary {\r\n static _defaults: Partial;\r\n loaded: boolean;\r\n parentLib: kvPair;\r\n url: string | undefined = '';\r\n format: string = 'smo';\r\n metadata: kvPair = {};\r\n children: SmoLibrary[] = [];\r\n constructor(parameters: Partial) {\r\n this.loaded = false;\r\n this.parentLib = {};\r\n if (parameters.url) {\r\n this.url = parameters.url;\r\n } else if (parameters.data) {\r\n this.initialize(parameters.data);\r\n }\r\n }\r\n initialize(parameters: LibraryParams) {\r\n smoSerialize.serializedMerge(\r\n SmoLibrary.parameterArray, SmoLibrary.defaults, this);\r\n // if the object was loaded from URL, use that.\r\n if (!this.url) {\r\n this.url = parameters.url;\r\n }\r\n this.format = parameters.format;\r\n Object.keys(parameters.metadata).forEach((key: string) => {\r\n this.metadata[key] = parameters.metadata[key];\r\n });\r\n this.children = [];\r\n if (typeof(parameters.children) !== 'undefined') {\r\n parameters.children.forEach((childLib: SmoLibrary) => {\r\n this.children.push(new SmoLibrary({ data: childLib }));\r\n });\r\n }\r\n this.children.forEach((child) => {\r\n child._inheritMetadata(this);\r\n });\r\n }\r\n static get metadataNames() {\r\n return ['name', 'icon', 'tags', 'composer', 'artist', 'copyright',\r\n 'title', 'subtitle', 'movement', 'source'];\r\n }\r\n static get formatTypes() {\r\n return ['smoosic', 'library', 'mxml', 'midi', 'abc'];\r\n }\r\n static get libraryTypes() {\r\n return ['work', 'transcription', 'library', 'collection'];\r\n }\r\n static get defaults() {\r\n if (typeof(SmoLibrary._defaults) === 'undefined') {\r\n SmoLibrary._defaults = { children: [], metadata: {} };\r\n }\r\n return SmoLibrary._defaults;\r\n }\r\n static get parameterArray() {\r\n return ['children', 'metadata', 'format', 'url'];\r\n }\r\n load() {\r\n const self = this;\r\n if (this.loaded) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const loader = new SuiXhrLoader(this.url!);\r\n return new Promise((resolve) => {\r\n loader.loadAsync().then(() => {\r\n const jsonObj = JSON.parse(loader.value);\r\n self.initialize(jsonObj);\r\n self.loaded = true;\r\n resolve();\r\n });\r\n });\r\n }\r\n _inheritMetadata(parent: any) {\r\n // eslint-disable-next-line\r\n for (const key in parent) {\r\n if (typeof(this.metadata[key]) === 'undefined') {\r\n this.metadata[key] = parent[key];\r\n }\r\n }\r\n this.parentLib = { name: parent.metadata.name, value: parent };\r\n this.children.forEach((child) => {\r\n child._inheritMetadata(this);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\ndeclare var JSZip: any;\r\n\r\n/**\r\n * Load a file. Guess based on the extension whether the file is string or binary\r\n */\r\nexport class SuiXhrLoader {\r\n compressed: boolean = false;\r\n value: any = null;\r\n path: string;\r\n binary: boolean = false;\r\n isMidi: boolean = false;\r\n constructor(path: string) {\r\n this.path = path;\r\n if (path.endsWith('mxl')) {\r\n this.compressed = true;\r\n this.binary = true;\r\n } else if (path.endsWith('mid')) {\r\n this.isMidi = true;\r\n this.binary = true;\r\n }\r\n }\r\n async _uncompress(result: any): Promise {\r\n const self = this;\r\n const zip = await JSZip.loadAsync(result);\r\n // Find the real xml file in the zip (not metadata)\r\n const filename = Object.keys(zip.files).find((ss) => ss.indexOf('META') < 0 && ss.endsWith('xml'));\r\n self.value = await zip.file(filename).async('text');\r\n return self.value\r\n }\r\n /**\r\n * \r\n * @returns promise resolved when the target file is loaded\r\n */\r\n loadAsync(): Promise {\r\n const req = new XMLHttpRequest();\r\n const self = this;\r\n const promise = new Promise((resolve) => {\r\n req.addEventListener('load', () => {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', async () => {\r\n if (self.isMidi) {\r\n self.value = new Uint8Array(reader.result as ArrayBuffer);\r\n resolve(self.value);\r\n }\r\n else if (!self.compressed) {\r\n self.value = reader.result;\r\n resolve(self.value);\r\n } else {\r\n self.value = await self._uncompress(reader.result);\r\n resolve(self.value);\r\n }\r\n });\r\n if (this.isMidi) {\r\n reader.readAsArrayBuffer(req.response);\r\n }\r\n else if (this.binary) {\r\n reader.readAsBinaryString(req.response);\r\n } else {\r\n reader.readAsText(req.response);\r\n }\r\n });\r\n });\r\n req.responseType = 'blob';\r\n req.open('GET', this.path);\r\n req.send();\r\n return promise;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, draggable, createTopDomContainer } from '../common/htmlHelpers';\r\nimport { SmoLanguage } from './i18n/language';\r\ndeclare var $: any;\r\n\r\nexport interface HtmlHelpBlock {\r\n title: string,\r\n html: string,\r\n index: number\r\n}\r\nexport type HelpMode = 'cards' | 'expand';\r\nexport class SuiHelp {\r\n static helpMode: HelpMode = 'cards';\r\n static created = false;\r\n static currentCard: number = 0;\r\n static displayHelp() {\r\n $('body').addClass('showHelpDialog');\r\n if (!SuiHelp.created) {\r\n createTopDomContainer('helpDialog');\r\n SuiHelp.created = true;\r\n }\r\n $('.helpDialog').html('');\r\n $('.helpDialog').append(SuiHelp.closeButton.dom());\r\n SuiHelp.helpHtml.forEach((cat, catIx) => {\r\n const r = SuiHelp._buildElements(cat);\r\n $('.helpDialog').append(r.dom());\r\n });\r\n $('button.help-title').off('click').on('click', (ev: any) => {\r\n $(ev.currentTarget).closest('div.helpLine').toggleClass('showSection');\r\n $(ev.currentTarget).find('span.icon').toggleClass('icon-plus');\r\n $(ev.currentTarget).find('span.icon').toggleClass('icon-minus');\r\n });\r\n $('.helpDialog button.icon-cross').off('click').on('click', () => {\r\n $('body').removeClass('showHelpDialog');\r\n $('.workspace').css('height', '');\r\n });\r\n const wsh = window.innerHeight;\r\n $('.workspace').css('height', '' + wsh + 'px');\r\n const cb = () => {};\r\n createTopDomContainer('.draganime');\r\n draggable({\r\n parent: $('.helpDialog'),\r\n handle: $('.helpDialog').find('.icon-move'),\r\n animateDiv:'.draganime',\r\n cb,\r\n moveParent: true\r\n });\r\n SuiHelp.setCards();\r\n }\r\n static setCards() {\r\n $('.helpDialog').addClass('card-view');\r\n const lines = $('.helpDialog .helpLine');\r\n const numLines = $(lines).length;\r\n $(lines).each((ix: number, line: any) => {\r\n const lineno = parseInt($(line).attr('data-index'));\r\n if (lineno !== SuiHelp.currentCard) {\r\n $(line).addClass('hide');\r\n } else {\r\n $(line).removeClass('hide');\r\n const prevButton = $(line).find('button.prev-topic');\r\n const nextButton = $(line).find('button.next-topic');\r\n if (lineno === numLines - 1) {\r\n $(nextButton).addClass('hide');\r\n }\r\n if (lineno === 0) {\r\n $(prevButton).addClass('hide');\r\n }\r\n $(prevButton).off('click').on('click', () => {\r\n SuiHelp.currentCard = (SuiHelp.currentCard + (numLines - 1)) % numLines;\r\n SuiHelp.setCards();\r\n });\r\n $(nextButton).off('click').on('click', () => {\r\n SuiHelp.currentCard = (SuiHelp.currentCard + 1) % numLines;\r\n SuiHelp.setCards();\r\n });\r\n }\r\n });\r\n }\r\n\r\n static get closeButton() {\r\n const b = buildDom;\r\n const r = b('div').append(b('span').classes('icon icon-move')).append('div').classes('help-closer').append(\r\n b('button').classes('icon-cross close'));\r\n return r;\r\n }\r\n\r\n static _buildElements(helps: HtmlHelpBlock) {\r\n const b = buildDom;\r\n const r = b('div').classes('helpLine').attr('data-index', helps.index.toString())\r\n .append(b('div').classes('help-category-button')\r\n .append(b('button')\r\n .append(b('span').classes('icon icon-plus')).classes('help-title')\r\n .append(b('span').classes('help-category-text').text(helps.title))))\r\n .append(b('h3').text(helps.title)) \r\n .append(b('div').classes('help-content').html(helps.html))\r\n .append(b('div').classes('button-container')\r\n .append(b('button').classes('prev-topic')\r\n .append(b('span').classes('icon icon-arrow-left'))\r\n .append(b('span').classes('prev-topic-text').text('Previous Topic')))\r\n .append(b('button').classes('next-topic')\r\n .append(b('span').classes('next-topic-text').text('Next Topic'))\r\n .append(b('span').classes(' icon icon-arrow-right'))));\r\n return r;\r\n }\r\n\r\n static get helpHtml() {\r\n /* [cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardVoicesHiddenNotesHtmlEn\r\n]; */\r\n const cards = [\r\n { title: 'Keys', html: SmoLanguage.getHelpFile('cardKeysHtml') },\r\n { title: 'Notes - letter notes', html: SmoLanguage.getHelpFile('cardNotesLetterHtml') },\r\n { title: 'Notes - chromatic and octave', html: SmoLanguage.getHelpFile('cardNotesChromaticHtml') },\r\n { title: 'Notes - chords', html: SmoLanguage.getHelpFile('cardNotesChordsHtml') },\r\n { title: 'Notes - rests', html: SmoLanguage.getHelpFile('cardNotesRestsHtml') },\r\n { title: 'Duration', html: SmoLanguage.getHelpFile('cardDurationNotesHtml') },\r\n { title: 'Duration - tuplets', html: SmoLanguage.getHelpFile('cardDurationTupletsHtml') },\r\n { title: 'Selections - notes', html: SmoLanguage.getHelpFile('cardSelectionsNotesHtml') },\r\n { title: 'Selections - modifiers', html: SmoLanguage.getHelpFile('cardSelectionsModifiersHtml') },\r\n { title: 'Selections - non-selectable modifiers', html: SmoLanguage.getHelpFile('cardSelectionsNonSelectableHtml') },\r\n { title: 'Selections - slash menus', html: SmoLanguage.getHelpFile('cardSelectionsSlashHtml') },\r\n { title: 'Beams and Stems - direction', html: SmoLanguage.getHelpFile('cardBeamsAndStemsDirectionHtml') },\r\n { title: 'Beams and Stems - grouping', html: SmoLanguage.getHelpFile('cardBeamsAndStemsGroupingHtml') },\r\n { title: 'Measures - insert and delete', html: SmoLanguage.getHelpFile('cardMeasuresAddDeleteHtml') },\r\n { title: 'Staves - add and delete', html: SmoLanguage.getHelpFile('cardPartAddDeleteHtml') },\r\n { title: 'Voices - create and delete', html: SmoLanguage.getHelpFile('cardVoicesCreateDeleteHtml') },\r\n ];\r\n const blocks: HtmlHelpBlock[] = [];\r\n cards.forEach((card, cardIx) => {\r\n blocks.push({ index: cardIx, ...card});\r\n });\r\n return blocks;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoLanguageStringAr } from './language_ar';\r\nimport { smoLanguageStringDe } from './language_de';\r\nimport { smoLanguageStringEn } from './language_en';\r\nimport { MenuChoiceDefinition, MenuDefinition, MenuTranslation } from '../menus/menu';\r\nimport { ButtonLabel } from '../buttons/button';\r\nimport { RibbonButtons } from '../buttons/ribbon';\r\nimport { DialogTranslation } from '../dialogs/dialog';\r\ndeclare var $: any;\r\n\r\nexport interface TranslationStrings {\r\n dialogs: DialogTranslation[],\r\n menus: MenuTranslation[],\r\n buttonText: ButtonLabel[]\r\n}\r\nexport type languageDirection = 'ltr' | 'rtl';\r\nexport interface LanguageTranslation {\r\n dir: languageDirection, strings: TranslationStrings, helpHtml: any\r\n}\r\nexport class SmoTranslator {\r\n static dialogs: any[] = [];\r\n\r\n static menus: any[] = [];\r\n static debugMask: number = 0;\r\n\r\n static registerMenu(_class: any) {\r\n if (!SmoTranslator.menus[_class]) {\r\n SmoTranslator.menus[_class] = true;\r\n }\r\n }\r\n static registerDialog(_class: any) {\r\n if (!SmoTranslator.dialogs[_class]) {\r\n SmoTranslator.dialogs[_class] = true;\r\n }\r\n }\r\n\r\n static printLanguages() {\r\n const dialogs: any[] = [];\r\n const menus: any[] = [];\r\n SmoTranslator.allDialogs.forEach((key) => {\r\n SmoTranslator.registerDialog(key);\r\n const translatable: any = eval('globalThis.Smo.' + key);\r\n dialogs.push(translatable.printTranslate(key));\r\n });\r\n SmoTranslator.allMenus.forEach((key) => {\r\n SmoTranslator.registerMenu(key);\r\n const translatable: any = eval('globalThis.Smo.' + key);\r\n menus.push(translatable.printTranslate(key));\r\n });\r\n const buttonText: any[] = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n if (SmoTranslator.debugMask) {\r\n console.log(JSON.stringify({ dialogs, menus, buttonText }, null, ' '));\r\n }\r\n }\r\n\r\n static _updateDialog(dialogStrings: DialogTranslation, _dialogClass: any, dialogClass: string) {\r\n if (!dialogStrings) {\r\n console.log('no strings for Dialog ' + dialogClass);\r\n return;\r\n }\r\n _dialogClass.label = dialogStrings.label;\r\n const staticText = dialogStrings.staticText;\r\n if (staticText || _dialogClass.dialogElements.staticText) {\r\n const keys = Object.keys(staticText);\r\n keys.forEach((key) => {\r\n _dialogClass.dialogElements.staticText[key] = staticText[key];\r\n });\r\n }\r\n _dialogClass.dialogElements.label = dialogStrings.label;\r\n _dialogClass.dialogElements.elements.forEach((component: any) => {\r\n const componentStrings = dialogStrings.dialogElements.find((ds: any) => ds.id === component.smoName);\r\n if (componentStrings) {\r\n component.label = componentStrings.label;\r\n if (component.options) {\r\n component.options.forEach((option: any) => {\r\n const optionString = componentStrings!.options!.find((cs: any) => cs.value === option.value);\r\n if (!optionString) {\r\n if (SmoTranslator.debugMask) {\r\n console.log('no string for option ' + option.value + ' in component ' + component.smoName + ' in dialog ' + dialogClass);\r\n }\r\n } else {\r\n option.label = optionString.label;\r\n }\r\n });\r\n }\r\n } else {\r\n if (SmoTranslator.debugMask) {\r\n console.log('Untranslated component in ' + dialogClass);\r\n }\r\n }\r\n });\r\n }\r\n\r\n static _updateMenu(menuStrings: MenuTranslation, _menuClass: any, menuClass: string) {\r\n if (!menuStrings) {\r\n console.log('no strings for Menu ' + menuClass);\r\n return;\r\n }\r\n const defaults = _menuClass.defaults as MenuDefinition;\r\n defaults.menuItems.forEach((menuItem: MenuChoiceDefinition) => {\r\n const val = menuItem.value;\r\n const nvPair = menuStrings.menuItems.find((ff: any) => ff.value === val);\r\n if (!nvPair) {\r\n if (SmoTranslator.debugMask) {\r\n console.log('no xlate for ' + val + ' in menu ' + menuClass);\r\n }\r\n } else {\r\n menuItem.text = nvPair.text;\r\n if (SmoTranslator.debugMask) {\r\n console.log('setting menu item value ' + val + ' to ' + nvPair.text);\r\n }\r\n }\r\n });\r\n }\r\n\r\n static setLanguage(language: string) {\r\n if (!(SmoLanguage as any)[language]) {\r\n return; // no xlate exists\r\n }\r\n const trans = (SmoLanguage as any)[language] as LanguageTranslation;\r\n // Set the text in all the menus\r\n SmoTranslator.allMenus.forEach((menuClass) => {\r\n const _class = eval('globalThis.Smo.' + menuClass);\r\n const menuStrings = trans.strings.menus.find((mm: MenuTranslation) => mm.ctor === menuClass);\r\n if (menuStrings) {\r\n SmoTranslator._updateMenu(menuStrings, _class, menuClass);\r\n\r\n // Set text in ribbon buttons that invoke menus\r\n const menuButton = $('.ribbonButtonContainer button.' + menuClass).find('.left-text .text-span');\r\n if (menuButton.length && menuStrings) {\r\n $(menuButton).text(menuStrings.label);\r\n }\r\n }\r\n });\r\n\r\n SmoTranslator.allDialogs.forEach((dialogClass) => {\r\n const _class = eval('globalThis.Smo.' + dialogClass);\r\n const dialogStrings = trans.strings.dialogs.find((mm: any) => mm.ctor === dialogClass);\r\n if (typeof (_class) === 'undefined') {\r\n console.log('no eval for class ' + dialogClass);\r\n return;\r\n }\r\n if (!dialogStrings) {\r\n return;\r\n }\r\n // Set text in ribbon buttons that invoke menus\r\n const dialogButton = $('.ribbonButtonContainer button.' + dialogClass).find('.left-text .text-span');\r\n if (dialogButton.length && dialogStrings) {\r\n $(dialogButton).text(dialogStrings.label);\r\n }\r\n\r\n SmoTranslator._updateDialog(dialogStrings, _class, dialogClass);\r\n });\r\n\r\n // Translate the buttons on the ribbon\r\n const langButtons = trans.strings.buttonText;\r\n if (langButtons) {\r\n RibbonButtons.translateButtons.forEach((button: any) => {\r\n const langButton = langButtons.find((lb: any) => lb.buttonId === button.buttonId);\r\n if (langButton) {\r\n const buttonDom = $('.ribbonButtonContainer #' + button.buttonId);\r\n if (buttonDom.length) {\r\n $(buttonDom).find('.left-text').text(langButton.buttonText);\r\n }\r\n }\r\n });\r\n }\r\n // Handle rtl languages\r\n $('body').find('.language-dir').each((ix: number, dd: any) => { $(dd).attr('dir', trans.dir); });\r\n }\r\n\r\n static get allMenus() {\r\n return [\r\n 'SuiDynamicsMenu',\r\n 'SuiFileMenu',\r\n 'SuiKeySignatureMenu',\r\n 'SuiLanguageMenu',\r\n 'SuiMeasureMenu',\r\n 'SuiPartMenu',\r\n 'SuiScoreMenu',\r\n 'SuiStaffModifierMenu',\r\n 'SuiTimeSignatureMenu',\r\n ];\r\n }\r\n\r\n static get allDialogs() {\r\n return [\r\n // file dialogs\r\n 'SuiChordChangeDialog',\r\n 'SuiDynamicModifierDialog',\r\n 'SuiGlobalLayoutDialog',\r\n 'SuiHairpinAttributesDialog',\r\n 'SuiInsertMeasures',\r\n 'SuiInstrumentDialog',\r\n 'SuiLoadFileDialog',\r\n 'SuiLoadMxmlDialog',\r\n 'SuiLyricDialog',\r\n 'SuiMeasureDialog',\r\n 'SuiPageLayoutDialog',\r\n 'SuiPartInfoDialog',\r\n 'SuiPrintFileDialog',\r\n 'SuiSaveFileDialog',\r\n 'SuiSaveMidiDialog',\r\n 'SuiSaveXmlDialog',\r\n 'SuiScoreFontDialog',\r\n 'SuiScorePreferencesDialog',\r\n 'SuiScoreIdentificationDialog',\r\n 'SuiScoreViewDialog',\r\n 'SuiSlurAttributesDialog',\r\n 'SuiStaffGroupDialog',\r\n 'SuiTempoDialog',\r\n 'SuiTextBlockDialog',\r\n 'SuiTieAttributesDialog',\r\n 'SuiTimeSignatureDialog',\r\n 'SuiVoltaAttributeDialog'\r\n ];\r\n }\r\n}\r\n\r\nexport class SmoLanguage {\r\n static getHelpFile(category: any) {\r\n // TODO: how to express language if it is not part of the config?\r\n return eval('globalThis.Smo.' + category + 'En');\r\n }\r\n static get en(): LanguageTranslation {\r\n const strings: TranslationStrings = JSON.parse(smoLanguageStringEn) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'ltr', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n\r\n static get ar(): LanguageTranslation {\r\n const strings = JSON.parse(smoLanguageStringAr) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'rtl', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n\r\n static get de(): LanguageTranslation {\r\n const strings = JSON.parse(smoLanguageStringDe) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'ltr', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n}\r\n","\r\nexport const smoLanguageStringAr = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Measure Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"وضع الإيقاع\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Duration (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Specify text and duration\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"وحدة لكل ضربه\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Page Size\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Letter (Portrait)\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Letter (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Custom\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Score Fonts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Engraving Font\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Start Position\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"End Position\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"ملف\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"جديدe\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"فتح\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Quick Save\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"حفظ\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"طباعه\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"إلغاء\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"الدليل\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"وزن الإيقاع\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Other\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"خطوط\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"تصاعد\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"تهابط\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"طمس / تعادل\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"النهاية التاسعة\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"ملف\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n }`;\r\n\r\n\r\nexport const quickStartHtmlar = `(Arabic)\r\n

Quick start guide

\r\n

If you don't like to read instructions, this cook's tour of Smoosic was made for you.

\r\n
    \r\n
  • One of buttons on the left is called 'File'. Click on it. The menu items before 'cancel' are pre-canned projects that you can use as a template to get you started.

    \r\n
  • \r\n
  • The cursor keys will navigate you to the different notes.

    \r\n
  • \r\n
  • Letters a-g on the computer keyboard change the note to those pitches

    \r\n
  • \r\n
  • 'Insert' adds a new, blank measure.

    \r\n
  • \r\n
  • The ribbon of thick blue buttons on the top expand to button groups, that contain most of the functionality of Smoosic.

    \r\n
  • \r\n
  • The buttons on the left bring up menus or dialogs that do basically what the buttons say.

    \r\n
  • \r\n
  • There are a few 'instant gratification' buttons for playing the music, refreshing the screen or changing the zoom level on the left part of the ribbon.

    \r\n
  • \r\n
  • The piano tool is an alternate way of entering music, or can be dismissed by the close button in the lower left.

    \r\n
  • \r\n
\r\n

\"\"

\r\n`;\r\n\r\n\r\nexport const selectionHtmlar = `(Arabic)\r\n

Selecting things

\r\n

Almost all operations in Smoosic act on the selected music. You can select notes in different ways:

\r\n
    \r\n
  1. with the computer mouse
  2. \r\n
  3. with the keyboard's navigation keys
  4. \r\n
  5. with the navigation keys on the ribbon
  6. \r\n
  7. with the piano tool, to some extent.
  8. \r\n
\r\n

\"\"

\r\n

You can select multiple things with the keyboard navigation keys, by selecting 'shift-arrow', just like many applications. There is a similar control for selection in the navigation ribbon. Some operations, like changing pitch for instance, act on all the selected notes.

\r\n

Sometimes a selection of one line affects all the measures in that column (or all the measures of the system, if you like). When you change the key, for instance, the selection determines where the key change starts. If you have multiple measures selected, it applies to those measures, and then changes back to whatever it was before.

\r\n`;\r\n\r\n\r\nexport const enterDurationsHtmlar = `(Arabic)\r\n

Note duration in Smoosic is done by changing the duration of an existing note. Usually, doubling the duration or cutting it in two, or adding a dot - duration to a note. You can also create tuplets for uneven sets of notes (3, 5, or 7).

\r\n

There are actually 3 ways to do many duration operations - using the piano tool, using the computer keyboard, or using the button ribbon. Like with many things, you should find entering duration using the keyboard fastest, once you have some experience with Smoosic. But the ribbon or the

\r\n

Changing note length with the keyboard

\r\n

You can change the length of notes using the ',' and '.' (comma and period) keys, which halve and double the note lengths, respectively. You can add a dot to the length of the note (multiplying length by 3/2 for the first dot, and 3/4 for the second dot, if you like to think of it that way) or remove a dot, using the '>' and '<'. The mnemonic device for these is '>' makes note duration greater. '<' makes note duration...less. (On most QWERTY keyboards, comma shifted is '<' and period shifted is '>').

\r\n

\"\"

\r\n

Note how the selection is preserved as the notes get shorter. When you change something, Smoosic will try to keep the selection as close as possible to what you had. You can use the cursor navigation keys to move to a specific selected note.

\r\n

\"\"

\r\n

When you increase the length of a note, Smoosic always 'borrows' from the next note in the measure that is eligible. So when you double the length of the 8th note, it combines the 16th, and 2 32nd notes, and collapses them into a single quarter. If Smoosic can't honor the request, it does nothing. For instance, it can't remove the dot from a note with no dot, and it can't extend beyond the length of the measure.

\r\n

You can create tuplets from the keyboard by typing Ctrl-3, Ctrl-5 or Ctrl-7 for triplets, quintuplets, and septuplets, respectively. Individual notes in a tuplet can be doubled and halved with the duration keys '-' (minus) and '=' (equals), just like non-tuplets. You 'untupletify' a tuplet by Ctrl-0.

\r\n

\"\"

\r\n

Changing note length with piano widget

\r\n

The piano widget is shown when the application starts, and can be restored from the left menu 'Piano' button when closed.

\r\n

You can double or halve note duration, or add dot duration, to a note using the piano tool.

\r\n

\"\"

\r\n

Changing note length from the button ribbon

\r\n

All the duration commands can be accomplished from the ribbon buttons.

\r\n

\"\"

\r\n

Note that the equivalent keyboard commands are also indicated on the right of each button, when it's available. (there are only so many keys, so there are some ribbon buttons with no key shortcut).

\r\n`;\r\n\r\n\r\nexport const enterPitchesHtmlar = `(Arabic)\r\n

There are a few ways to enter notes in Smoosic. You can click on the piano widget keys, or you can enter notes directly from the keyboard.

\r\n

Your first Smoosical notes

\r\n

Notes from the keyboard

\r\n

The keys a-g on the computer keyboard will enter a corresponding note, A-G, on the staff (Most key commands in Smoosic have a mnemonic device). The default behavior is for the cursor to advance when a note is entered in this way. (Future behavior, auto-advance can be overridden). You navigate to the notes using the keyboard navigation arrows.

\r\n

\"\"

\r\n

You change the octave from the keyboard using the '_' and '+' (underscore, aka shift-minus, and plus), and change notes chromatically using '-' and '=' key. The mnemonic device for this is 'plus and minus' for raising and lowering pitches. You can change the enharmonic spelling of the note using the 'Shift-E' (mnemonic: E for enharmonic - get it?). And Shift-F gives you a courtesy, or cautionary, accidental (mnemonic - F comes after E).

\r\n

\"\"

\r\n

You can create chords and intervals using the number keys along the top of the keyboard. The '3' key makes a third, the '4' key a fourth, and so on. Shift+number gives you the interval down.

\r\n

\"\"

\r\n

Note that the interval starts from the highest note in the chord, for intervals going up, and the lowest note in the chord, for intervals going down. You can select individual pitches in the chord using 'Shift-Up Arrow' as shown. This is similar to how modifiers like dynamics are selected. Once you have the pitch selected, you can change it using the up-down commands shows above, or change the enharmonic spelling.

\r\n

There is currently no way to remove a single pitch from the chord. If you want to collapse the chord, just type a letter a-g on the keyboard, and it will be replaced with a single note.

\r\n

Notes from the piano tool

\r\n

You can also add notes to your score with the piano tool, by clicking on the corresponding notes.

\r\n

\"\"

\r\n

Clicking on the piano gives the selected note the piano pitch. The octave of the note is based on the clef, so for treble clef, the 'C' is middle 'C'. You can change the octave of the note, and move the pitch up and down. The top buttons affect the pitch, and the bottom buttons navigate or change the length of the note. Clicking on the chord button acts like a 'sustain' that puts additional notes in chords.

\r\n

Everything that can be done from the piano widget, and most things in Smoosic generally, can be done more efficiently with keyboard commands. Once you are comfortable with the computer keyboard, you can free up some screen real-estate by closing the piano widget (cross control in lower left). You can bring it up again with the piano menu button on the left.

\r\n`;\r\n","\r\nexport const smoLanguageStringDe = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Datei laden\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Score speichern\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Score speichern\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Takt Voreinstellungen\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Takt Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Voreinstellungen\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Tempo Modus\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Dauer (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Text und Dauer festlegen\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"Einheit für Beat\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Seitengröße\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Brief\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Brief (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"benutzerdefiniert\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Schriftart\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Schriftart\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Startposition\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Endposition\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"Datei\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"Neu\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"Öffnen\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Schnellspeichern\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Speichern\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Drucken\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"Tonlage\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"Taktzeit\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"benutzerdefiniert\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"Lines\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"Crescendo\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"Decrescendo\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Bogen/Bindung\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"nth Ende\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"File\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n}`;\r\n","\r\nexport const smoLanguageStringEn = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Measure Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Tempo Mode\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Duration (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Specify text and duration\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"Unit for Beat\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Page Size\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Letter (Portrait)\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Letter (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Custom\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Score Fonts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Engraving Font\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Start Position\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"End Position\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"File\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"New Score\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"Open\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Quick Save\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Print\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }, \r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"Key\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"Time Sig\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Other\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"Lines\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"Crescendo\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"Decrescendo\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Slur\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"nth ending\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"File\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n }`;\r\n\r\nexport const cardKeysHtmlEn = `\r\n

Welcome to Smoosic

\r\n

Smoosic was designed to allow you to enter music as fast as you can type, once you learn some basic commands and patterns. While music can be entered in multiple ways, the fastest/easiest way to create or edit in Smoosic is to use some basic keyboard shortcuts.

\r\n

You can customize the key bindings (which keys do what) by changing the files in src/ui/keyBindings/ directory, or by providing your own bindings. See the custom-keybinding.html in the project that demonstrates how to create your own key bindings.\r\n\"\"

\r\n`;\r\n\r\nexport const cardNotesLetterHtmlEn = `\r\n

Most key commands in Smoosic have a mnemonic device. The keys a-g on the computer keyboard will enter a corresponding note, A-G, on the staff. The default behavior is for the cursor to advance when a note is entered in this way. This can be overridden in the 'Score Preferences' dialog. You navigate to the notes using the keyboard navigation arrows.

\r\n

\"\"

\r\n

Some conventions used in this documentation:

\r\n

Keystrokes are specified in bold, e.g. x means the 'x' key. Shift+E means to press the Shift and E keys at the same time.

\r\n

Key sequences are specified on their own line:

\r\n

/ a

\r\n

means to press the / key followed by the a key.

\r\n`;\r\n\r\nexport const cardNotesChromaticHtmlEn = `\r\n

You change notes chromatically using - and = key. You can change the octave using the _ (underscore) and + (plus) keys. The mnemonic device for this is 'plus and minus' for raising and lowering pitches. You can change the enharmonic spelling of the note using the Shift+E (mnemonic: E for enharmonic - get it?). And Shift+F gives you a courtesy, or cautionary, accidental (mnemonic - F comes after E).

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardNotesChordsHtmlEn = `\r\n

You can create chords and intervals using the number keys along the top of the keyboard. The 3 key makes a third, the 4 key a fourth, and so on. Shift+3 gives you the 3rd below.

\r\n

You can toggle selection to individual pitches by using Shift+UpArrow. So to create a G triad, starting with g, hit 3 for the 'B', 3 again for the 'D'. So far, we have G major. To lower the 3rd, Shift+up to select the 'B', then - to lower the pitch.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardNotesRestsHtmlEn = `\r\n

You can toggle notes to rests by pressing r or Delete.

\r\n

In Smoosic, you can't truly delete a note - a 4/4 bar will always have 4 beats of music. But you can 'hide' notes by creating invisible rests. This is another use of Delete.

\r\n

Delete follows standard toggle behavior - deleted notes become rests, and delete rests become invisible rests. Hitting Delete a third time restores the note.

\r\n

Invisible rests show up as partially opaque in the display. But when printed, they are truly invisible.

\r\n

\"\"

\r\n`\r\nexport const cardDurationNotesHtmlEn = `\r\n

Changing duration is a little different in Smoosic than other programs. Rather than selecting a duration (quarter note, etc.), you change (increase/decrease) the duration of existing notes.

\r\n

You can change the length of notes using the , and . (comma and period) keys, which halve and double the note lengths, respectively. You can add a dot to the length of the note (multiplying length by 3/2 for the first dot, and 5/4 for the second dot, if you like to think of it that way) or remove a dot, using the > (Shift+,) and ,. The mnemonic device for these is > makes note duration greater. < makes note duration less. (On most QWERTY keyboards, comma shifted is < and period shifted is >).

\r\n

\"\"

`;\r\n\r\nexport const cardDurationTupletsHtmlEn = `\r\n

You can create tuplets from the keyboard by typing Ctrl+3, Ctrl+5 or Ctrl+7 for triplets, quintuplets, and septuplets, respectively. Individual notes in a tuplet can be doubled and halved with the duration keys - (minus) and = (equals), just like non-tuplets. You 'untupletify' a tuplet by Ctrl+0.

\r\n

\"\"

`;\r\n\r\nexport const cardSelectionsNotesHtmlEn = `

Many operations in Smoosic act on the selected music. You select the music the way you select text in a text app, with the to move right, to move left. Shift+→ expands the selection left, etc.

\r\n

\"\"

\r\n

In the last example, note how the selection is preserved as the notes get shorter. When you change something, Smoosic will try to keep the selection as close as possible to what you had when the music changes.\r\nYou can also use the mouse to select notes. Selecting a range across multiple staves is not supported (yet). But you can use Control+click to select notes in multiple staves.

\r\n`;\r\nexport const cardSelectionsModifiersHtmlEn = ` \r\n

A modifier is anything that affects a note, such as an articulation or dynamic. Many modifiers, especially those that affect multiple notes, can be selected with the keyboard. To select a modifier such as a slur, crescendo, or ending, use 'Alt-left arrow' or 'Alt-right arrow' when the first or last note of the modifier is selected. This will move the selecttion between modifiers that apply to that note.

\r\n

You can also select modifiers with the mouse.

\r\n

Once selected, you can bring up the modifier dialog by hitting 'Enter'.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardSelectionsNonSelectableHtmlEn = `\r\n

Some modifiers, such as articulations, aren't selectable. The keys h, i, j, and k bring up articulations that aren't selectable, but are placed on the note automatically. You can toggle position and on/off by repeating the key.

\r\n

Additional articulations are available from the of articulation button group.

\r\n

You can customize the articulations selected by the key bindings by changing the ui/keyBindings/editorKeys.ts file, or by providing your own bindings. See the custom-keybinding.html example in the project.

\r\n

\"\"

`;\r\n\r\n\r\nexport const cardSelectionsSlashHtmlEn = `\r\n

The buttons on the left (for L-to-R languages) bring up menus and dialogs. These dialogs can also be accessed via the 'Slash' menus.

\r\n

For instance, slurs, ties, hairpins and other modifiers that work on a range of music are created from the 'Lines' menu. You can access this via the slash menu:

\r\n

/ l (el, not one) 2

\r\n

Then you can use the modifier selection to edit the phrase marking to your taste.

\r\n

You can also select modifiers or any menu option with the mouse.

\r\n

\"\"

`;\r\n\r\nexport const cardBeamsAndStemsDirectionHtmlEn = `\r\n

Beams and Stems part 1: Direction

\r\n

The direction of beams and stems is controlled selecting the notes you want to affect and typing Shift+B. The selection will be toggled between auto (default), up, and down. 'Auto' means stems are up if the notes are below 3rd line, so the beam direction will change if the notes do.

\r\n

Note that there are 3 settings, even though only 2 will produce a visible change for any given stem, since 'auto' will be either up or down.

\r\n

\"\"

\r\n`;\r\nexport const cardBeamsAndStemsGroupingHtmlEn = `\r\n

By default, notes are auto-beamed so that a 1/4 note is beamed. So 1/8 notes in 4/4 time will be beamed in 2's, 16th notes in 4's etc. In triple time (e.g. 6/8, 9/8), 1/8 notes are beamed in 3's. You can change this default in the Score Preferences.

\r\n

You can split a beam at any point using the x (mnemonic: x to cancel beaming. You can create a beam by selecting the notes and typing Shift-X. Only notes with 1/8 note duration or less can be beamed.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardMeasuresAddDeleteHtmlEn = `\r\n

You can add a single measure at the current selection point by pressing Insert. Shift+Insert appends the new measure to the selected measure.

\r\n

To add many measures, you can do this from the 'Add Measures' dialog. This can be brought up through the 'Measure' button on the left, or by pressing

\r\n

/ a 0 (zero)

\r\n

Deleting the selected measures can be done from the 'Measures' menu on the left, or by pressing

\r\n

/ a 1.

\r\n

Note the insert and delete key behavior is asymmetric. The Delete key is used to toggle notes to rests, and also I thought this made it too easy to accidentally delete a lot of music.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardVoicesCreateDeleteHtmlEn = `\r\n

If you need different rhythms in the same stave, you can do this by creating multiple voices. You add a voice to a measure using the voice buttons - you can have up to 4 voices in a measure.

\r\n

You can select a differnt voice using the voice buttons also.

\r\n

You can delete any voice except voice 1 by selecting the voice, and selecting the Vx button. When a voice is deleted, any voices with a higher number are bumped down - e.g., if you delete voice 2, voice 3 becomes voice 2, etc.

\r\n

By default, the odd-numbered voices (indexed from 1) have stems that point up. You can use the Ctrl+B to change the staff direction if you want.

\r\n

Notes in voices > 1 have different colors in the editor. This is to make editing easier. All voices are black when the music is printed.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardPartAddDeleteHtmlEn = `

You can add a new stave/part from the parts menu.

\r\n

/ p 0 (zero)

\r\n

From the dialog, you can select the initial properties of the new stave, such as the clef and transposition.

\r\n

To delete the selected staves:\r\n/ p 1 (zero)

\r\n

Note that you can't delete the only stave - the music will always contain at least one stave.

\r\n

Note: The 'Part' menu may show different options depending on what else is in the score. Other characteristics of the part and staff are covered in the 'Working with Scores' section.

\r\n

\"\"

\r\n`;\r\n\r\nexport const helpCards = [cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn\r\n];","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from \"../../common/htmlHelpers\";\r\nimport { SmoLanguage, SmoTranslator, TranslationStrings } from \"./language\";\r\nimport { RibbonButtons } from \"../buttons/ribbon\";\r\nimport { ButtonLabel } from \"../buttons/button\";\r\nimport { DialogTranslation, DialogDefinition } from \"../dialogs/dialog\";\r\nimport { DialogDefinitionElement, DialogDefinitionOption } from \"../dialogs/components/baseComponent\";\r\n\r\ndeclare var $: any;\r\n\r\n// ## SmoTranslationEditor\r\n// Create a somewhat user-friendly editor DOM to translate SMO\r\n// dialogs and menus, and any subset, into other languages.\r\nexport class SmoTranslationEditor {\r\n // ### _getHtmlTextInput\r\n // All the editable text elements contain: the code label or value from the\r\n // UI element, the En string, and the translated string, or a copy of the\r\n // EN string if the string has not been translated.\r\n static _getHtmlTextInput(dbLabel: string, enLabel: string, langLabel: string, labelType: string, labelId: string) {\r\n var b = buildDom;\r\n\r\n const compHtml = b('div').classes('dialog-element-container')\r\n .attr('data-' + labelType, labelId).append(\r\n b('div').classes('dialog-component-label').append(\r\n b('span').classes('trans-label').append(\r\n b('span').classes('trans-db-text').text(dbLabel)\r\n ).append(\r\n b('span').classes('trans-en-text').text(enLabel)\r\n ).append(\r\n b('input').classes('trans-label-input')\r\n ).append(\r\n b('span').classes('plaintext-translate hide').text(langLabel)\r\n )\r\n )\r\n ).dom();\r\n return compHtml;\r\n }\r\n\r\n // ### _getMenuTextDialogHtml\r\n // Get all the menu item labels for translation\r\n static _getMenuTextDialogHtml(menuCtor: string, enStrings: TranslationStrings, langStrings: TranslationStrings) {\r\n const menuClass = eval('globalThis.Smo.' + menuCtor);\r\n const menuItems = menuClass['defaults'].menuItems;\r\n var enMenu = enStrings.menus.find((mn: any) => mn.ctor === menuCtor);\r\n\r\n // Get the JSON EN menu, or copy the DB strings if it doesn't exist\r\n if (!enMenu) {\r\n enMenu = JSON.parse(JSON.stringify(menuClass['defaults']));\r\n enMenu!.ctor = menuCtor;\r\n }\r\n // Get the JSON language menu strings, or copy the EN strings if it doesn't exist\r\n var langMenu = langStrings.menus.find((mn: any) => mn.ctor === menuCtor);\r\n if (!langMenu) {\r\n langMenu = JSON.parse(JSON.stringify(menuClass['defaults']));\r\n langMenu!.ctor = menuCtor;\r\n }\r\n\r\n // create the DOM menu container\r\n var b = buildDom;\r\n const container = b('div').classes('menu-translate-container')\r\n .attr('data-menucontainer', menuCtor).append(\r\n b('button').classes('icon-plus trans-expander')).append(\r\n b('span').classes('menu-translate-title').text(menuCtor)\r\n ).dom();\r\n const menuItemsDom = b('div').classes('menu-element-container').dom();\r\n\r\n // create the label editor\r\n const menuLabel = SmoTranslationEditor._getHtmlTextInput(menuClass['defaults'].label, enMenu!.label, langMenu!.label,\r\n 'menulabel', menuCtor);\r\n $(menuItemsDom).append(menuLabel);\r\n $(container).append(menuItemsDom);\r\n\r\n // create the editor for each item\r\n menuItems.forEach((item: any) => {\r\n var enItem = enMenu!.menuItems.find((mi: any) => mi.value === item.value);\r\n if (!enItem) {\r\n enItem = JSON.parse(JSON.stringify(item));\r\n }\r\n var langItem = langMenu!.menuItems!.find((mi: any) => mi.value === item.value);\r\n if (!langItem) {\r\n langItem = JSON.parse(JSON.stringify(item));\r\n }\r\n const menuItemDom = b('div').classes('menu-item-container').dom();\r\n const itemEditDom = SmoTranslationEditor._getHtmlTextInput(\r\n item.value, enItem!.text, langItem!.text,\r\n 'itemtext', item.value);\r\n $(menuItemDom).append(itemEditDom);\r\n $(menuItemsDom).append(menuItemDom);\r\n });\r\n return container;\r\n }\r\n static getButtonTranslateHtml(enStrings: TranslationStrings, langStrings: TranslationStrings, transContainer: HTMLElement) {\r\n var b = buildDom;\r\n var buttonDom: HTMLElement = b('div').classes('ribbon-translate-container')\r\n .attr('data-ribbon-translate', 'buttons').append(\r\n b('button').classes('icon-plus trans-expander')).append(\r\n b('span').classes('ribbon-translate-title').text('Button Text')\r\n ).dom() as HTMLElement;\r\n\r\n var enKeys: ButtonLabel[] = enStrings.buttonText;\r\n if (!enKeys) {\r\n enKeys = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n }\r\n var langKeys = langStrings.buttonText;\r\n if (!langKeys) {\r\n langKeys = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n }\r\n enKeys.forEach((button: ButtonLabel) => {\r\n const langObj = langKeys.find((langText: any) => langText.buttonId === button.buttonId);\r\n const langString = langObj ? langObj.buttonText : button.buttonText;\r\n var buttonContainer: HTMLElement = b('div').classes('ribbon-button-container')\r\n .attr('data-buttoncontainer', button.buttonId).dom();\r\n $(buttonContainer).append(\r\n SmoTranslationEditor._getHtmlTextInput(button.buttonId, button.buttonText, langString, 'ribbon-button', button.buttonId)\r\n );\r\n $(buttonDom).append(buttonContainer);\r\n });\r\n $(transContainer).append(buttonDom);\r\n }\r\n\r\n // ### _getStaticTextDialogHtml\r\n // create DOM for the static text section of the dialogs.\r\n static _getStaticTextDialogHtml(elements: DialogDefinition, enDb: Record, langDb: Record, htmlContainer: HTMLElement) {\r\n var b = buildDom;\r\n const keys = Object.keys(elements.staticText);\r\n const nodeContainer = b('div')\r\n .classes('dialog-element-container')\r\n .attr('data-component', 'staticText')\r\n .dom();\r\n elements.staticText.forEach((nv: any) => {\r\n const name = Object.keys(nv)[0];\r\n const value = nv[name];\r\n var enVal = enDb[name] ? enDb[name] : value;\r\n var langVal = langDb[name] ? langDb[name] : enDb[name];\r\n const translateElement = SmoTranslationEditor._getHtmlTextInput(\r\n name, enVal, langVal, 'statictext', name);\r\n $(nodeContainer).append(translateElement);\r\n });\r\n $(htmlContainer).append(nodeContainer);\r\n }\r\n static _getDialogComponentHtml(element: DialogDefinitionElement, enDb: DialogTranslation, langDb: DialogTranslation, container: HTMLElement) {\r\n var b = buildDom;\r\n var label = element.label;\r\n var smoName = element.smoName;\r\n if (typeof (enDb.dialogElements.find) !== 'function') {\r\n console.warn('no ENDB!');\r\n }\r\n var enComponent = enDb.dialogElements.find((st: any) => st.id === smoName);\r\n if (!enComponent) {\r\n enComponent = JSON.parse(JSON.stringify(element))\r\n }\r\n var langComponent = langDb.dialogElements.find((st: any) => st.id === smoName);\r\n if (!langComponent) {\r\n langComponent = JSON.parse(JSON.stringify(element));\r\n }\r\n const enLabel = enComponent!.label ? enComponent!.label : label;\r\n const langLabel = langComponent!.label ? langComponent!.label : label;\r\n const compHtml = SmoTranslationEditor._getHtmlTextInput(\r\n label, enLabel, langLabel, 'component', smoName);\r\n\r\n if (element.options) {\r\n const optionsHtml = b('div').classes('dialog-component-options').dom();\r\n $(compHtml).append(optionsHtml);\r\n if (!enComponent!.options) {\r\n enComponent!.options = JSON.parse(JSON.stringify(element.options));\r\n }\r\n if (!langComponent!.options) {\r\n langComponent!.options = JSON.parse(JSON.stringify(element.options));\r\n }\r\n\r\n element.options.forEach((option: DialogDefinitionOption) => {\r\n var enOption = enComponent!.options!.find((op: any) => op.value === option.value);\r\n var langOption = langComponent!.options!.find((op: any) => op.value === option.value);\r\n if (!enOption || !enOption.label) {\r\n enOption = JSON.parse(JSON.stringify(option));\r\n }\r\n if (!langOption || !langOption.label) {\r\n langOption = JSON.parse(JSON.stringify(option));\r\n }\r\n const optionHtml = SmoTranslationEditor._getHtmlTextInput(\r\n option.value.toString(), enOption!.label, langOption!.label, 'component-option', option!.value.toString());\r\n $(optionsHtml).append(optionHtml)\r\n });\r\n }\r\n $(container).append(compHtml);\r\n }\r\n\r\n static getDialogTranslationHtml(dialogCtor: string, enStrings: TranslationStrings, langStrings: TranslationStrings) {\r\n var b = buildDom;\r\n var container: HTMLElement = b('div').classes('db-translate-container').attr('data-dbcontainer', dialogCtor)\r\n .append(b('button').classes('icon-plus trans-expander'))\r\n .append(b('span').classes('db-translate-title').text(dialogCtor)).dom() as HTMLElement;\r\n var ctor = eval('globalThis.Smo.' + dialogCtor);\r\n if (!ctor) {\r\n console.warn('Bad dialog in translate: ' + dialogCtor);\r\n return;\r\n }\r\n var elements = ctor.dialogElements as DialogDefinition;\r\n var enDb = enStrings.dialogs.find((dbStr: DialogTranslation) => dbStr.ctor === dialogCtor);\r\n if (!enDb) {\r\n enDb = JSON.parse(JSON.stringify({\r\n ctor: dialogCtor, label: elements.label, dialogElements: elements.elements, staticText: elements.staticText\r\n }\r\n ));\r\n }\r\n var langDb = langStrings.dialogs.find((dbStr: DialogTranslation) => dbStr.ctor === dialogCtor);\r\n if (!langDb) {\r\n langDb = JSON.parse(JSON.stringify({\r\n ctor: dialogCtor, label: elements.label, dialogElements: elements.elements, staticText: elements.staticText\r\n }));\r\n }\r\n const htmlText = SmoTranslationEditor._getHtmlTextInput(dialogCtor, enDb!.label, langDb!.label, 'dialog-label', dialogCtor);\r\n $(container).append(htmlText);\r\n if (elements.staticText) {\r\n SmoTranslationEditor._getStaticTextDialogHtml(elements, enDb!.staticText, langDb!.staticText, container);\r\n }\r\n elements.elements.forEach((element: DialogDefinitionElement) => {\r\n if (element.smoName && element.label) {\r\n SmoTranslationEditor._getDialogComponentHtml(element, enDb!, langDb!, container);\r\n }\r\n });\r\n return container;\r\n }\r\n static getAllTranslationHtml(lang: string) {\r\n const enStr: TranslationStrings = SmoLanguage.en.strings;\r\n const langStr: TranslationStrings = (SmoLanguage as any)[lang].strings;\r\n var b = buildDom;\r\n var container: HTMLElement = b('div').classes('top-translate-container')\r\n .attr('dir', (SmoLanguage as any)[lang].dir).dom() as HTMLElement;\r\n SmoTranslator.allDialogs.forEach((dialog) => {\r\n const htmlDom: HTMLElement | undefined = SmoTranslationEditor.getDialogTranslationHtml(dialog, enStr, langStr);\r\n if (htmlDom) {\r\n $(container).append(htmlDom);\r\n }\r\n });\r\n SmoTranslator.allMenus.forEach((menu) => {\r\n $(container).append(SmoTranslationEditor._getMenuTextDialogHtml(menu, enStr, langStr));\r\n });\r\n SmoTranslationEditor.getButtonTranslateHtml(enStr, langStr, container);\r\n var resultDom = b('div').classes('translation-json-container').append(\r\n b('textarea').classes('translation-json-text')).append(\r\n b('div').append(\r\n b('button').classes('translate-submit-button').text('Submit')\r\n )\r\n ).dom() as HTMLElement;\r\n $(container).append(resultDom);\r\n return container;\r\n }\r\n static parseDom() {\r\n var json = [];\r\n // $('.top-translate-container .db-translate-container[data-dbcontainer] [data-component=\"staticText\"]')\r\n $('.top-translate-container .db-translate-container[data-dbcontainer]').each((ix: number, dbEl: any) => {\r\n var db = $(dbEl).attr('data-dbcontainer');\r\n var obj: any = { ctor: db };\r\n var elements: any[] = [];\r\n var domComponents = $(dbEl).find('[data-component]');\r\n $(domComponents).each(function (ix: number, domComponent: any) {\r\n const compType = $(domComponent).attr('data-component');\r\n if (compType === 'staticText') {\r\n var stElements: any[] = [];\r\n $(domComponent).find('[data-statictext]').each((ix: number, stDom: any) => {\r\n const key = $(stDom).attr('data-statictext');\r\n const value = $(stDom).find('input.trans-label-input').val();\r\n const stNode = JSON.parse('{\"' + key + '\":\"' + value + '\"}');\r\n stElements.push(stNode);\r\n });\r\n elements.push({ staticText: stElements });\r\n } else {\r\n var dbComponent = { id: compType, label: '', options: {} };\r\n dbComponent.label = $(domComponent).find('input.trans-label-input').val();\r\n var compOptions: any[] = [];\r\n $(domComponent).find('[data-component-option]').each(function (ix: number, optionDom: any) {\r\n const value = $(optionDom).find('.trans-db-text').text();\r\n const label = $(optionDom).find('input.trans-label-input').val();\r\n compOptions.push({ value: value, label: label });\r\n });\r\n dbComponent.options = compOptions;\r\n elements.push(dbComponent);\r\n }\r\n });\r\n obj.dialogElements = elements;\r\n json.push(obj);\r\n });\r\n $('.menu-translate-container[data-menucontainer]').each((ix: number, menuEl: any) => {\r\n var menuId = $(menuEl).attr('data-menucontainer');\r\n var obj = { ctor: menuId, label: '', options: {}, menuItems: {} };\r\n const menuLabel = $(menuEl)\r\n .find('.dialog-element-container[data-menulabel] .trans-label-input')\r\n .val();\r\n obj.label = menuLabel;\r\n var menuItems: any[] = [];\r\n var itemsDom = $(menuEl).find('.menu-item-container .dialog-element-container');\r\n $(itemsDom).each((ix: number, itemDom: any) => {\r\n const value = $(itemDom).find('.trans-db-text').text();\r\n const text = $(itemDom).find('input.trans-label-input').val();\r\n menuItems.push({ value: value, text: text });\r\n });\r\n obj.menuItems = menuItems;\r\n json.push(obj);\r\n });\r\n var ribbonText: any[] = [];\r\n $('.ribbon-translate-container .ribbon-button-container').each((ix: number, buttonEl: any) => {\r\n const buttonId = $(buttonEl).find('.trans-db-text').text();\r\n const buttonText = $(buttonEl).find('input.trans-label-input').val();\r\n ribbonText.push({ buttonId: buttonId, buttonText: buttonText });\r\n });\r\n json.push({ ribbonText: ribbonText });\r\n return json;\r\n }\r\n static startEditor(lang: string) {\r\n createTopDomContainer('.translation-editor');\r\n var transDom = SmoTranslationEditor.getAllTranslationHtml(lang);\r\n $('.translation-editor').append(transDom);\r\n $('body').addClass('translation-mode');\r\n $('.plaintext-translate').each(function (ix: number, el: any) {\r\n var txt = $(el).text();\r\n $(el).closest('.trans-label').find('input.trans-label-input').val(txt);\r\n });\r\n\r\n $('.db-translate-container button.trans-expander').off('click').on('click', function (ev: any) {\r\n var exp = $(ev.target).closest('.db-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(ev.target).removeClass('icon-minus');\r\n $(ev.target).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(ev.target).addClass('icon-minus');\r\n $(ev.target).removeClass('icon-plus');\r\n }\r\n });\r\n $('.menu-translate-container button.trans-expander').off('click').on('click', function (ev: any) {\r\n var exp = $(ev.target).closest('.menu-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(ev.target).removeClass('icon-minus');\r\n $(ev.target).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(ev.target).addClass('icon-minus');\r\n $(ev.target).removeClass('icon-plus');\r\n }\r\n });\r\n $('.ribbon-translate-container button.trans-expander').off('click').on('click', function () {\r\n const dom = $('.ribbon-translate-container button.trans-expander');\r\n var exp = $(dom).closest('.ribbon-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(dom).removeClass('icon-minus');\r\n $(dom).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(dom).addClass('icon-minus');\r\n $(dom).removeClass('icon-plus');\r\n }\r\n });\r\n $('.translate-submit-button').off('click').on('click', () => {\r\n var json = SmoTranslationEditor.parseDom();\r\n $('.translation-json-text').val(JSON.stringify(json, null, ' '));\r\n });\r\n\r\n\r\n }\r\n\r\n}\r\n","import { KeyBinding } from '../../../application/common';\r\nexport class defaultEditorKeys {\r\n static get keys(): KeyBinding[] {\r\n return [{\r\n event: \"keydown\",\r\n key: \"=\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"transposeUp\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"-\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"transposeDown\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"+\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"upOctave\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"_\",\r\n ctrlKey:false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"downOctave\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"F\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleCourtesyAccidental\"\r\n }, {\r\n event: \"keydown\",\r\n key: \".\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"doubleDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \",\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"halveDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \">\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"dotDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"<\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"undotDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"a\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"A\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"slashGraceNotes\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"b\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"G\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addGraceNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"g\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"removeGraceNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"c\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"d\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"e\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"f\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"g\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"r\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeRest\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"r\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"rerender\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"p\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"playScore\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"P\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"pausePlayer\"\r\n },\r\n { event: \"keydown\",\r\n key: \" \",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"togglePlayer\"\r\n },\r\n {\r\n event: \"keydown\",\r\n key: \"s\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"stopPlayer\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"t\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"tempoDialog\"\r\n },\r\n {\r\n event: \"keydown\",\r\n key: \"3\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"5\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"7\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n },\r\n // interval commands\r\n {\r\n event: \"keydown\",\r\n key: \"2\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"3\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"4\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"5\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"6\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"7\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"8\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"@\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"$\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"#\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"%\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"^\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"&\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"*\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"8\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"0\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"unmakeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Insert\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addMeasure\"\r\n },{\r\n event: \"keydown\",\r\n key: \"Insert\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"i\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"I\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"B\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleBeamDirection\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Delete\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"deleteNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"d\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"deleteNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"z\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"undo\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"c\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"copy\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"x\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"toggleBeamGroup\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"X\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"beamSelections\"\r\n },{\r\n event: \"keydown\",\r\n key: \"v\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"paste\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"h\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveAccent\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"i\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveTenuto\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"j\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveStaccato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"k\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveMarcato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"l\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemovePizzicato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"H\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveAccent\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"I\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveTenuto\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"J\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveStaccato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"K\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveMarcato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"L\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemovePizzicato\"\r\n },{\r\n event: \"keydown\",\r\n key: \"E\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleEnharmonic\"\r\n }\r\n ];\r\n }\r\n\r\n}\r\n","import { KeyBinding } from '../../../application/common';\r\nexport class defaultTrackerKeys {\r\n static get keys(): KeyBinding[] {\r\n return [{\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionRight\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"advanceModifierSelection\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"advanceModifierSelection\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionLeft\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionRight\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionRightMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionLeft\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowUp\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionUp\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowDown\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionDown\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionRightMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionLeftMeasure\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowUp\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveSelectionPitchUp\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowDown\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveSelectionPitchDown\"\r\n }\r\n ];\r\n }\r\n}\r\n","import { SmoDynamicText } from '../../smo/data/noteModifiers';\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\ndeclare var $: any;\r\nexport class SuiDynamicsMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Dynamics',\r\n menuItems: [{\r\n icon: 'pianissimo',\r\n text: 'Pianissimo',\r\n value: 'pp'\r\n }, {\r\n icon: 'piano',\r\n text: 'Piano',\r\n value: 'p'\r\n }, {\r\n icon: 'mezzopiano',\r\n text: 'Mezzo-piano',\r\n value: 'mp'\r\n }, {\r\n icon: 'mezzoforte',\r\n text: 'Mezzo-forte',\r\n value: 'mf'\r\n }, {\r\n icon: 'forte',\r\n text: 'Forte',\r\n value: 'f'\r\n }, {\r\n icon: 'fortissimo',\r\n text: 'Fortissimo',\r\n value: 'ff'\r\n }, {\r\n icon: 'sfz',\r\n text: 'sfortzando',\r\n value: 'sfz'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiDynamicsMenu.defaults;\r\n }\r\n\r\n selection(ev: any) {\r\n const text: string = $(ev.currentTarget).attr('data-value');\r\n const props = SmoDynamicText.defaults;\r\n props.text = text;\r\n const dynamic = new SmoDynamicText(props);\r\n this.view.addDynamic(this.tracker.selections[0], dynamic);\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport {\r\n SuiSaveFileDialog, SuiPrintFileDialog, \r\n // SuiSaveActionsDialog, SuiLoadActionsDialog, \r\n SuiLoadFileDialog, SuiLoadMidiDialog,\r\n SuiSaveXmlDialog, SuiSaveMidiDialog, SuiLoadMxmlDialog, SuiSaveVexDialog,\r\n SuiSaveJsonValidationDialog\r\n} from '../dialogs/fileDialogs';\r\nimport { SmoScore } from '../../smo/data/score';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiFileMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults = {\r\n label: 'File',\r\n menuItems: [{\r\n icon: 'folder-new',\r\n text: 'New Score',\r\n value: 'newFile'\r\n }, {\r\n icon: 'folder-open',\r\n text: 'Open',\r\n value: 'openFile'\r\n }, {\r\n icon: '',\r\n text: 'Quick Save',\r\n value: 'quickSave'\r\n }, {\r\n icon: 'folder-save',\r\n text: 'Save',\r\n value: 'saveFile'\r\n }, {\r\n icon: '',\r\n text: 'Print',\r\n value: 'printScore'\r\n }, {\r\n icon: '',\r\n text: 'Import MusicXML',\r\n value: 'importMxml'\r\n }, {\r\n icon: '',\r\n text: 'Export MusicXML',\r\n value: 'exportXml'\r\n }, {\r\n icon: '',\r\n text: 'Export SMO For Validation',\r\n value: 'SMOJSON'\r\n }, {\r\n icon: '',\r\n text: 'Export Midi',\r\n value: 'exportMidi'\r\n }, {\r\n icon: '',\r\n text: 'Import Midi',\r\n value: 'importMidi'\r\n }, {\r\n icon: '',\r\n text: 'Export Vex',\r\n value: 'exportVex'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiFileMenu.defaults;\r\n }\r\n systemPrint() {\r\n window.print();\r\n createAndDisplayDialog(SuiPrintFileDialog, {\r\n ctor: 'SuiPrintFileDialog',\r\n id: 'print',\r\n eventSource: this.eventSource,\r\n modifier: null,\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n tracker: this.tracker\r\n });\r\n }\r\n async selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n const self = this;\r\n if (text === 'saveFile') {\r\n createAndDisplayDialog(SuiSaveFileDialog, {\r\n ctor: 'SuiSaveFileDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'openFile') {\r\n createAndDisplayDialog(SuiLoadFileDialog, {\r\n ctor: 'SuiLoadFileDialog',\r\n id: 'loadFile',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'newFile') {\r\n const score = SmoScore.getDefaultScore(SmoScore.defaults, null);\r\n await this.view.changeScore(score);\r\n } else if (text === 'quickSave') {\r\n this.view.quickSave();\r\n } else if (text === 'printScore') {\r\n const systemPrint = () => {\r\n self.systemPrint();\r\n };\r\n this.view.renderer.renderForPrintPromise().then(systemPrint);\r\n } else if (text === 'exportXml') {\r\n createAndDisplayDialog(SuiSaveXmlDialog, {\r\n ctor: 'SuiSaveXmlDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'SMOJSON') {\r\n createAndDisplayDialog(SuiSaveJsonValidationDialog, {\r\n ctor: 'SuiSaveSmoosicXmlDialog',\r\n id: 'saveSmoJson',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'exportVex') {\r\n createAndDisplayDialog(SuiSaveVexDialog, {\r\n ctor: 'SuiSaveVexDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'exportMidi') {\r\n createAndDisplayDialog(SuiSaveMidiDialog, {\r\n ctor: 'SuiSaveMidiDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'importMxml') {\r\n createAndDisplayDialog(SuiLoadMxmlDialog, {\r\n ctor: 'SuiLoadMxmlDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n }); \r\n } else if (text === 'importMidi') {\r\n createAndDisplayDialog(SuiLoadMidiDialog, {\r\n ctor: 'SuiLoadMidiDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiKeySignatureMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static get ctor() {\r\n return 'SuiKeySignatureMenu';\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Key',\r\n menuItems: [{\r\n icon: 'key-sig-c',\r\n text: 'C Major',\r\n value: 'KeyOfC',\r\n }, {\r\n icon: 'key-sig-f',\r\n text: 'F Major',\r\n value: 'KeyOfF',\r\n }, {\r\n icon: 'key-sig-g',\r\n text: 'G Major',\r\n value: 'KeyOfG',\r\n }, {\r\n icon: 'key-sig-bb',\r\n text: 'Bb Major',\r\n value: 'KeyOfBb'\r\n }, {\r\n icon: 'key-sig-d',\r\n text: 'D Major',\r\n value: 'KeyOfD'\r\n }, {\r\n icon: 'key-sig-eb',\r\n text: 'Eb Major',\r\n value: 'KeyOfEb'\r\n }, {\r\n icon: 'key-sig-a',\r\n text: 'A Major',\r\n value: 'KeyOfA'\r\n }, {\r\n icon: 'key-sig-ab',\r\n text: 'Ab Major',\r\n value: 'KeyOfAb'\r\n }, {\r\n icon: 'key-sig-e',\r\n text: 'E Major',\r\n value: 'KeyOfE'\r\n }, {\r\n icon: 'key-sig-bd',\r\n text: 'Db Major',\r\n value: 'KeyOfDb'\r\n }, {\r\n icon: 'key-sig-b',\r\n text: 'B Major',\r\n value: 'KeyOfB'\r\n }, {\r\n icon: 'key-sig-fs',\r\n text: 'F# Major',\r\n value: 'KeyOfF#'\r\n }, {\r\n icon: 'key-sig-cs',\r\n text: 'C# Major',\r\n value: 'KeyOfC#'\r\n },\r\n {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiKeySignatureMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n let keySig = $(ev.currentTarget).attr('data-value');\r\n keySig = (keySig === 'cancel' ? keySig : keySig.substring(5, keySig.length));\r\n if (keySig === 'cancel') {\r\n return;\r\n }\r\n this.view.addKeySignature(keySig);\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { SmoTranslator } from '../i18n/language';\r\n\r\ndeclare var $: any;\r\nexport class SuiLanguageMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static get ctor() {\r\n return 'SuiLanguageMenu';\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Language',\r\n menuItems: [{\r\n icon: '',\r\n text: 'English',\r\n value: 'en'\r\n }, {\r\n icon: '',\r\n text: 'Deutsch',\r\n value: 'de'\r\n }, {\r\n icon: '',\r\n text: 'اَلْعَرَبِيَّةُ',\r\n value: 'ar'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n getDefinition() {\r\n return SuiLanguageMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n var op = $(ev.currentTarget).attr('data-value');\r\n\r\n SmoTranslator.setLanguage(op);\r\n this.complete();\r\n }\r\n keydown() {\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\n\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { CompleteNotifier, ModalComponent } from '../common';\r\nimport { BrowserEventSource, EventHandler } from '../eventSource';\r\nimport { KeyBinding } from '../../application/common';\r\nimport { Qwerty } from '../qwerty';\r\nimport { SuiMenuBase, SuiMenuParams } from './menu';\r\ndeclare var $: any;\r\n\r\nexport interface SuiMenuManagerParams {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n completeNotifier: CompleteNotifier;\r\n undoBuffer: UndoBuffer;\r\n menuContainer?: HTMLElement;\r\n}\r\n\r\nexport class SuiMenuManager {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n completeNotifier: CompleteNotifier;\r\n undoBuffer: UndoBuffer;\r\n menuContainer: HTMLElement;\r\n bound: boolean = false;\r\n hotkeyBindings: Record = {};\r\n closeMenuPromise: Promise | null = null;\r\n menu: SuiMenuBase | null = null;\r\n keydownHandler: EventHandler | null = null;\r\n menuPosition: SvgBox = { x: 250, y: 40, width: 1, height: 1 };\r\n tracker: SuiTracker;\r\n menuBind: KeyBinding[] = SuiMenuManager.menuKeyBindingDefaults;\r\n constructor(params: SuiMenuManagerParams) {\r\n this.eventSource = params.eventSource;\r\n this.view = params.view;\r\n this.bound = false; \r\n this.menuContainer = params.menuContainer ?? createTopDomContainer('.menuContainer');\r\n this.completeNotifier = params.completeNotifier;\r\n this.undoBuffer = params.undoBuffer;\r\n this.tracker = params.view.tracker;\r\n }\r\n\r\n static get defaults() {\r\n return {\r\n menuBind: SuiMenuManager.menuKeyBindingDefaults,\r\n menuContainer: '.menuContainer'\r\n };\r\n }\r\n\r\n get closeModalPromise() {\r\n return this.closeMenuPromise;\r\n }\r\n\r\n setController(c: CompleteNotifier) {\r\n this.completeNotifier = c;\r\n }\r\n\r\n get score() {\r\n return this.view.score;\r\n }\r\n\r\n // ### Description:\r\n // slash ('/') menu key bindings. The slash key followed by another key brings up\r\n // a menu.\r\n static get menuKeyBindingDefaults(): KeyBinding[] {\r\n return [\r\n {\r\n event: 'keydown',\r\n key: 'n',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiLanguageMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'k',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiKeySignatureMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'p',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiPartMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'l',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiStaffModifierMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'd',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiDynamicsMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'f',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiFileMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'm',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiTimeSignatureMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'a',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiMeasureMenu'\r\n }, {\r\n event: 'partSelection',\r\n key: '',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiPartSelectionMenu'\r\n }\r\n ];\r\n }\r\n _advanceSelection(inc: number) {\r\n if (!this.menu) {\r\n return;\r\n }\r\n const options = $('.menuContainer ul.menuElement li.menuOption');\r\n inc = inc < 0 ? options.length - 1 : 1;\r\n this.menu.focusIndex = (this.menu.focusIndex + inc) % options.length;\r\n $(options[this.menu.focusIndex]).find('button').focus();\r\n }\r\n\r\n unattach() {\r\n if (!this.keydownHandler) {\r\n return;\r\n }\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler);\r\n $('body').removeClass('modal');\r\n $(this.menuContainer).html('');\r\n $('body').off('dismissMenu');\r\n this.bound = false;\r\n this.menu = null;\r\n }\r\n\r\n attach() {\r\n if (!this.menu) {\r\n return;\r\n }\r\n let hotkey = 0;\r\n\r\n $(this.menuContainer).html('');\r\n $(this.menuContainer).attr('z-index', '12');\r\n const b = buildDom;\r\n const r = b('ul').classes('menuElement').attr('size', this.menu.menuItems.length.toString())\r\n .css('left', '' + this.menuPosition.x + 'px')\r\n .css('top', '' + this.menuPosition.y + 'px');\r\n this.menu.menuItems.forEach((item) => {\r\n var vkey = (hotkey < 10) ? String.fromCharCode(48 + hotkey) :\r\n String.fromCharCode(87 + hotkey);\r\n\r\n r.append(\r\n b('li').classes('menuOption').append(\r\n b('button').attr('data-value', item.value).append(\r\n b('span').classes('menuText').text(item.text))\r\n .append(b('span').classes('icon icon-' + item.icon))\r\n .append(b('span').classes('menu-key').text('' + vkey))));\r\n item.hotkey = vkey;\r\n hotkey += 1;\r\n });\r\n $(this.menuContainer).append(r.dom());\r\n $('body').addClass('modal');\r\n this.bindEvents();\r\n }\r\n\r\n slashMenuMode(completeNotifier: CompleteNotifier) {\r\n var self = this;\r\n if (this.closeMenuPromise) {\r\n console.log('menu already open, skipping');\r\n return;\r\n }\r\n this.bindEvents();\r\n layoutDebug.addDialogDebug('slash menu creating closeMenuPromise');\r\n // A menu asserts this event when it is done.\r\n this.closeMenuPromise = new Promise((resolve) => {\r\n $('body').off('menuDismiss').on('menuDismiss', () => {\r\n layoutDebug.addDialogDebug('menuDismiss received, resolve closeMenuPromise');\r\n self.unattach();\r\n $('body').removeClass('slash-menu');\r\n self.closeMenuPromise = null;\r\n resolve();\r\n });\r\n });\r\n // take over the keyboard\r\n if (this.closeModalPromise) {\r\n completeNotifier.unbindKeyboardForModal(this as ModalComponent);\r\n }\r\n }\r\n\r\n dismiss() {\r\n $('body').trigger('menuDismiss');\r\n }\r\n displayMenu(menu: SuiMenuBase | null) {\r\n this.menu = menu;\r\n if (!this.menu) {\r\n return;\r\n }\r\n this.menu.preAttach();\r\n this.attach();\r\n this.menu!.menuItems.forEach((item) => {\r\n if (typeof(item.hotkey) !== 'undefined') {\r\n this.hotkeyBindings[item.hotkey] = item.value;\r\n }\r\n });\r\n }\r\n\r\n createMenu(action: string) {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n this.menuPosition = { x: 250, y: 40, width: 1, height: 1 };\r\n // If we were called from the ribbon, we notify the controller that we are\r\n // taking over the keyboard. If this was a key-based command we already did.\r\n layoutDebug.addDialogDebug('createMenu creating ' + action);\r\n const ctor = eval('globalThis.Smo.' + action);\r\n const params: SuiMenuParams = \r\n {\r\n position: this.menuPosition,\r\n tracker: this.tracker,\r\n score: this.score,\r\n completeNotifier: this.completeNotifier,\r\n closePromise: this.closeMenuPromise,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n undoBuffer: this.undoBuffer,\r\n ctor: action\r\n };\r\n this.displayMenu(new ctor(params));\r\n }\r\n\r\n // ### evKey\r\n // We have taken over menu commands from controller. If there is a menu active, send the key\r\n // to it. If there is not, see if the keystroke creates one. If neither, dismissi the menu.\r\n evKey(event: any) {\r\n Qwerty.handleKeyEvent(event);\r\n if (['Tab', 'Enter'].indexOf(event.code) >= 0) {\r\n return;\r\n }\r\n event.preventDefault();\r\n if (event.code === 'Escape') {\r\n this.dismiss();\r\n }\r\n if (this.menu) {\r\n if (event.code === 'ArrowUp') {\r\n this._advanceSelection(-1);\r\n } else if (event.code === 'ArrowDown') {\r\n this._advanceSelection(1);\r\n } else if (this.hotkeyBindings[event.key]) {\r\n $('button[data-value=\"' + this.hotkeyBindings[event.key] + '\"]').click();\r\n } else {\r\n this.menu.keydown();\r\n }\r\n return;\r\n }\r\n const binding = this.menuBind.find((ev) =>\r\n ev.key === event.key\r\n );\r\n if (!binding) {\r\n this.dismiss();\r\n return;\r\n }\r\n this.createMenu(binding.action);\r\n }\r\n\r\n bindEvents() {\r\n this.hotkeyBindings = { };\r\n $('body').addClass('slash-menu');\r\n // We need to keep track of is bound, b/c the menu can be created from\r\n // different sources.\r\n if (!this.bound) {\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n this.bound = true;\r\n }\r\n $(this.menuContainer).find('button').off('click').on('click', (ev: any) => {\r\n if ($(ev.currentTarget).attr('data-value') === 'cancel') {\r\n this.menu!.complete();\r\n return;\r\n }\r\n this.menu!.selection(ev);\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiInsertMeasures } from '../dialogs/addMeasure';\r\nimport { SuiMeasureDialog } from '../dialogs/measureFormat';\r\nimport { SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\ndeclare var $: any;\r\nexport class SuiMeasureMenu extends SuiMenuBase {\r\n static defaults: MenuDefinition = {\r\n label: 'Measure',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Add Measures',\r\n value: 'addMenuCmd'\r\n }, {\r\n icon: 'icon-cross',\r\n text: 'Delete Selected Measures',\r\n value: 'deleteSelected'\r\n }, {\r\n icon: '',\r\n text: 'Format Measure',\r\n value: 'formatMeasureDialog'\r\n }, {\r\n icon: '',\r\n text: 'Remove system breaks selection',\r\n value: 'removeSystemBreaks'\r\n }, {\r\n icon: '',\r\n text: 'Reset formatting selection',\r\n value: 'resetFormatting'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n\r\n getDefinition() {\r\n return SuiMeasureMenu.defaults;\r\n }\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'formatMeasureDialog') {\r\n createAndDisplayDialog(SuiMeasureDialog, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n ctor: 'SuiMeasureDialog',\r\n id: 'measure-dialog',\r\n modifier: null\r\n });\r\n this.complete();\r\n return;\r\n }\r\n if (text === 'addMenuCmd') {\r\n createAndDisplayDialog(SuiInsertMeasures, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n ctor: 'SuiMeasureDialog',\r\n id: 'insert-dialog',\r\n modifier: null\r\n });\r\n this.complete();\r\n }\r\n if (text === 'addMenuAfterCmd') {\r\n this.view.addMeasure(true);\r\n this.complete();\r\n }\r\n if (text === 'deleteSelected') {\r\n this.view.deleteMeasure();\r\n }\r\n if (text === 'removeSystemBreaks') {\r\n this.view.removeSystemBreaks();\r\n }\r\n if (text === 'resetFormatting') {\r\n this.view.setMeasureFormat(new SmoMeasureFormat(SmoMeasureFormat.defaults));\r\n }\r\n this.complete();\r\n }\r\n}","import { SvgBox } from '../../smo/data/common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { CompleteNotifier } from '../common';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SmoTranslator } from '../i18n/language';\r\ndeclare var $: any;\r\n/**\r\n * Data for a menu choice. 'value' indicates which options selected\r\n * @param icon - .icon class will be added to the choice\r\n * @param text - text to describe the choice\r\n * @param value - the value received by the menu loop\r\n * @param hotkey - optional key binding, if not supplied one is selected\r\n */\r\nexport interface MenuChoiceDefinition {\r\n icon: string,\r\n text: string,\r\n value: string,\r\n hotkey?: string\r\n}\r\n/**\r\n * Menu just array of choices\r\n * @param label - Not currently displayed\r\n * @param menuItems - list of choices\r\n */\r\nexport interface MenuDefinition {\r\n label: string,\r\n menuItems: MenuChoiceDefinition[]\r\n}\r\nexport interface MenuTranslation {\r\n ctor: string,\r\n label: string,\r\n menuItems: MenuChoiceDefinition[]\r\n}\r\n/**\r\n * All menus take the same options. Menu choices can alter the score\r\n * directly, or call dialogs or even other menus\r\n * @param ctor dialog constructor\r\n * @param position - menu position\r\n * @param view the MVVM object to change the score\r\n * @param score SmoScore, could also be read from the view\r\n * @param completeNotifier used to take over key/mouse control\r\n * @param closePromise resolved when the menu closes, used to syncronize with other modals\r\n * @param eventSource event source to register for additional events like mouseup\r\n * @param undoBuffer used to create undo\r\n*/\r\nexport interface SuiMenuParams {\r\n ctor: string,\r\n position: SvgBox,\r\n tracker: SuiTracker,\r\n score: SmoScore,\r\n completeNotifier: CompleteNotifier,\r\n closePromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n undoBuffer: UndoBuffer\r\n}\r\nexport abstract class SuiMenuBase {\r\n label: string;\r\n menuItems: MenuChoiceDefinition[];\r\n ctor: string;\r\n completeNotifier: CompleteNotifier;\r\n score: SmoScore;\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n focusIndex: number = -1;\r\n closePromise: Promise | null;\r\n tracker: SuiTracker;\r\n constructor(params: SuiMenuParams) {\r\n this.ctor = params.ctor;\r\n const definition: MenuDefinition = this.getDefinition();\r\n this.label = definition.label;\r\n this.menuItems = definition.menuItems;\r\n this.completeNotifier = params.completeNotifier;\r\n this.score = params.score;\r\n this.view = params.view;\r\n this.undoBuffer = params.undoBuffer;\r\n this.eventSource = params.eventSource;\r\n this.closePromise = params.closePromise;\r\n this.tracker = params.tracker;\r\n SmoTranslator.registerMenu(this.ctor);\r\n }\r\n abstract selection(ev: any): void;\r\n abstract getDefinition(): MenuDefinition;\r\n /**\r\n * Base class can override this, called before display and event binding to \r\n * add or remove options from the static list\r\n */\r\n preAttach() { }\r\n static printTranslate(_class: string): MenuTranslation {\r\n const xx: any = eval('Smo.' + _class);\r\n const items: MenuChoiceDefinition[] = xx.defaults.menuItems as MenuChoiceDefinition[];\r\n const rvItems: MenuChoiceDefinition[] = [];\r\n items.forEach((item) => {\r\n rvItems.push({ value: item.value, text: item.text, icon: '' });\r\n });\r\n return { ctor: _class, label: xx.defaults.label, menuItems: items };\r\n }\r\n\r\n complete() {\r\n $('body').trigger('menuDismiss');\r\n }\r\n // Most menus don't process their own events\r\n keydown() {}\r\n}","import { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport {SuiArpeggioDialog } from '../dialogs/arpeggio';\r\nimport { SuiClefChangeDialog } from '../dialogs/clefChange';\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\ndeclare var $: any;\r\nexport class SuiNoteMenu extends SuiMenuBase {\r\n static defaults: MenuDefinition = {\r\n label: 'Measure',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Toggle Cue',\r\n value: 'toggleCueCmd'\r\n }, {\r\n icon: '',\r\n text: 'Arpeggio',\r\n value: 'arpeggioDialog'\r\n },{\r\n icon: '',\r\n text: 'Change Clef',\r\n value: 'clefNoteDialog'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n\r\n getDefinition() {\r\n return SuiNoteMenu.defaults;\r\n }\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n async selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'toggleCueCmd') {\r\n await this.view.toggleCue();\r\n } else if (text === 'arpeggioDialog') {\r\n createAndDisplayDialog(SuiArpeggioDialog, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n ctor: 'SuiArpeggioDialog',\r\n id: 'insert-dialog',\r\n modifier: null\r\n });\r\n this.complete();\r\n } else if (text === 'clefNoteDialog') {\r\n createAndDisplayDialog(SuiClefChangeDialog, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n ctor: 'SuiClefChangeDialog',\r\n id: 'insert-dialog',\r\n modifier: null\r\n });\r\n this.complete();\r\n }\r\n this.complete(); \r\n }\r\n}","import { SuiMenuBase, SuiMenuParams, MenuChoiceDefinition, MenuDefinition } from './menu';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\ndeclare var $: any;\r\n\r\nexport class SuiPartSelectionMenu extends SuiMenuBase {\r\n partMap: { keys: number[], partMap: Record } = { keys: [], partMap: {} };\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Parts',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n getDefinition() {\r\n return SuiPartSelectionMenu.defaults;\r\n }\r\n selectPart(val: number) {\r\n if (val < 0) {\r\n this.view.viewAll();\r\n this.complete();\r\n return;\r\n }\r\n const partInfo = this.partMap.partMap[val];\r\n this.view.exposePart(this.view.storeScore.staves[partInfo.associatedStaff]);\r\n this.complete();\r\n } \r\n preAttach() {\r\n const defs: MenuChoiceDefinition[] = [];\r\n this.partMap = this.view.getPartMap();\r\n if (this.view.score.staves.length < this.view.storeScore.staves.length) {\r\n defs.push({\r\n icon: '',\r\n text: 'View All',\r\n value: '-1'\r\n });\r\n }\r\n this.partMap.keys.forEach((key) => {\r\n defs.push({\r\n icon: '',\r\n text: this.partMap.partMap[key].partName,\r\n value: key.toString()\r\n });\r\n });\r\n defs.push({\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n });\r\n this.menuItems = defs;\r\n }\r\n\r\n selection(ev: any) {\r\n const op: string = $(ev.currentTarget).attr('data-value');\r\n const choice = parseInt(op);\r\n if (isNaN(choice)) {\r\n this.complete(); // cancel\r\n }\r\n this.selectPart(choice);\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuChoiceDefinition, MenuDefinition } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiScoreViewDialog } from '../dialogs/scoreView';\r\nimport { SuiInstrumentDialog } from '../dialogs/instrument';\r\nimport { SuiPartInfoDialog } from '../dialogs/partInfo';\r\nimport { SuiPageLayoutDialog } from '../dialogs/pageLayout';\r\nimport { SuiNewPartDialog } from '../dialogs/newPart';\r\nimport { SuiTabStaveDialog } from '../dialogs/tabStave';\r\ndeclare var $: any;\r\n\r\nexport class SuiPartMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Parts',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Create New Part/Stave',\r\n value: 'createPart'\r\n }, {\r\n icon: 'cancel-circle',\r\n text: 'Remove Selected Parts/Staves',\r\n value: 'removePart'\r\n }, {\r\n icon: '',\r\n text: 'Part Properties',\r\n value: 'editPart'\r\n }, {\r\n icon: '',\r\n text: 'Page Layout',\r\n value: 'pageLayout'\r\n }, {\r\n icon: '',\r\n text: 'View Partial Score',\r\n value: 'view'\r\n }, {\r\n icon: '',\r\n text: 'View All',\r\n value: 'viewAll'\r\n }, {\r\n icon: '',\r\n text: 'Instrument Properties',\r\n value: 'editInstrument'\r\n }, {\r\n icon: '',\r\n text: 'Guitar Tablature',\r\n value: 'tabStave'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n getDefinition() {\r\n return SuiPartMenu.defaults;\r\n }\r\n createPart() {\r\n createAndDisplayDialog(SuiNewPartDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'newPartDialog',\r\n ctor: 'SuiNewPartDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execView() {\r\n createAndDisplayDialog(SuiScoreViewDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'scoreViewDialog',\r\n ctor: 'SuiScoreViewDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n editPart() {\r\n const selection = this.view.tracker.selections[0];\r\n const self = this;\r\n\r\n if (this.view.score.staves.length !== selection.staff.partInfo.stavesAfter + selection.staff.partInfo.stavesBefore + 1) {\r\n this.view.exposePart(selection.staff);\r\n }\r\n this.view.renderPromise().then(() => {\r\n createAndDisplayDialog(SuiPartInfoDialog,\r\n {\r\n completeNotifier: self.completeNotifier!,\r\n view: self.view,\r\n eventSource: self.eventSource,\r\n id: 'editPart',\r\n ctor: 'SuiPartInfoDialog',\r\n tracker: self.view.tracker,\r\n modifier: null,\r\n startPromise: self.closePromise\r\n }\r\n );\r\n });\r\n }\r\n editInstrument() {\r\n createAndDisplayDialog(SuiInstrumentDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'instrumentModal',\r\n ctor: 'SuiInstrumentDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n tabStave() {\r\n createAndDisplayDialog(SuiTabStaveDialog, {\r\n ctor: 'SuiTabStaveDialog',\r\n id: 'tabStaveDialog',\r\n tracker: this.view.tracker,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: null,\r\n view: this.view,\r\n eventSource: this.eventSource\r\n });\r\n }\r\n removePart() {\r\n this.view.removeStaff();\r\n this.complete();\r\n }\r\n pageLayout() {\r\n createAndDisplayDialog(SuiPageLayoutDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'layoutDialog',\r\n ctor: 'SuiPageLayoutDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n preAttach() {\r\n const fullScore = this.view.score.staves.length < this.view.storeScore.staves.length;\r\n const defs: MenuChoiceDefinition[] = [];\r\n this.menuItems.forEach((item) => {\r\n // Only show 'display all' if the full score is not already displayed\r\n if (item.value === 'viewAll') {\r\n if (!fullScore) {\r\n defs.push(item);\r\n }\r\n } else if (item.value === 'pageLayout') {\r\n // only show the page layout in part menu if we are in part mode\r\n if (this.view.isPartExposed()) {\r\n defs.push(item);\r\n }\r\n } else if (item.value === 'view') {\r\n if (this.view.isPartExposed() === false) {\r\n // don't let the user restrict the view if we are already viewing a part.\r\n defs.push(item);\r\n }\r\n } else if (item.value === 'editPart') {\r\n if (this.view.isPartExposed()) {\r\n item.text = 'Part Properties';\r\n defs.push(item);\r\n }\r\n } else {\r\n defs.push(item);\r\n }\r\n });\r\n this.menuItems = defs;\r\n }\r\n\r\n selection(ev: any) {\r\n const op: string = $(ev.currentTarget).attr('data-value');\r\n if (op === 'pageLayout') {\r\n this.pageLayout();\r\n this.complete();\r\n } else if (op === 'view') {\r\n this.execView();\r\n this.complete();\r\n } else if (op === 'createPart') {\r\n this.createPart();\r\n this.complete();\r\n } else if (op === 'removePart') {\r\n this.removePart();\r\n this.complete();\r\n } else if (op === 'editPart') {\r\n this.editPart();\r\n this.complete();\r\n } else if (op === 'editInstrument') {\r\n this.editInstrument();\r\n this.complete();\r\n } else if (op === 'tabStave') {\r\n this.tabStave();\r\n this.complete();\r\n } else if (op === 'cancel') {\r\n this.complete();\r\n } else if (op === 'viewAll') {\r\n this.view.viewAll();\r\n this.complete();\r\n }\r\n }\r\n keydown() { }\r\n}\r\n","import { MenuDefinition, MenuChoiceDefinition, SuiMenuBase, SuiMenuParams } from './menu';\r\nimport { SuiScorePreferencesDialog } from '../dialogs/preferences';\r\nimport { SuiScoreIdentificationDialog } from '../dialogs/scoreId';\r\nimport { SuiPageLayoutDialog } from '../dialogs/pageLayout';\r\nimport { SuiScoreFontDialog } from '../dialogs/fonts';\r\nimport { SuiGlobalLayoutDialog } from '../dialogs/globalLayout';\r\nimport { SuiTransposeScoreDialog } from '../dialogs/transposeScore';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiStaffGroupDialog } from '../dialogs/staffGroup';\r\nimport { SuiAudioSettingsDialog } from '../dialogs/audioSettings';\r\n\r\ndeclare var $: any;\r\nexport class SuiScoreMenu extends SuiMenuBase {\r\n static defaults: MenuDefinition = {\r\n label: 'Score Settings',\r\n menuItems: [{\r\n icon: '',\r\n text: 'Smoosic Preferences',\r\n value: 'preferences'\r\n }, {\r\n icon: '',\r\n text: 'View All',\r\n value: 'viewAll'\r\n }, {\r\n icon: '',\r\n text: 'Global Layout',\r\n value: 'globalLayout'\r\n }, {\r\n icon: '',\r\n text: 'Page Layout',\r\n value: 'pageLayout'\r\n }, {\r\n icon: '',\r\n text: 'Audio Settings',\r\n value: 'audioSettings'\r\n }, {\r\n icon: '',\r\n text: 'System Groups',\r\n value: 'staffGroups'\r\n }, {\r\n icon: '',\r\n text: 'Score Fonts',\r\n value: 'fonts'\r\n }, {\r\n icon: '',\r\n text: 'Score Info',\r\n value: 'identification'\r\n }, {\r\n icon: '',\r\n text: 'Transpose Score',\r\n value: 'transposeScore'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiScoreMenu.defaults;\r\n }\r\n preAttach() {\r\n const defs: MenuChoiceDefinition[] = [];\r\n this.menuItems.forEach((item) => {\r\n // show these options no matter what\r\n if (['fonts', 'cancel', 'identification', 'preferences', 'audioSettings', 'transposeScore'].findIndex((x) => x === item.value) >= 0) {\r\n defs.push(item);\r\n } else if (item.value === 'pageLayout' || item.value === 'globalLayout' || item.value === 'staffGroups') {\r\n if (this.view.isPartExposed() === false) {\r\n // only show the page layout in score menu if we are in score mode\r\n defs.push(item);\r\n } \r\n } else if (item.value === 'viewAll') {\r\n // Only show 'view all' if we are not viewing all\r\n if (this.score.staves.length < this.view.storeScore.staves.length) {\r\n defs.push(item);\r\n }\r\n }\r\n });\r\n this.menuItems = defs;\r\n }\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n execStaffGroups() {\r\n createAndDisplayDialog(SuiStaffGroupDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'staffGroups',\r\n ctor: 'SuiStaffGroupDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n }\r\n );\r\n }\r\n execScoreId() {\r\n SuiScoreIdentificationDialog.createAndDisplay(\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'scoreIdDialog',\r\n ctor: 'SuiScoreIdentificationDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execPageLayout() {\r\n createAndDisplayDialog(SuiPageLayoutDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'layoutDialog',\r\n ctor: 'SuiPageLayoutDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execFonts() {\r\n SuiScoreFontDialog.createAndDisplay(\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'fontDialog',\r\n ctor: 'SuiScoreFontDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execGlobalLayout() {\r\n createAndDisplayDialog(SuiGlobalLayoutDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'globalLayout',\r\n ctor: 'SuiGlobalLayoutDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execPreferences() {\r\n createAndDisplayDialog(SuiScorePreferencesDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'preferences',\r\n ctor: 'SuiScorePreferencesDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execAudioSettings() {\r\n createAndDisplayDialog(SuiAudioSettingsDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'audioSettings',\r\n ctor: 'SuiAudioSettingsDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execTransposeScore() {\r\n createAndDisplayDialog(SuiTransposeScoreDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'scoreIdDialog',\r\n ctor: 'SuiTransposeScoreDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'pageLayout') {\r\n this.execPageLayout();\r\n } else if (text === 'staffGroups') {\r\n this.execStaffGroups();\r\n } else if (text === 'preferences') {\r\n this.execPreferences();\r\n } else if (text === 'fonts') {\r\n this.execFonts();\r\n } else if (text === 'globalLayout') {\r\n this.execGlobalLayout();\r\n } else if (text === 'identification') {\r\n this.execScoreId();\r\n } else if (text === 'viewAll') {\r\n this.view.viewAll();\r\n } else if (text === 'audioSettings') {\r\n this.execAudioSettings();\r\n } else if (text === 'transposeScore') {\r\n this.execTransposeScore();\r\n }\r\n this.complete();\r\n }\r\n keydown() { }\r\n}","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiStaffModifierMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Lines',\r\n menuItems: [{\r\n icon: 'cresc',\r\n text: 'Cresc. Hairpin',\r\n value: 'crescendo'\r\n }, {\r\n icon: 'decresc',\r\n text: 'Dim. Hairpin',\r\n value: 'decrescendo'\r\n }, {\r\n icon: 'slur',\r\n text: 'Slur',\r\n value: 'slur'\r\n }, {\r\n icon: 'slur',\r\n text: 'Tie',\r\n value: 'tie'\r\n }, {\r\n icon: 'ending',\r\n text: 'nth ending',\r\n value: 'ending'\r\n }, {\r\n icon: '',\r\n text: 'Dim. Bracket',\r\n value: 'dimenuendo'\r\n }, {\r\n icon: '',\r\n text: 'Cresc. Bracket',\r\n value: 'crescendoBracket'\r\n }, {\r\n icon: '',\r\n text: 'Accelerando',\r\n value: 'accel'\r\n }, {\r\n icon: '',\r\n text: 'Ritard',\r\n value: 'ritard'\r\n }, {\r\n icon: 'slur',\r\n text: 'Reset slurs',\r\n value: 'resetSlurs'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiStaffModifierMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n var op = $(ev.currentTarget).attr('data-value');\r\n if (op === 'ending') {\r\n this.view.addEnding();\r\n } else if (op === 'slur') {\r\n this.view.slur();\r\n } else if (op === 'tie') {\r\n this.view.tie();\r\n } else if (op === 'accel') {\r\n this.view.accelerando();\r\n } else if (op === 'dimenuendo') {\r\n this.view.dimenuendo();\r\n } else if (op === 'ritard') {\r\n this.view.ritard();\r\n } else if (op === 'crescendoBracket') {\r\n this.view.crescendoBracket();\r\n } else if (op === 'crescendo') {\r\n this.view.crescendo();\r\n } else if (op === 'decrescendo') {\r\n this.view.decrescendo();\r\n } else if (op === 'resetSlurs') {\r\n const self = this;\r\n this.view.refreshViewport().then(() => {\r\n self.complete();\r\n });\r\n return;\r\n }\r\n // else cancel...\r\n this.complete();\r\n }\r\n keydown() {\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiTimeSignatureDialog } from '../dialogs/timeSignature';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTimeSignatureMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Time Sig',\r\n menuItems: [{\r\n icon: 'sixeight',\r\n text: '6/8',\r\n value: '6/8',\r\n }, {\r\n icon: 'fourfour',\r\n text: '4/4',\r\n value: '4/4',\r\n }, {\r\n icon: 'threefour',\r\n text: '3/4',\r\n value: '3/4',\r\n }, {\r\n icon: 'twofour',\r\n text: '2/4',\r\n value: '2/4',\r\n }, {\r\n icon: 'twelveeight',\r\n text: '12/8',\r\n value: '12/8',\r\n }, {\r\n icon: 'seveneight',\r\n text: '7/8',\r\n value: '7/8',\r\n }, {\r\n icon: 'fiveeight',\r\n text: '5/8',\r\n value: '5/8',\r\n }, {\r\n icon: '',\r\n text: 'Other',\r\n value: 'TimeSigOther',\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiTimeSignatureMenu.defaults;\r\n }\r\n selection(ev: any) {\r\n var text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'TimeSigOther') {\r\n createAndDisplayDialog(SuiTimeSignatureDialog, {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'staffGroups',\r\n ctor: 'SuiStaffGroupDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n this.complete();\r\n return;\r\n }\r\n this.view.setTimeSignature(SmoMeasure.convertLegacyTimeSignature(text));\r\n this.complete();\r\n }\r\n\r\n keydown() { }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer, draggable } from \"../common/htmlHelpers\";\r\nimport { KeyEvent } from '../smo/data/common';\r\n\r\nexport interface SuiKbRow {\r\n row: string, shifted: string;\r\n};\r\nexport interface SuiKbKey {\r\n icon: string, text: string, shifted: string, classes: string, dataKey: string\r\n};\r\ndeclare var $: any;\r\nexport class Qwerty {\r\n static _shiftTime: number = 0;\r\n static displayed: boolean = false;\r\n static created: boolean = false;\r\n static get navigationElements() {\r\n const kbRows: SuiKbRow[] =\r\n [\r\n { row: '1234567890-=',shifted:'!@#$%^&*()_+'},\r\n { row: 'QWERTYUIOP[]',shifted:'QWERTYUIOP{}'},\r\n { row:\"ASDFGHJKL;'\", shifted:'ASDFGHJKL:\"'},\r\n { row:'ZXCVBNM,./',shifted:'ZXCVBNM<>?'}\r\n ];\r\n const arrows: SuiKbKey[] = [\r\n {icon: 'icon-arrow-left',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowLeft'},\r\n {icon: 'icon-arrow-right',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowRight'},\r\n {icon:'',text:'Space',classes:'wideKey',shifted:'',dataKey:'Space'},\r\n {icon: 'icon-arrow-up',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowUp'},\r\n {icon: 'icon-arrow-down' ,text:'', shifted:'',classes:'helpKey',dataKey:'ArrowDown'},\r\n {icon: '' ,text:'Ins', shifted:'',classes:'helpKey',dataKey:'Insert'},\r\n {icon: '' ,text:'Del', shifted:'',classes:'helpKey',dataKey:'Delete'},\r\n {icon: '' ,text:'Enter', shifted:'',classes:'wideKey',dataKey:'Enter'}\r\n ];\r\n let keyRows: Record = {};\r\n const labels: string[] = ['topNumbers','keys1','keys2','keys3','arrows'];\r\n let j = 0;\r\n\r\n kbRows.forEach((kbRow) => {\r\n var str = kbRow.row;\r\n var shifted = kbRow.shifted;\r\n var keys: SuiKbKey[] = [];\r\n for (var i = 0;i < str.length;++i) {\r\n if (j === 2 && i === 0) {\r\n keys.push({icon:'',text:'Shift',shifted: '', classes:'wideKey',dataKey:'shift'});\r\n }\r\n if (j === 3 && i === 0) {\r\n keys.push({icon:'', text:'Ctrl',shifted: '', classes:'wideKey', dataKey:'ctrl'});\r\n keys.push({icon:'', text:'Alt', shifted: '',classes:'helpKey', dataKey:'alt'});\r\n }\r\n keys.push({icon:'', text:str[i], shifted:shifted[i], classes:'helpKey', dataKey:str[i]});\r\n }\r\n keyRows[labels[j]] = keys;\r\n j += 1;\r\n });\r\n keyRows[labels[j]] = arrows;\r\n return keyRows;\r\n }\r\n static flashShift() {\r\n if (Qwerty._shiftTime) {\r\n Qwerty._shiftTime = 0;\r\n setTimeout(function() {\r\n Qwerty.flashShift();\r\n }, 1000);\r\n } else {\r\n $('.kb-float').removeClass('shifted');\r\n }\r\n }\r\n\r\n static displayForDuration() {\r\n Qwerty.displayAll();\r\n $('#row-0').hide();\r\n $('#row-1').hide();\r\n $('#row-4').hide();\r\n }\r\n\r\n static displayForTuplet() {\r\n Qwerty.displayAll();\r\n $('#row-1').hide();\r\n $('#row-2').hide();\r\n }\r\n\r\n static displayForNav() {\r\n Qwerty.displayAll();\r\n $('#row-0').hide();\r\n $('#row-1').hide();\r\n }\r\n\r\n static displayAll() {\r\n $('#row-0').show();\r\n $('#row-1').show();\r\n $('#row-2').show();\r\n $('#row-3').show();\r\n $('#row-4').show();\r\n }\r\n\r\n static _flashButton(key: string) {\r\n var e = $('[data-key=\"'+key+'\"]');\r\n if (!e.length) {\r\n e = $('[data-shift=\"'+key+'\"]');\r\n }\r\n if (e.length) {\r\n $(e).removeClass('transition-button');\r\n $(e).addClass('reverse-button');\r\n setTimeout(function() {\r\n $(e).removeClass('reverse-button');\r\n $(e).addClass('transition-button');\r\n },750);\r\n }\r\n }\r\n static get editingKeys() {\r\n return ['ArrowLeft','ArrowRight','ArrowUp','ArrowDown','Insert','Delete'];\r\n }\r\n static handleKeyEvent(evdata: KeyEvent) {\r\n if (Qwerty.editingKeys.indexOf(evdata.code) >= 0) {\r\n Qwerty._flashButton(evdata.code);\r\n } else if (evdata.key.length === 1\r\n && evdata.key.charCodeAt(0) > 32\r\n && evdata.key.charCodeAt(0) < 127) {\r\n Qwerty._flashButton(evdata.key.toUpperCase());\r\n }\r\n if (evdata.code === 'Space') {\r\n Qwerty._flashButton('Space');\r\n }\r\n if (evdata.code === 'Enter') {\r\n Qwerty._flashButton('Enter');\r\n }\r\n if (evdata.ctrlKey) {\r\n Qwerty._flashButton('ctrl');\r\n }\r\n if (evdata.shiftKey) {\r\n Qwerty._flashButton('shift');\r\n $('.kb-float').addClass('shifted');\r\n Qwerty._shiftTime = 1;\r\n Qwerty.flashShift();\r\n }\r\n if (evdata.altKey) {\r\n Qwerty._flashButton('alt');\r\n }\r\n }\r\n\r\n static _kbButton(buttons: SuiKbKey[]) {\r\n var b = buildDom;\r\n var r = b('span').classes('keyContainer');\r\n buttons.forEach((button) => {\r\n var text = button.text;\r\n var shiftedText = button.shifted ? button.shifted : text;\r\n r.append(b('span').classes(button.icon + ' ' + button.classes)\r\n .attr('data-key',button.dataKey).attr('data-shift',shiftedText)\r\n .append(b('span').classes('button-text').text(text))\r\n .append(b('span').classes('button-shifted').text(shiftedText))\r\n );\r\n });\r\n return r;\r\n }\r\n static _buttonBlock(buttons: SuiKbKey[], id: string) {\r\n var b = buildDom;\r\n var r = b('div').classes('keyBlock').attr('id', id);\r\n r.append(Qwerty._kbButton(buttons));\r\n return r;\r\n }\r\n\r\n static _buildElements(rows: Record) {\r\n const b = buildDom;\r\n const r = b('div').classes('buttonLine')\r\n .append(b('span').classes('icon icon-move'));\r\n const keys = Object.keys(rows);\r\n keys.forEach((key, rowIx) => {\r\n const row = rows[key];\r\n r.append(Qwerty._buttonBlock(row, 'row-'+rowIx));\r\n });\r\n return r;\r\n }\r\n static hideKb() {\r\n $('body').removeClass('showQwerty');\r\n Qwerty.displayed = false;\r\n }\r\n static displayKb() {\r\n if (Qwerty.created) {\r\n $('body').addClass('showQwerty');\r\n Qwerty.displayed = true;\r\n return;\r\n }\r\n createTopDomContainer('.qwertyKb');\r\n $('body').addClass('showQwerty');\r\n $('.qwertyKb').html('');\r\n var b = buildDom;\r\n var r = b('div').classes('kb-float');\r\n r.append(Qwerty._buildElements(Qwerty.navigationElements));\r\n $('.qwertyKb').append(r.dom());\r\n\r\n var cb = function (x: any, y: any ) {}\r\n createTopDomContainer('.draganime');\r\n draggable({\r\n parent: $('.qwertyKb'),\r\n handle: $('.qwertyKb').find('.icon-move'),\r\n animateDiv:'.draganime',\r\n cb: cb,\r\n moveParent: true\r\n });\r\n Qwerty.displayed = true;\r\n Qwerty.created = true;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { ButtonDefinition } from \"../../buttons/button\";\r\nimport { RibbonLayout } from \"../../common\";\r\n\r\nexport class defaultRibbonLayout {\r\n static get ribbons(): RibbonLayout {\r\n var left = defaultRibbonLayout.leftRibbonIds;\r\n var top = defaultRibbonLayout.displayIds.concat(defaultRibbonLayout.noteButtonIds).concat(defaultRibbonLayout.navigateButtonIds)\r\n .concat(defaultRibbonLayout.articulateButtonIds).concat(defaultRibbonLayout.microtoneIds)\r\n .concat(defaultRibbonLayout.durationIds)\r\n .concat(defaultRibbonLayout.beamIds).concat(defaultRibbonLayout.measureIds)\r\n .concat(defaultRibbonLayout.staveIds)\r\n .concat(defaultRibbonLayout.textIds).concat(defaultRibbonLayout.playerIds)\r\n .concat(defaultRibbonLayout.voiceButtonIds).concat(defaultRibbonLayout.debugIds);\r\n\r\n return {\r\n left: left,\r\n top: top\r\n };\r\n }\r\n\r\n static get ribbonButtons(): ButtonDefinition[] {\r\n return defaultRibbonLayout.leftRibbonButtons.concat(\r\n defaultRibbonLayout.navigationButtons).concat(\r\n defaultRibbonLayout.noteRibbonButtons).concat(\r\n defaultRibbonLayout.articulationButtons).concat(\r\n defaultRibbonLayout.microtoneButtons).concat(\r\n defaultRibbonLayout.chordButtons).concat(\r\n defaultRibbonLayout.durationRibbonButtons).concat(defaultRibbonLayout.beamRibbonButtons).concat(defaultRibbonLayout.measureRibbonButtons)\r\n .concat(defaultRibbonLayout.staveRibbonButtons)\r\n .concat(defaultRibbonLayout.textRibbonButtons).concat(defaultRibbonLayout.playerButtons)\r\n .concat(defaultRibbonLayout.voiceRibbonButtons).concat(defaultRibbonLayout.displayButtons).concat(defaultRibbonLayout.debugRibbonButtons);\r\n }\r\n\r\n static get leftRibbonIds() {\r\n return ['helpDialog', 'languageMenu', 'fileMenu', 'libraryMenu',\r\n 'scoreMenu', 'partMenu', 'noteMenu', 'addStaffMenu', 'measureModal', \r\n 'tempoModal', 'timeSignatureMenu', 'keyMenu', 'staffModifierMenu',\r\n 'pianoModal'];\r\n }\r\n static get noteButtonIds() {\r\n return ['NoteButtons',\r\n 'UpNoteButton', 'DownNoteButton', 'AddGraceNote', 'RemoveGraceNote', 'SlashGraceNote',\r\n 'XNoteHead', 'TriUpNoteHead', 'CircleXNoteHead', 'DiamondNoteHead',\r\n 'UpOctaveButton', 'DownOctaveButton', 'ToggleRestButton', 'ToggleSlashButton', 'ToggleAccidental', 'ToggleCourtesy'];\r\n }\r\n static get voiceButtonIds() {\r\n return ['VoiceButtons', 'V1Button', 'V2Button', 'V3Button', 'V4Button', 'VXButton'];\r\n }\r\n static get navigateButtonIds() {\r\n return ['NavigationButtons', 'navLeftButton', 'navRightButton', 'navUpButton', 'navDownButton', 'moreNavButtons', 'navFastForward', 'navRewind',\r\n 'navGrowLeft', 'navGrowRight'];\r\n }\r\n static get articulateButtonIds() {\r\n return ['articulationButtons', 'accentButton', 'tenutoButton', 'staccatoButton', 'marcatoButton', 'fermataButton', 'pizzicatoButton', 'mordentButton', 'mordentInvertedButton', 'trillButton',\r\n 'pedalOpenButton', 'caesuraButton', 'pedalClosedButton', 'breathButton',\r\n 'scoopButton', 'dropButton', 'dropLongButton', 'doitButton', 'doitLongButton', 'flipButton', 'smearButton'\r\n ];\r\n }\r\n\r\n static get intervalIds() {\r\n return ['CreateChordButtons', 'SecondUpButton', 'SecondDownButton', 'ThirdUpButton', 'ThirdDownButton', 'FourthUpButton', 'FourthDownButton',\r\n 'FifthUpButton', 'FifthDownButton', 'SixthUpButton', 'SixthDownButton'\r\n , 'SeventhUpButton', 'SeventhDownButton', 'OctaveUpButton', 'OctaveDownButton', 'CollapseChordButton'];\r\n }\r\n\r\n static get debugIds() {\r\n return ['DebugGroup', 'DebugButton2'];\r\n }\r\n static get durationIds() {\r\n return ['DurationButtons', 'GrowDuration', 'LessDuration', 'GrowDurationDot', 'LessDurationDot', 'TripletButton', 'QuintupletButton', 'SeptupletButton', 'NoTupletButton'];\r\n }\r\n static get measureIds() {\r\n return ['MeasureButtons', 'endRepeat', 'startRepeat', 'endBar', 'doubleBar', 'singleBarEnd', 'singleBarStart', 'nthEnding', 'dcAlCoda', 'dsAlCoda', 'dcAlFine', 'dsAlFine', 'coda', 'toCoda', 'segno', 'toSegno', 'fine'];\r\n }\r\n static get staveIds() {\r\n return ['StaveButtons', 'clefTreble', 'clefBass', 'clefAddRemove', 'clefMoveUp', 'clefMoveDown', 'moreStaffButtons',\r\n 'clefTenor', 'clefAlto', 'clefPercussion',\r\n 'staffBracketLower', 'staffBraceLower', 'staffDoubleConnectorLower', 'staffSingleConnectorLower'];\r\n }\r\n static get textIds() {\r\n return ['TextButtons', 'addTextMenu', 'rehearsalMark', 'lyrics', 'chordChanges', 'addDynamicsMenu'];\r\n }\r\n\r\n static get beamIds() {\r\n return ['BeamButtons', 'breakBeam', 'beamSelections', 'toggleBeamDirection'];\r\n }\r\n static get playerIds() {\r\n return ['playerButtons', 'playButton', 'pauseButton', 'stopButton'];\r\n }\r\n\r\n static get microtoneIds() {\r\n return ['MicrotoneButtons', 'flat75sz', 'flat25sz', 'flat25ar', 'flat125ar', 'sharp75', 'sharp125', 'sharp25', 'sori', 'koron'];\r\n }\r\n\r\n static get displayIds() {\r\n return ['quickButtons', 'selectPart', 'refresh', 'zoomout', 'zoomin', 'playButton2', 'stopButton2'];\r\n }\r\n\r\n\r\n static get textRibbonButtons(): ButtonDefinition[] {\r\n return [\r\n {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent measure',\r\n icon: 'icon-text',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'textEdit',\r\n id: 'TextButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '/t',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-textBasic',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'addTextMenu'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-rehearsemark',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'rehearsalMark'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-lyric',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'lyrics'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-chordSymbol',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'chordChanges'\r\n }, {\r\n leftText: '',\r\n rightText: '/d',\r\n classes: 'icon collapsed textButton',\r\n icon: 'icon-mezzopiano',\r\n action: 'collapseChild',\r\n ctor: 'TextButtons',\r\n group: 'textEdit',\r\n id: 'addDynamicsMenu'\r\n }\r\n ];\r\n }\r\n static get displayButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon hide',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'quickButtons',\r\n id: 'quickButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'Select Part',\r\n classes: 'icon select-part-button',\r\n icon: 'icon-circle-down',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'selectPart'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-refresh',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'refresh'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomout'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomminus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomin'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon play',\r\n icon: 'icon-play3',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'playButton2'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon stop2',\r\n icon: 'icon-stop2',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'stopButton2'\r\n }\r\n ];\r\n }\r\n\r\n static get microtoneButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent microtones',\r\n icon: 'icon-microtone',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'microtone',\r\n id: 'MicrotoneButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-flat25sz',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'flat25sz'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-flat75sz',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'flat75sz'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-flat25ar',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'flat25ar'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sharp75',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sharp75'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sharp125',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sharp125'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sharp25',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sharp25'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-sori',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'sori'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed microtones',\r\n icon: 'icon-koron',\r\n action: 'collapseChild',\r\n ctor: 'MicrotoneButtons',\r\n group: 'microtone',\r\n id: 'koron'\r\n }];\r\n }\r\n\r\n static get staveRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent staves',\r\n icon: 'icon-treble',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'staves',\r\n id: 'StaveButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-treble',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefTreble'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-bass',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefBass'\r\n }, \r\n {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-arrow-up',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefMoveUp'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-arrow-down',\r\n action: 'collapseChild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefMoveDown'\r\n },\r\n {\r\n leftText: '...',\r\n rightText: '',\r\n icon: 'icon-circle-left',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'staves',\r\n id: 'moreStaffButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-tenor',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefTenor'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-alto',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefAlto'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-percussion',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'clefPercussion'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-brace',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'staffBraceLower'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed staves',\r\n icon: 'icon-bracket',\r\n action: 'collapseGrandchild',\r\n ctor: 'StaveButtons',\r\n group: 'staves',\r\n id: 'staffBracketLower'\r\n }\r\n\r\n ];\r\n }\r\n\r\n static get beamRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent beams',\r\n icon: 'icon-flag',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'beams',\r\n id: 'BeamButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'x',\r\n icon: 'icon-beamBreak',\r\n classes: 'collapsed beams',\r\n action: 'collapseChild',\r\n ctor: 'BeamButtons',\r\n group: 'beams',\r\n id: 'breakBeam'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Shift-X',\r\n icon: 'icon-beam',\r\n classes: 'collapsed beams',\r\n action: 'collapseChild',\r\n ctor: 'BeamButtons',\r\n group: 'beams',\r\n id: 'beamSelections'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Shift-B',\r\n icon: 'icon-flagFlip',\r\n classes: 'collapsed beams',\r\n action: 'collapseChild',\r\n ctor: 'BeamButtons',\r\n group: 'beams',\r\n id: 'toggleBeamDirection'\r\n }\r\n ];\r\n }\r\n\r\n static get measureRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent measure',\r\n icon: 'icon-end_rpt',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'measure',\r\n id: 'MeasureButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-end_rpt',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'endRepeat'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-start_rpt',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'startRepeat'\r\n }\r\n ,\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-end_bar',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'endBar'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-double_bar',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'doubleBar'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-single_bar',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'singleBarEnd'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-single_bar_start',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'singleBarStart'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-ending',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'nthEnding'\r\n },\r\n {\r\n leftText: 'DC Al Coda',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dcAlCoda'\r\n },\r\n {\r\n leftText: 'DS Al Coda',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dsAlCoda'\r\n },\r\n {\r\n leftText: 'DC Al Fine',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dcAlFine'\r\n },\r\n {\r\n leftText: 'DS Al Fine',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'dsAlFine'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-coda',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'coda'\r\n },\r\n {\r\n leftText: 'to ',\r\n rightText: '',\r\n icon: 'icon-coda',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'toCoda'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-segno',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'segno'\r\n },\r\n {\r\n leftText: 'Fine',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed repetext',\r\n action: 'collapseChild',\r\n ctor: 'MeasureButtons',\r\n group: 'measure',\r\n id: 'fine'\r\n }\r\n ];\r\n }\r\n static get debugRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-new-tab',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'debug',\r\n id: 'DebugGroup'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed',\r\n icon: 'icon-new-tab',\r\n action: 'collapseChild',\r\n ctor: 'DebugButtons',\r\n group: 'debug',\r\n id: 'DebugButton2'\r\n }];\r\n }\r\n\r\n static get durationRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent duration',\r\n icon: 'icon-duration',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'duration',\r\n id: 'DurationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '.',\r\n icon: 'icon-duration_grow',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDuration'\r\n }, {\r\n leftText: '',\r\n rightText: ',',\r\n icon: 'icon-duration_less',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDuration'\r\n }, {\r\n leftText: '',\r\n rightText: '>',\r\n icon: 'icon-duration_grow_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: '<',\r\n icon: 'icon-duration_less_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-3',\r\n icon: 'icon-triplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'TripletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-5',\r\n icon: 'icon-quint',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'QuintupletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-7',\r\n icon: 'icon-septuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'SeptupletButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Ctrl-0',\r\n icon: 'icon-no_tuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'NoTupletButton'\r\n }\r\n ];\r\n }\r\n\r\n static get voiceRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-Vo',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'voices',\r\n id: 'VoiceButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V1',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V1Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V2',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V2Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V3',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V3Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-V4',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'V4Button'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-Vx',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'VoiceButtons',\r\n group: 'voices',\r\n id: 'VXButton'\r\n }\r\n ];\r\n }\r\n static get noteRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-note',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'notes',\r\n id: 'NoteButtons'\r\n }, {\r\n leftText: 'A',\r\n rightText: 'a',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ANoteButton'\r\n }, {\r\n leftText: 'B',\r\n rightText: 'b',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'BNoteButton'\r\n }, {\r\n leftText: 'C',\r\n rightText: 'c',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CNoteButton'\r\n }, {\r\n leftText: 'D',\r\n rightText: 'd',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DNoteButton'\r\n }, {\r\n leftText: 'E',\r\n rightText: 'e',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ENoteButton'\r\n }, {\r\n leftText: 'F',\r\n rightText: 'f',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'FNoteButton'\r\n }, {\r\n leftText: 'G',\r\n rightText: 'g',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'GNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '-',\r\n icon: 'icon-sharp',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '=',\r\n icon: 'icon-bravura icon-accidentalFlat',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-rest',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleRestButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-slash',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleSlashButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: 'icon-circle-left',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'notes',\r\n id: 'moreNoteButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'G',\r\n icon: 'icon-grace_note',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'AddGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-grace_slash',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'SlashGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: 'alt-g',\r\n icon: 'icon-grace_remove',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'RemoveGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'XNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-triangleup',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'TriUpNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-circlex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CircleXNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-diamondblack',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DiamondNoteHead'\r\n }, {\r\n leftText: '8va',\r\n rightText: 'Shift=',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpOctaveButton'\r\n }, {\r\n leftText: '8vb',\r\n rightText: 'Shift-',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownOctaveButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftE',\r\n icon: 'icon-accident',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleAccidental'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftF',\r\n icon: 'icon-courtesy',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleCourtesy'\r\n }\r\n\r\n ];\r\n }\r\n static get playerButtons(): ButtonDefinition[] {\r\n // .icon-play3\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-equalizer2',\r\n classes: 'icon collapseParent player',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'playerButtons',\r\n id: 'playerButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'p',\r\n icon: 'icon-play3',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'playButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 's',\r\n icon: 'icon-stop2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'stopButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'P',\r\n icon: 'icon-pause2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'pauseButton'\r\n }];\r\n }\r\n static get articulationButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-articulation',\r\n classes: 'icon collapseParent articulation',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'articulations',\r\n id: 'articulationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'h',\r\n icon: 'icon-accent_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'accentButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'i',\r\n icon: 'icon-tenuto_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'tenutoButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'j',\r\n icon: 'icon-staccato_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'staccatoButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'k',\r\n icon: 'icon-marcato_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'marcatoButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-fermata',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'fermataButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'l',\r\n icon: 'icon-pitz_above',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'pizzicatoButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-mordent-inv',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'mordentInvertedButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-mordent',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'mordentButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-bravura icon-breath',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'breathButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-bravura icon-caesura',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'caesuraButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-bravura icon-pedal-open',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'pedalOpenButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-bravura icon-pedal-closed',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'pedalClosedButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-trill',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'trillButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-scoop',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'scoopButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-drop',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'dropButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-drop-long',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'dropLongButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-doit',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'doitButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-doit-long',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'doitLongButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-flip',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'flipButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-smear',\r\n classes: 'icon collapsed articulation',\r\n action: 'collapseChild',\r\n ctor: 'ArticulationButtons',\r\n group: 'articulations',\r\n id: 'smearButton'\r\n }\r\n ];\r\n }\r\n static get navigationButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-navigate',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'navigation',\r\n id: 'NavigationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-left',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navLeftButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-right',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRightButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-up',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navUpButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-down',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navDownButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'navigation',\r\n id: 'moreNavButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-fforward',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navFastForward'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-rewind',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRewind'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_left',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowLeft'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_right',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowRight'\r\n }\r\n ];\r\n }\r\n static get chordButtons(): ButtonDefinition[] {\r\n return [{\r\n icon: 'icon-chords',\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'chords',\r\n id: 'CreateChordButtons'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '2nd',\r\n rightText: '2',\r\n classes: 'collapsed addChord',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '1',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SecondUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '2nd',\r\n rightText: 'Shift 2',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '1',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SecondDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '3rd',\r\n rightText: '3',\r\n classes: 'collapsed addChord',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '2',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'ThirdUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '3rd',\r\n rightText: 'Shift 3',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '2',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'ThirdDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '4th',\r\n rightText: '4',\r\n classes: 'collapsed addChord',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '3',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FourthUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '4th',\r\n rightText: 'Shift 4',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '3',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FourthDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '5th',\r\n rightText: '5',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '4',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FifthUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '5th',\r\n rightText: 'Shift 5',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '4',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'FifthDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '6th',\r\n rightText: '6',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '5',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SixthUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '6th',\r\n rightText: 'Shift 6',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '5',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SixthDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '7th',\r\n rightText: '7',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '6',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SeventhUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '7th',\r\n rightText: 'Shift 7',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '6',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'SeventhDownButton'\r\n }, {\r\n icon: 'icon-arrow-up',\r\n leftText: '8va',\r\n rightText: '8',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '7',\r\n direction: '1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'OctaveUpButton'\r\n }, {\r\n icon: 'icon-arrow-down',\r\n leftText: '7th',\r\n rightText: 'Shift 7',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n dataElements: {\r\n interval: '7',\r\n direction: '-1'\r\n },\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'OctaveDownButton'\r\n }, {\r\n icon: '',\r\n leftText: 'Collapse',\r\n rightText: '',\r\n classes: 'collapsed addChord dirdown',\r\n action: 'collapseChild',\r\n ctor: 'ChordButtons',\r\n group: 'chords',\r\n id: 'CollapseChordButton'\r\n }\r\n ];\r\n }\r\n\r\n static get leftRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n icon: '',\r\n leftText: 'Help',\r\n rightText: '?',\r\n classes: 'help-button',\r\n action: 'modal',\r\n ctor: 'helpModal',\r\n group: 'scoreEdit',\r\n id: 'helpDialog'\r\n }, {\r\n leftText: 'Language',\r\n rightText: '/n',\r\n icon: '',\r\n classes: 'language-select menu-select',\r\n action: 'menu',\r\n ctor: 'SuiLanguageMenu',\r\n group: 'scoreEdit',\r\n id: 'languageMenu'\r\n }, {\r\n leftText: 'File',\r\n rightText: '/f',\r\n icon: '',\r\n classes: 'file-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiFileMenu',\r\n group: 'scoreEdit',\r\n id: 'fileMenu'\r\n }, {\r\n leftText: 'Library',\r\n rightText: '/L',\r\n icon: '',\r\n classes: 'file-modify menu-select',\r\n action: 'modal',\r\n ctor: 'SuiLibraryDialog',\r\n group: 'scoreEdit',\r\n id: 'libraryMenu'\r\n }, {\r\n leftText: 'Score',\r\n rightText: '',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'menu',\r\n ctor: 'SuiScoreMenu',\r\n group: 'scoreEdit',\r\n id: 'scoreMenu'\r\n },\r\n {\r\n leftText: 'Parts',\r\n rightText: '/p',\r\n icon: '',\r\n classes: 'icon',\r\n action: 'menu',\r\n ctor: 'SuiPartMenu',\r\n group: 'scoreEdit',\r\n id: 'partMenu'\r\n }, {\r\n leftText: 'Notes',\r\n rightText: '',\r\n icon: 'icon-note',\r\n classes: 'icon',\r\n action: 'menu',\r\n ctor: 'SuiNoteMenu',\r\n group: 'scoreEdit',\r\n id: 'noteMenu'\r\n }, {\r\n leftText: 'Measure',\r\n rightText: '/a',\r\n icon: '',\r\n classes: 'icon menu-select',\r\n action: 'menu',\r\n ctor: 'SuiMeasureMenu',\r\n group: 'scoreEdit',\r\n id: 'measureModal'\r\n }, {\r\n leftText: 'Tempo',\r\n rightText: 't',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'modal',\r\n ctor: 'SuiTempoDialog',\r\n group: 'scoreEdit',\r\n id: 'tempoModal'\r\n }, {\r\n leftText: 'Time Signature',\r\n rightText: '/m',\r\n icon: '',\r\n classes: 'staff-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiTimeSignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'timeSignatureMenu'\r\n },\r\n {\r\n leftText: 'Key',\r\n rightText: '/k',\r\n icon: '',\r\n classes: 'note-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiKeySignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'keyMenu'\r\n }, {\r\n leftText: 'Lines',\r\n rightText: '/l',\r\n icon: '',\r\n classes: 'icon note-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiStaffModifierMenu',\r\n group: 'scoreEdit',\r\n id: 'staffModifierMenu'\r\n },\r\n ];\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { ButtonDefinition } from \"../../buttons/button\";\r\nimport { RibbonLayout } from \"../../common\";\r\n\r\nexport class simpleRibbonLayout {\r\n static get ribbons(): RibbonLayout {\r\n var left = simpleRibbonLayout.leftRibbonIds;\r\n var top = simpleRibbonLayout.displayIds.concat(simpleRibbonLayout.noteButtonIds).concat(simpleRibbonLayout.navigateButtonIds)\r\n .concat(simpleRibbonLayout.durationIds);\r\n \r\n return {\r\n left: left,\r\n top: top\r\n };\r\n }\r\n\r\n static get simpleRibbonLayout(): ButtonDefinition[] {\r\n return simpleRibbonLayout.leftRibbonButtons.concat(\r\n simpleRibbonLayout.navigationButtons).concat(\r\n simpleRibbonLayout.noteRibbonButtons).concat(\r\n simpleRibbonLayout.durationRibbonButtons);\r\n }\r\n\r\n static get leftRibbonIds() {\r\n return [ 'libraryMenu',\r\n 'layoutMenu', \r\n 'tempoModal', 'timeSignatureMenu', 'keyMenu', 'staffModifierMenu',\r\n 'pianoModal'];\r\n }\r\n static get noteButtonIds() {\r\n return ['NoteButtons',\r\n 'UpNoteButton', 'DownNoteButton',\r\n 'UpOctaveButton', 'DownOctaveButton', 'ToggleRestButton', 'ToggleSlashButton', 'ToggleAccidental', 'ToggleCourtesy'];\r\n }\r\n \r\n static get navigateButtonIds() {\r\n return ['NavigationButtons', 'navLeftButton', 'navRightButton', 'navUpButton', 'navDownButton', 'moreNavButtons', 'navFastForward', 'navRewind',\r\n 'navGrowLeft', 'navGrowRight'];\r\n }\r\n \r\n static get intervalIds() {\r\n return ['CreateChordButtons', 'SecondUpButton', 'SecondDownButton', 'ThirdUpButton', 'ThirdDownButton', 'FourthUpButton', 'FourthDownButton',\r\n 'FifthUpButton', 'FifthDownButton', 'SixthUpButton', 'SixthDownButton'\r\n , 'SeventhUpButton', 'SeventhDownButton', 'OctaveUpButton', 'OctaveDownButton', 'CollapseChordButton'];\r\n }\r\n\r\n static get durationIds() {\r\n return ['DurationButtons', 'GrowDuration', 'LessDuration', 'GrowDurationDot', 'LessDurationDot', 'TripletButton', 'QuintupletButton', 'SeptupletButton', 'NoTupletButton'];\r\n }\r\n\r\n static get playerIds() {\r\n return ['playerButtons', 'playButton', 'pauseButton', 'stopButton'];\r\n }\r\n\r\n static get displayIds() {\r\n return ['quickButtons', 'refresh', 'zoomout', 'zoomin', 'playButton2', 'stopButton2'];\r\n }\r\n\r\n static get displayButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon hide',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'quickButtons',\r\n id: 'quickButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-refresh',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'refresh'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomout'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomminus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomin'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon play',\r\n icon: 'icon-play3',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'playButton2'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon stop2',\r\n icon: 'icon-stop2',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'stopButton2'\r\n }\r\n ];\r\n }\r\n\r\n static get durationRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent duration',\r\n icon: 'icon-duration',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'duration',\r\n id: 'DurationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '.',\r\n icon: 'icon-duration_grow',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDuration'\r\n }, {\r\n leftText: '',\r\n rightText: ',',\r\n icon: 'icon-duration_less',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDuration'\r\n }, {\r\n leftText: '',\r\n rightText: '>',\r\n icon: 'icon-duration_grow_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: '<',\r\n icon: 'icon-duration_less_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-3',\r\n icon: 'icon-triplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'TripletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-5',\r\n icon: 'icon-quint',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'QuintupletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-7',\r\n icon: 'icon-septuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'SeptupletButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Ctrl-0',\r\n icon: 'icon-no_tuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'NoTupletButton'\r\n }\r\n ];\r\n }\r\n\r\n static get noteRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-note',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'notes',\r\n id: 'NoteButtons'\r\n }, {\r\n leftText: 'A',\r\n rightText: 'a',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ANoteButton'\r\n }, {\r\n leftText: 'B',\r\n rightText: 'b',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'BNoteButton'\r\n }, {\r\n leftText: 'C',\r\n rightText: 'c',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CNoteButton'\r\n }, {\r\n leftText: 'D',\r\n rightText: 'd',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DNoteButton'\r\n }, {\r\n leftText: 'E',\r\n rightText: 'e',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ENoteButton'\r\n }, {\r\n leftText: 'F',\r\n rightText: 'f',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'FNoteButton'\r\n }, {\r\n leftText: 'G',\r\n rightText: 'g',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'GNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '-',\r\n icon: 'icon-sharp',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '=',\r\n icon: 'icon-flat',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-rest',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleRestButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-slash',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleSlashButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: 'icon-circle-left',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'notes',\r\n id: 'moreNoteButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'G',\r\n icon: 'icon-grace_note',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'AddGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-grace_slash',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'SlashGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: 'alt-g',\r\n icon: 'icon-grace_remove',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'RemoveGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'XNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-triangleup',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'TriUpNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-circlex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CircleXNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-diamondblack',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DiamondNoteHead'\r\n }, {\r\n leftText: '8va',\r\n rightText: 'Shift=',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpOctaveButton'\r\n }, {\r\n leftText: '8vb',\r\n rightText: 'Shift-',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownOctaveButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftE',\r\n icon: 'icon-accident',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleAccidental'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftF',\r\n icon: 'icon-courtesy',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleCourtesy'\r\n }\r\n\r\n ];\r\n }\r\n static get playerButtons(): ButtonDefinition[] {\r\n // .icon-play3\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-equalizer2',\r\n classes: 'icon collapseParent player',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'playerButtons',\r\n id: 'playerButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'p',\r\n icon: 'icon-play3',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'playButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 's',\r\n icon: 'icon-stop2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'stopButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'P',\r\n icon: 'icon-pause2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'pauseButton'\r\n }];\r\n }\r\n static get navigationButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-navigate',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'navigation',\r\n id: 'NavigationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-left',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navLeftButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-right',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRightButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-up',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navUpButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-down',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navDownButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'navigation',\r\n id: 'moreNavButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-fforward',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navFastForward'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-rewind',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRewind'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_left',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowLeft'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_right',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowRight'\r\n }\r\n ];\r\n }\r\n\r\n static get leftRibbonButtons(): ButtonDefinition[] {\r\n return [ {\r\n leftText: 'Library',\r\n rightText: '/L',\r\n icon: '',\r\n classes: 'file-modify menu-select',\r\n action: 'modal',\r\n ctor: 'SuiLibraryDialog',\r\n group: 'scoreEdit',\r\n id: 'libraryMenu'\r\n }, {\r\n leftText: 'Score',\r\n rightText: '',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'menu',\r\n ctor: 'SuiScoreMenu',\r\n group: 'scoreEdit',\r\n id: 'layoutMenu'\r\n }, {\r\n leftText: 'Tempo',\r\n rightText: 't',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'modal',\r\n ctor: 'SuiTempoDialog',\r\n group: 'scoreEdit',\r\n id: 'tempoModal'\r\n }, {\r\n leftText: 'Time Signature',\r\n rightText: '/m',\r\n icon: '',\r\n classes: 'staff-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiTimeSignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'timeSignatureMenu'\r\n },\r\n {\r\n leftText: 'Key',\r\n rightText: '/k',\r\n icon: '',\r\n classes: 'note-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiKeySignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'keyMenu'\r\n },\r\n ];\r\n }\r\n}\r\n","import { SuiApplication } from '../src/application/application';\r\nimport { SmoToXml } from '../src/smo/mxml/smoToXml';\r\nimport { XmlToSmo } from '../src/smo/mxml/xmlToSmo';\r\nimport { SuiXhrLoader } from '../src/ui/fileio/xhrLoader';\r\nimport { MidiToSmo } from '../src/smo/midi/midiToSmo';\r\n\r\ndeclare var $: any;\r\ndeclare var parseMidi: any;\r\n\r\nexport function createLoadTests(): void {\r\n const jsonPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/hymns/Precious Lord.json';\r\n const midiTiesPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/ties.mid';\r\n const midiTripletPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/triplet.mid';\r\n const midiKeyPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/keytime.mid';\r\n var app = async (application: SuiApplication) => {\r\n const view = application.view!;\r\n await view.loadRemoteScore(jsonPath);\r\n await view.renderPromise();\r\n QUnit.test('loaded', assert => {\r\n assert.equal(view.score.staves[0].measures.length, 17);\r\n assert.equal($('#boo .vf-annotation').length, 82);\r\n });\r\n const xml = SmoToXml.convert(view.score);\r\n const newScore = XmlToSmo.convert(xml);\r\n await view.changeScore(newScore);\r\n QUnit.test('loadXml', assert => {\r\n assert.equal(view.score.staves[0].measures.length, 17);\r\n assert.equal($('#boo .vf-annotation').length, 82);\r\n });\r\n let midiData = new SuiXhrLoader(midiTiesPath);\r\n await midiData.loadAsync();\r\n let midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi1', assert => {\r\n assert.equal(midiScore.staves[0].getTiesEndingAt({ staff: 0, measure: 1, voice: 0, tick: 0, pitches: [] }).length, 1);\r\n });\r\n midiData = new SuiXhrLoader(midiTripletPath);\r\n await midiData.loadAsync();\r\n midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi2', assert => {\r\n assert.equal(midiScore.staves[0].measures[0].tuplets.length, 1);\r\n });\r\n midiData = new SuiXhrLoader(midiKeyPath);\r\n await midiData.loadAsync();\r\n midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi2', assert => {\r\n assert.equal(midiScore.staves.length, 2);\r\n assert.equal(midiScore.staves[0].measures[0].keySignature, 'eb');\r\n });\r\n // console.log('measures ' + view.score.staves[0].measures.length);\r\n };\r\n\r\n SuiApplication.configure({\r\n mode: 'library',\r\n idleRedrawTime: 5,\r\n scoreDomContainer: 'outer-container'\r\n }).then((application) => {\r\n app(application)\r\n });\r\n}","/*!\n * VexFlow 4.2.6 2024-03-31T22:07:36.979Z 9cbdf86a23fafc6a0c86f9a5e91ccc7be26684e2\n * Vexflow_smoosic, forked from :\n * Copyright (c) 2010 Mohit Muthanna Cheppudira \n * https://www.vexflow.com https://github.com/0xfe/vexflow\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./src/version.ts\":\n/*!************************!*\\\n !*** ./src/version.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DATE: () => (/* binding */ DATE),\n/* harmony export */ ID: () => (/* binding */ ID),\n/* harmony export */ VERSION: () => (/* binding */ VERSION)\n/* harmony export */ });\nconst VERSION = '4.2.6';\nconst ID = '9cbdf86a23fafc6a0c86f9a5e91ccc7be26684e2';\nconst DATE = '2024-03-31T22:07:36.979Z';\n\n\n/***/ }),\n\n/***/ \"./src/accidental.ts\":\n/*!***************************!*\\\n !*** ./src/accidental.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* binding */ Accidental)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new _music__WEBPACK_IMPORTED_MODULE_3__.Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isAccidental)(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNoteGroup)(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes(this.type);\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft);\n const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft);\n const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/annotation.ts\":\n/*!***************************!*\\\n !*** ./src/annotation.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Annotation: () => (/* binding */ Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* binding */ AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* binding */ AnnotationVerticalJustify)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Annotation', args);\n}\nvar AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nvar AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/articulation.ts\":\n/*!*****************************!*\\\n !*** ./src/articulation.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Articulation: () => (/* binding */ Articulation)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note) || (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) ||\n (position === BELOW && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStemmableNote)(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n\n\n\n/***/ }),\n\n/***/ \"./src/barnote.ts\":\n/*!************************!*\\\n !*** ./src/barnote.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BarNote: () => (/* binding */ BarNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.BarNote;\n }\n constructor(type = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/beam.ts\":\n/*!*********************!*\\\n !*** ./src/beam.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BEAM_BOTH: () => (/* binding */ BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* binding */ BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* binding */ BEAM_RIGHT),\n/* harmony export */ Beam: () => (/* binding */ Beam)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n }\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nconst BEAM_LEFT = 'L';\nconst BEAM_RIGHT = 'R';\nconst BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nclass Beam extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction().parse(group));\n }\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.BOTTOM : _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/bend.ts\":\n/*!*********************!*\\\n !*** ./src/bend.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Bend: () => (/* binding */ Bend)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n/** Bend implements tablature bends. */\nclass Bend extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n\n\n\n/***/ }),\n\n/***/ \"./src/boundingbox.ts\":\n/*!****************************!*\\\n !*** ./src/boundingbox.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BoundingBox: () => (/* binding */ BoundingBox)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nclass BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/boundingboxcomputation.ts\":\n/*!***************************************!*\\\n !*** ./src/boundingboxcomputation.ts ***!\n \\***************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BoundingBoxComputation: () => (/* binding */ BoundingBoxComputation)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nclass BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/canvascontext.ts\":\n/*!******************************!*\\\n !*** ./src/canvascontext.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CanvasContext: () => (/* binding */ CanvasContext)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nclass CanvasContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.warn)('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = (0,_util__WEBPACK_IMPORTED_MODULE_2__.globalObject)().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if ((0,_web__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas)(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style);\n this.context2D.font = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo);\n this.textHeight = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/chordsymbol.ts\":\n/*!****************************!*\\\n !*** ./src/chordsymbol.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ChordSymbol: () => (/* binding */ ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* binding */ ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* binding */ ChordSymbolVerticalJustify),\n/* harmony export */ SymbolModifiers: () => (/* binding */ SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* binding */ SymbolTypes)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.ChordSymbol', args);\n}\nvar ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nvar ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nvar SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nvar SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/clef.ts\":\n/*!*********************!*\\\n !*** ./src/clef.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Clef: () => (/* binding */ Clef)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/clefnote.ts\":\n/*!*************************!*\\\n !*** ./src/clefnote.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ClefNote: () => (/* binding */ ClefNote)\n/* harmony export */ });\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\n\n\n\n\n/** ClefNote implements clef annotations in measures. */\nclass ClefNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/crescendo.ts\":\n/*!**************************!*\\\n !*** ./src/crescendo.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Crescendo: () => (/* binding */ Crescendo)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = _tickcontext__WEBPACK_IMPORTED_MODULE_1__.TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/curve.ts\":\n/*!**********************!*\\\n !*** ./src/curve.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Curve: () => (/* binding */ Curve),\n/* harmony export */ CurvePosition: () => (/* binding */ CurvePosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\n\n\n\nvar CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nclass Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/dot.ts\":\n/*!********************!*\\\n !*** ./src/dot.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Dot: () => (/* binding */ Dot)\n/* harmony export */ });\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\n\n\n\nclass Dot extends _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isStaveNote)(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isGraceNote)(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/easyscore.ts\":\n/*!**************************!*\\\n !*** ./src/easyscore.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Builder: () => (/* binding */ Builder),\n/* harmony export */ EasyScore: () => (/* binding */ EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* binding */ EasyScoreGrammar),\n/* harmony export */ Piece: () => (/* binding */ Piece)\n/* harmony export */ });\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.EasyScore', args);\n}\nclass EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nclass Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nclass Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = _music__WEBPACK_IMPORTED_MODULE_3__.Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n _dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, _articulation__WEBPACK_IMPORTED_MODULE_0__.Articulation.easyScoreHook, _frethandfinger__WEBPACK_IMPORTED_MODULE_2__.FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new _parser__WEBPACK_IMPORTED_MODULE_4__.Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/element.ts\":\n/*!************************!*\\\n !*** ./src/element.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Element: () => (/* binding */ Element)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\n\n\n\n\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = _registry__WEBPACK_IMPORTED_MODULE_1__.Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/factory.ts\":\n/*!************************!*\\\n !*** ./src/factory.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Factory: () => (/* binding */ Factory)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_39__.log)('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new _util__WEBPACK_IMPORTED_MODULE_39__.RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if ((0,_web__WEBPACK_IMPORTED_MODULE_42__.isHTMLCanvas)(elem)) {\n backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.CANVAS;\n }\n else {\n backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.SVG;\n }\n }\n this.context = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new _stave__WEBPACK_IMPORTED_MODULE_24__.Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new _tabstave__WEBPACK_IMPORTED_MODULE_32__.TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new _stavenote__WEBPACK_IMPORTED_MODULE_27__.StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new _glyphnote__WEBPACK_IMPORTED_MODULE_13__.GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new _repeatnote__WEBPACK_IMPORTED_MODULE_23__.RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new _ghostnote__WEBPACK_IMPORTED_MODULE_12__.GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new _textnote__WEBPACK_IMPORTED_MODULE_35__.TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new _clefnote__WEBPACK_IMPORTED_MODULE_6__.ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new _timesignote__WEBPACK_IMPORTED_MODULE_37__.TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new _keysignote__WEBPACK_IMPORTED_MODULE_16__.KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new _tabnote__WEBPACK_IMPORTED_MODULE_31__.TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new _gracenote__WEBPACK_IMPORTED_MODULE_14__.GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__.GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify.CENTER, vJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new _chordsymbol__WEBPACK_IMPORTED_MODULE_5__.ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new _ornament__WEBPACK_IMPORTED_MODULE_20__.Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new _textdynamics__WEBPACK_IMPORTED_MODULE_34__.TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new _frethandfinger__WEBPACK_IMPORTED_MODULE_11__.FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new _stringnumber__WEBPACK_IMPORTED_MODULE_29__.StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new _tickcontext__WEBPACK_IMPORTED_MODULE_36__.TickContext();\n }\n ModifierContext() {\n return new _modifiercontext__WEBPACK_IMPORTED_MODULE_17__.ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = (0,_util__WEBPACK_IMPORTED_MODULE_39__.defined)(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__.MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new _voice__WEBPACK_IMPORTED_MODULE_41__.Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new _staveconnector__WEBPACK_IMPORTED_MODULE_25__.StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new _formatter__WEBPACK_IMPORTED_MODULE_10__.Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_38__.Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new _beam__WEBPACK_IMPORTED_MODULE_4__.Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new _curve__WEBPACK_IMPORTED_MODULE_7__.Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new _stavetie__WEBPACK_IMPORTED_MODULE_28__.StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new _staveline__WEBPACK_IMPORTED_MODULE_26__.StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new _vibratobracket__WEBPACK_IMPORTED_MODULE_40__.VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new _textbracket__WEBPACK_IMPORTED_MODULE_33__.TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new _system__WEBPACK_IMPORTED_MODULE_30__.System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new _easyscore__WEBPACK_IMPORTED_MODULE_8__.EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new _pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking(p.notes);\n pedal.setType(_pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new _notesubgroup__WEBPACK_IMPORTED_MODULE_19__.NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_9__.Element.TEXT_FONT);\n\n\n\n/***/ }),\n\n/***/ \"./src/flow.ts\":\n/*!*********************!*\\\n !*** ./src/flow.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Flow: () => (/* binding */ Flow)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ \"./src/crescendo.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ \"./src/factory.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracetabnote */ \"./src/gracetabnote.ts\");\n/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./keymanager */ \"./src/keymanager.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./stavehairpin */ \"./src/stavehairpin.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./tabslide */ \"./src/tabslide.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tremolo */ \"./src/tremolo.ts\");\n/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./tuning */ \"./src/tuning.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./version */ \"./src/version.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: _version__WEBPACK_IMPORTED_MODULE_78__.VERSION,\n /** git commit ID that this library was built from. */\n ID: _version__WEBPACK_IMPORTED_MODULE_78__.ID,\n /** The date when this library was compiled. */\n DATE: _version__WEBPACK_IMPORTED_MODULE_78__.DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => _font__WEBPACK_IMPORTED_MODULE_18__.Font.load(fontName));\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK = fonts;\n _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.MUSIC_FONT_STACK = fonts.slice();\n _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TIME4_4;\n }\n static get accidentalMap() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.accidentalMap;\n }\n static get unicode() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.unicode;\n }\n static keySignature(spec) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental;\nFlow.Annotation = _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation;\nFlow.Articulation = _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation;\nFlow.Barline = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.Barline;\nFlow.BarNote = _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote;\nFlow.Beam = _beam__WEBPACK_IMPORTED_MODULE_4__.Beam;\nFlow.Bend = _bend__WEBPACK_IMPORTED_MODULE_5__.Bend;\nFlow.BoundingBox = _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox;\nFlow.BoundingBoxComputation = _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation;\nFlow.CanvasContext = _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext;\nFlow.ChordSymbol = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol;\nFlow.Clef = _clef__WEBPACK_IMPORTED_MODULE_10__.Clef;\nFlow.ClefNote = _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote;\nFlow.Crescendo = _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo;\nFlow.Curve = _curve__WEBPACK_IMPORTED_MODULE_13__.Curve;\nFlow.Dot = _dot__WEBPACK_IMPORTED_MODULE_14__.Dot;\nFlow.EasyScore = _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore;\nFlow.Element = _element__WEBPACK_IMPORTED_MODULE_16__.Element;\nFlow.Factory = _factory__WEBPACK_IMPORTED_MODULE_17__.Factory;\nFlow.Font = _font__WEBPACK_IMPORTED_MODULE_18__.Font;\nFlow.Formatter = _formatter__WEBPACK_IMPORTED_MODULE_19__.Formatter;\nFlow.Fraction = _fraction__WEBPACK_IMPORTED_MODULE_20__.Fraction;\nFlow.FretHandFinger = _frethandfinger__WEBPACK_IMPORTED_MODULE_21__.FretHandFinger;\nFlow.GhostNote = _ghostnote__WEBPACK_IMPORTED_MODULE_22__.GhostNote;\nFlow.Glyph = _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph;\nFlow.GlyphNote = _glyphnote__WEBPACK_IMPORTED_MODULE_24__.GlyphNote;\nFlow.GraceNote = _gracenote__WEBPACK_IMPORTED_MODULE_25__.GraceNote;\nFlow.GraceNoteGroup = _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__.GraceNoteGroup;\nFlow.GraceTabNote = _gracetabnote__WEBPACK_IMPORTED_MODULE_27__.GraceTabNote;\nFlow.KeyManager = _keymanager__WEBPACK_IMPORTED_MODULE_28__.KeyManager;\nFlow.KeySignature = _keysignature__WEBPACK_IMPORTED_MODULE_29__.KeySignature;\nFlow.KeySigNote = _keysignote__WEBPACK_IMPORTED_MODULE_30__.KeySigNote;\nFlow.Modifier = _modifier__WEBPACK_IMPORTED_MODULE_31__.Modifier;\nFlow.ModifierContext = _modifiercontext__WEBPACK_IMPORTED_MODULE_32__.ModifierContext;\nFlow.MultiMeasureRest = _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__.MultiMeasureRest;\nFlow.Music = _music__WEBPACK_IMPORTED_MODULE_34__.Music;\nFlow.Note = _note__WEBPACK_IMPORTED_MODULE_35__.Note;\nFlow.NoteHead = _notehead__WEBPACK_IMPORTED_MODULE_36__.NoteHead;\nFlow.NoteSubGroup = _notesubgroup__WEBPACK_IMPORTED_MODULE_37__.NoteSubGroup;\nFlow.Ornament = _ornament__WEBPACK_IMPORTED_MODULE_38__.Ornament;\nFlow.Parenthesis = _parenthesis__WEBPACK_IMPORTED_MODULE_39__.Parenthesis;\nFlow.Parser = _parser__WEBPACK_IMPORTED_MODULE_40__.Parser;\nFlow.PedalMarking = _pedalmarking__WEBPACK_IMPORTED_MODULE_41__.PedalMarking;\nFlow.Registry = _registry__WEBPACK_IMPORTED_MODULE_42__.Registry;\nFlow.RenderContext = _rendercontext__WEBPACK_IMPORTED_MODULE_43__.RenderContext;\nFlow.Renderer = _renderer__WEBPACK_IMPORTED_MODULE_44__.Renderer;\nFlow.RepeatNote = _repeatnote__WEBPACK_IMPORTED_MODULE_45__.RepeatNote;\nFlow.Repetition = _staverepetition__WEBPACK_IMPORTED_MODULE_53__.Repetition;\nFlow.Stave = _stave__WEBPACK_IMPORTED_MODULE_46__.Stave;\nFlow.StaveConnector = _staveconnector__WEBPACK_IMPORTED_MODULE_48__.StaveConnector;\nFlow.StaveHairpin = _stavehairpin__WEBPACK_IMPORTED_MODULE_49__.StaveHairpin;\nFlow.StaveLine = _staveline__WEBPACK_IMPORTED_MODULE_50__.StaveLine;\nFlow.StaveModifier = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifier;\nFlow.StaveNote = _stavenote__WEBPACK_IMPORTED_MODULE_52__.StaveNote;\nFlow.StaveTempo = _stavetempo__WEBPACK_IMPORTED_MODULE_54__.StaveTempo;\nFlow.StaveText = _stavetext__WEBPACK_IMPORTED_MODULE_55__.StaveText;\nFlow.StaveTie = _stavetie__WEBPACK_IMPORTED_MODULE_56__.StaveTie;\nFlow.Stem = _stem__WEBPACK_IMPORTED_MODULE_58__.Stem;\nFlow.StringNumber = _stringnumber__WEBPACK_IMPORTED_MODULE_59__.StringNumber;\nFlow.Stroke = _strokes__WEBPACK_IMPORTED_MODULE_60__.Stroke;\nFlow.SVGContext = _svgcontext__WEBPACK_IMPORTED_MODULE_61__.SVGContext;\nFlow.System = _system__WEBPACK_IMPORTED_MODULE_62__.System;\nFlow.TabNote = _tabnote__WEBPACK_IMPORTED_MODULE_64__.TabNote;\nFlow.TabSlide = _tabslide__WEBPACK_IMPORTED_MODULE_65__.TabSlide;\nFlow.TabStave = _tabstave__WEBPACK_IMPORTED_MODULE_66__.TabStave;\nFlow.TabTie = _tabtie__WEBPACK_IMPORTED_MODULE_67__.TabTie;\nFlow.TextBracket = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracket;\nFlow.TextDynamics = _textdynamics__WEBPACK_IMPORTED_MODULE_69__.TextDynamics;\nFlow.TextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_70__.TextFormatter;\nFlow.TextNote = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextNote;\nFlow.TickContext = _tickcontext__WEBPACK_IMPORTED_MODULE_72__.TickContext;\nFlow.TimeSignature = _timesignature__WEBPACK_IMPORTED_MODULE_73__.TimeSignature;\nFlow.TimeSigNote = _timesignote__WEBPACK_IMPORTED_MODULE_74__.TimeSigNote;\nFlow.Tremolo = _tremolo__WEBPACK_IMPORTED_MODULE_75__.Tremolo;\nFlow.Tuning = _tuning__WEBPACK_IMPORTED_MODULE_76__.Tuning;\nFlow.Tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_77__.Tuplet;\nFlow.Vibrato = _vibrato__WEBPACK_IMPORTED_MODULE_79__.Vibrato;\nFlow.VibratoBracket = _vibratobracket__WEBPACK_IMPORTED_MODULE_80__.VibratoBracket;\nFlow.Voice = _voice__WEBPACK_IMPORTED_MODULE_81__.Voice;\nFlow.Volta = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify;\nFlow.SymbolTypes = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes;\nFlow.SymbolModifiers = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers;\nFlow.CurvePosition = _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition;\nFlow.FontWeight = _font__WEBPACK_IMPORTED_MODULE_18__.FontWeight;\nFlow.FontStyle = _font__WEBPACK_IMPORTED_MODULE_18__.FontStyle;\nFlow.ModifierPosition = _modifier__WEBPACK_IMPORTED_MODULE_31__.ModifierPosition;\nFlow.RendererBackends = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererBackends;\nFlow.RendererLineEndType = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererLineEndType;\nFlow.BarlineType = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.BarlineType;\nFlow.StaveModifierPosition = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifierPosition;\nFlow.VoltaType = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.VoltaType;\nFlow.TextBracketPosition = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracketPosition;\nFlow.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextJustification;\nFlow.VoiceMode = _voice__WEBPACK_IMPORTED_MODULE_81__.VoiceMode;\n\n\n\n/***/ }),\n\n/***/ \"./src/font.ts\":\n/*!*********************!*\\\n !*** ./src/font.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Font: () => (/* binding */ Font),\n/* harmony export */ FontStyle: () => (/* binding */ FontStyle),\n/* harmony export */ FontWeight: () => (/* binding */ FontWeight)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nvar FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/fonts/bravura_glyphs.ts\":\n/*!*************************************!*\\\n !*** ./src/fonts/bravura_glyphs.ts ***!\n \\*************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BravuraFont: () => (/* binding */ BravuraFont)\n/* harmony export */ });\nconst BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/common_metrics.ts\":\n/*!*************************************!*\\\n !*** ./src/fonts/common_metrics.ts ***!\n \\*************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CommonMetrics: () => (/* binding */ CommonMetrics)\n/* harmony export */ });\nconst CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n scale: 0.8,\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n scale: 0.8,\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n scale: 0.8,\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.8,\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n scale: 0.8,\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n scale: 0.8,\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n scale: 0.8,\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/custom_glyphs.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/custom_glyphs.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CustomFont: () => (/* binding */ CustomFont)\n/* harmony export */ });\nconst CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/gonville_glyphs.ts\":\n/*!**************************************!*\\\n !*** ./src/fonts/gonville_glyphs.ts ***!\n \\**************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GonvilleSmuflFont: () => (/* binding */ GonvilleSmuflFont)\n/* harmony export */ });\nconst GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/leland_glyphs.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/leland_glyphs.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LelandFont: () => (/* binding */ LelandFont)\n/* harmony export */ });\nconst LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_all.ts\":\n/*!*******************************!*\\\n !*** ./src/fonts/load_all.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadAllMusicFonts: () => (/* binding */ loadAllMusicFonts)\n/* harmony export */ });\n/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./load_bravura */ \"./src/fonts/load_bravura.ts\");\n/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./load_custom */ \"./src/fonts/load_custom.ts\");\n/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load_gonville */ \"./src/fonts/load_gonville.ts\");\n/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load_leland */ \"./src/fonts/load_leland.ts\");\n/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load_petaluma */ \"./src/fonts/load_petaluma.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\n\n\n\n\n\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nfunction loadAllMusicFonts() {\n (0,_load_bravura__WEBPACK_IMPORTED_MODULE_0__.loadBravura)();\n (0,_load_gonville__WEBPACK_IMPORTED_MODULE_2__.loadGonville)();\n (0,_load_petaluma__WEBPACK_IMPORTED_MODULE_4__.loadPetaluma)();\n (0,_load_custom__WEBPACK_IMPORTED_MODULE_1__.loadCustom)();\n (0,_load_leland__WEBPACK_IMPORTED_MODULE_3__.loadLeland)();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_bravura.ts\":\n/*!***********************************!*\\\n !*** ./src/fonts/load_bravura.ts ***!\n \\***********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadBravura: () => (/* binding */ loadBravura)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bravura_glyphs */ \"./src/fonts/bravura_glyphs.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\n\n\n\nfunction loadBravura() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Bravura', _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__.BravuraFont, _common_metrics__WEBPACK_IMPORTED_MODULE_2__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_custom.ts\":\n/*!**********************************!*\\\n !*** ./src/fonts/load_custom.ts ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadCustom: () => (/* binding */ loadCustom)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./custom_glyphs */ \"./src/fonts/custom_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadCustom() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Custom', _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__.CustomFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_gonville.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/load_gonville.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadGonville: () => (/* binding */ loadGonville)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gonville_glyphs */ \"./src/fonts/gonville_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadGonville() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Gonville', _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__.GonvilleSmuflFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_leland.ts\":\n/*!**********************************!*\\\n !*** ./src/fonts/load_leland.ts ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadLeland: () => (/* binding */ loadLeland)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./leland_glyphs */ \"./src/fonts/leland_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadLeland() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Leland', _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__.LelandFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_petaluma.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/load_petaluma.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadPetaluma: () => (/* binding */ loadPetaluma)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petaluma_glyphs */ \"./src/fonts/petaluma_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nconst petalumaChordMetrics = {\n csymDiminished: {\n scale: 0.8,\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n scale: 1,\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n scale: 0.8,\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n scale: 0.8,\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n scale: 0.95,\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n scale: 0.7,\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n scale: 0.8,\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n scale: 0.7,\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n scale: 0.8,\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n }\n};\nfunction loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(_common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Petaluma', _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaFont, metrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/petaluma_glyphs.ts\":\n/*!**************************************!*\\\n !*** ./src/fonts/petaluma_glyphs.ts ***!\n \\**************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PetalumaFont: () => (/* binding */ PetalumaFont)\n/* harmony export */ });\nconst PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/petalumascript_glyphs.ts\":\n/*!********************************************!*\\\n !*** ./src/fonts/petalumascript_glyphs.ts ***!\n \\********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PetalumaScriptFont: () => (/* binding */ PetalumaScriptFont)\n/* harmony export */ });\nconst PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/robotoslab_glyphs.ts\":\n/*!****************************************!*\\\n !*** ./src/fonts/robotoslab_glyphs.ts ***!\n \\****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RobotoSlabFont: () => (/* binding */ RobotoSlabFont)\n/* harmony export */ });\nconst RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/sans_bold_text_metrics.ts\":\n/*!*********************************************!*\\\n !*** ./src/fonts/sans_bold_text_metrics.ts ***!\n \\*********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SansFontBold: () => (/* binding */ SansFontBold)\n/* harmony export */ });\nconst SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/sans_text_metrics.ts\":\n/*!****************************************!*\\\n !*** ./src/fonts/sans_text_metrics.ts ***!\n \\****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SansFont: () => (/* binding */ SansFont)\n/* harmony export */ });\nconst SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/serif_text_metrics.ts\":\n/*!*****************************************!*\\\n !*** ./src/fonts/serif_text_metrics.ts ***!\n \\*****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SerifFont: () => (/* binding */ SerifFont)\n/* harmony export */ });\nconst SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/textfonts.ts\":\n/*!********************************!*\\\n !*** ./src/fonts/textfonts.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadTextFonts: () => (/* binding */ loadTextFonts)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petalumascript_glyphs */ \"./src/fonts/petalumascript_glyphs.ts\");\n/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./robotoslab_glyphs */ \"./src/fonts/robotoslab_glyphs.ts\");\n/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sans_bold_text_metrics */ \"./src/fonts/sans_bold_text_metrics.ts\");\n/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sans_text_metrics */ \"./src/fonts/sans_text_metrics.ts\");\n/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serif_text_metrics */ \"./src/fonts/serif_text_metrics.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\nfunction loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__.SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__.SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__.SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__.RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/formatter.ts\":\n/*!**************************!*\\\n !*** ./src/formatter.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Formatter: () => (/* binding */ Formatter)\n/* harmony export */ });\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_9__.log)('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isNote)(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = (0,_util__WEBPACK_IMPORTED_MODULE_9__.midLine)(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext());\n const tick = new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new _staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === _voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.STRICT && !voice.isComplete()) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = (0,_util__WEBPACK_IMPORTED_MODULE_9__.defined)(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -(0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/fraction.ts\":\n/*!*************************!*\\\n !*** ./src/fraction.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Fraction: () => (/* binding */ Fraction)\n/* harmony export */ });\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\n\n\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/frethandfinger.ts\":\n/*!*******************************!*\\\n !*** ./src/frethandfinger.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FretHandFinger: () => (/* binding */ FretHandFinger)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\n\n\n\n\n\n\nclass FretHandFinger extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_3__.TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) {\n state.text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 9,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/ghostnote.ts\":\n/*!**************************!*\\\n !*** ./src/ghostnote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GhostNote: () => (/* binding */ GhostNote)\n/* harmony export */ });\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n\n\n\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nclass GhostNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_0__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isAnnotation)(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/glyph.ts\":\n/*!**********************!*\\\n !*** ./src/glyph.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Glyph: () => (/* binding */ Glyph),\n/* harmony export */ OutlineCode: () => (/* binding */ OutlineCode)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nvar OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends _element__WEBPACK_IMPORTED_MODULE_2__.Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n\n\n\n/***/ }),\n\n/***/ \"./src/glyphnote.ts\":\n/*!**************************!*\\\n !*** ./src/glyphnote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlyphNote: () => (/* binding */ GlyphNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\n\n\nclass GlyphNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/gracenote.ts\":\n/*!**************************!*\\\n !*** ./src/gracenote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceNote: () => (/* binding */ GraceNote)\n/* harmony export */ });\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\n\n\nclass GraceNote extends _stavenote__WEBPACK_IMPORTED_MODULE_0__.StaveNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT + ret) * staveNoteScale - _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/gracenotegroup.ts\":\n/*!*******************************!*\\\n !*** ./src/gracenotegroup.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceNoteGroup: () => (/* binding */ GraceNoteGroup)\n/* harmony export */ });\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\n\n\n\n\n\n\n\n\n\n\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_8__.log)('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_7__.Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new _voice__WEBPACK_IMPORTED_MODULE_9__.Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new _beam__WEBPACK_IMPORTED_MODULE_0__.Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note);\n const TieClass = is_stavenote ? _stavetie__WEBPACK_IMPORTED_MODULE_4__.StaveTie : _tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/gracetabnote.ts\":\n/*!*****************************!*\\\n !*** ./src/gracetabnote.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceTabNote: () => (/* binding */ GraceTabNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\n\n\n\nclass GraceTabNote extends _tabnote__WEBPACK_IMPORTED_MODULE_1__.TabNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/index.ts\":\n/*!**********************!*\\\n !*** ./src/index.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* reexport safe */ _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental),\n/* harmony export */ Annotation: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify),\n/* harmony export */ Articulation: () => (/* reexport safe */ _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation),\n/* harmony export */ BEAM_BOTH: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_RIGHT),\n/* harmony export */ BarNote: () => (/* reexport safe */ _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote),\n/* harmony export */ Barline: () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.Barline),\n/* harmony export */ BarlineType: () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.BarlineType),\n/* harmony export */ Beam: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.Beam),\n/* harmony export */ Bend: () => (/* reexport safe */ _bend__WEBPACK_IMPORTED_MODULE_5__.Bend),\n/* harmony export */ BoundingBox: () => (/* reexport safe */ _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox),\n/* harmony export */ BoundingBoxComputation: () => (/* reexport safe */ _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation),\n/* harmony export */ Builder: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Builder),\n/* harmony export */ CanvasContext: () => (/* reexport safe */ _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext),\n/* harmony export */ Category: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.Category),\n/* harmony export */ ChordSymbol: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify),\n/* harmony export */ Clef: () => (/* reexport safe */ _clef__WEBPACK_IMPORTED_MODULE_10__.Clef),\n/* harmony export */ ClefNote: () => (/* reexport safe */ _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote),\n/* harmony export */ Crescendo: () => (/* reexport safe */ _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo),\n/* harmony export */ Curve: () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.Curve),\n/* harmony export */ CurvePosition: () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition),\n/* harmony export */ Dot: () => (/* reexport safe */ _dot__WEBPACK_IMPORTED_MODULE_14__.Dot),\n/* harmony export */ EasyScore: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScoreGrammar),\n/* harmony export */ Element: () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_16__.Element),\n/* harmony export */ Factory: () => (/* reexport safe */ _factory__WEBPACK_IMPORTED_MODULE_17__.Factory),\n/* harmony export */ Flow: () => (/* reexport safe */ _flow__WEBPACK_IMPORTED_MODULE_18__.Flow),\n/* harmony export */ Font: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.Font),\n/* harmony export */ FontStyle: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontStyle),\n/* harmony export */ FontWeight: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontWeight),\n/* harmony export */ Formatter: () => (/* reexport safe */ _formatter__WEBPACK_IMPORTED_MODULE_20__.Formatter),\n/* harmony export */ Fraction: () => (/* reexport safe */ _fraction__WEBPACK_IMPORTED_MODULE_21__.Fraction),\n/* harmony export */ FretHandFinger: () => (/* reexport safe */ _frethandfinger__WEBPACK_IMPORTED_MODULE_22__.FretHandFinger),\n/* harmony export */ GhostNote: () => (/* reexport safe */ _ghostnote__WEBPACK_IMPORTED_MODULE_23__.GhostNote),\n/* harmony export */ Glyph: () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.Glyph),\n/* harmony export */ GlyphNote: () => (/* reexport safe */ _glyphnote__WEBPACK_IMPORTED_MODULE_25__.GlyphNote),\n/* harmony export */ GraceNote: () => (/* reexport safe */ _gracenote__WEBPACK_IMPORTED_MODULE_26__.GraceNote),\n/* harmony export */ GraceNoteGroup: () => (/* reexport safe */ _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__.GraceNoteGroup),\n/* harmony export */ GraceTabNote: () => (/* reexport safe */ _gracetabnote__WEBPACK_IMPORTED_MODULE_28__.GraceTabNote),\n/* harmony export */ KeyManager: () => (/* reexport safe */ _keymanager__WEBPACK_IMPORTED_MODULE_29__.KeyManager),\n/* harmony export */ KeySigNote: () => (/* reexport safe */ _keysignote__WEBPACK_IMPORTED_MODULE_31__.KeySigNote),\n/* harmony export */ KeySignature: () => (/* reexport safe */ _keysignature__WEBPACK_IMPORTED_MODULE_30__.KeySignature),\n/* harmony export */ Modifier: () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.Modifier),\n/* harmony export */ ModifierContext: () => (/* reexport safe */ _modifiercontext__WEBPACK_IMPORTED_MODULE_33__.ModifierContext),\n/* harmony export */ ModifierPosition: () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.ModifierPosition),\n/* harmony export */ MultiMeasureRest: () => (/* reexport safe */ _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__.MultiMeasureRest),\n/* harmony export */ Music: () => (/* reexport safe */ _music__WEBPACK_IMPORTED_MODULE_35__.Music),\n/* harmony export */ Note: () => (/* reexport safe */ _note__WEBPACK_IMPORTED_MODULE_36__.Note),\n/* harmony export */ NoteHead: () => (/* reexport safe */ _notehead__WEBPACK_IMPORTED_MODULE_37__.NoteHead),\n/* harmony export */ NoteSubGroup: () => (/* reexport safe */ _notesubgroup__WEBPACK_IMPORTED_MODULE_38__.NoteSubGroup),\n/* harmony export */ Ornament: () => (/* reexport safe */ _ornament__WEBPACK_IMPORTED_MODULE_39__.Ornament),\n/* harmony export */ OutlineCode: () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.OutlineCode),\n/* harmony export */ Parenthesis: () => (/* reexport safe */ _parenthesis__WEBPACK_IMPORTED_MODULE_40__.Parenthesis),\n/* harmony export */ Parser: () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_41__.Parser),\n/* harmony export */ PedalMarking: () => (/* reexport safe */ _pedalmarking__WEBPACK_IMPORTED_MODULE_42__.PedalMarking),\n/* harmony export */ Piece: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Piece),\n/* harmony export */ Registry: () => (/* reexport safe */ _registry__WEBPACK_IMPORTED_MODULE_43__.Registry),\n/* harmony export */ RenderContext: () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.RenderContext),\n/* harmony export */ Renderer: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.Renderer),\n/* harmony export */ RendererBackends: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererLineEndType),\n/* harmony export */ RepeatNote: () => (/* reexport safe */ _repeatnote__WEBPACK_IMPORTED_MODULE_46__.RepeatNote),\n/* harmony export */ Repetition: () => (/* reexport safe */ _staverepetition__WEBPACK_IMPORTED_MODULE_54__.Repetition),\n/* harmony export */ RuntimeError: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.RuntimeError),\n/* harmony export */ SVGContext: () => (/* reexport safe */ _svgcontext__WEBPACK_IMPORTED_MODULE_64__.SVGContext),\n/* harmony export */ Stave: () => (/* reexport safe */ _stave__WEBPACK_IMPORTED_MODULE_47__.Stave),\n/* harmony export */ StaveConnector: () => (/* reexport safe */ _staveconnector__WEBPACK_IMPORTED_MODULE_49__.StaveConnector),\n/* harmony export */ StaveHairpin: () => (/* reexport safe */ _stavehairpin__WEBPACK_IMPORTED_MODULE_50__.StaveHairpin),\n/* harmony export */ StaveLine: () => (/* reexport safe */ _staveline__WEBPACK_IMPORTED_MODULE_51__.StaveLine),\n/* harmony export */ StaveModifier: () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifierPosition),\n/* harmony export */ StaveNote: () => (/* reexport safe */ _stavenote__WEBPACK_IMPORTED_MODULE_53__.StaveNote),\n/* harmony export */ StaveSection: () => (/* reexport safe */ _stavesection__WEBPACK_IMPORTED_MODULE_55__.StaveSection),\n/* harmony export */ StaveTempo: () => (/* reexport safe */ _stavetempo__WEBPACK_IMPORTED_MODULE_56__.StaveTempo),\n/* harmony export */ StaveText: () => (/* reexport safe */ _stavetext__WEBPACK_IMPORTED_MODULE_57__.StaveText),\n/* harmony export */ StaveTie: () => (/* reexport safe */ _stavetie__WEBPACK_IMPORTED_MODULE_58__.StaveTie),\n/* harmony export */ Stem: () => (/* reexport safe */ _stem__WEBPACK_IMPORTED_MODULE_60__.Stem),\n/* harmony export */ StemmableNote: () => (/* reexport safe */ _stemmablenote__WEBPACK_IMPORTED_MODULE_61__.StemmableNote),\n/* harmony export */ StringNumber: () => (/* reexport safe */ _stringnumber__WEBPACK_IMPORTED_MODULE_62__.StringNumber),\n/* harmony export */ Stroke: () => (/* reexport safe */ _strokes__WEBPACK_IMPORTED_MODULE_63__.Stroke),\n/* harmony export */ SymbolModifiers: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes),\n/* harmony export */ System: () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_65__.System),\n/* harmony export */ TabNote: () => (/* reexport safe */ _tabnote__WEBPACK_IMPORTED_MODULE_66__.TabNote),\n/* harmony export */ TabSlide: () => (/* reexport safe */ _tabslide__WEBPACK_IMPORTED_MODULE_67__.TabSlide),\n/* harmony export */ TabStave: () => (/* reexport safe */ _tabstave__WEBPACK_IMPORTED_MODULE_68__.TabStave),\n/* harmony export */ TabTie: () => (/* reexport safe */ _tabtie__WEBPACK_IMPORTED_MODULE_69__.TabTie),\n/* harmony export */ TextBracket: () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracketPosition),\n/* harmony export */ TextDynamics: () => (/* reexport safe */ _textdynamics__WEBPACK_IMPORTED_MODULE_71__.TextDynamics),\n/* harmony export */ TextFormatter: () => (/* reexport safe */ _textformatter__WEBPACK_IMPORTED_MODULE_72__.TextFormatter),\n/* harmony export */ TextJustification: () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextJustification),\n/* harmony export */ TextNote: () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextNote),\n/* harmony export */ TickContext: () => (/* reexport safe */ _tickcontext__WEBPACK_IMPORTED_MODULE_75__.TickContext),\n/* harmony export */ Tickable: () => (/* reexport safe */ _tickable__WEBPACK_IMPORTED_MODULE_74__.Tickable),\n/* harmony export */ TimeSigNote: () => (/* reexport safe */ _timesignote__WEBPACK_IMPORTED_MODULE_78__.TimeSigNote),\n/* harmony export */ TimeSignature: () => (/* reexport safe */ _timesignature__WEBPACK_IMPORTED_MODULE_77__.TimeSignature),\n/* harmony export */ TimeSignatureGlyph: () => (/* reexport safe */ _timesigglyph__WEBPACK_IMPORTED_MODULE_76__.TimeSignatureGlyph),\n/* harmony export */ Tremolo: () => (/* reexport safe */ _tremolo__WEBPACK_IMPORTED_MODULE_79__.Tremolo),\n/* harmony export */ Tuning: () => (/* reexport safe */ _tuning__WEBPACK_IMPORTED_MODULE_80__.Tuning),\n/* harmony export */ Tuplet: () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.Tuplet),\n/* harmony export */ TupletLocation: () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.TupletLocation),\n/* harmony export */ Vex: () => (/* reexport safe */ _vex__WEBPACK_IMPORTED_MODULE_84__.Vex),\n/* harmony export */ Vibrato: () => (/* reexport safe */ _vibrato__WEBPACK_IMPORTED_MODULE_85__.Vibrato),\n/* harmony export */ VibratoBracket: () => (/* reexport safe */ _vibratobracket__WEBPACK_IMPORTED_MODULE_86__.VibratoBracket),\n/* harmony export */ Voice: () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.Voice),\n/* harmony export */ VoiceMode: () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.VoiceMode),\n/* harmony export */ Volta: () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.Volta),\n/* harmony export */ VoltaType: () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.VoltaType),\n/* harmony export */ defined: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.defined),\n/* harmony export */ drawDot: () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.drawDot),\n/* harmony export */ globalObject: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.globalObject),\n/* harmony export */ isAccidental: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAccidental),\n/* harmony export */ isAnnotation: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAnnotation),\n/* harmony export */ isBarline: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isBarline),\n/* harmony export */ isCategory: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isCategory),\n/* harmony export */ isDot: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isDot),\n/* harmony export */ isGraceNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNoteGroup),\n/* harmony export */ isHTMLCanvas: () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLDiv),\n/* harmony export */ isNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isNote),\n/* harmony export */ isRenderContext: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isRenderContext),\n/* harmony export */ isStaveNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStemmableNote),\n/* harmony export */ isTabNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isTabNote),\n/* harmony export */ log: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.log),\n/* harmony export */ midLine: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.midLine),\n/* harmony export */ normalizeAngle: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.normalizeAngle),\n/* harmony export */ prefix: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.prefix),\n/* harmony export */ sumArray: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.sumArray),\n/* harmony export */ warn: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.warn)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ \"./src/crescendo.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ \"./src/factory.ts\");\n/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./flow */ \"./src/flow.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./gracetabnote */ \"./src/gracetabnote.ts\");\n/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keymanager */ \"./src/keymanager.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./stavehairpin */ \"./src/stavehairpin.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavesection */ \"./src/stavesection.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabslide */ \"./src/tabslide.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./tickable */ \"./src/tickable.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./timesigglyph */ \"./src/timesigglyph.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./tremolo */ \"./src/tremolo.ts\");\n/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./tuning */ \"./src/tuning.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./vex */ \"./src/vex.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './fonts/*' because they are used by the entry/* files.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './version'. It is accessible via Vex.Flow.BUILD.\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/keymanager.ts\":\n/*!***************************!*\\\n !*** ./src/keymanager.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeyManager: () => (/* binding */ KeyManager)\n/* harmony export */ });\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\n\n\nclass KeyManager {\n constructor(key) {\n this.music = new _music__WEBPACK_IMPORTED_MODULE_0__.Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = _music__WEBPACK_IMPORTED_MODULE_0__.Music.root_indices[this.keyParts.root];\n for (let i = 0; i < _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; ++i) {\n const index = (noteLocation + i) % _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length;\n const rootName = _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/keysignature.ts\":\n/*!*****************************!*\\\n !*** ./src/keysignature.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeySignature: () => (/* binding */ KeySignature)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\n\n\n\n\n\nclass KeySignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.glyphFontScale = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.accidentalCodes(acc.type);\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature((0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/keysignote.ts\":\n/*!***************************!*\\\n !*** ./src/keysignote.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeySigNote: () => (/* binding */ KeySigNote)\n/* harmony export */ });\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\n\n\n\nclass KeySigNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new _keysignature__WEBPACK_IMPORTED_MODULE_0__.KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/modifier.ts\":\n/*!*************************!*\\\n !*** ./src/modifier.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Modifier: () => (/* binding */ Modifier),\n/* harmony export */ ModifierPosition: () => (/* binding */ ModifierPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nvar ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nclass Modifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/modifiercontext.ts\":\n/*!********************************!*\\\n !*** ./src/modifiercontext.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ModifierContext: () => (/* binding */ ModifierContext)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_15__.log)('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote], state);\n _parenthesis__WEBPACK_IMPORTED_MODULE_10__.Parenthesis.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Parenthesis], state);\n _dot__WEBPACK_IMPORTED_MODULE_5__.Dot.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Dot], state);\n _frethandfinger__WEBPACK_IMPORTED_MODULE_6__.FretHandFinger.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.FretHandFinger], state);\n _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Accidental], state);\n _strokes__WEBPACK_IMPORTED_MODULE_13__.Stroke.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stroke], state);\n _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__.GraceNoteGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.GraceNoteGroup], state);\n _notesubgroup__WEBPACK_IMPORTED_MODULE_8__.NoteSubGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.NoteSubGroup], state);\n _stringnumber__WEBPACK_IMPORTED_MODULE_12__.StringNumber.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StringNumber], state);\n _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Articulation], state);\n _ornament__WEBPACK_IMPORTED_MODULE_9__.Ornament.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Ornament], state);\n _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Annotation], state);\n _chordsymbol__WEBPACK_IMPORTED_MODULE_4__.ChordSymbol.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.ChordSymbol], state);\n _bend__WEBPACK_IMPORTED_MODULE_3__.Bend.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Bend], state);\n _vibrato__WEBPACK_IMPORTED_MODULE_16__.Vibrato.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.postFormat(this.getMembers(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/multimeasurerest.ts\":\n/*!*********************************!*\\\n !*** ./src/multimeasurerest.ts ***!\n \\*********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MultiMeasureRest: () => (/* binding */ MultiMeasureRest)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\n\n\n\n\n\n\n\n\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nclass MultiMeasureRest extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isBarline)(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_5__.TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/music.ts\":\n/*!**********************!*\\\n !*** ./src/music.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Music: () => (/* binding */ Music)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n/** Music implements some standard music theory routines. */\nclass Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/note.ts\":\n/*!*********************!*\\\n !*** ./src/note.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Note: () => (/* binding */ Note)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickable */ \"./src/tickable.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nclass Note extends _tickable__WEBPACK_IMPORTED_MODULE_3__.Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n (0,_rendercontext__WEBPACK_IMPORTED_MODULE_1__.drawDot)(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/notehead.ts\":\n/*!*************************!*\\\n !*** ./src/notehead.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NoteHead: () => (/* binding */ NoteHead)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH);\n let fill = false;\n if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/notesubgroup.ts\":\n/*!*****************************!*\\\n !*** ./src/notesubgroup.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NoteSubGroup: () => (/* binding */ NoteSubGroup)\n/* harmony export */ });\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\n\n\n\n\n\nclass NoteSubGroup extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_0__.Formatter();\n this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__.Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/ornament.ts\":\n/*!*************************!*\\\n !*** ./src/ornament.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Ornament: () => (/* binding */ Ornament)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Ornament;\n }\n static get minPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = _tickcontext__WEBPACK_IMPORTED_MODULE_4__.TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/parenthesis.ts\":\n/*!****************************!*\\\n !*** ./src/parenthesis.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Parenthesis: () => (/* binding */ Parenthesis)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\n\n\n\n\n\n/** Parenthesis implements parenthesis modifiers for notes. */\nclass Parenthesis extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT;\n this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note)) {\n this.point = (_b = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('gracenote');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/parser.ts\":\n/*!***********************!*\\\n !*** ./src/parser.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Parser: () => (/* binding */ Parser)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\n\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_0__.log)('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/pedalmarking.ts\":\n/*!*****************************!*\\\n !*** ./src/pedalmarking.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PedalMarking: () => (/* binding */ PedalMarking)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/registry.ts\":\n/*!*************************!*\\\n !*** ./src/registry.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Registry: () => (/* binding */ Registry)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\n\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nclass Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/rendercontext.ts\":\n/*!******************************!*\\\n !*** ./src/rendercontext.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RenderContext: () => (/* binding */ RenderContext),\n/* harmony export */ drawDot: () => (/* binding */ drawDot)\n/* harmony export */ });\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\n\nclass RenderContext {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nfunction drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n\n\n/***/ }),\n\n/***/ \"./src/renderer.ts\":\n/*!*************************!*\\\n !*** ./src/renderer.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Renderer: () => (/* binding */ Renderer),\n/* harmony export */ RendererBackends: () => (/* binding */ RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* binding */ RendererLineEndType)\n/* harmony export */ });\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\nvar RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nvar RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_2__.isRenderContext)(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLCanvas)(element)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new _canvascontext__WEBPACK_IMPORTED_MODULE_0__.CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLDiv)(element)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new _svgcontext__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element);\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n\n\n\n/***/ }),\n\n/***/ \"./src/repeatnote.ts\":\n/*!***************************!*\\\n !*** ./src/repeatnote.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RepeatNote: () => (/* binding */ RepeatNote)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\n\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nclass RepeatNote extends _glyphnote__WEBPACK_IMPORTED_MODULE_1__.GlyphNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyphCode, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stave.ts\":\n/*!**********************!*\\\n !*** ./src/stave.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stave: () => (/* binding */ Stave)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavesection */ \"./src/stavesection.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 0,\n [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 1,\n [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 2,\n [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 0,\n [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 1,\n [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 2,\n [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 3,\n};\nclass Stave extends _element__WEBPACK_IMPORTED_MODULE_2__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.left_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n // end bar\n this.addEndModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.right_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_7__.Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new _stavevolta__WEBPACK_IMPORTED_MODULE_11__.Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new _stavesection__WEBPACK_IMPORTED_MODULE_8__.StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new _stavetempo__WEBPACK_IMPORTED_MODULE_9__.StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new _stavetext__WEBPACK_IMPORTED_MODULE_10__.StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n * @param clefSpec\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, _clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n this.addModifier(new _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new _clef__WEBPACK_IMPORTED_MODULE_1__.Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = (0,_typeguard__WEBPACK_IMPORTED_MODULE_14__.isBarline)(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Clef);\n // Align key signatures\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF,\n size: 8,\n weight: _font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_3__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavebarline.ts\":\n/*!*****************************!*\\\n !*** ./src/stavebarline.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Barline: () => (/* binding */ Barline),\n/* harmony export */ BarlineType: () => (/* binding */ BarlineType)\n/* harmony export */ });\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\n\n\n\nvar BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nclass Barline extends _stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/staveconnector.ts\":\n/*!*******************************!*\\\n !*** ./src/staveconnector.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveConnector: () => (/* binding */ StaveConnector)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 16,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavehairpin.ts\":\n/*!*****************************!*\\\n !*** ./src/stavehairpin.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveHairpin: () => (/* binding */ StaveHairpin)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\n\n\n\n\nclass StaveHairpin extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE || position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/staveline.ts\":\n/*!**************************!*\\\n !*** ./src/staveline.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveLine: () => (/* binding */ StaveLine)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\n\n\n\n\n\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification;\n\n\n\n/***/ }),\n\n/***/ \"./src/stavemodifier.ts\":\n/*!******************************!*\\\n !*** ./src/stavemodifier.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveModifier: () => (/* binding */ StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* binding */ StaveModifierPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\n\n\n\nvar StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nclass StaveModifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stavenote.ts\":\n/*!**************************!*\\\n !*** ./src/stavenote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveNote: () => (/* binding */ StaveNote)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\n\n\n\n\n\n\n\n\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.log)('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/staverepetition.ts\":\n/*!********************************!*\\\n !*** ./src/staverepetition.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Repetition: () => (/* binding */ Repetition)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\n\n\nclass Repetition extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavesection.ts\":\n/*!*****************************!*\\\n !*** ./src/stavesection.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveSection: () => (/* binding */ StaveSection)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\n\nclass StaveSection extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 10,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavetempo.ts\":\n/*!***************************!*\\\n !*** ./src/stavetempo.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveTempo: () => (/* binding */ StaveTempo)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\n\n\n\n\n\n\nclass StaveTempo extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(duration);\n x += 3 * scale;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 14,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavetext.ts\":\n/*!**************************!*\\\n !*** ./src/stavetext.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveText: () => (/* binding */ StaveText)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n\n\n\n\n\nclass StaveText extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: _textnote__WEBPACK_IMPORTED_MODULE_2__.TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT:\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE:\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 16,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stavetie.ts\":\n/*!*************************!*\\\n !*** ./src/stavetie.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveTie: () => (/* binding */ StaveTie)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\n\nclass StaveTie extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n\n\n\n/***/ }),\n\n/***/ \"./src/stavevolta.ts\":\n/*!***************************!*\\\n !*** ./src/stavevolta.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Volta: () => (/* binding */ Volta),\n/* harmony export */ VoltaType: () => (/* binding */ VoltaType)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\nvar VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 9,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/stem.ts\":\n/*!*********************!*\\\n !*** ./src/stem.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stem: () => (/* binding */ Stem)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Stem', args);\n}\nclass Stem extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/stemmablenote.ts\":\n/*!******************************!*\\\n !*** ./src/stemmablenote.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StemmableNote: () => (/* binding */ StemmableNote)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\n\n\n\n\n\n\nclass StemmableNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n if (direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stringnumber.ts\":\n/*!*****************************!*\\\n !*** ./src/stringnumber.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StringNumber: () => (/* binding */ StringNumber)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\n\n\n\n\n\n\n\nclass StringNumber extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(note)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE && leg <= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/strokes.ts\":\n/*!************************!*\\\n !*** ./src/strokes.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stroke: () => (/* binding */ Stroke)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\n\n\n\n\n\n\nclass Stroke extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isNote)(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/svgcontext.ts\":\n/*!***************************!*\\\n !*** ./src/svgcontext.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SVGContext: () => (/* binding */ SVGContext)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\n\n\n\n\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n 'font-size': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE + 'pt',\n 'font-weight': _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n 'font-style': _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(cls));\n if (id)\n group.setAttribute('id', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(startAngle);\n const tmpEndTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style);\n this.fontCSSString = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n\n\n\n/***/ }),\n\n/***/ \"./src/system.ts\":\n/*!***********************!*\\\n !*** ./src/system.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ System: () => (/* binding */ System)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nclass System extends _element__WEBPACK_IMPORTED_MODULE_1__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n _note__WEBPACK_IMPORTED_MODULE_3__.Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tables.ts\":\n/*!***********************!*\\\n !*** ./src/tables.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tables: () => (/* binding */ Tables)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/tabnote.ts\":\n/*!************************!*\\\n !*** ./src/tabnote.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabNote: () => (/* binding */ TabNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\n\n\n\n\n\n\n\n\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nclass TabNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE}pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` });\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.BELOW || position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isDot)(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tabslide.ts\":\n/*!*************************!*\\\n !*** ./src/tabslide.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabSlide: () => (/* binding */ TabSlide)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\n\n\nclass TabSlide extends _tabtie__WEBPACK_IMPORTED_MODULE_1__.TabTie {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 10,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/tabstave.ts\":\n/*!*************************!*\\\n !*** ./src/tabstave.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabStave: () => (/* binding */ TabStave)\n/* harmony export */ });\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\nclass TabStave extends _stave__WEBPACK_IMPORTED_MODULE_0__.Stave {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tabtie.ts\":\n/*!***********************!*\\\n !*** ./src/tabtie.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabTie: () => (/* binding */ TabTie)\n/* harmony export */ });\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\nclass TabTie extends _stavetie__WEBPACK_IMPORTED_MODULE_0__.StaveTie {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/textbracket.ts\":\n/*!****************************!*\\\n !*** ./src/textbracket.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextBracket: () => (/* binding */ TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* binding */ TextBracketPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.TextBracket', args);\n}\nvar TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_1__.Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 15,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC,\n};\n\n\n\n/***/ }),\n\n/***/ \"./src/textdynamics.ts\":\n/*!*****************************!*\\\n !*** ./src/textdynamics.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextDynamics: () => (/* binding */ TextDynamics)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Invalid dynamics character: ' + letter);\n const size = (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.render_options.glyph_font_size);\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/textformatter.ts\":\n/*!******************************!*\\\n !*** ./src/textformatter.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextFormatter: () => (/* binding */ TextFormatter)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isBold(requestedFont.weight);\n const italic = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD : _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL;\n const style = this.italic ? _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC : _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/textnote.ts\":\n/*!*************************!*\\\n !*** ./src/textnote.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextJustification: () => (/* binding */ TextJustification),\n/* harmony export */ TextNote: () => (/* binding */ TextNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nvar TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(struct.code, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x += width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n\n\n\n/***/ }),\n\n/***/ \"./src/tickable.ts\":\n/*!*************************!*\\\n !*** ./src/tickable.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tickable: () => (/* binding */ Tickable)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nclass Tickable extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tickcontext.ts\":\n/*!****************************!*\\\n !*** ./src/tickcontext.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TickContext: () => (/* binding */ TickContext)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\n\n\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nclass TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n this.maxTicks = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesigglyph.ts\":\n/*!*****************************!*\\\n !*** ./src/timesigglyph.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSignatureGlyph: () => (/* binding */ TimeSignatureGlyph)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\n\n\nclass TimeSignatureGlyph extends _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width);\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesignature.ts\":\n/*!******************************!*\\\n !*** ./src/timesignature.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSignature: () => (/* binding */ TimeSignature)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./timesigglyph */ \"./src/timesigglyph.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\n\n\n\n\n\n\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nclass TimeSignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new _timesigglyph__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesignote.ts\":\n/*!****************************!*\\\n !*** ./src/timesignote.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSigNote: () => (/* binding */ TimeSigNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n\n\n\nclass TimeSigNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_1__.TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tremolo.ts\":\n/*!************************!*\\\n !*** ./src/tremolo.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tremolo: () => (/* binding */ Tremolo)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\n\n\n\n\n\n\n\n/** Tremolo implements tremolo notation. */\nclass Tremolo extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isGraceNote)(note);\n const scale = gn ? _gracenote__WEBPACK_IMPORTED_MODULE_1__.GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_3__.Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tuning.ts\":\n/*!***********************!*\\\n !*** ./src/tuning.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tuning: () => (/* binding */ Tuning)\n/* harmony export */ });\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n/** `Tuning` implements varies types of tunings for tablature. */\nclass Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = _tables__WEBPACK_IMPORTED_MODULE_0__.Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${_tables__WEBPACK_IMPORTED_MODULE_0__.Tables.integerToNote(value)}/${octave}`;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tuplet.ts\":\n/*!***********************!*\\\n !*** ./src/tuplet.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tuplet: () => (/* binding */ Tuplet),\n/* harmony export */ TupletLocation: () => (/* binding */ TupletLocation)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\n\n\n\n\n\n\n\nvar TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nclass Tuplet extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n });\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/typeguard.ts\":\n/*!**************************!*\\\n !*** ./src/typeguard.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Category: () => (/* binding */ Category),\n/* harmony export */ isAccidental: () => (/* binding */ isAccidental),\n/* harmony export */ isAnnotation: () => (/* binding */ isAnnotation),\n/* harmony export */ isBarline: () => (/* binding */ isBarline),\n/* harmony export */ isCategory: () => (/* binding */ isCategory),\n/* harmony export */ isDot: () => (/* binding */ isDot),\n/* harmony export */ isGraceNote: () => (/* binding */ isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* binding */ isGraceNoteGroup),\n/* harmony export */ isNote: () => (/* binding */ isNote),\n/* harmony export */ isRenderContext: () => (/* binding */ isRenderContext),\n/* harmony export */ isStaveNote: () => (/* binding */ isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* binding */ isStemmableNote),\n/* harmony export */ isTabNote: () => (/* binding */ isTabNote)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nfunction isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nconst isAccidental = (obj) => isCategory(obj, Category.Accidental);\nconst isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nconst isBarline = (obj) => isCategory(obj, Category.Barline);\nconst isDot = (obj) => isCategory(obj, Category.Dot);\nconst isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nconst isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nconst isNote = (obj) => isCategory(obj, Category.Note);\nconst isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nconst isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nconst isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nconst isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nvar Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n\n\n/***/ }),\n\n/***/ \"./src/util.ts\":\n/*!*********************!*\\\n !*** ./src/util.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RuntimeError: () => (/* binding */ RuntimeError),\n/* harmony export */ defined: () => (/* binding */ defined),\n/* harmony export */ globalObject: () => (/* binding */ globalObject),\n/* harmony export */ log: () => (/* binding */ log),\n/* harmony export */ midLine: () => (/* binding */ midLine),\n/* harmony export */ normalizeAngle: () => (/* binding */ normalizeAngle),\n/* harmony export */ prefix: () => (/* binding */ prefix),\n/* harmony export */ sumArray: () => (/* binding */ sumArray),\n/* harmony export */ warn: () => (/* binding */ warn)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nclass RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nfunction globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof __webpack_require__.g !== 'undefined') {\n return __webpack_require__.g;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nfunction defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nfunction log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nfunction warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nfunction midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nfunction prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nfunction normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nfunction sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n\n\n/***/ }),\n\n/***/ \"./src/vex.ts\":\n/*!********************!*\\\n !*** ./src/vex.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Vex: () => (/* binding */ Vex)\n/* harmony export */ });\n/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flow */ \"./src/flow.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\n\n\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = _flow__WEBPACK_IMPORTED_MODULE_0__.Flow;\n\n\n\n/***/ }),\n\n/***/ \"./src/vibrato.ts\":\n/*!************************!*\\\n !*** ./src/vibrato.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Vibrato: () => (/* binding */ Vibrato)\n/* harmony export */ });\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n/** `Vibrato` implements diverse vibratos. */\nclass Vibrato extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(_bend__WEBPACK_IMPORTED_MODULE_0__.Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/vibratobracket.ts\":\n/*!*******************************!*\\\n !*** ./src/vibratobracket.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ VibratoBracket: () => (/* binding */ VibratoBracket)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.log)('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n _vibrato__WEBPACK_IMPORTED_MODULE_3__.Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n\n\n\n/***/ }),\n\n/***/ \"./src/voice.ts\":\n/*!**********************!*\\\n !*** ./src/voice.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Voice: () => (/* binding */ Voice),\n/* harmony export */ VoiceMode: () => (/* binding */ VoiceMode)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\nvar VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nclass Voice extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_4__.sumArray)(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/web.ts\":\n/*!********************!*\\\n !*** ./src/web.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isHTMLCanvas: () => (/* binding */ isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* binding */ isHTMLDiv)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\n\n// eslint-disable-next-line\nfunction isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nfunction isHTMLDiv(element) {\n if (!element)\n return false;\n const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\n/*!********************************!*\\\n !*** ./entry/vexflow-debug.ts ***!\n \\********************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Accidental),\n/* harmony export */ Annotation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationVerticalJustify),\n/* harmony export */ Articulation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Articulation),\n/* harmony export */ BEAM_BOTH: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_RIGHT),\n/* harmony export */ BarNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarNote),\n/* harmony export */ Barline: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Barline),\n/* harmony export */ BarlineType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarlineType),\n/* harmony export */ Beam: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Beam),\n/* harmony export */ Bend: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Bend),\n/* harmony export */ BoundingBox: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBox),\n/* harmony export */ BoundingBoxComputation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBoxComputation),\n/* harmony export */ Builder: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Builder),\n/* harmony export */ CanvasContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CanvasContext),\n/* harmony export */ Category: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Category),\n/* harmony export */ ChordSymbol: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolVerticalJustify),\n/* harmony export */ Clef: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Clef),\n/* harmony export */ ClefNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ClefNote),\n/* harmony export */ Crescendo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Crescendo),\n/* harmony export */ Curve: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Curve),\n/* harmony export */ CurvePosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CurvePosition),\n/* harmony export */ Dot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Dot),\n/* harmony export */ EasyScore: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScoreGrammar),\n/* harmony export */ Element: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Element),\n/* harmony export */ Factory: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Factory),\n/* harmony export */ Flow: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Flow),\n/* harmony export */ Font: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Font),\n/* harmony export */ FontStyle: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontStyle),\n/* harmony export */ FontWeight: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontWeight),\n/* harmony export */ Formatter: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Formatter),\n/* harmony export */ Fraction: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Fraction),\n/* harmony export */ FretHandFinger: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger),\n/* harmony export */ GhostNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GhostNote),\n/* harmony export */ Glyph: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Glyph),\n/* harmony export */ GlyphNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GlyphNote),\n/* harmony export */ GraceNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNote),\n/* harmony export */ GraceNoteGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup),\n/* harmony export */ GraceTabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceTabNote),\n/* harmony export */ KeyManager: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeyManager),\n/* harmony export */ KeySigNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySigNote),\n/* harmony export */ KeySignature: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySignature),\n/* harmony export */ Modifier: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Modifier),\n/* harmony export */ ModifierContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierContext),\n/* harmony export */ ModifierPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierPosition),\n/* harmony export */ MultiMeasureRest: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.MultiMeasureRest),\n/* harmony export */ Music: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Music),\n/* harmony export */ Note: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Note),\n/* harmony export */ NoteHead: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteHead),\n/* harmony export */ NoteSubGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteSubGroup),\n/* harmony export */ Ornament: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Ornament),\n/* harmony export */ OutlineCode: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.OutlineCode),\n/* harmony export */ Parenthesis: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parenthesis),\n/* harmony export */ Parser: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parser),\n/* harmony export */ PedalMarking: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.PedalMarking),\n/* harmony export */ Piece: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Piece),\n/* harmony export */ Registry: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Registry),\n/* harmony export */ RenderContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RenderContext),\n/* harmony export */ Renderer: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Renderer),\n/* harmony export */ RendererBackends: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererLineEndType),\n/* harmony export */ RepeatNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RepeatNote),\n/* harmony export */ Repetition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Repetition),\n/* harmony export */ RuntimeError: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RuntimeError),\n/* harmony export */ SVGContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SVGContext),\n/* harmony export */ Stave: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stave),\n/* harmony export */ StaveConnector: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveConnector),\n/* harmony export */ StaveHairpin: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveHairpin),\n/* harmony export */ StaveLine: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveLine),\n/* harmony export */ StaveModifier: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition),\n/* harmony export */ StaveNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveNote),\n/* harmony export */ StaveSection: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveSection),\n/* harmony export */ StaveTempo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTempo),\n/* harmony export */ StaveText: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveText),\n/* harmony export */ StaveTie: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTie),\n/* harmony export */ Stem: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stem),\n/* harmony export */ StemmableNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StemmableNote),\n/* harmony export */ StringNumber: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StringNumber),\n/* harmony export */ Stroke: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stroke),\n/* harmony export */ SymbolModifiers: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolTypes),\n/* harmony export */ System: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.System),\n/* harmony export */ TabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabNote),\n/* harmony export */ TabSlide: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabSlide),\n/* harmony export */ TabStave: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabStave),\n/* harmony export */ TabTie: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabTie),\n/* harmony export */ TextBracket: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracketPosition),\n/* harmony export */ TextDynamics: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextDynamics),\n/* harmony export */ TextFormatter: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextFormatter),\n/* harmony export */ TextJustification: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextJustification),\n/* harmony export */ TextNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextNote),\n/* harmony export */ TickContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TickContext),\n/* harmony export */ Tickable: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tickable),\n/* harmony export */ TimeSigNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSigNote),\n/* harmony export */ TimeSignature: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignature),\n/* harmony export */ TimeSignatureGlyph: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph),\n/* harmony export */ Tremolo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tremolo),\n/* harmony export */ Tuning: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuning),\n/* harmony export */ Tuplet: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuplet),\n/* harmony export */ TupletLocation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TupletLocation),\n/* harmony export */ Vex: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vex),\n/* harmony export */ Vibrato: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vibrato),\n/* harmony export */ VibratoBracket: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VibratoBracket),\n/* harmony export */ Voice: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Voice),\n/* harmony export */ VoiceMode: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoiceMode),\n/* harmony export */ Volta: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Volta),\n/* harmony export */ VoltaType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoltaType),\n/* harmony export */ \"default\": () => (/* reexport module object */ _src_index__WEBPACK_IMPORTED_MODULE_3__),\n/* harmony export */ defined: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.defined),\n/* harmony export */ drawDot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.drawDot),\n/* harmony export */ globalObject: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.globalObject),\n/* harmony export */ isAccidental: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAccidental),\n/* harmony export */ isAnnotation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAnnotation),\n/* harmony export */ isBarline: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isBarline),\n/* harmony export */ isCategory: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isCategory),\n/* harmony export */ isDot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isDot),\n/* harmony export */ isGraceNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNoteGroup),\n/* harmony export */ isHTMLCanvas: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLDiv),\n/* harmony export */ isNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isNote),\n/* harmony export */ isRenderContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isRenderContext),\n/* harmony export */ isStaveNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStemmableNote),\n/* harmony export */ isTabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isTabNote),\n/* harmony export */ log: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.log),\n/* harmony export */ midLine: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.midLine),\n/* harmony export */ normalizeAngle: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle),\n/* harmony export */ prefix: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.prefix),\n/* harmony export */ sumArray: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.sumArray),\n/* harmony export */ warn: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.warn)\n/* harmony export */ });\n/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/flow */ \"./src/flow.ts\");\n/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/fonts/load_all */ \"./src/fonts/load_all.ts\");\n/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/fonts/textfonts */ \"./src/fonts/textfonts.ts\");\n/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/index */ \"./src/index.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-debug.ts is the entry point for the build output file vexflow-debug.js.\n// It statically bundles all the music engraving fonts.\n// Currently, it is identical to vexflow.ts, but the webpack config inside Gruntfile.js\n// sets the webpack mode to 'development' to produce an unminified build.\n// In the future, we could do something different with this entry file, such as turn on flags for logging.\n\n\n\n(0,_src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__.loadAllMusicFonts)();\n_src_flow__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont('Bravura', 'Gonville', 'Custom');\n(0,_src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__.loadTextFonts)();\n// Re-export all exports from index.ts.\n\n// Also collect all exports into a default export for CJS projects.\n\n\n})();\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=vexflow-debug.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Smoosic relies on dynamic creation of almost everything. This class exports all the symbols\r\n// that need to be created via reflection.\r\n// ui application components\r\n// vexflow interface\r\nimport { TextFormatter } from '../common/textformatter';\r\nimport { VexFlow } from '../common/vex';\r\nimport { SuiApplication } from './application';\r\nimport { SuiEventHandler } from './eventHandler';\r\nimport { SuiExceptionHandler } from '../ui/exceptions';\r\nimport { Qwerty } from '../ui/qwerty';\r\nimport { SuiPiano } from '../render/sui/piano';\r\nimport { SuiDom } from './dom';\r\nimport { SuiHelp } from '../ui/help';\r\nimport { ArticulationButtons } from '../ui/buttons/articulation';\r\nimport { BeamButtons } from '../ui/buttons/beam';\r\nimport { ChordButtons } from '../ui/buttons/chord';\r\nimport { CollapseRibbonControl, ExtendedCollapseParent } from '../ui/buttons/collapsable';\r\nimport { DisplaySettings } from '../ui/buttons/display';\r\nimport { DurationButtons } from '../ui/buttons/duration';\r\nimport { MeasureButtons } from '../ui/buttons/measure';\r\nimport { MicrotoneButtons } from '../ui/buttons/microtone';\r\nimport { NavigationButtons } from '../ui/buttons/navigation';\r\nimport { NoteButtons } from '../ui/buttons/note';\r\nimport { PlayerButtons } from '../ui/buttons/player';\r\nimport { StaveButtons } from '../ui/buttons/stave';\r\nimport { TextButtons } from '../ui/buttons/text';\r\nimport { VoiceButtons } from '../ui/buttons/voice';\r\nimport { SmoTranslationEditor } from '../ui/i18n/translationEditor';\r\nimport { SmoConfiguration } from './configuration';\r\nimport { RibbonButtons } from '../ui/buttons/ribbon';\r\nimport { simpleRibbonLayout } from '../ui/ribbonLayout/default/tabletRibbon';\r\nimport { SimpleEventHandler, ModalEventHandler } from './common';\r\n// Language strings\r\nimport { cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn\r\n} from '../ui/i18n/language_en';\r\n\r\n// ui dialogs and menus\r\n// Dialogs\r\nimport { SuiDialogBase } from '../ui/dialogs/dialog';\r\nimport { SuiModifierDialogFactory } from '../ui/dialogs/factory';\r\nimport { SuiTransposeScoreDialog, SuiTransposeScoreAdapter } from '../ui/dialogs/transposeScore';\r\nimport { SuiMeasureDialog } from '../ui/dialogs/measureFormat';\r\nimport { SuiInsertMeasures } from '../ui/dialogs/addMeasure';\r\nimport { SuiInstrumentDialog } from '../ui/dialogs/instrument';\r\nimport { SuiTimeSignatureDialog } from '../ui/dialogs/timeSignature';\r\nimport { SuiTempoDialog } from '../ui/dialogs/tempo';\r\nimport { SuiScoreIdentificationDialog } from '../ui/dialogs/scoreId';\r\nimport { SuiScorePreferencesDialog } from '../ui/dialogs/preferences';\r\nimport { SuiPageLayoutDialog } from '../ui/dialogs/pageLayout';\r\nimport { SuiTextBracketDialog } from '../ui/dialogs/textBracket';\r\nimport { SuiScoreFontDialog } from '../ui/dialogs/fonts';\r\nimport { SuiGlobalLayoutDialog } from '../ui/dialogs/globalLayout';\r\nimport { SuiScoreViewDialog } from '../ui/dialogs/scoreView';import { SuiLibraryDialog } from '../ui/dialogs/library';\r\nimport { SuiChordChangeDialog } from '../ui/dialogs/chordChange';\r\nimport { SuiLyricDialog } from '../ui/dialogs/lyric';\r\nimport { SuiTextBlockDialog, helpModal } from '../ui/dialogs/textBlock';\r\nimport { SuiDynamicModifierDialog } from '../ui/dialogs/dynamics';\r\nimport { SuiSlurAttributesDialog } from '../ui/dialogs/slur';\r\nimport { SuiTieAttributesDialog } from '../ui/dialogs/tie';\r\nimport { SuiVoltaAttributeDialog } from '../ui/dialogs/volta';\r\nimport { SuiHairpinAttributesDialog } from '../ui/dialogs/hairpin';\r\nimport { SuiStaffGroupDialog } from '../ui/dialogs/staffGroup';\r\nimport { SuiArpeggioDialog } from '../ui/dialogs/arpeggio';\r\nimport { SuiClefChangeDialog } from '../ui/dialogs/clefChange';\r\nimport { SuiPartInfoDialog } from '../ui/dialogs/partInfo';\r\nimport { SuiLoadMxmlDialog, SuiLoadFileDialog,\r\n /* SuiLoadActionsDialog, SuiSaveActionsDialog, */\r\n SuiPrintFileDialog, SuiSaveFileDialog, SuiSaveXmlDialog,\r\n SuiSaveMidiDialog, SuiSaveVexDialog } from '../ui/dialogs/fileDialogs';\r\n // Dialog components\r\n\r\nimport { SuiTextInputComponent, SuiTextInputComposite } from '../ui/dialogs/components/textInput';\r\nimport { SuiDropdownComponent, SuiDropdownComposite } from '../ui/dialogs/components/dropdown';\r\nimport { SuiButtonComposite, SuiButtonComponent } from '../ui/dialogs/components/button';\r\nimport { SuiToggleComponent, SuiToggleComposite } from '../ui/dialogs/components/toggle';\r\nimport { SuiFileDownloadComponent } from '../ui/dialogs/components/fileDownload';\r\nimport { SuiRockerComponent, SuiRockerComposite } from '../ui/dialogs/components/rocker';\r\nimport { SuiFontComponent } from '../ui/dialogs/components/fontComponent';\r\nimport { SuiTextBlockComponent } from '../ui/dialogs/components/textInPlace';\r\nimport { SuiTreeComponent } from '../ui/dialogs/components/tree';\r\nimport { SuiPitchArrayComponent, SuiPitchArrayComponentTab, \r\n SuiPitchComponent, SuiPitchComposite } from '../ui/dialogs/components/pitch';\r\nimport {\r\n SuiLyricComponent, SuiChordComponent,\r\n SuiNoteTextComponent\r\n} from '../ui/dialogs/components/noteText';\r\nimport { SuiDragText } from '../ui/dialogs/components/dragText';\r\nimport { SuiTextInPlace } from '../ui/dialogs/components/textInPlace';\r\nimport { CheckboxDropdownComponent } from '../ui/dialogs/components/checkdrop';\r\nimport { TieMappingComponent } from '../ui/dialogs/components/tie';\r\nimport { StaffAddRemoveComponent,\r\n StaffCheckComponent} from '../ui/dialogs/components/staffComponents';\r\nimport { TextCheckComponent } from '../ui/dialogs/components/textCheck';\r\n// menus\r\nimport { SuiMenuManager} from '../ui/menus/manager';\r\nimport { SuiMenuBase } from '../ui/menus/menu';\r\nimport { SuiScoreMenu } from '../ui/menus/score';\r\nimport { SuiPartMenu } from '../ui/menus/parts';\r\nimport { SuiPartSelectionMenu } from '../ui/menus/partSelection';\r\nimport { SuiDynamicsMenu } from '../ui/menus/dynamics';\r\nimport { SuiTimeSignatureMenu } from '../ui/menus/timeSignature';\r\nimport { SuiKeySignatureMenu } from '../ui/menus/keySignature';\r\nimport { SuiStaffModifierMenu } from '../ui/menus/staffModifier';\r\nimport { SuiFileMenu } from '../ui/menus/file';\r\nimport { SuiLanguageMenu } from '../ui/menus/language';\r\nimport { SmoLanguage, SmoTranslator } from '../ui/i18n/language';\r\nimport { SuiMeasureMenu } from '../ui/menus/measure';\r\nimport { SuiNoteMenu } from '../ui/menus/note';\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { PromiseHelpers } from '../common/promiseHelpers';\r\n// render library\r\nimport { SuiScoreView } from '../render/sui/scoreView';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { SuiScoreRender } from '../render/sui/scoreRender';\r\nimport { layoutDebug } from '../render/sui/layoutDebug';\r\nimport { SuiMapper } from '../render/sui/mapper';\r\nimport { SuiScroller } from '../render/sui/scroller';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\n\r\n// audio library\r\nimport { SuiAudioPlayer } from '../render/audio/player';\r\nimport { SuiOscillator, SuiSampler, SuiReverb } from '../render/audio/oscillator';\r\nimport { SuiSampleMedia } from '../render/audio/samples';\r\n\r\n\r\n// SMO object model\r\nimport { SmoScore, engravingFontTypes, isEngravingFont } from '../smo/data/score';\r\nimport { UndoBuffer } from '../smo/xform/undo';\r\nimport { SmoNote } from '../smo/data/note';\r\nimport { SmoDuration } from '../smo/xform/tickDuration';\r\nimport { createLoadTests } from '../../tests/file-load';\r\nimport { SmoStaffHairpin, StaffModifierBase, SmoInstrument, SmoSlur, SmoTie, SmoStaffTextBracket,\r\n SmoTabStave\r\n } from '../smo/data/staffModifiers';\r\nimport { SmoMeasure } from '../smo/data/measure';\r\nimport { SmoMusic } from '../smo/data/music';\r\nimport { SmoAudioPitch } from '../smo/data/music';\r\nimport { SmoSelection, SmoSelector } from '../smo/xform/selections';\r\nimport { SmoOrnament, SmoArticulation, SmoDynamicText, SmoGraceNote, SmoMicrotone, SmoLyric,\r\n SmoArpeggio, SmoClefChange } from '../smo/data/noteModifiers';\r\nimport { SmoSystemStaff } from '../smo/data/systemStaff';\r\nimport { SmoSystemGroup, SmoAudioPlayerSettings, SmoScorePreferences } from '../smo/data/scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupParams } from '../smo/data/scoreText';\r\nimport { SmoOperation } from '../smo/xform/operations';\r\nimport {\r\n SmoRehearsalMark, SmoMeasureFormat, SmoBarline, SmoRepeatSymbol,\r\n SmoVolta, SmoMeasureText, SmoTempoText, TimeSignature\r\n} from '../smo/data/measureModifiers';\r\nimport { SmoToXml } from '../smo/mxml/smoToXml';\r\nimport { MidiToSmo } from '../smo/midi/midiToSmo';\r\nimport { SmoToMidi } from '../smo/midi/smoToMidi';\r\nimport { XmlToSmo } from '../smo/mxml/xmlToSmo';\r\nimport { SmoToVex } from '../render/vex/toVex';\r\n// utilities\r\nimport { buildDom, addFileLink, InputTrapper, draggable, closeDialogPromise, getDomContainer, createTopDomContainer } from '../common/htmlHelpers';\r\n\r\nimport { renderVexTests } from './generateVexTests';\r\nconst getClass = (jsonString: string) => {\r\n return eval('Smo.' + jsonString);\r\n};\r\nexport const Smo = {\r\n // Application-level classes\r\n SmoConfiguration,\r\n SuiApplication,\r\n SuiDom, SuiEventHandler, SuiExceptionHandler,\r\n Qwerty, SuiHelp, SmoTranslationEditor, SimpleEventHandler, ModalEventHandler,\r\n // Ribbon buttons\r\n simpleRibbonLayout,\r\n RibbonButtons, NoteButtons, TextButtons, ChordButtons, MicrotoneButtons,\r\n StaveButtons, BeamButtons, MeasureButtons, DurationButtons,\r\n VoiceButtons, PlayerButtons, ArticulationButtons, NavigationButtons,\r\n DisplaySettings, ExtendedCollapseParent, CollapseRibbonControl,\r\n // Menus\r\n SuiMenuManager, SuiMenuBase, SuiScoreMenu, SuiFileMenu,\r\n SuiDynamicsMenu, SuiTimeSignatureMenu, SuiKeySignatureMenu, SuiStaffModifierMenu,\r\n SuiLanguageMenu, SuiMeasureMenu, SuiNoteMenu, SmoLanguage, SmoTranslator, SuiPartMenu,\r\n SuiPartSelectionMenu,\r\n // Dialogs\r\n SuiTempoDialog, SuiInstrumentDialog, SuiModifierDialogFactory, SuiLibraryDialog,\r\n SuiTextBracketDialog,\r\n SuiScoreViewDialog, SuiGlobalLayoutDialog, SuiScoreIdentificationDialog, SuiTransposeScoreAdapter,\r\n SuiTransposeScoreDialog,\r\n SuiScoreFontDialog, SuiPageLayoutDialog, SuiMeasureDialog, SuiInsertMeasures,\r\n SuiTimeSignatureDialog,SuiTextBlockDialog, SuiLyricDialog, SuiChordChangeDialog,\r\n SuiSlurAttributesDialog, SuiTieAttributesDialog, SuiVoltaAttributeDialog,\r\n SuiHairpinAttributesDialog, SuiStaffGroupDialog, helpModal,\r\n SuiLoadFileDialog, SuiLoadMxmlDialog, SuiScorePreferencesDialog,\r\n SuiPartInfoDialog,\r\n /* SuiLoadActionsDialog, SuiSaveActionsDialog, */\r\n SuiPrintFileDialog, SuiSaveFileDialog, SuiSaveXmlDialog, SuiSaveVexDialog,\r\n SuiSaveMidiDialog, SuiDialogBase,\r\n // Dialog components\r\n SuiTreeComponent,\r\n SuiDropdownComponent,\r\n SuiRockerComponent, SuiFileDownloadComponent,\r\n SuiToggleComponent, SuiButtonComponent, SuiDropdownComposite,\r\n SuiToggleComposite, SuiButtonComposite, SuiRockerComposite, SuiTextInputComposite,\r\n SuiFontComponent, SuiTextInPlace, SuiLyricComponent, SuiChordComponent, SuiDragText,\r\n SuiNoteTextComponent, SuiTextBlockComponent, SuiTextInputComponent,\r\n SuiDynamicModifierDialog, CheckboxDropdownComponent, TieMappingComponent, StaffAddRemoveComponent,\r\n StaffCheckComponent, TextCheckComponent, SuiArpeggioDialog, SuiClefChangeDialog,\r\n SuiPitchArrayComponent, SuiPitchArrayComponentTab, SuiPitchComponent,\r\n SuiPitchComposite, \r\n SuiXhrLoader,PromiseHelpers,\r\n // Rendering components\r\n SuiPiano, layoutDebug, SuiScoreView,SuiScroller, SvgHelpers, SuiMapper, SuiScoreRender,\r\n SuiScoreViewOperations, TextFormatter, VexFlow,\r\n\r\n // Audio components\r\n SuiAudioPlayer, SuiOscillator, SuiSampleMedia, SuiSampler, SuiReverb,\r\n\r\n // Smo Music Objects\r\n SmoScore,\r\n SmoScorePreferences, \r\n engravingFontTypes, isEngravingFont,\r\n XmlToSmo,\r\n SmoToXml,\r\n MidiToSmo,\r\n SmoToMidi,\r\n SmoMusic,\r\n SmoAudioPitch,\r\n SmoMeasure,\r\n SmoSystemStaff,\r\n SmoNote,\r\n // staff modifier\r\n SmoStaffHairpin, StaffModifierBase,\r\n SmoStaffTextBracket,\r\n SmoInstrument, SmoSlur, SmoTie, SmoTabStave,\r\n // score modifiers\r\n SmoSystemGroup, SmoAudioPlayerSettings, SmoTextGroup,\r\n // measure modifiers\r\n SmoRehearsalMark, SmoMeasureFormat, SmoBarline, SmoRepeatSymbol,\r\n SmoVolta, SmoMeasureText, SmoTempoText, TimeSignature,\r\n // note modifiers\r\n SmoOrnament,\r\n SmoArticulation, SmoDynamicText, SmoGraceNote, SmoMicrotone, SmoLyric, SmoArpeggio, SmoClefChange,\r\n // Smo Transformers\r\n SmoSelection, SmoSelector, SmoDuration, UndoBuffer, SmoToVex, SmoOperation,\r\n // new score bootstrap\r\n // help strings\r\n cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn,\r\n getClass,\r\n createLoadTests,\r\n // utilities\r\n buildDom, addFileLink, InputTrapper, draggable, closeDialogPromise, getDomContainer, createTopDomContainer,\r\n renderVexTests\r\n}\r\nexport default Smo;\r\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"smoosic.js","mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAm+C9B,CAAC;AAGC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsB/B,CAAC;AAGK,MAAM,eAAe,GAAG;;;;;;;;;;;;CAY9B,CAAC;AAGK,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;CAmBnC,CAAC;AAGK,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;CAiBjC,CAAC;;;;;;;;;;;;;;;;ACrjDK,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAm+CjC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACn+CI,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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AClB,CAAC,CAAC,CAAC;AACL,CAAC;;;;;;;;;;;AC7DD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAyD;AAC7D;AACA,MAAM,EAKoB;AAC1B,CAAC;AACD,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,8BAAmB;;AAEzE,8BAAmB,GAAG,0BAAmB;AACzC,qBAAqB,8BAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,+BAAmB;;AAEzE,+BAAmB,GAAG,0BAAmB;AACzC,qBAAqB,+BAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,+BAAmB;AACrF,+DAA+D,+BAAmB;AAClF,kEAAkE,+BAAmB;AACrF,+DAA+D,+BAAmB;AAClF,gEAAgE,+BAAmB;AACnF,mEAAmE,+BAAmB;AACtF,8DAA8D,+BAAmB;AACjF;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAiD;AAChF;AACA;AACA,+BAA+B,sCAAsC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wCAAwC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH,KAAK;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yIAAyI;AACzI,0IAA0I;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,KAAK;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8EAA8E,qCAAqC,IAAI;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,iEAAiE,gCAAmB;AACpF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,uEAAuE,gCAAmB;AAC1F,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kEAAkE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,gCAAmB;AAClF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU;AACzH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB;AACA;AACA,oHAAoH,gBAAgB;AACpI;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,EAAE,OAAO,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,gCAAmB;AACjF,sEAAsE,gCAAmB;AACzF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,gCAAmB;;AAEzE,gCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,gCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA,sBAAsB;AACtB,iEAAiE,gCAAmB;AACpF,kEAAkE,gCAAmB;AACrF,8DAA8D,gCAAmB;AACjF,gEAAgE,gCAAmB;AACnF,gEAAgE,gCAAmB;AACnF,mEAAmE,gCAAmB;AACtF,8DAA8D,gCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wBAAwB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD,oDAAoD,IAAI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC,oDAAoD,IAAI;AACjH;AACA;AACA;AACA,0BAA0B;AAC1B,kCAAkC;AAClC;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAqD,8CAA8C,IAAI;AACvH;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,2EAA2E;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAgC;AAC7D;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;;AAGjC,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,uEAAuE,iCAAmB;AAC1F,8DAA8D,iCAAmB;AACjF,6DAA6D,iCAAmB;AAChF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,+DAA+D,iCAAmB;AAClF,kEAAkE,iCAAmB;AACrF,gEAAgE,iCAAmB;AACnF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AACrE;AACA;AACA;AACA;AACA,CAAC,gEAAgE;AACjE;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mBAAmB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA,sCAAsC,qCAAqC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,yBAAyB;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iEAAiE,iBAAiB,kBAAkB;AACpG;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,iCAAmB;AAClF,uEAAuE,iCAAmB;AAC1F,gEAAgE,iCAAmB;AACnF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2HAA2H,UAAU;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,UAAU,eAAe,WAAW,GAAG,UAAU;AACzG,2DAA2D,UAAU,eAAe,WAAW,GAAG,UAAU;AAC5G,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,+DAA+D,iCAAmB;AAClF,8DAA8D,iCAAmB;AACjF,mEAAmE,iCAAmB;AACtF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA,kKAAkK,UAAU;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kKAAkK,UAAU;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,qEAAqE,iCAAmB;AACxF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,iCAAmB;AACpF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA,sBAAsB;AACtB,sEAAsE,iCAAmB;AACzF,6DAA6D,iCAAmB;AAChF,wEAAwE,iCAAmB;AAC3F,+DAA+D,iCAAmB;AAClF,gEAAgE,iCAAmB;AACnF,8DAA8D,iCAAmB;AACjF,8DAA8D,iCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA,iFAAiF,UAAU,WAAW,EAAE;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2CAA2C;AAC3C;AACA;AACA,kCAAkC,gBAAgB;AAClD,kCAAkC,6CAA6C;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,UAAU;AAClC,2EAA2E,WAAW;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,qDAAqD,uMAAuM,cAAc;AAC1Q,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA,4BAA4B;AAC5B,kCAAkC,oDAAoD;AACtF;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA,kCAAkC,kBAAkB,EAAE,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,kCAAkC;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,8DAA8D,iCAAmB;AACjF,qEAAqE,iCAAmB;AACxF,kEAAkE,iCAAmB;AACrF,+DAA+D,iCAAmB;AAClF,mEAAmE,iCAAmB;AACtF,iEAAiE,iCAAmB;AACpF,oEAAoE,iCAAmB;AACvF,yEAAyE,iCAAmB;AAC5F,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,yEAAyE,iCAAmB;AAC5F,qEAAqE,iCAAmB;AACxF,0EAA0E,iCAAmB;AAC7F,2EAA2E,iCAAmB;AAC9F,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,qEAAqE,iCAAmB;AACxF,gEAAgE,iCAAmB;AACnF,yEAAyE,iCAAmB;AAC5F,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,mEAAmE,iCAAmB;AACtF,uEAAuE,iCAAmB;AAC1F,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,+DAA+D,iCAAmB;AAClF,yEAAyE,iCAAmB;AAC5F,gEAAgE,iCAAmB;AACnF,8DAA8D,iCAAmB;AACjF;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA,6BAA6B,YAAY,4BAA4B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY,6CAA6C,EAAE;AAC7G;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uLAAuL;AACzN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uEAAuE;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C;AAC9E;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,wBAAwB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY,6CAA6C;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,WAAW;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;;;AAGpC,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,8DAA8D,iCAAmB;AACjF,8DAA8D,iCAAmB;AACjF,qEAAqE,iCAAmB;AACxF,gFAAgF,iCAAmB;AACnG,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,+DAA+D,iCAAmB;AAClF,mEAAmE,iCAAmB;AACtF,oEAAoE,iCAAmB;AACvF,gEAAgE,iCAAmB;AACnF,8DAA8D,iCAAmB;AACjF,oEAAoE,iCAAmB;AACvF,kEAAkE,iCAAmB;AACrF,kEAAkE,iCAAmB;AACrF,+DAA+D,iCAAmB;AAClF,oEAAoE,iCAAmB;AACvF,mEAAmE,iCAAmB;AACtF,yEAAyE,iCAAmB;AAC5F,oEAAoE,iCAAmB;AACvF,gEAAgE,iCAAmB;AACnF,oEAAoE,iCAAmB;AACvF,oEAAoE,iCAAmB;AACvF,yEAAyE,iCAAmB;AAC5F,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,mEAAmE,iCAAmB;AACtF,0EAA0E,iCAAmB;AAC7F,2EAA2E,iCAAmB;AAC9F,gEAAgE,iCAAmB;AACnF,+DAA+D,iCAAmB;AAClF,mEAAmE,iCAAmB;AACtF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,iEAAiE,iCAAmB;AACpF,uEAAuE,iCAAmB;AAC1F,mEAAmE,iCAAmB;AACtF,wEAAwE,iCAAmB;AAC3F,mEAAmE,iCAAmB;AACtF,qEAAqE,iCAAmB;AACxF,gEAAgE,iCAAmB;AACnF,uEAAuE,iCAAmB;AAC1F,yEAAyE,iCAAmB;AAC5F,uEAAuE,iCAAmB;AAC1F,oEAAoE,iCAAmB;AACvF,wEAAwE,iCAAmB;AAC3F,oEAAoE,iCAAmB;AACvF,0EAA0E,iCAAmB;AAC7F,qEAAqE,iCAAmB;AACxF,oEAAoE,iCAAmB;AACvF,mEAAmE,iCAAmB;AACtF,qEAAqE,iCAAmB;AACxF,+DAA+D,iCAAmB;AAClF,uEAAuE,iCAAmB;AAC1F,kEAAkE,iCAAmB;AACrF,qEAAqE,iCAAmB;AACxF,iEAAiE,iCAAmB;AACpF,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,mEAAmE,iCAAmB;AACtF,mEAAmE,iCAAmB;AACtF,iEAAiE,iCAAmB;AACpF,sEAAsE,iCAAmB;AACzF,uEAAuE,iCAAmB;AAC1F,wEAAwE,iCAAmB;AAC3F,mEAAmE,iCAAmB;AACtF,sEAAsE,iCAAmB;AACzF,wEAAwE,iCAAmB;AAC3F,sEAAsE,iCAAmB;AACzF,kEAAkE,iCAAmB;AACrF,iEAAiE,iCAAmB;AACpF,iEAAiE,iCAAmB;AACpF,kEAAkE,iCAAmB;AACrF,kEAAkE,iCAAmB;AACrF,yEAAyE,iCAAmB;AAC5F,gEAAgE,iCAAmB;AACnF,iBAAiB,MAAgC;AACjD,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,iBAAiB,MAAgC;AACjD,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,sBAAsB,oBAAoB,EAAE,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,wBAAwB;AACxB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,4BAA4B;AAC5B,0BAA0B;AAC1B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,+BAA+B;AAC/B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,4BAA4B;AAC5B,iCAAiC;AACjC;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,oBAAoB;AACpB;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,sEAAsE,iCAAmB;AACzF,qEAAqE,iCAAmB;AACxF,uEAAuE,iCAAmB;AAC1F,qEAAqE,iCAAmB;AACxF,uEAAuE,iCAAmB;AAC1F;AACA;AACA;AACA;;;;;;AAMA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,wEAAwE,iCAAmB;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,uEAAuE,iCAAmB;AAC1F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,yEAAyE,iCAAmB;AAC5F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,uEAAuE,iCAAmB;AAC1F;AACA;;;;AAIA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,iCAAmB;AACjF,wEAAwE,iCAAmB;AAC3F,yEAAyE,iCAAmB;AAC5F;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,iCAAmB;;AAEzE,iCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,iCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,+EAA+E,kCAAmB;AAClG,2EAA2E,kCAAmB;AAC9F,gFAAgF,kCAAmB;AACnG,2EAA2E,kCAAmB;AAC9F,4EAA4E,kCAAmB;AAC/F;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,yEAAyE,kCAAmB;AAC5F,+DAA+D,kCAAmB;AAClF,wEAAwE,kCAAmB;AAC3F,gEAAgE,kCAAmB;AACnF,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF;AACA;;;;;;;;;;;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAA0B;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB,IAAI;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,4GAA4G;AAC9I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,uCAAuC,SAAS,wCAAwC,OAAO,6BAA6B;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,+EAA+E,kBAAkB;AACjG;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,kCAAkC;AAC1E,6CAA6C,yCAAyC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,+BAA+B;AAC3E;AACA,2DAA2D,+BAA+B;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gDAAgD,mHAAmH;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gBAAgB,8CAA8C;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yCAAyC;AAClF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAA6B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yGAAyG,EAAE,IAAI,EAAE;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe,GAAG,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,oBAAoB,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa,IAAI;AAC5C;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uFAAuF;AACvF;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,gFAAgF,kCAAmB;AACnG,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,KAAK,GAAG,SAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,SAAS,EAAE,KAAK,EAAE,IAAI;AAC7D,wCAAwC,SAAS,EAAE,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,SAAS,GAAG,KAAK,GAAG,IAAI;AACxE;AACA,sDAAsD,MAAM;AAC5D,gDAAgD,SAAS,GAAG,IAAI;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,yBAAyB;AACzB;AACA,uFAAuF,MAAM;AAC7F;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA,2FAA2F,MAAM;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,WAAW;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8IAA8I;AAC5K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA,2BAA2B,mDAAmD,GAAG;AACjF;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,sEAAsE,kCAAmB;AACzF,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,qEAAqE,kCAAmB;AACxF,gFAAgF,kCAAmB;AACnG,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,oEAAoE,kCAAmB;AACvF,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF,oEAAoE,kCAAmB;AACvF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,+DAA+D,kCAAmB;AAClF,+DAA+D,kCAAmB;AAClF,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,yEAAyE,kCAAmB;AAC5F,oEAAoE,kCAAmB;AACvF,gEAAgE,kCAAmB;AACnF,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,yEAAyE,kCAAmB;AAC5F,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,0EAA0E,kCAAmB;AAC7F,2EAA2E,kCAAmB;AAC9F,gEAAgE,kCAAmB;AACnF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,sEAAsE,kCAAmB;AACzF,iEAAiE,kCAAmB;AACpF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,wEAAwE,kCAAmB;AAC3F,mEAAmE,kCAAmB;AACtF,qEAAqE,kCAAmB;AACxF,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,yEAAyE,kCAAmB;AAC5F,uEAAuE,kCAAmB;AAC1F,oEAAoE,kCAAmB;AACvF,wEAAwE,kCAAmB;AAC3F,oEAAoE,kCAAmB;AACvF,0EAA0E,kCAAmB;AAC7F,uEAAuE,kCAAmB;AAC1F,qEAAqE,kCAAmB;AACxF,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,wEAAwE,kCAAmB;AAC3F,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,mEAAmE,kCAAmB;AACtF,iEAAiE,kCAAmB;AACpF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,wEAAwE,kCAAmB;AAC3F,mEAAmE,kCAAmB;AACtF,mEAAmE,kCAAmB;AACtF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,wEAAwE,kCAAmB;AAC3F,sEAAsE,kCAAmB;AACzF,kEAAkE,kCAAmB;AACrF,iEAAiE,kCAAmB;AACpF,iEAAiE,kCAAmB;AACpF,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,yEAAyE,kCAAmB;AAC5F,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;;;;;;;;;;;;;;AAqBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;AAQA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,SAAS;AACxH;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAA4D;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,sEAAsE,kCAAmB;AACzF,8DAA8D,kCAAmB;AACjF,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4FAA4F,UAAU;AACtG,iGAAiG,UAAU;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,SAAS;AACT;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,sEAAsE,kCAAmB;AACzF,8DAA8D,kCAAmB;AACjF,qEAAqE,kCAAmB;AACxF,6DAA6D,kCAAmB;AAChF,wEAAwE,kCAAmB;AAC3F,wEAAwE,kCAAmB;AAC3F,sEAAsE,kCAAmB;AACzF,kEAAkE,kCAAmB;AACrF,sEAAsE,kCAAmB;AACzF,oEAAoE,kCAAmB;AACvF,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA,+EAA+E,+BAA+B;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,4fAA4f;AAC1iB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,wBAAwB;AAC1C,oBAAoB,yBAAyB;AAC7C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,4BAA4B;AAC/C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,4BAA4B;AAChD,qBAAqB,4BAA4B;AACjD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,4BAA4B;AAC7C,kBAAkB,4BAA4B;AAC9C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sGAAsG,UAAU;AAChH;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,WAAW;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,eAAe;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,UAAU;AACvH;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,cAAc;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,UAAU;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,KAAK,IAAI,UAAU;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,KAAK,IAAI,UAAU;AAC/H;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G,UAAU;AACtH;AACA;AACA,wGAAwG,MAAM,IAAI,MAAM;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,2BAA2B;AACxJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,sCAAsC;AACtC,uCAAuC;AACvC,0BAA0B;AAC1B,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,8HAA8H;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,MAAM,8EAA8E;AACtI;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,eAAe;AACrD,aAAa;AACb;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,+DAA+D,kCAAmB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,qEAAqE,kCAAmB;AACxF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,6CAA6C;AAC7C;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+GAA+G,UAAU;AACzH;AACA;AACA;AACA;AACA,kCAAkC,mBAAmB;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,cAAc;AACnE,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0FAA0F,0BAA0B;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H,mCAAmC;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4HAA4H,mCAAmC;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yEAAyE;AACpG;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,mEAAmE,kCAAmB;AACtF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,oEAAoE,kCAAmB;AACvF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,6DAA6D,kCAAmB;AAChF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,aAAa;AAC1I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,0BAA0B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAuH,QAAQ;AAC/H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,qCAAqC,+CAA+C;AACpF;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,sEAAsE,kCAAmB;AACzF,sEAAsE,kCAAmB;AACzF,uEAAuE,kCAAmB;AAC1F,yEAAyE,kCAAmB;AAC5F,sEAAsE,kCAAmB;AACzF,oEAAoE,kCAAmB;AACvF,oEAAoE,kCAAmB;AACvF,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,wEAAwE,kCAAmB;AAC3F,oEAAoE,kCAAmB;AACvF,+DAA+D,kCAAmB;AAClF;AACA;;;;;;;;;;;;;;;;;AAiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uCAAuC,4SAA4S;AACnV,wBAAwB;AACxB,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wJAAwJ;AACvL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,qCAAqC,wBAAwB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8HAA8H,UAAU;AACxI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,uBAAuB;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,8HAA8H,IAAI;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,kBAAkB,QAAQ;AAC1B;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,cAAc;AAChC;AACA,kBAAkB,cAAc;AAChC,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B,WAAW,IAAI;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iKAAiK;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAmB;AACxF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8OAA8O,kBAAkB;AAChQ;AACA;AACA;AACA;AACA,gPAAgP,mBAAmB;AACnQ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kGAAkG,kBAAkB;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oBAAoB,mCAAmC;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,uCAAuC,6GAA6G;AACpJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC;;;AAGrC,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA,4HAA4H,UAAU;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,UAAU;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,qBAAqB;AAC9I;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF;AACxF;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,4BAA4B;AAC5B,qFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA,yBAAyB;AACzB;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,yBAAyB;AACzB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,4GAA4G,WAAW;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,WAAW;AAC9C;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,gCAAgC,WAAW,GAAG,MAAM;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,wBAAwB;AAC7E;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,sBAAsB;AAC3D,0CAA0C,iFAAiF;AAC3H;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA,wDAAwD,qBAAqB;AAC7E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,IAAI;AAC9E,6BAA6B,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,GAAG;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAe,KAAK,SAAS;AACvE;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,4DAA4D;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,qEAAqE,kCAAmB;AACxF,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,qDAAqD,iLAAiL,cAAc,yBAAyB,YAAY,mDAAmD,0BAA0B;AACtW;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAyD,EAAE;AACpF;AACA;AACA;AACA,yBAAyB;AACzB,yDAAyD,WAAW;AACpE,iDAAiD,aAAa;AAC9D,UAAU,EAAE;AACZ;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D,gGAAgG,wFAAwF;AACxL,gDAAgD,+EAA+E,aAAa,uBAAuB;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AAC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CAAyC;AAC1D,iBAAiB,uCAAuC;AACxD,mBAAmB,qDAAqD;AACxE,iBAAiB,oCAAoC;AACrD,kBAAkB,6BAA6B;AAC/C,aAAa,oBAAoB;AACjC,YAAY,yBAAyB;AACrC,YAAY,2BAA2B;AACvC,gBAAgB,yBAAyB;AACzC,gBAAgB,8BAA8B;AAC9C,YAAY,mBAAmB;AAC/B,qBAAqB,yBAAyB;AAC9C,mBAAmB,uBAAuB;AAC1C,YAAY,mBAAmB;AAC/B,gBAAgB,uBAAuB;AACvC,aAAa,oBAAoB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gJAAgJ;AAChJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,SAAS;AACzG;AACA;AACA;AACA,wBAAwB;AACxB;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,uJAAuJ,eAAe;AACtK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+CAA+C;AACnF;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,mJAAmJ,QAAQ;AAC3J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yHAAyH,QAAQ;AACjI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qHAAqH,KAAK;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,SAAS;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,0BAA0B,6CAA6C;AACvI;AACA;AACA;AACA;AACA;AACA,2DAA2D,kBAAkB,oBAAoB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6CAA6C,KAAK,mDAAmD,GAAG;AAC7H;AACA,wHAAwH,cAAc,cAAc,cAAc;AAClK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC,WAAW,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA,wFAAwF,0BAA0B;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF;;;AAGA;AACA;AACA;AACA;AACA;AACA,4CAA4C,kEAAkE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8EAA8E;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G,eAAe;AAC5H;AACA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B,kFAAkF;AACxK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iGAAiG,sBAAsB;AACvH;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uJAAuJ,sBAAsB;AAC7K;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF;AAChF,iCAAiC;AACjC;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC,mCAAmC;AACnC;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB,0BAA0B;AAC1B,6BAA6B;AAC7B,oCAAoC;AACpC;AACA,yBAAyB;AACzB,0BAA0B;AAC1B,sCAAsC;AACtC,uCAAuC;AACvC,4BAA4B;AAC5B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uHAAuH;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,uEAAuE,kCAAmB;AAC1F,gEAAgE,kCAAmB;AACnF,sEAAsE,kCAAmB;AACzF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA,4GAA4G,SAAS;AACrH;AACA;AACA;AACA;AACA,gHAAgH,SAAS;AACzH;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,uEAAuE,kCAAmB;AAC1F,mEAAmE,kCAAmB;AACtF;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,+DAA+D,kCAAmB;AAClF,mEAAmE,kCAAmB;AACtF,kEAAkE,kCAAmB;AACrF,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yBAAyB;AAC7D;AACA,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA,2CAA2C,SAAS;AACpD;AACA,0DAA0D,SAAS;AACnE,uCAAuC,SAAS,cAAc,6EAA6E;AAC3I,wBAAwB,cAAc;AACtC,qGAAqG,0CAA0C;AAC/I;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,gEAAgE,kCAAmB;AACnF,8DAA8D,kCAAmB;AACjF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH,aAAa;AAC7H;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6HAA6H,yBAAyB,GAAG,UAAU;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0HAA0H,QAAQ;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iEAAiE,GAAG,OAAO;AAC7F;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,+DAA+D,kCAAmB;AAClF,8DAA8D,kCAAmB;AACjF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4BAA4B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;AAQA;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;;AAG7B,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kCAAmB;AAClC,eAAe,kCAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,MAAM,6BAA6B,MAAM;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,8DAA8D,kCAAmB;AACjF;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF,iEAAiE,kCAAmB;AACpF;AACA;AACA;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,iEAAiE,kCAAmB;AACpF,kEAAkE,kCAAmB;AACrF,gEAAgE,kCAAmB;AACnF,mEAAmE,kCAAmB;AACtF,8DAA8D,kCAAmB;AACjF;AACA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iGAAiG;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP;AACA;AACA;AACA;AACA,iCAAiC,0BAAmB,EAAE,kCAAmB;;AAEzE,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA,sBAAsB;AACtB,8DAA8D,kCAAmB;AACjF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,OAAO;;AAEP,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,mBAAmB,kCAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,kCAAmB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA,gBAAgB,kCAAmB,wBAAwB,kCAAmB;AAC9E,oDAAoD,wCAAwC;AAC5F;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,YAAY;AACZ,WAAW;AACX;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW,kCAAmB;AAC9B;AACA,kEAAkE,iBAAiB;AACnF;AACA,2DAA2D,aAAa;AACxE;AACA,WAAW;AACX;AACA;AACA,IAAI,0BAAmB;AACvB;AACA;AACA;AACA;AACA;AACA,kCAAmB,GAAG,0BAAmB;AACzC,qBAAqB,kCAAmB,GAAG,0BAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB,kEAAkE,kCAAmB;AACrF,4EAA4E,kCAAmB;AAC/F,6EAA6E,kCAAmB;AAChG,mEAAmE,kCAAmB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;;AAEA;;;AAGA,CAAC;;AAED,0BAAmB,GAAG,0BAAmB;AACzC,iBAAiB,0BAAmB;AACpC,UAAU;AACV;AACA,CAAC;AACD;;;;;;UCxmnCA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;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","sources":["webpack://Smo/webpack/universalModuleDefinition","webpack://Smo/./src/application/application.ts","webpack://Smo/./src/application/common.ts","webpack://Smo/./src/application/configuration.ts","webpack://Smo/./src/application/dom.ts","webpack://Smo/./src/application/eventHandler.ts","webpack://Smo/./src/application/generateVexTests.ts","webpack://Smo/./src/application/keyCommands.ts","webpack://Smo/./src/common/htmlHelpers.ts","webpack://Smo/./src/common/midiWriter.js","webpack://Smo/./src/common/promiseHelpers.ts","webpack://Smo/./src/common/serializationHelpers.js","webpack://Smo/./src/common/textformatter.ts","webpack://Smo/./src/common/vex.ts","webpack://Smo/./src/render/audio/musicCursor.ts","webpack://Smo/./src/render/audio/oscillator.ts","webpack://Smo/./src/render/audio/player.ts","webpack://Smo/./src/render/audio/samples.ts","webpack://Smo/./src/render/sui/formatter.ts","webpack://Smo/./src/render/sui/layoutDebug.ts","webpack://Smo/./src/render/sui/mapper.ts","webpack://Smo/./src/render/sui/piano.ts","webpack://Smo/./src/render/sui/renderState.ts","webpack://Smo/./src/render/sui/scoreRender.ts","webpack://Smo/./src/render/sui/scoreView.ts","webpack://Smo/./src/render/sui/scoreViewOperations.ts","webpack://Smo/./src/render/sui/scroller.ts","webpack://Smo/./src/render/sui/svgHelpers.ts","webpack://Smo/./src/render/sui/svgPageMap.ts","webpack://Smo/./src/render/sui/textEdit.ts","webpack://Smo/./src/render/sui/textRender.ts","webpack://Smo/./src/render/sui/tracker.ts","webpack://Smo/./src/render/vex/glyphDimensions.ts","webpack://Smo/./src/render/vex/smoAdapter.ts","webpack://Smo/./src/render/vex/toVex.ts","webpack://Smo/./src/render/vex/vxMeasure.ts","webpack://Smo/./src/render/vex/vxNote.ts","webpack://Smo/./src/render/vex/vxSystem.ts","webpack://Smo/./src/smo/data/common.ts","webpack://Smo/./src/smo/data/measure.ts","webpack://Smo/./src/smo/data/measureModifiers.ts","webpack://Smo/./src/smo/data/music.ts","webpack://Smo/./src/smo/data/note.ts","webpack://Smo/./src/smo/data/noteModifiers.ts","webpack://Smo/./src/smo/data/partInfo.ts","webpack://Smo/./src/smo/data/score.ts","webpack://Smo/./src/smo/data/scoreModifiers.ts","webpack://Smo/./src/smo/data/scoreText.ts","webpack://Smo/./src/smo/data/staffModifiers.ts","webpack://Smo/./src/smo/data/systemStaff.ts","webpack://Smo/./src/smo/data/tuplet.ts","webpack://Smo/./src/smo/midi/midiToSmo.ts","webpack://Smo/./src/smo/midi/smoToMidi.ts","webpack://Smo/./src/smo/mxml/smoToXml.ts","webpack://Smo/./src/smo/mxml/xmlHelpers.ts","webpack://Smo/./src/smo/mxml/xmlState.ts","webpack://Smo/./src/smo/mxml/xmlToSmo.ts","webpack://Smo/./src/smo/xform/audioTrack.ts","webpack://Smo/./src/smo/xform/beamers.ts","webpack://Smo/./src/smo/xform/copypaste.ts","webpack://Smo/./src/smo/xform/operations.ts","webpack://Smo/./src/smo/xform/selections.ts","webpack://Smo/./src/smo/xform/tickDuration.ts","webpack://Smo/./src/smo/xform/tickMap.ts","webpack://Smo/./src/smo/xform/undo.ts","webpack://Smo/./src/styles/font_metrics/Commissioner-Medium-Metrics.js","webpack://Smo/./src/styles/font_metrics/ConcertOne-Regular.js","webpack://Smo/./src/styles/font_metrics/Merriweather-Regular.js","webpack://Smo/./src/styles/font_metrics/arial_metrics.js","webpack://Smo/./src/styles/font_metrics/ssp-sans-metrics.js","webpack://Smo/./src/styles/font_metrics/ssp-serif-metrics.js","webpack://Smo/./src/styles/font_metrics/times_metrics.js","webpack://Smo/./src/ui/buttons/articulation.ts","webpack://Smo/./src/ui/buttons/beam.ts","webpack://Smo/./src/ui/buttons/button.ts","webpack://Smo/./src/ui/buttons/chord.ts","webpack://Smo/./src/ui/buttons/collapsable.ts","webpack://Smo/./src/ui/buttons/display.ts","webpack://Smo/./src/ui/buttons/duration.ts","webpack://Smo/./src/ui/buttons/measure.ts","webpack://Smo/./src/ui/buttons/navigation.ts","webpack://Smo/./src/ui/buttons/note.ts","webpack://Smo/./src/ui/buttons/player.ts","webpack://Smo/./src/ui/buttons/ribbon.ts","webpack://Smo/./src/ui/buttons/stave.ts","webpack://Smo/./src/ui/buttons/text.ts","webpack://Smo/./src/ui/buttons/voice.ts","webpack://Smo/./src/ui/dialogs/adapter.ts","webpack://Smo/./src/ui/dialogs/addMeasure.ts","webpack://Smo/./src/ui/dialogs/arpeggio.ts","webpack://Smo/./src/ui/dialogs/articulation.ts","webpack://Smo/./src/ui/dialogs/audioSettings.ts","webpack://Smo/./src/ui/dialogs/chordChange.ts","webpack://Smo/./src/ui/dialogs/clefChange.ts","webpack://Smo/./src/ui/dialogs/components/baseComponent.ts","webpack://Smo/./src/ui/dialogs/components/button.ts","webpack://Smo/./src/ui/dialogs/components/buttonArray.ts","webpack://Smo/./src/ui/dialogs/components/checkdrop.ts","webpack://Smo/./src/ui/dialogs/components/dragText.ts","webpack://Smo/./src/ui/dialogs/components/dropdown.ts","webpack://Smo/./src/ui/dialogs/components/fileDownload.ts","webpack://Smo/./src/ui/dialogs/components/fontComponent.ts","webpack://Smo/./src/ui/dialogs/components/noteText.ts","webpack://Smo/./src/ui/dialogs/components/pitch.ts","webpack://Smo/./src/ui/dialogs/components/rocker.ts","webpack://Smo/./src/ui/dialogs/components/staffComponents.ts","webpack://Smo/./src/ui/dialogs/components/textCheck.ts","webpack://Smo/./src/ui/dialogs/components/textInPlace.ts","webpack://Smo/./src/ui/dialogs/components/textInput.ts","webpack://Smo/./src/ui/dialogs/components/tie.ts","webpack://Smo/./src/ui/dialogs/components/toggle.ts","webpack://Smo/./src/ui/dialogs/components/tree.ts","webpack://Smo/./src/ui/dialogs/dialog.ts","webpack://Smo/./src/ui/dialogs/durations.ts","webpack://Smo/./src/ui/dialogs/dynamics.ts","webpack://Smo/./src/ui/dialogs/endings.ts","webpack://Smo/./src/ui/dialogs/factory.ts","webpack://Smo/./src/ui/dialogs/fileDialogs.ts","webpack://Smo/./src/ui/dialogs/fonts.ts","webpack://Smo/./src/ui/dialogs/globalLayout.ts","webpack://Smo/./src/ui/dialogs/gracenote.ts","webpack://Smo/./src/ui/dialogs/hairpin.ts","webpack://Smo/./src/ui/dialogs/instrument.ts","webpack://Smo/./src/ui/dialogs/keySignature.ts","webpack://Smo/./src/ui/dialogs/library.ts","webpack://Smo/./src/ui/dialogs/lyric.ts","webpack://Smo/./src/ui/dialogs/measureFormat.ts","webpack://Smo/./src/ui/dialogs/microtones.ts","webpack://Smo/./src/ui/dialogs/newPart.ts","webpack://Smo/./src/ui/dialogs/noteHead.ts","webpack://Smo/./src/ui/dialogs/ornament.ts","webpack://Smo/./src/ui/dialogs/pageLayout.ts","webpack://Smo/./src/ui/dialogs/partInfo.ts","webpack://Smo/./src/ui/dialogs/pedalMarking.ts","webpack://Smo/./src/ui/dialogs/pitch.ts","webpack://Smo/./src/ui/dialogs/preferences.ts","webpack://Smo/./src/ui/dialogs/scoreId.ts","webpack://Smo/./src/ui/dialogs/scoreView.ts","webpack://Smo/./src/ui/dialogs/slur.ts","webpack://Smo/./src/ui/dialogs/staffGroup.ts","webpack://Smo/./src/ui/dialogs/tabStave.ts","webpack://Smo/./src/ui/dialogs/tempo.ts","webpack://Smo/./src/ui/dialogs/textBlock.ts","webpack://Smo/./src/ui/dialogs/textBracket.ts","webpack://Smo/./src/ui/dialogs/tie.ts","webpack://Smo/./src/ui/dialogs/timeSignature.ts","webpack://Smo/./src/ui/dialogs/transposeScore.ts","webpack://Smo/./src/ui/dialogs/volta.ts","webpack://Smo/./src/ui/eventSource.ts","webpack://Smo/./src/ui/exceptions.ts","webpack://Smo/./src/ui/fileio/fileInput.ts","webpack://Smo/./src/ui/fileio/library.ts","webpack://Smo/./src/ui/fileio/xhrLoader.ts","webpack://Smo/./src/ui/help.ts","webpack://Smo/./src/ui/i18n/language.ts","webpack://Smo/./src/ui/i18n/language_ar.js","webpack://Smo/./src/ui/i18n/language_de.js","webpack://Smo/./src/ui/i18n/language_en.js","webpack://Smo/./src/ui/i18n/translationEditor.ts","webpack://Smo/./src/ui/keyBindings/default/editorKeys.ts","webpack://Smo/./src/ui/keyBindings/default/trackerKeys.ts","webpack://Smo/./src/ui/menus/beams.ts","webpack://Smo/./src/ui/menus/dynamics.ts","webpack://Smo/./src/ui/menus/file.ts","webpack://Smo/./src/ui/menus/keySignature.ts","webpack://Smo/./src/ui/menus/language.ts","webpack://Smo/./src/ui/menus/manager.ts","webpack://Smo/./src/ui/menus/measure.ts","webpack://Smo/./src/ui/menus/menu.ts","webpack://Smo/./src/ui/menus/note.ts","webpack://Smo/./src/ui/menus/partSelection.ts","webpack://Smo/./src/ui/menus/parts.ts","webpack://Smo/./src/ui/menus/score.ts","webpack://Smo/./src/ui/menus/staffModifier.ts","webpack://Smo/./src/ui/menus/text.ts","webpack://Smo/./src/ui/menus/timeSignature.ts","webpack://Smo/./src/ui/menus/voices.ts","webpack://Smo/./src/ui/qwerty.ts","webpack://Smo/./src/ui/ribbonLayout/default/defaultRibbon.ts","webpack://Smo/./src/ui/ribbonLayout/default/tabletRibbon.ts","webpack://Smo/./tests/file-load.ts","webpack://Smo/./node_modules/vexflow_smoosic/build/cjs/vexflow-debug.js","webpack://Smo/webpack/bootstrap","webpack://Smo/webpack/runtime/compat get default export","webpack://Smo/webpack/runtime/define property getters","webpack://Smo/webpack/runtime/hasOwnProperty shorthand","webpack://Smo/webpack/runtime/make namespace object","webpack://Smo/./src/application/exports.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Smo\"] = factory();\n\telse\n\t\troot[\"Smo\"] = factory();\n})(this, () => {\nreturn ","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../common/serializationHelpers';\r\nimport { _MidiWriter } from '../common/midiWriter';\r\n\r\nimport { SmoConfiguration, SmoConfigurationParams } from './configuration';\r\nimport { SmoScore } from '../smo/data/score';\r\nimport { UndoBuffer } from '../smo/xform/undo';\r\nimport { XmlToSmo } from '../smo/mxml/xmlToSmo';\r\nimport { SuiRenderState } from '../render/sui/renderState';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { SuiOscillator } from '../render/audio/oscillator';\r\nimport { SuiSampleMedia } from '../render/audio/samples';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\n\r\nimport { ArialFont } from '../styles/font_metrics/arial_metrics';\r\nimport { TimesFont } from '../styles/font_metrics/times_metrics';\r\nimport { Commissioner_MediumFont } from '../styles/font_metrics/Commissioner-Medium-Metrics';\r\nimport { Concert_OneFont } from '../styles/font_metrics/ConcertOne-Regular';\r\nimport { MerriweatherFont } from '../styles/font_metrics/Merriweather-Regular';\r\nimport { SourceSansProFont } from '../styles/font_metrics/ssp-sans-metrics';\r\nimport { SourceSerifProFont } from '../styles/font_metrics/ssp-serif-metrics';\r\n\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { SuiMenuManager } from '../ui/menus/manager';\r\nimport { BrowserEventSource } from '../ui/eventSource';\r\nimport { SmoTranslationEditor } from '../ui/i18n/translationEditor';\r\nimport { SmoTranslator } from '../ui/i18n/language';\r\nimport { RibbonButtons } from '../ui/buttons/ribbon';\r\nimport { PromiseHelpers } from '../common/promiseHelpers';\r\nimport { SuiDom } from './dom';\r\nimport { SuiKeyCommands } from './keyCommands';\r\nimport { SuiEventHandler } from './eventHandler';\r\nimport { KeyBinding, ModalEventHandlerProxy } from './common';\r\nimport { SmoMeasure } from '../smo/data/measure';\r\nimport { getDomContainer } from '../common/htmlHelpers';\r\nimport { SuiHelp } from '../ui/help';\r\nimport { VexFlow } from '../common/vex';\r\nimport { TextFormatter } from '../common/textformatter';\r\n\r\ndeclare var $: any;\r\n\r\nexport interface pairType { [key: string]: string }\r\n\r\n/**\r\n * Score renderer instance\r\n * @internal\r\n */\r\nexport interface SuiRendererInstance {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n renderer: SuiRenderState;\r\n}\r\n/**\r\n * Global instance for debugging\r\n */\r\nexport interface SuiInstance {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n tracker: SuiTracker;\r\n keyCommands: SuiKeyCommands;\r\n menus: SuiMenuManager;\r\n eventHandler: SuiEventHandler;\r\n ribbon: RibbonButtons\r\n}\r\nconst VF = VexFlow;\r\n\r\n/**\r\n * Parse query string for application\r\n * @category AppUtil\r\n */\r\nexport class QueryParser {\r\n pairs: pairType[] = [];\r\n queryPair(str: string): pairType {\r\n var i = 0;\r\n const ar = str.split('=');\r\n const rv: pairType = {};\r\n for (i = 0; i < ar.length - 1; i += 2) {\r\n const name = decodeURIComponent(ar[i]);\r\n rv[name] = decodeURIComponent(ar[i + 1]);\r\n }\r\n return rv;\r\n }\r\n constructor() {\r\n let i: number = 0;\r\n if (window.location.search) {\r\n const cmd = window.location.search.substring(1, window.location.search.length);\r\n const cmds = cmd.split('&');\r\n for (i = 0; i < cmds.length; ++i) {\r\n const cmd = cmds[i];\r\n this.pairs.push(this.queryPair(cmd));\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** SuiApplication\r\n * main entry point of application. Based on the configuration,\r\n * either start the default UI, or initialize library mode and\r\n * await further instructions.\r\n * @category SuiApplication\r\n */\r\nexport class SuiApplication {\r\n scoreLibrary: any;\r\n instance: SuiInstance | null = null;\r\n config: SmoConfiguration;\r\n score: SmoScore | null = null;\r\n view: SuiScoreViewOperations | null = null;\r\n domElement: HTMLElement;\r\n static async configure(params: Partial): Promise {\r\n const config: SmoConfiguration = new SmoConfiguration(params);\r\n (window as any).SmoConfig = config;\r\n const application = new SuiApplication(config);\r\n SuiApplication.registerFonts();\r\n return application.initialize();\r\n }\r\n constructor(config: SmoConfiguration) {\r\n this.config = config;\r\n this.domElement = this._getDomContainer();\r\n }\r\n _getDomContainer(): HTMLElement {\r\n const el = getDomContainer(this.config.scoreDomContainer);\r\n if (typeof(el) === 'undefined') {\r\n throw 'scoreDomContainer is a required config parameter';\r\n }\r\n return el;\r\n }\r\n static instance: SuiInstance;\r\n /** \r\n // Different applications can create their own key bindings, these are the defaults.\r\n // Many editor commands can be reached by a single keystroke. For more advanced things there\r\n // are menus.\r\n */\r\n static get keyBindingDefaults(): KeyBinding[] {\r\n var editorKeys = SuiEventHandler.editorKeyBindingDefaults;\r\n editorKeys.forEach((key) => {\r\n key.module = 'keyCommands'\r\n });\r\n var trackerKeys = SuiEventHandler.trackerKeyBindingDefaults;\r\n trackerKeys.forEach((key) => {\r\n key.module = 'tracker'\r\n });\r\n return trackerKeys.concat(editorKeys);\r\n }\r\n /**\r\n * Initialize the library according to instruction in config object:\r\n * 1. Try to load a new score\r\n * 2. If in application mode, start the UI. If in translation mode, start translation\r\n * @returns \r\n */\r\n initialize(): Promise {\r\n const samplePromise: Promise = SuiSampleMedia.samplePromise(SuiOscillator.audio);\r\n\r\n const self = this; \r\n // Hide header at the top of some applications\r\n $('#link-hdr button').off('click').on('click', () => {\r\n $('#link-hdr').addClass('hide');\r\n });\r\n\r\n const createScore = (): Promise => {\r\n return self.createScore();\r\n }\r\n const startApplication = () => {\r\n if (self.config.mode === 'translate') {\r\n self._startApplication();\r\n }\r\n else if (self.config.mode === 'application') {\r\n self._startApplication();\r\n } else { // library mode.\r\n self.createView(self.score!);\r\n }\r\n }\r\n const render = () => {\r\n return self.view?.renderer.renderPromise();\r\n }\r\n const rv = new Promise((resolve: any) => {\r\n samplePromise.then(createScore).then(startApplication).then(render)\r\n .then(\r\n () => {\r\n resolve(self);\r\n });\r\n });\r\n return rv;\r\n }\r\n /**\r\n * Create the initial score we use to populate the UI etc:\r\n * 0. if translation mode, return empty promise, it won't be used anyway\r\n * 1. if remoteScore is set in config, try to load from remote\r\n * 2. if initialScore is set, use that\r\n * 3. if a score is saved locally with quick save (browser local cache), use that\r\n * 4. if all else fails, return an 'empty' score.\r\n * @returns promise for a remote load. If a local load, will resolve immediately\r\n */\r\n async createScore(): Promise {\r\n if (this.config.mode === 'translate') {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n if (this.config.remoteScore) {\r\n const loader = new SuiXhrLoader(this.config.remoteScore);\r\n const file = await loader.loadAsync();\r\n this.score = this._tryParse(file as string);\r\n return this.score;\r\n } else if (this.config.initialScore) {\r\n if (typeof(this.config.initialScore) === 'string') {\r\n this.score = this._tryParse(this.config.initialScore);\r\n return (this.score);\r\n } else {\r\n this.score = this.config.initialScore;\r\n return null;\r\n }\r\n } else {\r\n const localScore = localStorage.getItem(smoSerialize.localScore);\r\n if (localScore) {\r\n this.score = this._tryParse(localScore);\r\n } else {\r\n this.score = SmoScore.getDefaultScore(SmoScore.defaults, null);\r\n if (this.config.mode === 'application') {\r\n SuiHelp.displayHelp();\r\n }\r\n }\r\n }\r\n return this.score;\r\n }\r\n _tryParse(scoreJson: string) {\r\n try {\r\n if (scoreJson[0] === '<') {\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(scoreJson, 'text/xml');\r\n return XmlToSmo.convert(xml);\r\n }\r\n return SmoScore.deserialize(scoreJson);\r\n } catch (exp) {\r\n console.warn('could not parse score');\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n }\r\n _startApplication() {\r\n // Initialize the midi writer library\r\n _MidiWriter();\r\n const queryString = new QueryParser();\r\n const languageSelect = queryString.pairs.find((x) => x['language']) ?? {'language': 'en'}\r\n if (this.config.mode === 'translate') {\r\n this._deferCreateTranslator();\r\n return;\r\n }\r\n if (languageSelect) {\r\n SuiApplication._deferLanguageSelection(languageSelect.language);\r\n }\r\n this.createUi();\r\n }\r\n createView(score: SmoScore): SuiRendererInstance | null {\r\n let sdc: HTMLElement = this.domElement;\r\n const svgContainer = document.createElement('div');\r\n $(svgContainer).attr('id', 'boo').addClass('musicContainer');\r\n $(sdc).append(svgContainer);\r\n const undoBuffer = new UndoBuffer();\r\n const view = new SuiScoreViewOperations(this.config, svgContainer, score, sdc as HTMLElement, undoBuffer);\r\n const eventSource = new BrowserEventSource();\r\n eventSource.setRenderElement(svgContainer);\r\n this.view = view;\r\n view.startRenderingEngine();\r\n return {\r\n view, eventSource, undoBuffer, renderer: view.renderer\r\n };\r\n }\r\n /**\r\n * Convenience constructor, take the score and render it in the\r\n * configured rendering space.\r\n */\r\n createUi() {\r\n const viewObj: SuiRendererInstance | null = this.createView(this.score!);\r\n if (!viewObj) {\r\n return;\r\n }\r\n const view = this.view!;\r\n const tracker = view.tracker;\r\n const eventSource = new BrowserEventSource(); // events come from the browser UI.\r\n const undoBuffer = viewObj.undoBuffer;\r\n const completeNotifier = new ModalEventHandlerProxy(eventSource);\r\n const menus = new SuiMenuManager({\r\n view, eventSource, completeNotifier, undoBuffer\r\n });\r\n const ribbon = new RibbonButtons({\r\n config: this.config,\r\n ribbons: this.config.ribbonLayout,\r\n ribbonButtons: this.config.buttonDefinition,\r\n menus: menus,\r\n completeNotifier,\r\n view: view,\r\n eventSource: eventSource,\r\n tracker: view.tracker\r\n });\r\n const keyCommands = new SuiKeyCommands ({\r\n view, slashMode: true, completeNotifier, tracker, eventSource\r\n });\r\n const eventHandler = new SuiEventHandler({\r\n view, eventSource, tracker, keyCommands, menus, completeNotifier,\r\n keyBindings: SuiApplication.keyBindingDefaults, config: this.config\r\n });\r\n this.instance = {\r\n view, eventSource, eventHandler, undoBuffer,\r\n tracker, ribbon, keyCommands, menus\r\n }\r\n SuiApplication.instance = this.instance;\r\n completeNotifier.handler = eventHandler;\r\n eventSource.setRenderElement(view.renderer.elementId);\r\n // eslint-disable-next-line\r\n SuiApplication.instance = this.instance;\r\n ribbon.display();\r\n SuiDom.splash(this.config);\r\n }\r\n static async loadMusicFont(face: string, url: string) {\r\n const new_font = new FontFace('Bravura', `url(${url})`);\r\n const loadedFace = await new_font.load();\r\n document.fonts.add(loadedFace); \r\n }\r\n static async registerFonts() {\r\n TextFormatter.registerInfo({\r\n name: ArialFont.name,\r\n resolution: ArialFont.resolution,\r\n glyphs: ArialFont.glyphs,\r\n family: ArialFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: true,\r\n bold: true,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Built-in sans font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: TimesFont.name,\r\n resolution: TimesFont.resolution,\r\n glyphs: TimesFont.glyphs,\r\n family: TimesFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: true,\r\n bold: true,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Built-in serif font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: Commissioner_MediumFont.name,\r\n resolution: Commissioner_MediumFont.resolution,\r\n glyphs: Commissioner_MediumFont.glyphs,\r\n family: Commissioner_MediumFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Low-contrast sans-serif text font',\r\n });\r\n TextFormatter.registerInfo({\r\n name: Concert_OneFont.name,\r\n resolution: Concert_OneFont.resolution,\r\n glyphs: Concert_OneFont.glyphs,\r\n family: Concert_OneFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Rounded grotesque typeface inspired by 19th century 3D l',\r\n });\r\n TextFormatter.registerInfo({\r\n name: MerriweatherFont.name,\r\n resolution: MerriweatherFont.resolution,\r\n glyphs: MerriweatherFont.glyphs,\r\n family: MerriweatherFont.fontFamily,\r\n serifs: true,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Serif screen font from Sorkin Type',\r\n });\r\n TextFormatter.registerInfo({\r\n name: SourceSansProFont.name,\r\n resolution: SourceSansProFont.resolution,\r\n glyphs: SourceSansProFont.glyphs,\r\n family: SourceSansProFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Open source Sans screen font from Adobe',\r\n });\r\n TextFormatter.registerInfo({\r\n name: SourceSerifProFont.name,\r\n resolution: SourceSerifProFont.resolution,\r\n glyphs: SourceSerifProFont.glyphs,\r\n family: SourceSerifProFont.fontFamily,\r\n serifs: false,\r\n monospaced: false,\r\n italic: false,\r\n bold: false,\r\n maxSizeGlyph: 'H',\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n description: 'Open source Serif screen font from Adobe',\r\n });\r\n await SuiApplication.loadMusicFont('Bravura', '../styles/fonts/Bravura_1.392.woff');\r\n // await SuiApplication.loadMusicFont('Bravura', '../styles/fonts/Bravura_1.392.woff');\r\n }\r\n _deferCreateTranslator() {\r\n SuiDom.createUiDom(this.config.scoreDomContainer);\r\n setTimeout(() => {\r\n SmoTranslationEditor.startEditor(this.config.language);\r\n }, 1);\r\n }\r\n\r\n static _deferLanguageSelection(lang: string) {\r\n setTimeout(() => {\r\n SmoTranslator.setLanguage(lang);\r\n }, 1);\r\n }\r\n}\r\n","import { SuiScoreViewOperations } from \"../render/sui/scoreViewOperations\";\r\nimport { SuiTracker } from \"../render/sui/tracker\";\r\nimport { CompleteNotifier } from \"../ui/common\";\r\nimport { ModalComponent } from \"../ui/common\";\r\nimport { BrowserEventSource, EventHandler } from \"../ui/eventSource\";\r\n\r\n/**\r\n * A binding of a key to some action performed by a module\r\n */\r\nexport interface KeyBinding {\r\n event: string,\r\n key: string,\r\n ctrlKey: boolean,\r\n altKey: boolean,\r\n shiftKey: boolean,\r\n action: string,\r\n module?: string\r\n}\r\n\r\n/**\r\n * parameters for the key handlers\r\n * @param view\r\n * @param slashMode indicates that the dreaded 'slash' menus are up\r\n * @param completeNotifier notified when modals close\r\n * @param tracker\r\n * @param eventSource register for event handlers\r\n * @category SuiApplication\r\n */\r\nexport interface KeyCommandParams {\r\n view: SuiScoreViewOperations;\r\n slashMode: boolean;\r\n completeNotifier: CompleteNotifier;\r\n tracker: SuiTracker;\r\n eventSource: BrowserEventSource;\r\n}\r\n\r\n/**\r\n * Shared interface for menus, dialogs, etc that can \r\n * accept UI events\r\n * @category SuiUiBase\r\n */\r\nexport abstract class ModalEventHandler {\r\n abstract mouseMove(ev: any): void;\r\n abstract mouseClick(ev: any): void;\r\n abstract evKey(evdata: any): void;\r\n abstract keyUp(evdata: any): void;\r\n}\r\nexport type handler = (ev: any) => void;\r\n\r\n/**\r\n * Dependency injection, sends events to a proxy object, gets around some \r\n * cyclic dependencies when bootstrapping the application.\r\n * @category AppUtil\r\n */\r\nexport class ModalEventHandlerProxy {\r\n _handler: ModalEventHandler | null = null;\r\n eventSource: BrowserEventSource;\r\n unbound: boolean = true;\r\n keydownHandler: EventHandler | null = null;\r\n keyupHandler: EventHandler | null = null;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n constructor(evSource: BrowserEventSource) {\r\n this.eventSource = evSource;\r\n this.bindEvents();\r\n }\r\n set handler(value: ModalEventHandler) {\r\n this._handler = value;\r\n this.unbound = false;\r\n }\r\n evKey(ev: any) {\r\n if (this._handler) {\r\n this._handler.evKey(ev);\r\n }\r\n }\r\n keyUp(ev: any) {\r\n if (this._handler) {\r\n this._handler.keyUp(ev);\r\n }\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this._handler) {\r\n this._handler.mouseMove(ev);\r\n }\r\n }\r\n mouseClick(ev: any) {\r\n if (this._handler) {\r\n this._handler.mouseClick(ev);\r\n }\r\n }\r\n bindEvents() {\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n this.keyupHandler = this.eventSource.bindKeyupHandler(this, 'keyUp');\r\n }\r\n\r\n unbindKeyboardForModal(dialog: ModalComponent) {\r\n if (this.unbound) {\r\n console.log('received duplicate bind event');\r\n return;\r\n }\r\n if (!this.keydownHandler || !this.mouseMoveHandler || !this.mouseClickHandler) {\r\n console.log('received bind with no handlers');\r\n return;\r\n }\r\n this.unbound = true;\r\n const rebind = () => {\r\n this.unbound = false;\r\n this.bindEvents();\r\n }\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler!);\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler!);\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler!);\r\n dialog.closeModalPromise.then(rebind);\r\n }\r\n}","// application/configuration.ts\r\n/**\r\n * Superset of configuration required to initialize Smoosic, either the appliation or library.\r\n * @module configuration\r\n */\r\nimport { SmoRenderConfiguration } from \"../render/sui/configuration\";\r\nimport { SmoScore } from \"../smo/data/score\";\r\nimport { ModalEventHandler } from \"./common\";\r\nimport { KeyBindingConfiguration, SmoUiConfiguration } from \"../ui/configuration\";\r\nimport { defaultEditorKeys } from \"../ui/keyBindings/default/editorKeys\";\r\nimport { defaultTrackerKeys } from \"../ui/keyBindings/default/trackerKeys\";\r\nimport { RibbonLayout } from \"../ui/common\";\r\nimport { ButtonDefinition } from \"../ui/buttons/button\";\r\nimport { defaultRibbonLayout } from '../ui/ribbonLayout/default/defaultRibbon';\r\nimport { SuiAudioAnimationParams, defaultAudioAnimationHandler, defaultClearAudioAnimationHandler, AudioAnimationHandler, ClearAudioAnimationHandler } \r\n from \"../render/audio/musicCursor\";\r\n\r\nexport type SmoMode = 'library' | 'application' | 'translate';\r\nexport type ConfigurationStringOption = 'language' | 'libraryUrl' | 'remoteScore';\r\n\r\nexport type ConfigurationNumberOption = 'demonPollTime' | 'idleRedrawTime';\r\n\r\nexport var ConfigurationStringOptions: ConfigurationStringOption[] = ['language', 'libraryUrl', 'remoteScore'];\r\n\r\nexport var ConfigurationNumberOptions: ConfigurationNumberOption[] = ['demonPollTime', 'idleRedrawTime'];\r\n\r\n/**\r\n * Application configuration parameters, can be referenced by the running application or changed\r\n * @category SuiApplication\r\n */\r\nexport interface SmoConfigurationParams {\r\n mode: SmoMode;\r\n smoPath?: string;\r\n language: string;\r\n initialScore?: string | SmoScore;\r\n remoteScore?: string;\r\n scoreDomContainer: string | HTMLElement;\r\n leftControls?: string | HTMLElement;\r\n topControls?: string | HTMLElement;\r\n libraryUrl?: string;\r\n demonPollTime: number; // how often we poll the score to see if it changed\r\n idleRedrawTime: number;\r\n ribbonLayout?: RibbonLayout;\r\n buttonDefinition?: ButtonDefinition[];\r\n audioAnimation: SuiAudioAnimationParams;\r\n}\r\n\r\n/**\r\n * Configures smoosic library or application. It is a union of UI, rendering and application configuration parameters\r\n * @param mode - score mode `'library' | 'application' | 'translate'`\r\n * Library mode starts the view but not the UI. application mode starts the UI and expects UI parameters.\r\n * translation mode is the translation editor, for creating translations for dialog/menu components\r\n * @param language - startup language\r\n * @param initialScore? - the library score JSON, if you are loading from a JSON string, or a SmoScore object\r\n * @param remoteScore? - path to a remote score, if loading from an URL\r\n * @param scoreDomContainer - the parent of the svg container (required)\r\n * @param leftControls - the location of the vertical button control, applies if mode is 'application'\r\n * @param topControls - the location of the horizontal button control, applies if mode is 'application'\r\n * @param libraryUrl - loader URL for Smo libraries, applies if application mode\r\n * @param demonPollTime - how often we poll the score to see if it's changed\r\n * @param idleRedrawTime - how often the entire score re-renders\r\n * @category SuiApplication\r\n */\r\n export class SmoConfiguration implements SmoRenderConfiguration, SmoUiConfiguration {\r\n mode: SmoMode;\r\n language: string = '';\r\n initialScore?: string | SmoScore;\r\n remoteScore?: string;\r\n leftControls?: string | HTMLElement;\r\n topControls?: string | HTMLElement;\r\n scoreDomContainer: string | HTMLElement;\r\n libraryUrl?: string;\r\n demonPollTime: number = 0; // how often we poll the score to see if it changed\r\n idleRedrawTime: number = 0;\r\n keys?: KeyBindingConfiguration;\r\n eventHandler?: ModalEventHandler;\r\n ribbonLayout: RibbonLayout;\r\n audioAnimation: SuiAudioAnimationParams;\r\n buttonDefinition: ButtonDefinition[];\r\n\r\n static get defaults(): SmoConfiguration {\r\n return {\r\n mode: 'application',\r\n language: 'en',\r\n scoreDomContainer: 'boo',\r\n libraryUrl: 'https://aarondavidnewman.github.io/Smoosic/release/library/links/smoLibrary.json',\r\n demonPollTime: 50, // how often we poll the score to see if it changed\r\n idleRedrawTime: 1000, // maximum time between score modification and render\r\n ribbonLayout: defaultRibbonLayout.ribbons,\r\n buttonDefinition: defaultRibbonLayout.ribbonButtons,\r\n audioAnimation: {\r\n audioAnimationHandler: defaultAudioAnimationHandler,\r\n clearAudioAnimationHandler: defaultClearAudioAnimationHandler\r\n }\r\n };\r\n }\r\n static get keyBindingDefaults(): KeyBindingConfiguration {\r\n const editorKeys = defaultEditorKeys.keys;\r\n const trackerKeys = defaultTrackerKeys.keys;\r\n editorKeys.forEach((key) => {\r\n key.module = 'keyCommands'\r\n });\r\n trackerKeys.forEach((key) => {\r\n key.module = 'tracker'\r\n });\r\n return { editorKeys, trackerKeys };\r\n }\r\n constructor(params: Partial) {\r\n const defs = SmoConfiguration.defaults;\r\n ConfigurationStringOptions.forEach((param) => {\r\n const sp: string | undefined = params[param] ?? defs[param];\r\n this[param] = sp ?? '';\r\n });\r\n this.scoreDomContainer = params.scoreDomContainer ?? defs.scoreDomContainer;\r\n this.initialScore = params.initialScore ?? undefined;\r\n ConfigurationNumberOptions.forEach((param) => {\r\n this[param] = params[param] ?? defs[param];\r\n });\r\n this.mode = params.mode ?? defs.mode;\r\n if (this.mode === 'application') {\r\n this.leftControls = params.leftControls;\r\n this.topControls = params.topControls;\r\n }\r\n this.ribbonLayout = params.ribbonLayout ? params.ribbonLayout: defaultRibbonLayout.ribbons;\r\n this.buttonDefinition = params.buttonDefinition ? params.buttonDefinition : defaultRibbonLayout.ribbonButtons;\r\n if (!params.ribbonLayout) {\r\n this.ribbonLayout = defaultRibbonLayout.ribbons;\r\n }\r\n if (!params.buttonDefinition) {\r\n this.buttonDefinition = defaultRibbonLayout.ribbonButtons;\r\n }\r\n if (!params.audioAnimation) {\r\n this.audioAnimation = SmoConfiguration.defaults.audioAnimation;\r\n } else {\r\n this.audioAnimation = params.audioAnimation;\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom } from '../common/htmlHelpers';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\nimport { SmoConfiguration } from './configuration';\r\nimport { SuiPiano } from '../render/sui/piano';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiDom {\r\n static splash(config: SmoConfiguration) {\r\n var b: any = buildDom;\r\n var logoPath = '../styles/images/logo.png';\r\n var r = b('div').classes('bug-modal').append(\r\n b('img').attr('src', logoPath).classes('splash-logo').attr('width', '300px').attr('height', '300px'))\r\n .append(b('button').classes('icon icon-cross bug-dismiss-button'))\r\n .append(b('div').classes('splash-div')\r\n .append(b('span').classes('splash-title').text('Sm'))\r\n .append(b('span').classes('splash-shine').text('ooooooooo'))\r\n .append(b('span').classes('splash-title').text('sic')));\r\n $('body').append(r.dom());\r\n $('body').addClass('splashScreen modal');\r\n setTimeout(function () {\r\n $('body').removeClass('splashScreen modal');\r\n }, 1000);\r\n }\r\n static get scrollRegionId() {\r\n return 'smo-scroll-region';\r\n }\r\n static createUiDom(uiDomContainer: HTMLElement | string | undefined) {\r\n if (!uiDomContainer) {\r\n return;\r\n }\r\n if (typeof(uiDomContainer) === 'string') {\r\n uiDomContainer = document.getElementById(uiDomContainer) ?? undefined;\r\n }\r\n if (!uiDomContainer) {\r\n return;\r\n }\r\n var b = buildDom;\r\n var r = b('div').classes('dom-container')\r\n .append(b('div').classes('workspace language-dir').attr('dir', 'ltr') \r\n .append(b('div').classes('control-bar')\r\n .append(b('div').classes('titleText').text('Smoosic'))\r\n .append(b('div').classes('piano-container')\r\n .append(b('div').classes('key-left-ctrl'))\r\n .append(b('div').classes('piano-keys'))\r\n .append(b('div').classes('key-right-ctrl')))\r\n .append(b('div').classes('controls-top').attr('id','controls-top')))\r\n .append(b('div').classes('media')\r\n .append(b('div').classes('d-flex flex-column flex-shrink-0 p-3 bg-body-tertiary')\r\n .append(b('ul').classes('nav nav-pills flex-column mb-auto').attr('id','controls-left')))\r\n ));\r\n \r\n uiDomContainer.append(r.dom()[0]);\r\n const scrollRegion = document.createElement('div');\r\n $(scrollRegion).attr('id', SuiDom.scrollRegionId).addClass('musicRelief');\r\n $('.dom-container .media').append(scrollRegion);\r\n var pianoDom = $('.piano-keys')[0];\r\n var svg = document.createElementNS(SvgHelpers.namespace, 'svg');\r\n svg.id = 'piano-svg';\r\n svg.setAttributeNS('', 'width', '' + SuiPiano.owidth * SuiPiano.dimensions.octaves);\r\n svg.setAttributeNS('', 'height', '' + SuiPiano.dimensions.wheight);\r\n svg.setAttributeNS('', 'viewBox', '0 0 ' + SuiPiano.owidth * SuiPiano.dimensions.octaves + ' ' + SuiPiano.dimensions.wheight);\r\n pianoDom.appendChild(svg);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { KeyEvent, keyEventMatch } from '../smo/data/common';\r\nimport { SuiExceptionHandler } from '../ui/exceptions';\r\nimport { Qwerty } from '../ui/qwerty';\r\nimport { SuiModifierDialogFactory } from '../ui/dialogs/factory';\r\nimport { SuiPiano } from '../render/sui/piano'\r\nimport { SuiHelp } from '../ui/help';\r\nimport { CompleteNotifier, ModalComponent } from '../ui/common';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\nimport { defaultEditorKeys } from '../ui/keyBindings/default/editorKeys';\r\nimport { defaultTrackerKeys } from '../ui/keyBindings/default/trackerKeys';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource, EventHandler } from '../ui/eventSource';\r\nimport { SuiKeyCommands } from './keyCommands';\r\nimport { KeyBinding, ModalEventHandler } from './common';\r\nimport { ModifierTab } from '../smo/xform/selections';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\nimport { SuiMenuManager } from '../ui/menus/manager';\r\nimport { SmoConfiguration } from './configuration';\r\nimport { SuiDom } from './dom';\r\ndeclare var $: any;\r\n\r\n/**\r\n * Handle keyboard/mouse events, and pass them to the renderer and other UI elements.\r\n */\r\nexport interface EventHandlerParams {\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n tracker: SuiTracker,\r\n keyCommands: SuiKeyCommands,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier,\r\n keyBindings: KeyBinding[],\r\n config: SmoConfiguration\r\n}\r\n/**\r\n * this is the default keyboard/mouse handler for smoosic in application mode.\r\n * It diverts key events to tracker or key commmands as appropriate, and mouse events to \r\n * tracker. Modal elements take this control away temporarily.\r\n * \r\n * It also handles some global events such as window resize and scroll of the music region.\r\n * @category SuiApplication\r\n*/\r\nexport class SuiEventHandler implements ModalEventHandler {\r\n static reentry: boolean = false;\r\n static keyboardUi: Qwerty;\r\n static showQwerty() {\r\n SuiEventHandler.keyboardUi = Qwerty;\r\n Qwerty.displayKb();\r\n }\r\n static instance: SuiEventHandler;\r\n static debugMask: number = 0;\r\n static altKeyPressed: boolean = false;\r\n static ctrlKeyPressed: boolean = false;\r\n static shiftKeyPressed: boolean = false;\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n tracker: SuiTracker;\r\n keyBind: KeyBinding[];\r\n completeNotifier: CompleteNotifier;\r\n keyCommands: SuiKeyCommands;\r\n resizing: boolean = false;\r\n undoStatus: number = 0;\r\n trackScrolling: boolean = false;\r\n config: SmoConfiguration;\r\n keyHandlerObj: any = null;\r\n menus: SuiMenuManager;\r\n piano: SuiPiano | null = null;\r\n exhandler: SuiExceptionHandler; \r\n constructor(params: EventHandlerParams) {\r\n SuiEventHandler.instance = this;\r\n\r\n this.view = params.view;\r\n this.config = params.config;\r\n this.menus = params.menus;\r\n this.completeNotifier = params.completeNotifier;\r\n this.eventSource = params.eventSource;\r\n this.tracker = params.tracker; // needed for key event handling\r\n this.keyBind = params.keyBindings;\r\n this.keyCommands = params.keyCommands;\r\n this.keyCommands.view = this.view;\r\n this.resizing = false;\r\n this.undoStatus = 0;\r\n this.trackScrolling = false;\r\n this.keyHandlerObj = null;\r\n // create global exception instance\r\n this.exhandler = new SuiExceptionHandler(this);\r\n this.bindEvents();\r\n this.bindResize();\r\n this.createPiano();\r\n }\r\n\r\n static get scrollable() {\r\n return '.musicRelief';\r\n }\r\n\r\n private static handleScrollEventDefer(handler: SuiEventHandler) {\r\n if (handler.trackScrolling) {\r\n return;\r\n }\r\n const scrollRegion: HTMLElement | null = document.getElementById(SuiDom.scrollRegionId);\r\n setTimeout(() => {\r\n handler.trackScrolling = false;\r\n if (scrollRegion) {\r\n const scrollLeft = scrollRegion.scrollLeft;\r\n const scrollTop = scrollRegion.scrollTop;\r\n handler.view.handleScrollEvent(scrollLeft, scrollTop);\r\n }\r\n }, 500);\r\n }\r\n handleScrollEvent() {\r\n SuiEventHandler.handleScrollEventDefer(this);\r\n }\r\n\r\n createPiano() {\r\n this.piano = new SuiPiano(this.view);\r\n }\r\n resizeEvent() {\r\n var self = this;\r\n if (this.resizing) {\r\n return;\r\n }\r\n if (!this.piano) {\r\n return;\r\n }\r\n if ($('body').hasClass('printing')) {\r\n return;\r\n }\r\n this.resizing = true;\r\n setTimeout(function () {\r\n if (SuiEventHandler.debugMask) {\r\n console.log('resizing');\r\n }\r\n self.resizing = false;\r\n self.piano!.handleResize();\r\n self.view.refreshViewport();\r\n }, 1);\r\n }\r\n\r\n createModifierDialog(modifierSelection: ModifierTab) {\r\n var parameters = {\r\n modifier: modifierSelection.modifier,\r\n view: this.view, eventSource: this.eventSource,\r\n completeNotifier: this.completeNotifier, keyCommands: this.keyCommands, \r\n ctor: '', // filled in by the factory\r\n tracker: this.tracker,\r\n startPromise: null,\r\n id: 'modifier-dialog',\r\n config: this.config\r\n }\r\n return SuiModifierDialogFactory.createModifierDialog(modifierSelection.modifier, parameters);\r\n }\r\n\r\n // If the user has selected a modifier via the mouse/touch, bring up mod dialog\r\n // for that modifier\r\n trackerModifierSelect(ev: KeyEvent) {\r\n var modSelection = this.view.tracker.getSelectedModifier();\r\n if (modSelection) {\r\n var dialog = this.createModifierDialog(modSelection);\r\n if (dialog) {\r\n // this.view.tracker.selectSuggestion(ev);\r\n return;\r\n // this.unbindKeyboardForModal(dialog);\r\n } else {\r\n this.view.tracker.advanceModifierSelection(this.view.score, ev);\r\n }\r\n } else {\r\n this.view.tracker.selectSuggestion(this.view.score, ev);\r\n }\r\n return;\r\n }\r\n\r\n // ### bindResize\r\n // This handles both resizing of the music area (scrolling) and resizing of the window.\r\n // The latter results in a redraw, the former just resets the client/logical map of elements\r\n // in the tracker.\r\n bindResize() {\r\n const self = this;\r\n const el: HTMLElement = $(SuiEventHandler.scrollable)[0];\r\n // unit test programs don't have resize html\r\n if (!el) {\r\n return;\r\n }\r\n window.addEventListener('resize', function () {\r\n self.resizeEvent();\r\n });\r\n\r\n let scrollCallback = () => {\r\n self.handleScrollEvent();\r\n };\r\n el.onscroll = scrollCallback;\r\n }\r\n\r\n\r\n // ### renderElement\r\n // return render element that is the DOM parent of the svg\r\n get renderElement() {\r\n return this.view.renderer.renderElement;\r\n }\r\n\r\n // ## editorKeyBindingDefaults\r\n // ## Description:\r\n // execute a simple command on the editor, based on a keystroke.\r\n static get editorKeyBindingDefaults() {\r\n return defaultEditorKeys.keys;\r\n }\r\n\r\n // ## trackerKeyBindingDefaults\r\n // ### Description:\r\n // Key bindings for the tracker. The tracker is the 'cursor' in the music\r\n // that lets you select and edit notes.\r\n static get trackerKeyBindingDefaults() {\r\n return defaultTrackerKeys.keys;\r\n }\r\n helpControls() {\r\n var self = this;\r\n var rebind = function () {\r\n self.bindEvents();\r\n }\r\n }\r\n menuHelp() {\r\n SuiHelp.displayHelp();\r\n }\r\n keyUp(evdata: any) {\r\n if (!evdata.ctrlKey && SuiEventHandler.ctrlKeyPressed) {\r\n $('body').removeClass('ctrl-key');\r\n SuiEventHandler.ctrlKeyPressed = false;\r\n }\r\n if (!evdata.shiftKey && SuiEventHandler.shiftKeyPressed) {\r\n $('body').removeClass('shift-key');\r\n SuiEventHandler.shiftKeyPressed = false;\r\n }\r\n if (!evdata.altKey && SuiEventHandler.altKeyPressed) {\r\n $('body').removeClass('alt-key');\r\n SuiEventHandler.altKeyPressed = false;\r\n }\r\n }\r\n\r\n handleMetaKeyDown(evdata: any) {\r\n if (evdata.ctrlKey && !SuiEventHandler.ctrlKeyPressed) {\r\n $('body').addClass('ctrl-key');\r\n SuiEventHandler.ctrlKeyPressed = true;\r\n }\r\n if (evdata.shiftKey && !SuiEventHandler.shiftKeyPressed) {\r\n $('body').addClass('shift-key');\r\n SuiEventHandler.shiftKeyPressed = true;\r\n }\r\n if (evdata.altKey && !SuiEventHandler.altKeyPressed) {\r\n $('body').addClass('alt-key');\r\n SuiEventHandler.altKeyPressed = true;\r\n }\r\n }\r\n\r\n evKey(evdata: any) {\r\n if ($('body').hasClass('translation-mode')) {\r\n return;\r\n }\r\n this.handleMetaKeyDown(evdata);\r\n if (SuiEventHandler.debugMask) {\r\n console.log(\"KeyboardEvent: key='\" + evdata.key + \"' | code='\" +\r\n evdata.code + \"'\"\r\n + \" shift='\" + evdata.shiftKey + \"' control='\" + evdata.ctrlKey + \"'\" + \" alt='\" + evdata.altKey + \"'\");\r\n }\r\n evdata.preventDefault();\r\n\r\n if (SuiEventHandler.keyboardUi) {\r\n Qwerty.handleKeyEvent(evdata);\r\n }\r\n const dataCopy = SuiTracker.serializeEvent(evdata);\r\n this.view.renderer.updatePromise().then(() => {\r\n if (dataCopy.key == '?') {\r\n SuiHelp.displayHelp();\r\n }\r\n if (dataCopy.key == 'Enter') {\r\n this.trackerModifierSelect(dataCopy);\r\n }\r\n\r\n var binding: KeyBinding | undefined = this.keyBind.find((ev: KeyBinding) =>\r\n ev.event === 'keydown' && ev.key === dataCopy.key &&\r\n ev.ctrlKey === dataCopy.ctrlKey &&\r\n ev.altKey === dataCopy.altKey && dataCopy.shiftKey === ev.shiftKey);\r\n\r\n if (binding) {\r\n try {\r\n if (binding.module === 'tracker') {\r\n (this.tracker as any)[binding.action](this.view.score, dataCopy);\r\n } else {\r\n (this.keyCommands as any)[binding.action](dataCopy);\r\n }\r\n } catch (e) {\r\n if (typeof (e) === 'string') {\r\n console.error(e);\r\n }\r\n this.exhandler.exceptionHandler(e);\r\n }\r\n }\r\n });\r\n }\r\n\r\n mouseMove(ev: any) {\r\n this.view.tracker.intersectingArtifact(SvgHelpers.smoBox({\r\n x: ev.clientX,\r\n y: ev.clientY\r\n }));\r\n }\r\n\r\n mouseClick(ev: any) {\r\n const dataCopy = SuiTracker.serializeEvent(ev);\r\n this.view.renderer.updatePromise().then(() => {\r\n this.view.tracker.selectSuggestion(this.view.score, dataCopy);\r\n var modifier = this.view.tracker.getSelectedModifier();\r\n if (modifier) {\r\n this.createModifierDialog(modifier);\r\n }\r\n });\r\n }\r\n bindEvents() {\r\n const self = this;\r\n const tracker = this.view.tracker;\r\n $('body').off('forceScrollEvent').on('forceScrollEvent', function () {\r\n self.handleScrollEvent();\r\n });\r\n $('body').off('forceResizeEvent').on('forceResizeEvent', function () {\r\n self.resizeEvent();\r\n });\r\n this.helpControls();\r\n }\r\n}\r\n","import { SuiApplication } from \"./application\";\r\nimport { SmoConfigurationParams } from \"./configuration\";\r\nimport { SmoToVex } from '../render/vex/toVex';\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { SmoScore } from '../smo/data/score';\r\nexport interface ScoreToRender {\r\n title: string, path: string, pages: number[]\r\n}\r\nconst filesToRender: Record = {\r\n 'PreciousLord': { \r\n title: 'PreciousLord', \r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/hymns/Precious Lord.json',\r\n pages: [0]\r\n }, 'BachWTC': {\r\n title: 'BachWTC',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/BachWTC-3.json',\r\n pages: [0, 1, 2]\r\n }, 'BachInvention': {\r\n title: 'BachInv1',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/BachInvention.json',\r\n pages: [1]\r\n }, 'Gnossienne3': {\r\n title: 'Gnossienne3',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/Gnossienne3-3.json',\r\n pages: [0, 1]\r\n }, 'GFWMessiah-I-2': {\r\n title: 'GFWMessiah-I-2',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/messiah/Messiah-I-2.json',\r\n pages: [0, 1]\r\n }, 'Joplin': {\r\n title: 'Joplin',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/piano/Joplin-Entertainer.json',\r\n pages: [0, 1, 2]\r\n }, 'Plena': {\r\n title: 'Plena',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/bigband/Plena.json',\r\n pages: [2]\r\n }, 'Postillionlied': {\r\n title: 'Postillion Lied',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/soprano/Postillionlied.json',\r\n pages: [0, 1, 2]\r\n }, 'Solovey': {\r\n title: 'Solovey',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/soprano/Solovey.json',\r\n pages: [0, 1]\r\n }, 'Bilongo': {\r\n title: 'Bilongo',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/bigband/Bilongo-Mandinga.json',\r\n pages: [7]\r\n }, 'Yama': {\r\n title: 'Yama',\r\n path: 'https://aarondavidnewman.github.io/Smoosic/release/library/Yama2.json',\r\n pages: [1]\r\n }\r\n};\r\ndeclare var $: any;\r\ndeclare var JSZip: any;\r\nconst addFileLink = (filename: string, txt: any, parent: any, mimeType: string = 'application/octet-stream') => {\r\n var anchor = $('');\r\n var url = URL.createObjectURL(new Blob([txt], { type: mimeType }));\r\n $(anchor).attr('href', url);\r\n $(anchor).attr('download', filename);\r\n $(anchor).text('save');\r\n $(parent).html('');\r\n $(parent).append(anchor);\r\n}\r\nexport async function renderVexTests(config: Partial) {\r\n const zipName = 'output.zip';\r\n const zipFile = new JSZip();\r\n const application = await SuiApplication.configure(config);\r\n const view = application.view;\r\n if (!view) {\r\n return;\r\n }\r\n const fileKeys = Object.keys(filesToRender);\r\n for (var i = 0; i < fileKeys.length; ++i) {\r\n const fileInfo = filesToRender[fileKeys[i]];\r\n const path = fileInfo.path;\r\n const loader = new SuiXhrLoader(path);\r\n const scoreJson = await loader.loadAsync();\r\n const score = SmoScore.deserialize(scoreJson as string); \r\n await view.changeScore(score);\r\n fileInfo.pages.forEach((page) => {\r\n const vexText = SmoToVex.convert(view.score, { div: 'smoo', page })\r\n const fileName = `${fileInfo.title}-${page}.js`;\r\n zipFile.file(fileName, vexText); \r\n });\r\n }\r\n const blob = await zipFile.generateAsync({ type: 'blob' });\r\n const element = document.getElementById('remoteLink');\r\n addFileLink(zipName, blob, element);\r\n $('#remoteLink a')[0].click();\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiTempoDialog } from '../ui/dialogs/tempo';\r\nimport { createAndDisplayDialog } from '../ui/dialogs/dialog';\r\nimport { SuiAudioPlayer } from '../render/audio/player';\r\nimport { SmoArticulation } from '../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../ui/eventSource';\r\nimport { SuiTracker } from '../render/sui/tracker';\r\nimport { KeyCommandParams } from './common';\r\nimport { CompleteNotifier } from '../ui/common';\r\nimport { PitchLetter, IsPitchLetter, KeyEvent } from '../smo/data/common';\r\n\r\n/**\r\n * KeyCommands object handles key events and converts them into commands, updating the score and\r\n * display\r\n * @category SuiApplication\r\n * */\r\nexport class SuiKeyCommands {\r\n view: SuiScoreViewOperations;\r\n slashMode: boolean = false;\r\n completeNotifier: CompleteNotifier;\r\n tracker: SuiTracker;\r\n eventSource: BrowserEventSource;\r\n constructor(params: KeyCommandParams) {\r\n this.slashMode = false;\r\n this.view = params.view;\r\n this.tracker = params.view.tracker;\r\n this.completeNotifier = params.completeNotifier;\r\n this.eventSource = params.eventSource;\r\n }\r\n\r\n tempoDialog() {\r\n const tempo = this.tracker.selections[0].measure.getTempo();\r\n createAndDisplayDialog(SuiTempoDialog,\r\n {\r\n id: 'tempoDialog',\r\n ctor: 'SuiTempoDialog',\r\n completeNotifier: this.completeNotifier,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n tracker: this.tracker,\r\n startPromise: null,\r\n modifier: tempo\r\n }\r\n );\r\n }\r\n\r\n get score() {\r\n return this.view.score;\r\n }\r\n\r\n undo() {\r\n this.view.undo();\r\n }\r\n\r\n async copy() {\r\n await this.view.copy();\r\n }\r\n async paste() {\r\n await this.view.paste();\r\n }\r\n async toggleBeamGroup() {\r\n await this.view.toggleBeamGroup();\r\n }\r\n\r\n async beamSelections() {\r\n await this.view.beamSelections();\r\n }\r\n async toggleBeamDirection() {\r\n await this.view.toggleBeamDirection();\r\n }\r\n\r\n async collapseChord() {\r\n await this.view.collapseChord();\r\n }\r\n\r\n togglePlayer() {\r\n if (SuiAudioPlayer.playing) {\r\n this.stopPlayer();\r\n } else {\r\n this.playScore();\r\n }\r\n }\r\n playScore() {\r\n this.view.playFromSelection();\r\n }\r\n\r\n stopPlayer() {\r\n this.view.stopPlayer();\r\n }\r\n pausePlayer() {\r\n SuiAudioPlayer.pausePlayer();\r\n }\r\n\r\n async intervalAdd(interval: number, direction: number) {\r\n await this.view.setInterval(direction * interval);\r\n }\r\n\r\n async interval(keyEvent: KeyEvent) {\r\n // code='Digit3'\r\n var interval = parseInt(keyEvent.keyCode.toString(), 10) - 49; // 48 === '0', 0 indexed\r\n if (isNaN(interval) || interval < 1 || interval > 7) {\r\n return;\r\n }\r\n await this.intervalAdd(interval, keyEvent.shiftKey ? -1 : 1);\r\n }\r\n\r\n async transpose(offset: number) {\r\n await this.view.transposeSelections(offset);\r\n }\r\n async transposeDown() {\r\n await this.transpose(-1);\r\n }\r\n async transposeUp() {\r\n await this.transpose(1);\r\n }\r\n async upOctave() {\r\n await this.transpose(12);\r\n }\r\n async downOctave() {\r\n await this.transpose(-12);\r\n }\r\n async makeRest() {\r\n await this.view.makeRest();\r\n }\r\n\r\n async setPitchCommand(letter: PitchLetter) {\r\n await this.view.setPitch(letter);\r\n }\r\n\r\n async setPitch(keyEvent: KeyEvent) {\r\n const letter = keyEvent.key.toLowerCase();\r\n if (IsPitchLetter(letter)) {\r\n await this.setPitchCommand(letter);\r\n }\r\n }\r\n\r\n async dotDuration() {\r\n await this.view.batchDurationOperation('dotDuration');\r\n }\r\n\r\n async undotDuration() {\r\n await this.view.batchDurationOperation('undotDuration');\r\n }\r\n\r\n async doubleDuration() {\r\n await this.view.batchDurationOperation('doubleDuration');\r\n }\r\n\r\n async halveDuration() {\r\n await this.view.batchDurationOperation('halveDuration');\r\n }\r\n\r\n async addMeasure(keyEvent: KeyEvent) {\r\n await this.view.addMeasure(keyEvent.shiftKey);\r\n }\r\n async deleteNote() {\r\n await this.view.deleteNote();\r\n }\r\n\r\n async toggleCourtesyAccidental() {\r\n await this.view.toggleCourtesyAccidentals();\r\n }\r\n async toggleEnharmonic() {\r\n await this.view.toggleEnharmonic();\r\n }\r\n\r\n async makeTupletCommand(numNotes: number) {\r\n await this.view.makeTuplet(numNotes);\r\n }\r\n async makeTuplet(keyEvent: KeyEvent) {\r\n const numNotes = parseInt(keyEvent.key, 10);\r\n await this.makeTupletCommand(numNotes);\r\n }\r\n\r\n async unmakeTuplet() {\r\n await this.view.unmakeTuplet();\r\n }\r\n async setNoteHead() {\r\n await this.view.setNoteHead('x2');\r\n }\r\n async removeGraceNote() {\r\n await this.view.removeGraceNote();\r\n }\r\n async addGraceNote() {\r\n await this.view.addGraceNote();\r\n }\r\n async slashGraceNotes() {\r\n await this.view.slashGraceNotes();\r\n }\r\n\r\n async toggleArticulationCommand(articulation: string, ctor: string) {\r\n await this.view.toggleArticulation(articulation, ctor);\r\n }\r\n async addRemoveAccent() {\r\n await this.toggleArticulationCommand(SmoArticulation.articulations.accent, 'SmoArticulation');\r\n }\r\n async addRemoveTenuto() {\r\n await this.toggleArticulationCommand(SmoArticulation.articulations.tenuto, 'SmoArticulation');\r\n }\r\n async addRemoveStaccato() {\r\n await this.toggleArticulationCommand(SmoArticulation.articulations.staccato, 'SmoArticulation');\r\n }\r\n async addRemoveMarcato() {\r\n await this.toggleArticulationCommand(SmoArticulation.articulations.marcato, 'SmoArticulation');\r\n }\r\n async addRemovePizzicato() {\r\n await this.toggleArticulationCommand(SmoArticulation.articulations.pizzicato, 'SmoArticulation');\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\ndeclare var $: any;\r\n/**\r\n* returns an object that lets you build a DOM in a somewhat readable way.\r\n* \r\n* ## Usage\r\n* ``` javascript\r\n* var b = buildDom;\r\n* var r =\r\n* b('tr').classes('jsSharingMember').data('entitykey', key).data('name', name).data('entitytype', entityType).append(\r\n* b('td').classes('noSideBorderRight').append(\r\n* ...\r\n* $(parent).append(r.dom());\r\n* ``` \r\n* Don't forget the '.dom()' ! That is the actual jquery element object\r\n* @returns \r\n**/\r\nexport class DomBuilder {\r\n e: any;\r\n constructor(el: any) {\r\n this.e = $('<' + el + '/>');\r\n }\r\n classes(cl: any) {\r\n $(this.e).addClass(cl);\r\n return this;\r\n }\r\n html(value: any) {\r\n $(this.e).html(value);\r\n return this;\r\n }\r\n data(name: string, value: string) {\r\n $(this.e).attr('data-' + name, value);\r\n return this;\r\n }\r\n attr(name: string, value: string) {\r\n $(this.e).attr(name, value);\r\n return this;\r\n }\r\n prop(name: string, value: boolean) {\r\n $(this.e).prop(name, value);\r\n return this;\r\n }\r\n css(name: string, value: string) {\r\n $(this.e).css(name, value);\r\n return this;\r\n }\r\n append(el: any) {\r\n $(this.e).append(el.e);\r\n return this;\r\n }\r\n text(tx: any) {\r\n $(this.e).append(document.createTextNode(tx));\r\n return this;\r\n }\r\n dom() {\r\n return this.e;\r\n }\r\n}\r\n\r\nexport function buildDom(e: any) {\r\n return new DomBuilder(e);\r\n}\r\n\r\nexport function focusableElements(): string[] {\r\n return ['a', 'input', 'select', 'textarea', 'button', 'li[tabindex]', 'div[tabindex]'];\r\n}\r\n\r\nexport function addFileLink(filename: string, txt: any, parent: any, mimeType: string = 'application/octet-stream') {\r\n var anchor = $('');\r\n var url = URL.createObjectURL(new Blob([txt], { type: mimeType }));\r\n $(anchor).attr('href', url);\r\n $(anchor).attr('download', filename);\r\n $(anchor).text('save');\r\n $(parent).html('');\r\n $(parent).append(anchor);\r\n}\r\n\r\nexport class InputTrapper {\r\n selector: any;\r\n parent: any;\r\n id: any;\r\n parentId: any;\r\n modalInputs: any[];\r\n disabledInputs: any[];\r\n siblingInputs: any[];\r\n constructor(selector: any) {\r\n this.selector = selector;\r\n this.modalInputs = [];\r\n this.disabledInputs = [];\r\n this.siblingInputs = [];\r\n this.parent = $(this.selector);\r\n this.id = $(this.parent).attr('id');\r\n this.parentId = $(this.parent).parent().attr('id');\r\n var idstr = Math.round(Math.random() * (999999 - 1) + 1);\r\n if (!this.id) {\r\n $(this.parent).attr('id', idstr + '-element');\r\n this.id = $(this.parent).attr('id');\r\n }\r\n if (!this.parentId) {\r\n $(this.parent).parent().attr('id', idstr + '-parent');\r\n this.parentId = $(this.parent).parent().attr('id');\r\n }\r\n\r\n }\r\n trap(this: any) {\r\n // aria-hide peers of dialog and peers of parent that are not the parent.\r\n var peers = $(this.parent).parent().children().toArray();\r\n\r\n peers.forEach((node: any) => {\r\n var ptag: any = $(node)[0].tagName;\r\n if (ptag === 'SCRIPT' || ptag === 'LINK' || ptag === 'STYLE') {\r\n ;\r\n } else if ($(node).attr('id') === this.parentId ||\r\n $(node).attr('id') === this.id || \r\n $(node).hasClass('helpDialog')) { // help dialog can be shown with modal dialog\r\n ;\r\n } else {\r\n var hidden = $(node).attr('aria-hidden');\r\n if (!hidden || hidden != 'true') {\r\n $(node).attr('aria-hidden', 'true');\r\n this.siblingInputs.push(node);\r\n }\r\n }\r\n });\r\n focusableElements().forEach((etype) => {\r\n var elements = $(etype).toArray();\r\n\r\n elements.forEach((element: any) => {\r\n var tagName = $(element)[0].tagName;\r\n if ($(element).attr('id') === this.id) {\r\n ;\r\n } else if ($(element).closest('.helpDialog').length) {\r\n ;\r\n } else if ($(element).prop('disabled')) {\r\n ;\r\n } else if ($(element).hasClass('hide')) {\r\n ;\r\n } else if ($(element).closest(this.selector).length) {\r\n // inside\r\n this.modalInputs.push(element);\r\n } else if ((tagName === 'A' || tagName === 'DIV' || tagName === 'LI') && $(element).attr('tabIndex') === '-1') {\r\n ;\r\n } else {\r\n this.disabledInputs.push(element);\r\n if (tagName === 'A' || tagName === 'DIV' || tagName === 'LI') {\r\n $(element).attr('tabIndex', '-1');\r\n } else {\r\n $(element).prop('disabled', true);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n close() {\r\n this.disabledInputs.forEach(function (element: any) {\r\n var tagName = $(element)[0].tagName;\r\n if (tagName === 'A' || tagName === 'DIV' || tagName === 'LI') {\r\n $(element).attr('tabIndex', '0');\r\n } else {\r\n $(element).prop('disabled', false);\r\n }\r\n });\r\n this.siblingInputs.forEach((el: any) => {\r\n $(el).removeAttr('aria-hidden');\r\n });\r\n } \r\n}\r\nexport function closeDialogPromise(): Promise {\r\n return new Promise((resolve) => {\r\n $('body').off('dialogDismiss').on('dialogDismiss', function () {\r\n resolve();\r\n });\r\n });\r\n}\r\n/**\r\n * Extract an HTMLElement from a Jquery id, DOM element ID, or HTMLELement. If\r\n * an HTMLElement can't be created, return null\r\n * @param selector\r\n * @returns HTMLElement\r\n */\r\nexport function getDomContainer(selector: HTMLElement | string): HTMLElement | undefined {\r\n if (typeof(selector) === 'string') {\r\n if (selector[0] === '#') {\r\n const el: any = $(selector)[0];\r\n if (!(el instanceof HTMLElement)) {\r\n return undefined;\r\n }\r\n return el;\r\n } else {\r\n const el = document.getElementById(selector);\r\n if (!el) {\r\n return undefined;\r\n }\r\n return el;\r\n }\r\n } else if (selector instanceof HTMLElement) {\r\n return selector;\r\n } else { \r\n return undefined;\r\n }\r\n}\r\n/**\r\n * Create a top-level HTML element for modal containers - dialogs etc.\r\n * from a jquery selector, or just return same if it exists\r\n * @param selector \r\n * @returns \r\n */\r\nexport function createTopDomContainer(selector: string | HTMLElement, elementType?: string): HTMLElement {\r\n const container = $(selector);\r\n if (!elementType) {\r\n elementType = 'div';\r\n }\r\n if (container.length > 0) {\r\n return container[0] as HTMLElement;\r\n } else {\r\n const ndiv = document.createElement(elementType);\r\n if (typeof(selector) === 'string') {\r\n const cl = (selector[0] === '.' || selector[0] === '#') ? selector.substring(1) : selector;\r\n $(ndiv).addClass(cl);\r\n if (selector[0] === '#') {\r\n $(ndiv).attr('id', selector.substring(1));\r\n }\r\n }\r\n $('body').append(ndiv);\r\n return $(ndiv)[0] as HTMLElement;\r\n }\r\n}\r\n/**\r\n * \r\n * @param parameters \r\n * @returns \r\n */\r\nexport function draggable(parameters: any) {\r\n return new Draggable(parameters);\r\n}\r\n\r\nexport class Draggable {\r\n parent: any;\r\n handle: any;\r\n animeClass: any;\r\n dragParent: any;\r\n domOffset: any;\r\n svg: any;\r\n width: number;\r\n height: number;\r\n lastX: number;\r\n lastY: number;\r\n cb: any;\r\n moveParent: boolean;\r\n dragging: boolean = false;\r\n\r\n constructor(parameters: any) {\r\n this.parent = parameters.parent;\r\n this.handle = parameters.handle;\r\n this.animeClass = parameters.animateDiv;\r\n this.dragParent = parameters.dragParent;\r\n\r\n // TODO: make '.dom-container' a part of the configuration\r\n this.domOffset = $('.dom-container').offset();\r\n\r\n this.svg = parameters['svg'];\r\n this.width = $(this.parent).outerWidth();\r\n this.height = $(this.parent).outerHeight();\r\n this.lastX = $(this.handle).offset().left - this.domOffset.left;\r\n this.lastY = $(this.handle).offset().top - this.domOffset.top;\r\n this.cb = parameters.cb;\r\n this.moveParent = parameters.moveParent;\r\n\r\n var self = this;\r\n\r\n // $('.itemMenu input[name=\"itemTitle\"]').css('width','60%');\r\n $(this.handle)\r\n .off('mousedown').on('mousedown',\r\n function (e: any) {\r\n self.mousedown(e);\r\n });\r\n $(document)\r\n .on('mousemove',\r\n function (e: any) {\r\n self.mousemove(e);\r\n\r\n })\r\n .on('mouseup',\r\n function (e: any) {\r\n self.mouseup(e);\r\n });\r\n }\r\n _animate(e: any) {\r\n this.lastX = e.clientX;\r\n this.lastY = e.clientY;\r\n $(this.animeClass).css('left', this.lastX - this.domOffset.left);\r\n $(this.animeClass).css('top', this.lastY - this.domOffset.top);\r\n\r\n if (this.dragParent) {\r\n $(this.parent).css('left', this.lastX + 'px');\r\n $(this.parent).css('top', this.lastY + 'px');\r\n }\r\n }\r\n mousedown(e: any) {\r\n if (!this.dragging) {\r\n $(this.animeClass).removeClass('hide');\r\n\r\n $(this.animeClass).css('width', this.width);\r\n $(this.animeClass).css('height', this.height);\r\n }\r\n\r\n this.dragging = true;\r\n this._animate(e);\r\n }\r\n enddrag() {\r\n this.lastX = Math.max(this.lastX - this.domOffset.left, 0);\r\n this.lastY = Math.max(this.lastY - this.domOffset.top, 0);\r\n if (this.moveParent) {\r\n $(this.parent).css('left', this.lastX + 'px');\r\n $(this.parent).css('top', this.lastY + 'px');\r\n }\r\n $(this.animeClass).addClass('hide');\r\n this.cb(this.lastX, this.lastY);\r\n }\r\n\r\n mouseup(e: any) {\r\n // stop resizing\r\n if (this.dragging) {\r\n this.dragging = false;\r\n this.lastX = e.clientX;\r\n this.lastY = e.clientY;\r\n\r\n this.enddrag();\r\n }\r\n }\r\n mousemove(e: any) {\r\n // we don't want to do anything if we aren't resizing.\r\n if (!this.dragging)\r\n return;\r\n this._animate(e);\r\n }\r\n}\r\n","// Credit for Midi functionality goes to:\r\n// https://github.com/grimmdude/MidiWriterJS\r\nimport { SmoMusic } from '../smo/data/music';\r\nexport var _MidiWriter = function() {\r\n/**\r\n * MIDI file format constants.\r\n * @return {Constants}\r\n */\r\nvar Constants = {\r\n VERSION: 1,\r\n HEADER_CHUNK_TYPE: [0x4d, 0x54, 0x68, 0x64],\r\n // Mthd\r\n HEADER_CHUNK_LENGTH: [0x00, 0x00, 0x00, 0x06],\r\n // Header size for SMF\r\n HEADER_CHUNK_FORMAT0: [0x00, 0x00],\r\n // Midi Type 0 id\r\n HEADER_CHUNK_FORMAT1: [0x00, 0x01],\r\n // Midi Type 1 id\r\n HEADER_CHUNK_DIVISION: [0x00, 0x80],\r\n // Defaults to 128 ticks per beat\r\n TRACK_CHUNK_TYPE: [0x4d, 0x54, 0x72, 0x6b],\r\n // MTrk,\r\n META_EVENT_ID: 0xFF,\r\n META_TEXT_ID: 0x01,\r\n META_COPYRIGHT_ID: 0x02,\r\n META_TRACK_NAME_ID: 0x03,\r\n META_INSTRUMENT_NAME_ID: 0x04,\r\n META_LYRIC_ID: 0x05,\r\n META_MARKER_ID: 0x06,\r\n META_CUE_POINT: 0x07,\r\n META_TEMPO_ID: 0x51,\r\n META_SMTPE_OFFSET: 0x54,\r\n META_TIME_SIGNATURE_ID: 0x58,\r\n META_KEY_SIGNATURE_ID: 0x59,\r\n META_END_OF_TRACK_ID: [0x2F, 0x00],\r\n CONTROLLER_CHANGE_STATUS: 0xB0,\r\n // includes channel number (0)\r\n PROGRAM_CHANGE_STATUS: 0xC0,\r\n // includes channel number (0)\r\n PITCH_BEND_STATUS: 0xE0 // includes channel number (0)\r\n};\r\n\r\nfunction _typeof(obj) {\r\n \"@babel/helpers - typeof\";\r\n\r\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\r\n _typeof = function (obj) {\r\n return typeof obj;\r\n };\r\n } else {\r\n _typeof = function (obj) {\r\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\r\n };\r\n }\r\n\r\n return _typeof(obj);\r\n}\r\n\r\nfunction _classCallCheck(instance, Constructor) {\r\n if (!(instance instanceof Constructor)) {\r\n throw new TypeError(\"Cannot call a class as a function\");\r\n }\r\n}\r\n\r\nfunction _defineProperties(target, props) {\r\n for (var i = 0; i < props.length; i++) {\r\n var descriptor = props[i];\r\n descriptor.enumerable = descriptor.enumerable || false;\r\n descriptor.configurable = true;\r\n if (\"value\" in descriptor) descriptor.writable = true;\r\n Object.defineProperty(target, descriptor.key, descriptor);\r\n }\r\n}\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) {\r\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\r\n if (staticProps) _defineProperties(Constructor, staticProps);\r\n return Constructor;\r\n}\r\n\r\nfunction _inherits(subClass, superClass) {\r\n if (typeof superClass !== \"function\" && superClass !== null) {\r\n throw new TypeError(\"Super expression must either be null or a function\");\r\n }\r\n\r\n subClass.prototype = Object.create(superClass && superClass.prototype, {\r\n constructor: {\r\n value: subClass,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n if (superClass) _setPrototypeOf(subClass, superClass);\r\n}\r\n\r\nfunction _getPrototypeOf(o) {\r\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\r\n return o.__proto__ || Object.getPrototypeOf(o);\r\n };\r\n return _getPrototypeOf(o);\r\n}\r\n\r\nfunction _setPrototypeOf(o, p) {\r\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\r\n o.__proto__ = p;\r\n return o;\r\n };\r\n\r\n return _setPrototypeOf(o, p);\r\n}\r\n\r\nfunction _isNativeReflectConstruct() {\r\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\r\n if (Reflect.construct.sham) return false;\r\n if (typeof Proxy === \"function\") return true;\r\n\r\n try {\r\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\nfunction _construct(Parent, args, Class) {\r\n if (_isNativeReflectConstruct()) {\r\n _construct = Reflect.construct;\r\n } else {\r\n _construct = function _construct(Parent, args, Class) {\r\n var a = [null];\r\n a.push.apply(a, args);\r\n var Constructor = Function.bind.apply(Parent, a);\r\n var instance = new Constructor();\r\n if (Class) _setPrototypeOf(instance, Class.prototype);\r\n return instance;\r\n };\r\n }\r\n\r\n return _construct.apply(null, arguments);\r\n}\r\n\r\nfunction _isNativeFunction(fn) {\r\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\r\n}\r\n\r\nfunction _wrapNativeSuper(Class) {\r\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\r\n\r\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\r\n if (Class === null || !_isNativeFunction(Class)) return Class;\r\n\r\n if (typeof Class !== \"function\") {\r\n throw new TypeError(\"Super expression must either be null or a function\");\r\n }\r\n\r\n if (typeof _cache !== \"undefined\") {\r\n if (_cache.has(Class)) return _cache.get(Class);\r\n\r\n _cache.set(Class, Wrapper);\r\n }\r\n\r\n function Wrapper() {\r\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\r\n }\r\n\r\n Wrapper.prototype = Object.create(Class.prototype, {\r\n constructor: {\r\n value: Wrapper,\r\n enumerable: false,\r\n writable: true,\r\n configurable: true\r\n }\r\n });\r\n return _setPrototypeOf(Wrapper, Class);\r\n };\r\n\r\n return _wrapNativeSuper(Class);\r\n}\r\n\r\nfunction _wrapRegExp(re, groups) {\r\n _wrapRegExp = function (re, groups) {\r\n return new BabelRegExp(re, undefined, groups);\r\n };\r\n\r\n var _RegExp = _wrapNativeSuper(RegExp);\r\n\r\n var _super = RegExp.prototype;\r\n\r\n var _groups = new WeakMap();\r\n\r\n function BabelRegExp(re, flags, groups) {\r\n var _this = _RegExp.call(this, re, flags);\r\n\r\n _groups.set(_this, groups || _groups.get(re));\r\n\r\n return _this;\r\n }\r\n\r\n _inherits(BabelRegExp, _RegExp);\r\n\r\n BabelRegExp.prototype.exec = function (str) {\r\n var result = _super.exec.call(this, str);\r\n\r\n if (result) result.groups = buildGroups(result, this);\r\n return result;\r\n };\r\n\r\n BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {\r\n if (typeof substitution === \"string\") {\r\n var groups = _groups.get(this);\r\n\r\n return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) {\r\n return \"$\" + groups[name];\r\n }));\r\n } else if (typeof substitution === \"function\") {\r\n var _this = this;\r\n\r\n return _super[Symbol.replace].call(this, str, function () {\r\n var args = [];\r\n args.push.apply(args, arguments);\r\n\r\n if (typeof args[args.length - 1] !== \"object\") {\r\n args.push(buildGroups(args, _this));\r\n }\r\n\r\n return substitution.apply(this, args);\r\n });\r\n } else {\r\n return _super[Symbol.replace].call(this, str, substitution);\r\n }\r\n };\r\n\r\n function buildGroups(result, re) {\r\n var g = _groups.get(re);\r\n\r\n return Object.keys(g).reduce(function (groups, name) {\r\n groups[name] = result[g[name]];\r\n return groups;\r\n }, Object.create(null));\r\n }\r\n\r\n return _wrapRegExp.apply(this, arguments);\r\n}\r\n\r\n/**\r\n * Static utility functions used throughout the library.\r\n */\r\n\r\nvar Utils = /*#__PURE__*/function () {\r\n function Utils() {\r\n _classCallCheck(this, Utils);\r\n }\r\n\r\n _createClass(Utils, null, [{\r\n key: \"version\",\r\n value:\r\n /**\r\n * Gets MidiWriterJS version number.\r\n * @return {string}\r\n */\r\n function version() {\r\n return Constants.VERSION;\r\n }\r\n /**\r\n * Convert a string to an array of bytes\r\n * @param {string} string\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"stringToBytes\",\r\n value: function stringToBytes(string) {\r\n return string.split('').map(function (_char) {\r\n return _char.charCodeAt();\r\n });\r\n }\r\n /**\r\n * Checks if argument is a valid number.\r\n * @param {*} n - Value to check\r\n * @return {boolean}\r\n */\r\n\r\n }, {\r\n key: \"isNumeric\",\r\n value: function isNumeric(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n }\r\n /**\r\n * Returns the correct MIDI number for the specified pitch.\r\n * Uses Tonal Midi - https://github.com/danigb/tonal/tree/master/packages/midi\r\n * @param {(string|number)} pitch - 'C#4' or midi note code\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getPitch\",\r\n value: function getPitch(pitch) {\r\n return SmoMusic.midiPitchToMidiNumber(pitch);\r\n }\r\n /**\r\n * Translates number of ticks to MIDI timestamp format, returning an array of\r\n * hex strings with the time values. Midi has a very particular time to express time,\r\n * take a good look at the spec before ever touching this function.\r\n * Thanks to https://github.com/sergi/jsmidi\r\n *\r\n * @param {number} ticks - Number of ticks to be translated\r\n * @return {array} - Bytes that form the MIDI time value\r\n */\r\n\r\n }, {\r\n key: \"numberToVariableLength\",\r\n value: function numberToVariableLength(ticks) {\r\n ticks = Math.round(ticks);\r\n var buffer = ticks & 0x7F;\r\n\r\n while (ticks = ticks >> 7) {\r\n buffer <<= 8;\r\n buffer |= ticks & 0x7F | 0x80;\r\n }\r\n\r\n var bList = [];\r\n\r\n while (true) {\r\n bList.push(buffer & 0xff);\r\n if (buffer & 0x80) buffer >>= 8;else {\r\n break;\r\n }\r\n }\r\n\r\n return bList;\r\n }\r\n /**\r\n * Counts number of bytes in string\r\n * @param {string} s\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"stringByteCount\",\r\n value: function stringByteCount(s) {\r\n return encodeURI(s).split(/%..|./).length - 1;\r\n }\r\n /**\r\n * Get an int from an array of bytes.\r\n * @param {array} bytes\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"numberFromBytes\",\r\n value: function numberFromBytes(bytes) {\r\n var hex = '';\r\n var stringResult;\r\n bytes.forEach(function (_byte) {\r\n stringResult = _byte.toString(16); // ensure string is 2 chars\r\n\r\n if (stringResult.length == 1) stringResult = \"0\" + stringResult;\r\n hex += stringResult;\r\n });\r\n return parseInt(hex, 16);\r\n }\r\n /**\r\n * Takes a number and splits it up into an array of bytes. Can be padded by passing a number to bytesNeeded\r\n * @param {number} number\r\n * @param {number} bytesNeeded\r\n * @return {array} - Array of bytes\r\n */\r\n\r\n }, {\r\n key: \"numberToBytes\",\r\n value: function numberToBytes(number, bytesNeeded) {\r\n bytesNeeded = bytesNeeded || 1;\r\n var hexString = number.toString(16);\r\n\r\n if (hexString.length & 1) {\r\n // Make sure hex string is even number of chars\r\n hexString = '0' + hexString;\r\n } // Split hex string into an array of two char elements\r\n\r\n\r\n var hexArray = hexString.match(/.{2}/g); // Now parse them out as integers\r\n\r\n hexArray = hexArray.map(function (item) {\r\n return parseInt(item, 16);\r\n }); // Prepend empty bytes if we don't have enough\r\n\r\n if (hexArray.length < bytesNeeded) {\r\n while (bytesNeeded - hexArray.length > 0) {\r\n hexArray.unshift(0);\r\n }\r\n }\r\n\r\n return hexArray;\r\n }\r\n /**\r\n * Converts value to array if needed.\r\n * @param {string} value\r\n * @return {array}\r\n */\r\n\r\n }, {\r\n key: \"toArray\",\r\n value: function toArray(value) {\r\n if (Array.isArray(value)) return value;\r\n return [value];\r\n }\r\n /**\r\n * Converts velocity to value 0-127\r\n * @param {number} velocity - Velocity value 1-100\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"convertVelocity\",\r\n value: function convertVelocity(velocity) {\r\n // Max passed value limited to 100\r\n velocity = velocity > 100 ? 100 : velocity;\r\n return Math.round(velocity / 100 * 127);\r\n }\r\n /**\r\n * Gets the total number of ticks of a specified duration.\r\n * Note: type=='note' defaults to quarter note, type==='rest' defaults to 0\r\n * @param {(string|array)} duration\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getTickDuration\",\r\n value: function getTickDuration(duration) {\r\n if (Array.isArray(duration)) {\r\n // Recursively execute this method for each item in the array and return the sum of tick durations.\r\n return duration.map(function (value) {\r\n return Utils.getTickDuration(value);\r\n }).reduce(function (a, b) {\r\n return a + b;\r\n }, 0);\r\n }\r\n\r\n duration = duration.toString();\r\n\r\n if (duration.toLowerCase().charAt(0) === 't') {\r\n // If duration starts with 't' then the number that follows is an explicit tick count\r\n return parseInt(duration.substring(1));\r\n } // Need to apply duration here. Quarter note == Constants.HEADER_CHUNK_DIVISION\r\n\r\n\r\n var quarterTicks = Utils.numberFromBytes(Constants.HEADER_CHUNK_DIVISION);\r\n var tickDuration = quarterTicks * Utils.getDurationMultiplier(duration);\r\n return Utils.getRoundedIfClose(tickDuration);\r\n }\r\n /**\r\n * Due to rounding errors in JavaScript engines,\r\n * it's safe to round when we're very close to the actual tick number\r\n *\r\n * @static\r\n * @param {number} tick\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getRoundedIfClose\",\r\n value: function getRoundedIfClose(tick) {\r\n var roundedTick = Math.round(tick);\r\n return Math.abs(roundedTick - tick) < 0.000001 ? roundedTick : tick;\r\n }\r\n /**\r\n * Due to low precision of MIDI,\r\n * we need to keep track of rounding errors in deltas.\r\n * This function will calculate the rounding error for a given duration.\r\n *\r\n * @static\r\n * @param {number} tick\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getPrecisionLoss\",\r\n value: function getPrecisionLoss(tick) {\r\n var roundedTick = Math.round(tick);\r\n return roundedTick - tick;\r\n }\r\n /**\r\n * Gets what to multiple ticks/quarter note by to get the specified duration.\r\n * Note: type=='note' defaults to quarter note, type==='rest' defaults to 0\r\n * @param {string} duration\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getDurationMultiplier\",\r\n value: function getDurationMultiplier(duration) {\r\n // Need to apply duration here.\r\n // Quarter note == Constants.HEADER_CHUNK_DIVISION ticks.\r\n if (duration === '0') return 0;\r\n var match = duration.match( /*#__PURE__*/_wrapRegExp(/^(d+)?([0-9]+)(?:t([0-9]*))?/, {\r\n dotted: 1,\r\n base: 2,\r\n tuplet: 3\r\n }));\r\n\r\n if (match) {\r\n var base = Number(match.groups.base); // 1 or any power of two:\r\n\r\n var isValidBase = base === 1 || (base & base - 1) === 0;\r\n\r\n if (isValidBase) {\r\n // how much faster or slower is this note compared to a quarter?\r\n var ratio = base / 4;\r\n var durationInQuarters = 1 / ratio;\r\n var _match$groups = match.groups,\r\n dotted = _match$groups.dotted,\r\n tuplet = _match$groups.tuplet;\r\n\r\n if (dotted) {\r\n var thisManyDots = dotted.length;\r\n var divisor = Math.pow(2, thisManyDots);\r\n durationInQuarters = durationInQuarters + durationInQuarters * ((divisor - 1) / divisor);\r\n }\r\n\r\n if (typeof tuplet === 'string') {\r\n var fitInto = durationInQuarters * 2; // default to triplet:\r\n\r\n var thisManyNotes = Number(tuplet || '3');\r\n durationInQuarters = fitInto / thisManyNotes;\r\n }\r\n\r\n return durationInQuarters;\r\n }\r\n }\r\n\r\n throw new Error(duration + ' is not a valid duration.');\r\n }\r\n }]);\r\n\r\n return Utils;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"note on\" MIDI event\r\n * @param {object} fields {data: []}\r\n * @return {NoteOnEvent}\r\n */\r\n\r\nvar NoteOnEvent = /*#__PURE__*/function () {\r\n function NoteOnEvent(fields) {\r\n _classCallCheck(this, NoteOnEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n startTick: null,\r\n velocity: 50,\r\n wait: 0\r\n }, fields);\r\n this.type = 'note-on';\r\n this.channel = fields.channel;\r\n this.pitch = fields.pitch;\r\n this.wait = fields.wait;\r\n this.velocity = fields.velocity;\r\n this.startTick = fields.startTick;\r\n this.midiNumber = Utils.getPitch(this.pitch);\r\n this.tick = null;\r\n this.delta = null;\r\n this.data = fields.data;\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @param {Track} track - parent track\r\n * @return {NoteOnEvent}\r\n */\r\n\r\n\r\n _createClass(NoteOnEvent, [{\r\n key: \"buildData\",\r\n value: function buildData(track, precisionDelta) {\r\n this.data = []; // Explicitly defined startTick event\r\n\r\n if (this.startTick) {\r\n this.tick = Utils.getRoundedIfClose(this.startTick); // If this is the first event in the track then use event's starting tick as delta.\r\n\r\n if (track.tickPointer == 0) {\r\n this.delta = this.tick;\r\n }\r\n } else {\r\n this.delta = Utils.getTickDuration(this.wait);\r\n this.tick = Utils.getRoundedIfClose(track.tickPointer + this.delta);\r\n }\r\n\r\n this.deltaWithPrecisionCorrection = Utils.getRoundedIfClose(this.delta - precisionDelta);\r\n this.data = Utils.numberToVariableLength(this.deltaWithPrecisionCorrection).concat(this.getStatusByte(), this.midiNumber, Utils.convertVelocity(this.velocity));\r\n return this;\r\n }\r\n /**\r\n * Gets the note on status code based on the selected channel. 0x9{0-F}\r\n * Note on at channel 0 is 0x90 (144)\r\n * 0 = Ch 1\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getStatusByte\",\r\n value: function getStatusByte() {\r\n return 144 + this.channel - 1;\r\n }\r\n }]);\r\n\r\n return NoteOnEvent;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"note off\" MIDI event\r\n * @param {object} fields {data: []}\r\n * @return {NoteOffEvent}\r\n */\r\n\r\nvar NoteOffEvent = /*#__PURE__*/function () {\r\n function NoteOffEvent(fields) {\r\n _classCallCheck(this, NoteOffEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n velocity: 50,\r\n tick: null\r\n }, fields);\r\n this.type = 'note-off';\r\n this.channel = fields.channel;\r\n this.pitch = fields.pitch;\r\n this.duration = fields.duration;\r\n this.velocity = fields.velocity;\r\n this.midiNumber = Utils.getPitch(this.pitch);\r\n this.tick = fields.tick;\r\n this.delta = Utils.getTickDuration(this.duration);\r\n this.data = fields.data;\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @param {Track} track - parent track\r\n * @return {NoteOffEvent}\r\n */\r\n\r\n\r\n _createClass(NoteOffEvent, [{\r\n key: \"buildData\",\r\n value: function buildData(track, precisionDelta) {\r\n if (this.tick === null) {\r\n this.tick = Utils.getRoundedIfClose(this.delta + track.tickPointer);\r\n }\r\n\r\n this.deltaWithPrecisionCorrection = Utils.getRoundedIfClose(this.delta - precisionDelta);\r\n this.data = Utils.numberToVariableLength(this.deltaWithPrecisionCorrection).concat(this.getStatusByte(), this.midiNumber, Utils.convertVelocity(this.velocity));\r\n return this;\r\n }\r\n /**\r\n * Gets the note off status code based on the selected channel. 0x8{0-F}\r\n * Note off at channel 0 is 0x80 (128)\r\n * 0 = Ch 1\r\n * @return {number}\r\n */\r\n\r\n }, {\r\n key: \"getStatusByte\",\r\n value: function getStatusByte() {\r\n return 128 + this.channel - 1;\r\n }\r\n }]);\r\n\r\n return NoteOffEvent;\r\n}();\r\n\r\n/**\r\n * Wrapper for noteOnEvent/noteOffEvent objects that builds both events.\r\n * @param {object} fields - {pitch: '[C4]', duration: '4', wait: '4', velocity: 1-100}\r\n * @return {NoteEvent}\r\n */\r\n\r\nvar NoteEvent = /*#__PURE__*/function () {\r\n function NoteEvent(fields) {\r\n _classCallCheck(this, NoteEvent);\r\n\r\n // Set default fields\r\n fields = Object.assign({\r\n channel: 1,\r\n repeat: 1,\r\n sequential: false,\r\n startTick: null,\r\n velocity: 50,\r\n wait: 0\r\n }, fields);\r\n this.data = [];\r\n this.type = 'note';\r\n this.pitch = Utils.toArray(fields.pitch);\r\n this.channel = fields.channel;\r\n this.duration = fields.duration;\r\n this.grace = fields.grace;\r\n this.repeat = fields.repeat;\r\n this.sequential = fields.sequential;\r\n this.startTick = fields.startTick;\r\n this.velocity = fields.velocity;\r\n this.wait = fields.wait;\r\n this.tickDuration = Utils.getTickDuration(this.duration);\r\n this.restDuration = Utils.getTickDuration(this.wait);\r\n this.events = []; // Hold actual NoteOn/NoteOff events\r\n }\r\n /**\r\n * Builds int array for this event.\r\n * @return {NoteEvent}\r\n */\r\n\r\n\r\n _createClass(NoteEvent, [{\r\n key: \"buildData\",\r\n value: function buildData() {\r\n var _this = this;\r\n\r\n // Reset data array\r\n this.data = [];\r\n this.tickDuration;\r\n this.restDuration; // Apply grace note(s) and subtract ticks (currently 1 tick per grace note) from tickDuration so net value is the same\r\n\r\n if (this.grace) {\r\n var graceDuration = 1;\r\n this.grace = Utils.toArray(this.grace);\r\n this.grace.forEach(function (pitch) {\r\n var noteEvent = new NoteEvent({\r\n pitch: _this.grace,\r\n duration: 'T' + graceDuration\r\n });\r\n _this.data = _this.data.concat(noteEvent.data);\r\n });\r\n } // fields.pitch could be an array of pitches.\r\n // If this.sequential === true then it's a sequential string of notes that requires separate NoteOnEvents.\r\n\r\n if (!this.sequential) {\r\n // Handle repeat\r\n for (var j = 0; j < this.repeat; j++) {\r\n // Note on\r\n this.pitch.forEach(function (p, i) {\r\n if (i == 0) {\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: _this.wait,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n } else {\r\n // Running status (can ommit the note on status)\r\n //noteOn = new NoteOnEvent({data: [0, Utils.getPitch(p), Utils.convertVelocity(this.velocity)]});\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: 0,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n }\r\n\r\n _this.events.push(noteOnNew);\r\n }); // Note off\r\n\r\n this.pitch.forEach(function (p, i) {\r\n if (i == 0) {\r\n //noteOff = new NoteOffEvent({data: Utils.numberToVariableLength(tickDuration).concat(this.getNoteOffStatus(), Utils.getPitch(p), Utils.convertVelocity(this.velocity))});\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: _this.duration,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n tick: _this.startTick !== null ? Utils.getTickDuration(_this.duration) - _this.startTick : null\r\n });\r\n } else {\r\n // Running status (can ommit the note off status)\r\n //noteOff = new NoteOffEvent({data: [0, Utils.getPitch(p), Utils.convertVelocity(this.velocity)]});\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: 0,\r\n velocity: _this.velocity,\r\n pitch: p,\r\n tick: _this.startTick !== null ? Utils.getTickDuration(_this.duration) - _this.startTick : null\r\n });\r\n }\r\n\r\n _this.events.push(noteOffNew);\r\n });\r\n }\r\n } else {\r\n // Handle repeat\r\n for (var j = 0; j < this.repeat; j++) {\r\n this.pitch.forEach(function (p, i) {\r\n\r\n var noteOnNew = new NoteOnEvent({\r\n channel: _this.channel,\r\n wait: i > 0 ? 0 : _this.wait,\r\n // wait only applies to first note in repetition\r\n velocity: _this.velocity,\r\n pitch: p,\r\n startTick: _this.startTick\r\n });\r\n var noteOffNew = new NoteOffEvent({\r\n channel: _this.channel,\r\n duration: _this.duration,\r\n velocity: _this.velocity,\r\n pitch: p\r\n });\r\n\r\n _this.events.push(noteOnNew, noteOffNew);\r\n });\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n }]);\r\n\r\n return NoteEvent;\r\n}();\r\n\r\n/**\r\n * Holds all data for a \"Pitch Bend\" MIDI event\r\n * [ -1.0, 0, 1.0 ] -> [ 0, 8192, 16383]\r\n * @param {object} fields { bend : float, channel : int }\r\n * @return {PitchBendEvent}\r\n */\r\n\r\nvar scale14bits = function scale14bits(zeroOne) {\r\n if (zeroOne <= 0) {\r\n return Math.floor(16384 * (zeroOne + 1) / 2);\r\n }\r\n\r\n return Math.floor(16383 * (zeroOne + 1) / 2);\r\n};\r\n\r\nvar PitchBendEvent = function PitchBendEvent(fields) {\r\n _classCallCheck(this, PitchBendEvent);\r\n\r\n this.type = 'pitch-bend';\r\n var bend14 = scale14bits(fields.bend);\r\n var channel = fields.channel || 0;\r\n var lsbValue = bend14 & 0x7f;\r\n var msbValue = bend14 >> 7 & 0x7f;\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.PITCH_BEND_STATUS | channel, lsbValue, msbValue);\r\n};\r\n\r\n/**\r\n * Holds all data for a \"program change\" MIDI event\r\n * @param {object} fields {instrument: integer}\r\n * @return {ProgramChangeEvent}\r\n */\r\n\r\nvar ProgramChangeEvent = function ProgramChangeEvent(fields) {\r\n _classCallCheck(this, ProgramChangeEvent);\r\n\r\n this.type = 'program'; // delta time defaults to 0.\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.PROGRAM_CHANGE_STATUS, fields.instrument);\r\n};\r\n\r\n/**\r\n * Holds all data for a \"controller change\" MIDI event\r\n * @param {object} fields {controllerNumber: integer, controllerValue: integer}\r\n * @return {ControllerChangeEvent}\r\n */\r\n\r\nvar ControllerChangeEvent = function ControllerChangeEvent(fields) {\r\n _classCallCheck(this, ControllerChangeEvent);\r\n\r\n this.type = 'controller'; // delta time defaults to 0.\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.CONTROLLER_CHANGE_STATUS, fields.controllerNumber, fields.controllerValue);\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {string} text - Copyright text\r\n * @return {CopyrightEvent}\r\n */\r\n\r\nvar CopyrightEvent = function CopyrightEvent(text) {\r\n _classCallCheck(this, CopyrightEvent);\r\n\r\n this.type = 'copyright';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_COPYRIGHT_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a cue point meta event.\r\n * @param {string} text - Cue point text\r\n * @return {CuePointEvent}\r\n */\r\n\r\nvar CuePointEvent = function CuePointEvent(text) {\r\n _classCallCheck(this, CuePointEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_CUE_POINT, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a end track meta event.\r\n * @return {EndTrackEvent}\r\n */\r\n\r\nvar EndTrackEvent = function EndTrackEvent() {\r\n _classCallCheck(this, EndTrackEvent);\r\n\r\n this.type = 'end-track'; // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_END_OF_TRACK_ID);\r\n};\r\n\r\n/**\r\n * Object representation of an instrument name meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {InstrumentNameEvent}\r\n */\r\n\r\nvar InstrumentNameEvent = function InstrumentNameEvent(text) {\r\n _classCallCheck(this, InstrumentNameEvent);\r\n\r\n this.type = 'instrument-name';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_INSTRUMENT_NAME_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Instrument name\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a key signature meta event.\r\n * @return {KeySignatureEvent}\r\n */\r\n\r\nvar KeySignatureEvent = function KeySignatureEvent(sf, mi) {\r\n _classCallCheck(this, KeySignatureEvent);\r\n\r\n this.type = 'key-signature';\r\n var mode = mi || 0;\r\n sf = sf || 0; //\tFunction called with string notation\r\n\r\n if (typeof mi === 'undefined') {\r\n var fifths = [['Cb', 'Gb', 'Db', 'Ab', 'Eb', 'Bb', 'F', 'C', 'G', 'D', 'A', 'E', 'B', 'F#', 'C#'], ['ab', 'eb', 'bb', 'f', 'c', 'g', 'd', 'a', 'e', 'b', 'f#', 'c#', 'g#', 'd#', 'a#']];\r\n var _sflen = sf.length;\r\n var note = sf || 'C';\r\n if (sf[0] === sf[0].toLowerCase()) mode = 1;\r\n\r\n if (_sflen > 1) {\r\n switch (sf.charAt(_sflen - 1)) {\r\n case 'm':\r\n mode = 1;\r\n note = sf.charAt(0).toLowerCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case '-':\r\n mode = 1;\r\n note = sf.charAt(0).toLowerCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case 'M':\r\n mode = 0;\r\n note = sf.charAt(0).toUpperCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n\r\n case '+':\r\n mode = 0;\r\n note = sf.charAt(0).toUpperCase();\r\n note = note.concat(sf.substring(1, _sflen - 1));\r\n break;\r\n }\r\n }\r\n\r\n var fifthindex = fifths[mode].indexOf(note);\r\n sf = fifthindex === -1 ? 0 : fifthindex - 7;\r\n } // Start with zero time delta\r\n\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_KEY_SIGNATURE_ID, [0x02], // Size\r\n Utils.numberToBytes(sf, 1), // Number of sharp or flats ( < 0 flat; > 0 sharp)\r\n Utils.numberToBytes(mode, 1) // Mode: 0 major, 1 minor\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a lyric meta event.\r\n * @param {string} text - Lyric text\r\n * @return {LyricEvent}\r\n */\r\n\r\nvar LyricEvent = function LyricEvent(text) {\r\n _classCallCheck(this, LyricEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_LYRIC_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a marker meta event.\r\n * @param {string} text - Marker text\r\n * @return {MarkerEvent}\r\n */\r\n\r\nvar MarkerEvent = function MarkerEvent(text) {\r\n _classCallCheck(this, MarkerEvent);\r\n\r\n this.type = 'marker';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_MARKER_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TempoEvent}\r\n */\r\n\r\nvar TempoEvent = function TempoEvent(bpm) {\r\n _classCallCheck(this, TempoEvent);\r\n\r\n this.type = 'tempo';\r\n var tempo = Math.round(60000000 / bpm); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TEMPO_ID, [0x03], // Size\r\n Utils.numberToBytes(tempo, 3) // Tempo, 3 bytes\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TextEvent}\r\n */\r\n\r\nvar TextEvent = function TextEvent(text) {\r\n _classCallCheck(this, TextEvent);\r\n\r\n this.type = 'text';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TEXT_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a time signature meta event.\r\n * @return {TimeSignatureEvent}\r\n */\r\n\r\nvar TimeSignatureEvent = function TimeSignatureEvent(numerator, denominator, midiclockspertick, notespermidiclock) {\r\n _classCallCheck(this, TimeSignatureEvent);\r\n\r\n this.type = 'time-signature'; // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TIME_SIGNATURE_ID, [0x04], // Size\r\n Utils.numberToBytes(numerator, 1), // Numerator, 1 bytes\r\n Utils.numberToBytes(Math.log2(denominator), 1), // Denominator is expressed as pow of 2, 1 bytes\r\n Utils.numberToBytes(midiclockspertick || 24, 1), // MIDI Clocks per tick, 1 bytes\r\n Utils.numberToBytes(notespermidiclock || 8, 1) // Number of 1/32 notes per MIDI clocks, 1 bytes\r\n );\r\n};\r\n\r\n/**\r\n * Object representation of a tempo meta event.\r\n * @param {number} bpm - Beats per minute\r\n * @return {TrackNameEvent}\r\n */\r\n\r\nvar TrackNameEvent = function TrackNameEvent(text) {\r\n _classCallCheck(this, TrackNameEvent);\r\n\r\n this.type = 'track-name';\r\n var textBytes = Utils.stringToBytes(text); // Start with zero time delta\r\n\r\n this.data = Utils.numberToVariableLength(0x00).concat(Constants.META_EVENT_ID, Constants.META_TRACK_NAME_ID, Utils.numberToVariableLength(textBytes.length), // Size\r\n textBytes // Text\r\n );\r\n};\r\n\r\n/**\r\n * Holds all data for a track.\r\n * @param {object} fields {type: number, data: array, size: array, events: array}\r\n * @return {Track}\r\n */\r\n\r\nvar Track = /*#__PURE__*/function () {\r\n function Track() {\r\n _classCallCheck(this, Track);\r\n\r\n this.type = Constants.TRACK_CHUNK_TYPE;\r\n this.data = [];\r\n this.size = [];\r\n this.events = [];\r\n this.explicitTickEvents = []; // If there are any events with an explicit tick defined then we will create a \"sub\" track for those\r\n // and merge them in and the end.\r\n\r\n this.tickPointer = 0; // Each time an event is added this will increase\r\n }\r\n /**\r\n * Adds any event type to the track.\r\n * Events without a specific startTick property are assumed to be added in order of how they should output.\r\n * Events with a specific startTick property are set aside for now will be merged in during build process.\r\n * @param {(NoteEvent|ProgramChangeEvent)} events - Event object or array of Event objects.\r\n * @param {function} mapFunction - Callback which can be used to apply specific properties to all events.\r\n * @return {Track}\r\n */\r\n\r\n\r\n _createClass(Track, [{\r\n key: \"addEvent\",\r\n value: function addEvent(events, mapFunction) {\r\n var _this = this;\r\n\r\n Utils.toArray(events).forEach(function (event, i) {\r\n if (event instanceof NoteEvent) {\r\n // Handle map function if provided\r\n if (typeof mapFunction === 'function') {\r\n var properties = mapFunction(i, event);\r\n\r\n if (_typeof(properties) === 'object') {\r\n for (var j in properties) {\r\n switch (j) {\r\n case 'channel':\r\n event.channel = properties[j];\r\n break;\r\n\r\n case 'duration':\r\n event.duration = properties[j];\r\n break;\r\n\r\n case 'sequential':\r\n event.sequential = properties[j];\r\n break;\r\n\r\n case 'velocity':\r\n event.velocity = Utils.convertVelocity(properties[j]);\r\n break;\r\n }\r\n }\r\n }\r\n } // If this note event has an explicit startTick then we need to set aside for now\r\n\r\n\r\n if (event.startTick !== null) {\r\n _this.explicitTickEvents.push(event);\r\n } else {\r\n // Push each on/off event to track's event stack\r\n event.buildData().events.forEach(function (e) {\r\n return _this.events.push(e);\r\n });\r\n }\r\n } else {\r\n _this.events.push(event);\r\n }\r\n });\r\n return this;\r\n }\r\n /**\r\n * Builds int array of all events.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"buildData\",\r\n value: function buildData() {\r\n var _this2 = this;\r\n\r\n // Remove existing end track event and add one.\r\n // This makes sure it's at the very end of the event list.\r\n this.removeEventsByType('end-track').addEvent(new EndTrackEvent()); // Reset\r\n\r\n this.data = [];\r\n this.size = [];\r\n this.tickPointer = 0;\r\n var precisionLoss = 0;\r\n this.events.forEach(function (event, eventIndex) {\r\n // Build event & add to total tick duration\r\n if (event instanceof NoteOnEvent || event instanceof NoteOffEvent) {\r\n var built = event.buildData(_this2, precisionLoss);\r\n precisionLoss = Utils.getPrecisionLoss(event.deltaWithPrecisionCorrection || 0);\r\n _this2.data = _this2.data.concat(built.data);\r\n _this2.tickPointer = Utils.getRoundedIfClose(event.tick);\r\n } else {\r\n _this2.data = _this2.data.concat(event.data);\r\n }\r\n });\r\n this.mergeExplicitTickEvents();\r\n this.size = Utils.numberToBytes(this.data.length, 4); // 4 bytes long\r\n\r\n return this;\r\n }\r\n }, {\r\n key: \"mergeExplicitTickEvents\",\r\n value: function mergeExplicitTickEvents() {\r\n var _this3 = this;\r\n\r\n if (!this.explicitTickEvents.length) return; // First sort asc list of events by startTick\r\n\r\n this.explicitTickEvents.sort(function (a, b) {\r\n return a.startTick - b.startTick;\r\n }); // Now this.explicitTickEvents is in correct order, and so is this.events naturally.\r\n // For each explicit tick event, splice it into the main list of events and\r\n // adjust the delta on the following events so they still play normally.\r\n\r\n this.explicitTickEvents.forEach(function (noteEvent) {\r\n // Convert NoteEvent to it's respective NoteOn/NoteOff events\r\n // Note that as we splice in events the delta for the NoteOff ones will\r\n // Need to change based on what comes before them after the splice.\r\n noteEvent.buildData().events.forEach(function (e) {\r\n return e.buildData(_this3);\r\n }); // Merge each event indivually into this track's event list.\r\n\r\n noteEvent.events.forEach(function (event) {\r\n return _this3.mergeSingleEvent(event);\r\n });\r\n }); // Hacky way to rebuild track with newly spliced events. Need better solution.\r\n\r\n this.explicitTickEvents = [];\r\n this.buildData();\r\n }\r\n /**\r\n * Merges another track's events with this track.\r\n * @param {Track} track\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"mergeTrack\",\r\n value: function mergeTrack(track) {\r\n var _this4 = this;\r\n\r\n // First build this track to populate each event's tick property\r\n this.buildData(); // Then build track to be merged so that tick property is populated on all events & merge each event.\r\n\r\n track.buildData().events.forEach(function (event) {\r\n return _this4.mergeSingleEvent(event);\r\n });\r\n }\r\n /**\r\n * Merges a single event into this track's list of events based on event.tick property.\r\n * @param {NoteOnEvent|NoteOffEvent} - event\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"mergeSingleEvent\",\r\n value: function mergeSingleEvent(event) {\r\n // Find index of existing event we need to follow with\r\n var lastEventIndex = 0;\r\n\r\n for (var i = 0; i < this.events.length; i++) {\r\n if (this.events[i].tick > event.tick) break;\r\n lastEventIndex = i;\r\n }\r\n\r\n var splicedEventIndex = lastEventIndex + 1; // Need to adjust the delta of this event to ensure it falls on the correct tick.\r\n\r\n event.delta = event.tick - this.events[lastEventIndex].tick; // Splice this event at lastEventIndex + 1\r\n\r\n this.events.splice(splicedEventIndex, 0, event); // Now adjust delta of all following events\r\n\r\n for (var i = splicedEventIndex + 1; i < this.events.length; i++) {\r\n // Since each existing event should have a tick value at this point we just need to\r\n // adjust delta to that the event still falls on the correct tick.\r\n this.events[i].delta = this.events[i].tick - this.events[i - 1].tick;\r\n }\r\n }\r\n /**\r\n * Removes all events matching specified type.\r\n * @param {string} eventType - Event type\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"removeEventsByType\",\r\n value: function removeEventsByType(eventType) {\r\n var _this5 = this;\r\n\r\n this.events.forEach(function (event, index) {\r\n if (event.type === eventType) {\r\n _this5.events.splice(index, 1);\r\n }\r\n });\r\n return this;\r\n }\r\n /**\r\n * Sets tempo of the MIDI file.\r\n * @param {number} bpm - Tempo in beats per minute.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setTempo\",\r\n value: function setTempo(bpm) {\r\n return this.addEvent(new TempoEvent(bpm));\r\n }\r\n /**\r\n * Sets time signature.\r\n * @param {number} numerator - Top number of the time signature.\r\n * @param {number} denominator - Bottom number of the time signature.\r\n * @param {number} midiclockspertick - Defaults to 24.\r\n * @param {number} notespermidiclock - Defaults to 8.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setTimeSignature\",\r\n value: function setTimeSignature(numerator, denominator, midiclockspertick, notespermidiclock) {\r\n return this.addEvent(new TimeSignatureEvent(numerator, denominator, midiclockspertick, notespermidiclock));\r\n }\r\n /**\r\n * Sets key signature.\r\n * @param {*} sf -\r\n * @param {*} mi -\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setKeySignature\",\r\n value: function setKeySignature(sf, mi) {\r\n return this.addEvent(new KeySignatureEvent(sf, mi));\r\n }\r\n /**\r\n * Adds text to MIDI file.\r\n * @param {string} text - Text to add.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addText\",\r\n value: function addText(text) {\r\n return this.addEvent(new TextEvent(text));\r\n }\r\n /**\r\n * Adds copyright to MIDI file.\r\n * @param {string} text - Text of copyright line.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addCopyright\",\r\n value: function addCopyright(text) {\r\n return this.addEvent(new CopyrightEvent(text));\r\n }\r\n /**\r\n * Adds Sequence/Track Name.\r\n * @param {string} text - Text of track name.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addTrackName\",\r\n value: function addTrackName(text) {\r\n return this.addEvent(new TrackNameEvent(text));\r\n }\r\n /**\r\n * Sets instrument name of track.\r\n * @param {string} text - Name of instrument.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addInstrumentName\",\r\n value: function addInstrumentName(text) {\r\n return this.addEvent(new InstrumentNameEvent(text));\r\n }\r\n /**\r\n * Adds marker to MIDI file.\r\n * @param {string} text - Marker text.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addMarker\",\r\n value: function addMarker(text) {\r\n return this.addEvent(new MarkerEvent(text));\r\n }\r\n /**\r\n * Adds cue point to MIDI file.\r\n * @param {string} text - Text of cue point.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addCuePoint\",\r\n value: function addCuePoint(text) {\r\n return this.addEvent(new CuePointEvent(text));\r\n }\r\n /**\r\n * Adds lyric to MIDI file.\r\n * @param {string} text - Lyric text to add.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"addLyric\",\r\n value: function addLyric(text) {\r\n return this.addEvent(new LyricEvent(text));\r\n }\r\n /**\r\n * Channel mode messages\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"polyModeOn\",\r\n value: function polyModeOn() {\r\n var event = new NoteOnEvent({\r\n data: [0x00, 0xB0, 0x7E, 0x00]\r\n });\r\n return this.addEvent(event);\r\n }\r\n /**\r\n * Sets a pitch bend.\r\n * @param {float} bend - Bend value ranging [-1,1], zero meaning no bend.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"setPitchBend\",\r\n value: function setPitchBend(bend) {\r\n return this.addEvent(new PitchBendEvent({\r\n bend: bend\r\n }));\r\n }\r\n /**\r\n * Adds a controller change event\r\n * @param {number} number - Control number.\r\n * @param {number} value - Control value.\r\n * @return {Track}\r\n */\r\n\r\n }, {\r\n key: \"controllerChange\",\r\n value: function controllerChange(number, value) {\r\n return this.addEvent(new ControllerChangeEvent({\r\n controllerNumber: number,\r\n controllerValue: value\r\n }));\r\n }\r\n }]);\r\n\r\n return Track;\r\n}();\r\n\r\nvar VexFlow = /*#__PURE__*/function () {\r\n function VexFlow() {\r\n _classCallCheck(this, VexFlow);\r\n }\r\n\r\n _createClass(VexFlow, [{\r\n key: \"trackFromVoice\",\r\n value:\r\n /**\r\n * Support for converting VexFlow voice into MidiWriterJS track\r\n * @return MidiWriter.Track object\r\n */\r\n function trackFromVoice(voice) {\r\n var _this = this;\r\n\r\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\r\n addRenderedAccidentals: false\r\n };\r\n var track = new Track();\r\n var wait = [];\r\n voice.tickables.forEach(function (tickable) {\r\n if (tickable.noteType === 'n') {\r\n track.addEvent(new NoteEvent({\r\n pitch: tickable.keys.map(function (pitch, index) {\r\n return _this.convertPitch(pitch, index, tickable, options.addRenderedAccidentals);\r\n }),\r\n duration: _this.convertDuration(tickable),\r\n wait: wait\r\n })); // reset wait\r\n\r\n wait = [];\r\n } else if (tickable.noteType === 'r') {\r\n // move on to the next tickable and add this to the stack\r\n // of the `wait` property for the next note event\r\n wait.push(_this.convertDuration(tickable));\r\n return;\r\n }\r\n }); // There may be outstanding rests at the end of the track,\r\n // pad with a ghost note (zero duration and velocity), just to capture the wait.\r\n\r\n if (wait.length > 0) {\r\n track.addEvent(new NoteEvent({\r\n pitch: '[c4]',\r\n duration: '0',\r\n wait: wait,\r\n velocity: '0'\r\n }));\r\n }\r\n\r\n return track;\r\n }\r\n /**\r\n * Converts VexFlow pitch syntax to MidiWriterJS syntax\r\n * @param pitch string\r\n * @param index pitch index\r\n * @param note struct from Vexflow\r\n * @param addRenderedAccidentals adds Vexflow rendered accidentals\r\n */\r\n\r\n }, {\r\n key: \"convertPitch\",\r\n value: function convertPitch(pitch, index, note) {\r\n var addRenderedAccidentals = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n // Splits note name from octave\r\n var pitchParts = pitch.split('/'); // Retrieves accidentals from pitch\r\n // Removes natural accidentals since they are not accepted in Tonal Midi\r\n\r\n var accidentals = pitchParts[0].substring(1).replace('n', '');\r\n\r\n if (addRenderedAccidentals) {\r\n var _note$getAccidentals;\r\n\r\n (_note$getAccidentals = note.getAccidentals()) === null || _note$getAccidentals === void 0 ? void 0 : _note$getAccidentals.forEach(function (accidental) {\r\n if (accidental.index === index) {\r\n if (accidental.type === 'n') {\r\n accidentals = '';\r\n } else {\r\n accidentals += accidental.type;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return pitchParts[0][0] + accidentals + pitchParts[1];\r\n }\r\n /**\r\n * Converts VexFlow duration syntax to MidiWriterJS syntax\r\n * @param note struct from VexFlow\r\n */\r\n\r\n }, {\r\n key: \"convertDuration\",\r\n value: function convertDuration(note) {\r\n return 'd'.repeat(note.dots) + this.convertBaseDuration(note.duration) + (note.tuplet ? 't' + note.tuplet.num_notes : '');\r\n }\r\n /**\r\n * Converts VexFlow base duration syntax to MidiWriterJS syntax\r\n * @param duration Vexflow duration\r\n * @returns MidiWriterJS duration\r\n */\r\n\r\n }, {\r\n key: \"convertBaseDuration\",\r\n value: function convertBaseDuration(duration) {\r\n switch (duration) {\r\n case 'w':\r\n return '1';\r\n\r\n case 'h':\r\n return '2';\r\n\r\n case 'q':\r\n return '4';\r\n\r\n default:\r\n return duration;\r\n }\r\n }\r\n }]);\r\n\r\n return VexFlow;\r\n}();\r\n\r\n/**\r\n * Object representation of a header chunk section of a MIDI file.\r\n * @param {number} numberOfTracks - Number of tracks\r\n * @return {HeaderChunk}\r\n */\r\n\r\nvar HeaderChunk = function HeaderChunk(numberOfTracks) {\r\n _classCallCheck(this, HeaderChunk);\r\n\r\n this.type = Constants.HEADER_CHUNK_TYPE;\r\n var trackType = numberOfTracks > 1 ? Constants.HEADER_CHUNK_FORMAT1 : Constants.HEADER_CHUNK_FORMAT0;\r\n this.data = trackType.concat(Utils.numberToBytes(numberOfTracks, 2), // two bytes long,\r\n Constants.HEADER_CHUNK_DIVISION);\r\n this.size = [0, 0, 0, this.data.length];\r\n};\r\n\r\n/**\r\n * Object that puts together tracks and provides methods for file output.\r\n * @param {array|Track} tracks - A single {Track} object or an array of {Track} objects.\r\n * @return {Writer}\r\n */\r\n\r\nvar Writer = /*#__PURE__*/function () {\r\n function Writer(tracks) {\r\n var _this = this;\r\n\r\n _classCallCheck(this, Writer);\r\n\r\n // Ensure track is an array\r\n tracks = Utils.toArray(tracks);\r\n this.data = [];\r\n this.data.push(new HeaderChunk(tracks.length)); // For each track add final end of track event and build data\r\n\r\n tracks.forEach(function (track, i) {\r\n _this.data.push(track.buildData());\r\n });\r\n }\r\n /**\r\n * Builds the file into a Uint8Array\r\n * @return {Uint8Array}\r\n */\r\n\r\n\r\n _createClass(Writer, [{\r\n key: \"buildFile\",\r\n value: function buildFile() {\r\n var build = []; // Data consists of chunks which consists of data\r\n\r\n this.data.forEach(function (d) {\r\n return build = build.concat(d.type, d.size, d.data);\r\n });\r\n return new Uint8Array(build);\r\n }\r\n /**\r\n * Convert file buffer to a base64 string. Different methods depending on if browser or node.\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"base64\",\r\n value: function base64() {\r\n if (typeof btoa === 'function') return btoa(String.fromCharCode.apply(null, this.buildFile()));\r\n return Buffer.from(this.buildFile()).toString('base64');\r\n }\r\n /**\r\n * Get the data URI.\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"dataUri\",\r\n value: function dataUri() {\r\n return 'data:audio/midi;base64,' + this.base64();\r\n }\r\n /**\r\n * Output to stdout\r\n * @return {string}\r\n */\r\n\r\n }, {\r\n key: \"stdout\",\r\n value: function stdout() {\r\n return process.stdout.write(new Buffer(this.buildFile()));\r\n }\r\n /**\r\n * Save to MIDI file\r\n * @param {string} filename\r\n */\r\n\r\n }, /* {\r\n key: \"saveMIDI\",\r\n value: function saveMIDI(filename) {\r\n var fs = require('fs');\r\n\r\n var buffer = new Buffer.from(this.buildFile());\r\n fs.writeFile(filename + '.mid', buffer, function (err) {\r\n if (err) throw err;\r\n });\r\n } \r\n } */ \r\n]); \r\n\r\n return Writer;\r\n}();\r\n\r\nvar main = {\r\n Constants: Constants,\r\n NoteOnEvent: NoteOnEvent,\r\n NoteOffEvent: NoteOffEvent,\r\n NoteEvent: NoteEvent,\r\n PitchBendEvent: PitchBendEvent,\r\n ProgramChangeEvent: ProgramChangeEvent,\r\n Track: Track,\r\n Utils: Utils,\r\n VexFlow: VexFlow,\r\n Writer: Writer\r\n};\r\nwindow.MidiWriter = main;\r\n};\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiRenderState } from \"../render/sui/renderState\";\r\n\r\nexport type promiseFunction = () => void;\r\nexport type promiseCondition = () => boolean;\r\nexport type promiseInstance = () => Promise;\r\nexport interface PromiseParameters {\r\n endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number\r\n}\r\n\r\nexport function TEmptyPromise(obj: T): Promise {\r\n return new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve(obj);\r\n }, 1);\r\n });\r\n}\r\nexport class PromiseHelpers {\r\n // ### makePromise\r\n // poll on endCondition at a rate of pollTime. Resolve the promise\r\n // when endCondition is met, calling preResolveMethod first. On\r\n // polls where the end condition is not met, call pollMethod\r\n // Resolve method and pollMethod are optional\r\n static makePromise(endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number): Promise {\r\n return new Promise((resolve: any) => {\r\n const checkit = () => {\r\n setTimeout(() => {\r\n if (endCondition()) {\r\n if (preResolveMethod) {\r\n preResolveMethod();\r\n }\r\n resolve();\r\n }\r\n else {\r\n if (pollMethod) {\r\n pollMethod();\r\n }\r\n checkit();\r\n }\r\n }, pollTime);\r\n }\r\n checkit();\r\n });\r\n }\r\n\r\n static makePromiseObj(endCondition: promiseCondition, preResolveMethod: promiseFunction | null, pollMethod: promiseFunction | null, pollTime: number) {\r\n return {\r\n endCondition,\r\n preResolveMethod,\r\n pollMethod,\r\n pollTime\r\n };\r\n }\r\n // ### promiseChainThen\r\n // Call a chain of promises in array order, with parameters of makePromise\r\n static async promiseChainThen(params: PromiseParameters[]) {\r\n const promiseArray: promiseInstance[] = [];\r\n params.forEach((param) => {\r\n promiseArray.push(\r\n async () => {\r\n return PromiseHelpers.makePromise(\r\n param.endCondition,\r\n param.preResolveMethod,\r\n param.pollMethod,\r\n param.pollTime\r\n );\r\n });\r\n });\r\n let result: Promise;\r\n for (const f of promiseArray) {\r\n result = await f();\r\n }\r\n\r\n\t\treturn result!;\r\n }\r\n static emptyPromise(): Promise {\r\n return new Promise((resolve: any) => {\r\n setTimeout(() => {\r\n resolve();\r\n }, 1);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n// ## smoSerialize\r\n// Helper functions that perform serialized merges, general JSON\r\n// types of routines.\r\n// ---\r\nexport class smoSerialize {\r\n static vexMerge(dest, src) {\r\n if (typeof (src) === 'undefined') {\r\n return;\r\n }\r\n const keys = Object.keys(src);\r\n keys.forEach((key) => {\r\n dest[key] = src[key];\r\n }); \r\n }\r\n static tryParseUnicode(text) {\r\n let rv = text;\r\n try {\r\n eval('rv=\"' + text + '\"');\r\n } catch (ex) {\r\n console.log('bad unicode');\r\n }\r\n return rv;\r\n }\r\n\r\n // ### filteredMerge\r\n // Like vexMerge, but only for specific attributes.\r\n static filteredMerge(attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) != 'undefined') {\r\n dest[attr] = src[attr];\r\n }\r\n });\r\n }\r\n\r\n static get localScore() {\r\n return '_smoosicScore';\r\n }\r\n\r\n static loadRemoteFile(path) {\r\n const req = new XMLHttpRequest();\r\n req.addEventListener('load', () => {\r\n callback(req.responseText);\r\n });\r\n req.open('GET', path);\r\n req.send();\r\n }\r\n\r\n // This is the token map we use to reduce the size of\r\n // serialized data.\r\n static get tokenMap() {\r\n var _tm = `{\r\n \"a\": \"score\",\r\n \"b\": \"layout\",\r\n \"c\": \"leftMargin\",\r\n \"d\": \"rightMargin\",\r\n \"e\": \"topMargin\",\r\n \"f\": \"bottomMargin\",\r\n \"g\": \"pageWidth\",\r\n \"h\": \"pageHeight\",\r\n \"i\": \"orientation\",\r\n \"j\": \"interGap\",\r\n \"k\": \"intraGap\",\r\n \"l\": \"svgScale\",\r\n \"m\": \"zoomScale\",\r\n \"n\": \"zoomMode\",\r\n \"o\": \"pages\",\r\n \"p\": \"pageSize\",\r\n \"q\": \"startIndex\",\r\n \"r\": \"renumberingMap\",\r\n \"s\": \"staves\",\r\n \"t\": \"staffId\",\r\n \"u\": \"staffX\",\r\n \"v\": \"staffY\",\r\n \"w\": \"adjY\",\r\n \"x\": \"staffWidth\",\r\n \"y\": \"staffHeight\",\r\n \"z\": \"keySignatureMap\",\r\n \"aa\": \"instrumentInfo\",\r\n \"ba\": \"instrumentName\",\r\n \"ca\": \"keyOffset\",\r\n \"da\": \"clef\",\r\n \"ea\": \"modifiers\",\r\n \"fa\": \"startSelector\",\r\n \"ga\": \"staff\",\r\n \"ha\": \"measure\",\r\n \"ia\": \"voice\",\r\n \"ja\": \"tick\",\r\n \"ka\": \"pitches\",\r\n \"la\": \"endSelector\",\r\n \"ma\": \"xOffset\",\r\n \"na\": \"cp1y\",\r\n \"oa\": \"cp2y\",\r\n \"pa\": \"attrs\",\r\n \"qa\": \"id\",\r\n \"ra\": \"type\",\r\n \"sa\": \"ctor\",\r\n \"ta\": \"yOffset\",\r\n \"ua\": \"position\",\r\n \"va\": \"measures\",\r\n \"wa\": \"timeSignature\",\r\n \"xa\": \"keySignature\",\r\n \"ya\": \"measureNumber\",\r\n \"za\": \"measureIndex\",\r\n \"ab\": \"systemIndex\",\r\n \"bb\": \"adjX\",\r\n \"cb\": \"tuplets\",\r\n \"db\": \"voices\",\r\n \"eb\": \"notes\",\r\n \"fb\": \"ticks\",\r\n \"gb\": \"numerator\",\r\n \"hb\": \"denominator\",\r\n \"ib\": \"remainder\",\r\n \"jb\": \"letter\",\r\n \"kb\": \"octave\",\r\n \"lb\": \"accidental\",\r\n \"mb\": \"symbol\",\r\n \"nb\": \"bpm\",\r\n \"ob\": \"display\",\r\n \"pb\": \"beatDuration\",\r\n \"qb\": \"beamBeats\",\r\n \"rb\": \"endBeam\",\r\n \"sb\": \"textModifiers\",\r\n \"tb\": \"text\",\r\n \"ub\": \"endChar\",\r\n \"vb\": \"fontInfo\",\r\n \"wb\": \"size\",\r\n \"xb\": \"family\",\r\n \"yb\": \"style\",\r\n \"zb\": \"weight\",\r\n \"ac\": \"classes\",\r\n \"bc\": \"verse\",\r\n \"cc\": \"fill\",\r\n \"dc\": \"scaleX\",\r\n \"ec\": \"scaleY\",\r\n \"fc\": \"translateX\",\r\n \"gc\": \"translateY\",\r\n \"hc\": \"selector\",\r\n \"ic\": \"renderedBox\",\r\n \"jc\": \"x\",\r\n \"kc\": \"y\",\r\n \"lc\": \"width\",\r\n \"mc\": \"height\",\r\n \"nc\": \"logicalBox\",\r\n \"oc\": \"noteType\",\r\n \"pc\": \"cautionary\",\r\n \"qc\": \"articulations\",\r\n \"rc\": \"articulation\",\r\n \"sc\": \"activeVoice\",\r\n \"tc\": \"flagState\",\r\n \"uc\": \"invert\",\r\n \"vc\": \"fontSize\",\r\n \"wc\": \"yOffsetLine\",\r\n \"xc\": \"yOffsetPixels\",\r\n \"yc\": \"scoreText\",\r\n \"zc\": \"backup\",\r\n \"ad\": \"edited\",\r\n \"bd\": \"pagination\",\r\n \"cd\": \"boxModel\",\r\n \"dd\": \"justification\",\r\n \"ed\": \"autoLayout\",\r\n \"fd\": \"ornaments\",\r\n \"gd\": \"offset\",\r\n \"hd\": \"ornament\",\r\n \"id\": \"tempoMode\",\r\n \"jd\": \"tempoText\",\r\n \"kd\": \"barline\",\r\n \"ld\": \"systemBreak\",\r\n \"md\": \"graceNotes\",\r\n \"nd\": \"tones\",\r\n \"od\": \"tuplet\",\r\n \"pd\": \"beam_group\",\r\n \"qd\": \"renderId\",\r\n \"rd\": \"numNotes\",\r\n \"sd\": \"totalTicks\",\r\n \"td\": \"stemTicks\",\r\n \"ud\": \"durationMap\",\r\n \"vd\": \"bracketed\",\r\n \"wd\": \"ratioed\",\r\n \"xd\": \"location\",\r\n \"yd\": \"systemGroups\",\r\n \"zd\": \"leftConnector\",\r\n \"ae\": \"padLeft\",\r\n \"be\": \"customStretch\",\r\n \"ce\": \"engravingFont\",\r\n \"de\": \"customProportion\",\r\n \"ee\": \"columnAttributeMap\",\r\n \"fe\": \"tempo\",\r\n \"ge\": \"textGroups\",\r\n \"he\": \"textBlocks\",\r\n \"ie\": \"backupBlocks\",\r\n \"je\": \"blocks\",\r\n \"ke\": \"_text\",\r\n \"le\": \"parser\",\r\n \"me\": \"fonts\",\r\n \"ne\": \"name\",\r\n \"oe\": \"purpose\",\r\n \"pe\": \"custom\",\r\n \"qe\": \"transposeIndex\",\r\n \"re\": \"noteHead\",\r\n \"se\": \"slash\",\r\n \"te\": \"pointSize\",\r\n \"ue\": \"spacing\",\r\n \"ve\": \"relativePosition\",\r\n \"we\": \"activeText\",\r\n \"xe\": \"attachToSelector\",\r\n \"ye\": \"musicXOffset\",\r\n \"ze\": \"musicYOffset\",\r\n \"af\": \"formattingIterations\",\r\n \"bf\": \"startBar\",\r\n \"cf\": \"endBar\",\r\n \"df\": \"endingId\",\r\n \"ef\": \"autoJustify\",\r\n \"ff\": \"thickness\",\r\n \"gf\": \"number\",\r\n \"hf\": \"preferences\",\r\n \"if\": \"autoPlay\",\r\n \"jf\": \"autoAdvance\",\r\n \"kf\": \"defaultDupleDuration\",\r\n \"lf\": \"defaultTripleDuration\",\r\n \"mf\": \"scoreInfo\",\r\n \"nf\": \"version\",\r\n \"of\": \"title\",\r\n \"pf\": \"subTitle\",\r\n \"qf\": \"composer\",\r\n \"rf\": \"copyright\",\r\n \"sf\": \"localIndex\",\r\n \"tf\": \"hairpinType\",\r\n \"uf\": \"customText\",\r\n \"vf\": \"noteSpacing\",\r\n \"wf\": \"lines\",\r\n \"xf\": \"from\",\r\n \"yf\": \"layoutManager\",\r\n \"zf\": \"pageLayouts\",\r\n \"ag\": \"fillStyle\",\r\n \"bg\": \"hidden\",\r\n \"cg\": \"adjustNoteWidthLyric\",\r\n \"dg\": \"xOffsetStart\",\r\n \"eg\": \"xOffsetEnd\",\r\n \"fg\": \"measureFormats\",\r\n \"gg\": \"format\",\r\n \"hg\": \"pageBreak\",\r\n \"ig\": \"xOffsetLeft\",\r\n \"jg\": \"xOffsetRight\",\r\n \"kg\": \"padAllInSystem\",\r\n \"lg\": \"rotate\",\r\n \"mg\": \"actualBeats\",\r\n \"ng\": \"useSymbol\",\r\n \"og\": \"showPiano\",\r\n \"pg\": \"globalLayout\",\r\n \"qg\": \"measureInstrumentMap\",\r\n \"rg\": \"partInfo\",\r\n \"sg\": \"partName\",\r\n \"tg\": \"partAbbreviation\",\r\n \"ug\": \"stavesAfter\",\r\n \"vg\": \"stavesBefore\",\r\n \"wg\": \"measureFormatting\",\r\n \"xg\": \"preserveTextGroups\",\r\n \"yg\": \"cueInScore\",\r\n \"zg\": \"tie_spacing\",\r\n \"ah\": \"position_end\",\r\n \"bh\": \"transposingScore\",\r\n \"ch\": \"proportionality\",\r\n \"dh\": \"maxMeasureSystem\",\r\n \"eh\": \"cp2x\",\r\n \"fh\": \"restBreak\",\r\n \"gh\": \"expandMultimeasureRests\",\r\n \"hh\": \"midiInstrument\",\r\n \"ih\": \"channel\",\r\n \"jh\": \"program\",\r\n \"kh\": \"volume\",\r\n \"lh\": \"pan\",\r\n \"mh\": \"midiDevice\",\r\n \"nh\": \"audioSettings\",\r\n \"oh\": \"skipMeasureCount\",\r\n \"ph\": \"forceRest\",\r\n \"qh\": \"instrument\",\r\n \"rh\": \"shortText\",\r\n \"sh\": \"hideEmptyLines\",\r\n \"th\": \"tabStaves\",\r\n \"uh\": \"noteId\",\r\n \"vh\": \"tupletId\",\r\n \"wh\": \"metadata\",\r\n \"xh\": \"tupletTrees\",\r\n \"yh\": \"displayString\" }`;\r\n return JSON.parse(_tm);\r\n }\r\n\r\n static get valueTokens() {\r\n var vm = `{\"@sn\",\"SmoNote\"}`;\r\n return JSON.parse(vm);\r\n }\r\n\r\n static reverseMap(map) {\r\n const rv = {};\r\n const keys = Object.keys(map);\r\n keys.forEach((key) => {\r\n rv[map[key]] = key;\r\n });\r\n return rv;\r\n }\r\n\r\n static get tokenValues() {\r\n return smoSerialize.reverseMap(smoSerialize.tokenMap);\r\n }\r\n static prettifyXml(xmlDoc) {\r\n var xsltDoc = new DOMParser().parseFromString([\r\n // describes how we want to modify the XML - indent everything\r\n '',\r\n ' ',\r\n ' ', // change to just text() to strip space in text nodes\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n ' ',\r\n '',\r\n ].join('\\n'), 'application/xml');\r\n\r\n var xsltProcessor = new XSLTProcessor(); \r\n xsltProcessor.importStylesheet(xsltDoc);\r\n var resultDoc = xsltProcessor.transformToDocument(xmlDoc);\r\n return resultDoc;\r\n };\r\n // ## detokenize\r\n // If we are saving, replace token values with keys, since the keys are smaller.\r\n // if we are loading, replace the token keys with values so the score can\r\n // deserialize it\r\n static detokenize(json, dictionary) {\r\n const rv = {};\r\n const smoKey = (key) => {\r\n return typeof (dictionary[key]) !== 'undefined' ? dictionary[key] : key;\r\n }\r\n const _tokenRecurse = (input, output) => {\r\n if (input === null) {\r\n return;\r\n }\r\n const keys = Object.keys(input);\r\n keys.forEach((key) => {\r\n const val = input[key];\r\n const dkey = smoKey(key);\r\n if (typeof (val) == 'string' || typeof (val) == 'number' || typeof (val) == 'boolean') {\r\n output[dkey] = val;\r\n // console.log('240: output[' + dkey + '] = ' + val);\r\n }\r\n if (typeof (val) == 'object' && key != 'dictionary') {\r\n if (Array.isArray(val)) {\r\n output[dkey] = [];\r\n // console.log('245: processing array ' + dkey);\r\n val.forEach((arobj) => {\r\n if (typeof (arobj) === 'string' || typeof (arobj) === 'number' || typeof (arobj) === 'boolean') {\r\n output[dkey].push(arobj);\r\n // console.log('249: ar element ' + arobj);\r\n }\r\n else if (arobj && typeof (arobj) === 'object') {\r\n const nobj = {};\r\n _tokenRecurse(arobj, nobj);\r\n output[dkey].push(nobj);\r\n }\r\n });\r\n } else {\r\n const nobj = {};\r\n // console.log('259: processing child object of ' + dkey);\r\n _tokenRecurse(val, nobj);\r\n output[dkey] = nobj;\r\n }\r\n }\r\n });\r\n }\r\n _tokenRecurse(json, rv);\r\n // console.log(JSON.stringify(rv,null,' '));\r\n return rv;\r\n }\r\n\r\n static incrementIdentifier(label) {\r\n const increcurse = (ar, ix) => {\r\n const n1 = (ar[ix].charCodeAt(0) - 97) + 1;\r\n if (n1 > 25) {\r\n ar[ix] = 'a';\r\n if (ar.length <= ix + 1) {\r\n ar.push('a');\r\n } else {\r\n increcurse(ar, ix + 1);\r\n }\r\n } else {\r\n ar[ix] = String.fromCharCode(97 + n1);\r\n }\r\n }\r\n if (!label) {\r\n label = 'a';\r\n }\r\n const ar = label.split('');\r\n increcurse(ar, 0);\r\n label = ar.join('');\r\n return label;\r\n }\r\n\r\n // used to generate a tokenization scheme that I will use to make\r\n // saved files smaller\r\n static jsonTokens(json) {\r\n const map = {};\r\n const valmap = {};\r\n const startKeys = Object.keys(smoSerialize.tokenMap);\r\n let keyLabel = startKeys[startKeys.length - 1];\r\n keyLabel = smoSerialize.incrementIdentifier(keyLabel);\r\n\r\n const exist = smoSerialize.tokenValues;\r\n const addMap = (key) => {\r\n if (!exist[key] && !map[key] && key.length > keyLabel.length) {\r\n map[key] = keyLabel;\r\n keyLabel = smoSerialize.incrementIdentifier(keyLabel);\r\n }\r\n };\r\n const _tokenRecurse = (obj) => {\r\n if (!obj) {\r\n console.warn('failure to parse');\r\n return;\r\n }\r\n const keys = Object.keys(obj);\r\n keys.forEach((key) => {\r\n const val = obj[key];\r\n if (val !== null) {\r\n if (typeof (val) === 'string' || typeof (val) === 'number'\r\n || typeof (val) === 'boolean') {\r\n addMap(key);\r\n }\r\n if (typeof (val) == 'object') {\r\n if (Array.isArray(val)) {\r\n addMap(key);\r\n val.forEach((arobj) => {\r\n if (arobj && typeof (arobj) === 'object') {\r\n _tokenRecurse(arobj);\r\n }\r\n });\r\n } else {\r\n addMap(key);\r\n _tokenRecurse(val);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n _tokenRecurse(json);\r\n const mkar = Object.keys(map);\r\n const m2 = {};\r\n mkar.forEach((mk) => {\r\n m2[map[mk]] = mk;\r\n });\r\n if (Object.keys(m2).length) {\r\n console.log(JSON.stringify(m2, null, ' '));\r\n }\r\n }\r\n\r\n // ### serializedMerge\r\n // serialization-friendly, so merged, copied objects are deep-copied\r\n static serializedMerge(attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) !== 'undefined') {\r\n // copy the number 0\r\n if (typeof (src[attr]) === 'number' ||\r\n typeof (src[attr]) === 'boolean' ||\r\n typeof (src[attr]) === 'string') {\r\n dest[attr] = src[attr];\r\n // copy the empty array\r\n } else if (Array.isArray(src[attr])) {\r\n dest[attr] = JSON.parse(JSON.stringify(src[attr]));\r\n } else {\r\n // but don't copy empty/null objects\r\n if (src[attr]) {\r\n if (typeof (src[attr]) == 'object') {\r\n dest[attr] = JSON.parse(JSON.stringify(src[attr]));\r\n } else {\r\n dest[attr] = src[attr];\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Only serialize non-default values.\r\n * @param {*} defaults - the class-defined defaults\r\n * @param {*} attrs - the list of attributes (untyped)\r\n * @param {*} src - the object we're serializing\r\n * @param {*} dest - the output json\r\n */\r\n static serializedMergeNonDefault(defaults, attrs, src, dest) {\r\n attrs.forEach(function (attr) {\r\n if (typeof (src[attr]) != 'undefined') {\r\n // copy the number 0\r\n if (typeof (src[attr]) === 'number' ||\r\n typeof (src[attr]) === 'boolean' ||\r\n typeof (src[attr]) === 'string') {\r\n // always persist object type so it can be deserialized\r\n if (src[attr] !== defaults[attr] || attr === 'ctor') {\r\n dest[attr] = src[attr];\r\n }\r\n // copy the empty array\r\n } else if (Array.isArray(src[attr])) {\r\n const defval = JSON.stringify(defaults[attr]);\r\n const srcval = JSON.stringify(src[attr]);\r\n if (defval != srcval) {\r\n dest[attr] = JSON.parse(srcval);\r\n }\r\n } else {\r\n // but don't copy empty/null objects\r\n if (src[attr]) {\r\n if (typeof (src[attr]) == 'object') {\r\n const defval = JSON.stringify(defaults[attr]);\r\n const srcval = JSON.stringify(src[attr]);\r\n if (defval != srcval) {\r\n dest[attr] = JSON.parse(srcval);\r\n }\r\n } else {\r\n if (src[attr] != defaults[attr]) {\r\n dest[attr] = src[attr];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n static stringifyAttrs(attrs, obj) {\r\n let rv = '';\r\n attrs.forEach((attr) => {\r\n if (obj[attr]) {\r\n rv += attr + ':' + obj[attr] + ', ';\r\n } else {\r\n rv += attr + ': null,';\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n // ### printXlate\r\n // print json with string labels to use as a translation file seed.\r\n static printTranslate(_class) {\r\n const xxx = Smo.getClass(_class + '.printTranslate');\r\n if (typeof (xxx) === 'function') {\r\n xxx();\r\n }\r\n }\r\n}\r\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\r\n// MIT License\r\n\r\nimport { FontInfo, VexFlow } from '../common/vex';\r\nconst VF = VexFlow;\r\nexport interface FontGlyph {\r\n xMin: number,\r\n xMax: number,\r\n yMin: number,\r\n yMax: number,\r\n ha: number,\r\n leftSideBearing: number,\r\n advanceWidth: number\r\n}\r\nexport interface TextFormatterInfo extends Record {\r\n family: string;\r\n resolution?: number;\r\n glyphs?: Record;\r\n serifs: boolean;\r\n monospaced: boolean;\r\n italic: boolean;\r\n bold: boolean;\r\n maxSizeGlyph?: string;\r\n superscriptOffset?: number;\r\n subscriptOffset?: number;\r\n description: string;\r\n}\r\n\r\n/**\r\n * Y information, 0 is baseline, yMin is lowest point.\r\n */\r\nexport interface yExtent {\r\n yMin: number;\r\n yMax: number;\r\n height: number;\r\n}\r\n\r\n/**\r\n * Text widths are stored in a cache, so we don't have to recompute widths\r\n * for the same font + string combination.\r\n *\r\n * The cache is first keyed by the font information. The key is of the form:\r\n * `${family}-${size}-${weight}-${style}`\r\n * The second level key is the specific text to be measured.\r\n *\r\n * The stored value is the measured width in `em` units.\r\n * textWidth == textWidthCache[cacheKey][textToMeasure]\r\n */\r\nconst textWidthCache: Record | undefined> = {};\r\nconst textHeightCache: Record | undefined> = {};\r\n/**\r\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\r\n * The metrics for those fonts will be made available to the application.\r\n */\r\nconst registry: Record = {};\r\n\r\nexport class TextFormatter {\r\n\r\n /**\r\n * Return all registered font families.\r\n */\r\n static getFontFamilies(): TextFormatterInfo[] {\r\n const registeredFonts: TextFormatterInfo[] = [];\r\n for (const fontFamily in registry) {\r\n const formatterInfo = registry[fontFamily];\r\n registeredFonts.push({ ...formatterInfo });\r\n }\r\n return registeredFonts;\r\n }\r\n\r\n /**\r\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\r\n *\r\n * This method creates a formatter for the font that most closely matches the requested font.\r\n * We compare font family, bold, and italic attributes.\r\n * This method will return a fallback formatter if there are no matches.\r\n */\r\n static create(requestedFont: FontInfo = {}): TextFormatter {\r\n if (!requestedFont.family) {\r\n requestedFont.family = 'Sans Serif';\r\n }\r\n\r\n // TODO: One potential (small) optimization is to cache the TextFormatter object\r\n // returned for each font info. We would probably want to clear the cache if\r\n // the registry is ever updated.\r\n\r\n const candidates: TextFormatterInfo[] = [];\r\n // The incoming font family is a string of comma-separated font family names.\r\n // (e.g., `PetalumaScript, Arial, sans-serif`).\r\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\r\n for (const requestedFamily of requestedFamilies) {\r\n for (const fontFamily in registry) {\r\n // Support cases where the registry contains 'Roboto Slab Medium',\r\n // but the requestedFont.family is 'Roboto Slab'.\r\n if (fontFamily.startsWith(requestedFamily)) {\r\n candidates.push(registry[fontFamily]);\r\n }\r\n }\r\n if (candidates.length > 0) {\r\n break;\r\n }\r\n }\r\n\r\n let formatter;\r\n if (candidates.length === 0) {\r\n // No match, so return a fallback text formatter.\r\n formatter = new TextFormatter(Object.values(registry)[0]);\r\n } else if (candidates.length === 1) {\r\n formatter = new TextFormatter(candidates[0]);\r\n } else {\r\n const bold = VF.Font.isBold(requestedFont.weight);\r\n const italic = VF.Font.isItalic(requestedFont.style);\r\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\r\n if (perfectMatch) {\r\n formatter = new TextFormatter(perfectMatch);\r\n } else {\r\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\r\n if (partialMatch) {\r\n formatter = new TextFormatter(partialMatch);\r\n } else {\r\n formatter = new TextFormatter(candidates[0]);\r\n }\r\n }\r\n }\r\n\r\n const fontSize = requestedFont.size;\r\n if (typeof fontSize !== 'undefined') {\r\n const fontSizeInPt = VF.Font.convertSizeToPointValue(fontSize);\r\n formatter.setFontSize(fontSizeInPt);\r\n }\r\n return formatter;\r\n }\r\n\r\n /**\r\n * @param fontFamily used as a key to the font registry.\r\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\r\n */\r\n static getInfo(fontFamily: string): TextFormatterInfo | undefined {\r\n return registry[fontFamily];\r\n }\r\n\r\n /**\r\n * Apps may register their own fonts and metrics, and those metrics\r\n * will be available to the app for formatting.\r\n *\r\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\r\n * @param info\r\n * @param overwrite\r\n */\r\n static registerInfo(info: TextFormatterInfo, overwrite: boolean = false): void {\r\n const fontFamily = info.family;\r\n const currFontInfo = registry[fontFamily];\r\n if (currFontInfo === undefined || overwrite) {\r\n registry[fontFamily] = info;\r\n }\r\n }\r\n\r\n /** Font family. */\r\n protected family: string = '';\r\n\r\n /** Specified in `pt` units. */\r\n protected size: number = 14;\r\n\r\n /** Font metrics are extracted at 1000 upem (units per em). */\r\n protected resolution: number = 1000;\r\n\r\n /**\r\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\r\n * bounding box metrics such as:\r\n * ```\r\n * {\r\n * x_min: 48,\r\n * x_max: 235,\r\n * y_min: -17,\r\n * y_max: 734,\r\n * ha: 751,\r\n * leftSideBearing: 48,\r\n * advanceWidth: 286,\r\n * }\r\n * ```\r\n */\r\n protected glyphs: Record = {};\r\n protected description?: string;\r\n protected serifs: boolean = false;\r\n protected monospaced: boolean = false;\r\n protected italic: boolean = false;\r\n protected bold: boolean = false;\r\n protected superscriptOffset: number = 0;\r\n protected subscriptOffset: number = 0;\r\n protected maxSizeGlyph: string = '@';\r\n\r\n // This is an internal key used to index the `textWidthCache`.\r\n protected cacheKey: string = '';\r\n\r\n /**\r\n * Use `TextFormatter.create(...)` to build an instance from information previously\r\n * registered via `TextFormatter.registerInfo(info)`.\r\n */\r\n private constructor(formatterInfo: TextFormatterInfo) {\r\n this.updateParams(formatterInfo);\r\n }\r\n get localHeightCache(): Record {\r\n if (textHeightCache[this.cacheKey] === undefined) {\r\n textHeightCache[this.cacheKey] = {};\r\n }\r\n return textHeightCache[this.cacheKey] ?? {};\r\n }\r\n updateParams(params: TextFormatterInfo): void {\r\n if (params.family) this.family = params.family;\r\n if (params.resolution) this.resolution = params.resolution;\r\n if (params.glyphs) this.glyphs = params.glyphs;\r\n if (params.serifs) this.serifs = params.serifs;\r\n if (params.monospaced) this.monospaced = params.monospaced;\r\n if (params.italic) this.italic = params.italic;\r\n if (params.bold) this.bold = params.bold;\r\n if (params.maxSizeGlyph) this.maxSizeGlyph = params.maxSizeGlyph;\r\n if (params.superscriptOffset) this.superscriptOffset = params.superscriptOffset;\r\n if (params.subscriptOffset) this.subscriptOffset = params.subscriptOffset;\r\n this.updateCacheKey();\r\n }\r\n\r\n /** Create a hash with the current font data, so we can cache computed widths. */\r\n updateCacheKey(): void {\r\n const family = this.family.replace(/\\s+/g, '_');\r\n const size = this.size;\r\n const weight = this.bold ? VF.FontWeight.BOLD : VF.FontWeight.NORMAL;\r\n const style = this.italic ? VF.FontStyle.ITALIC : VF.FontStyle.NORMAL;\r\n // Use the same key format as SVGContext.\r\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\r\n }\r\n\r\n /**\r\n * The glyphs table is indexed by the character (e.g., 'C', '@').\r\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\r\n */\r\n getGlyphMetrics(character: string): FontGlyph {\r\n if (this.glyphs[character]) {\r\n return this.glyphs[character];\r\n } else {\r\n return this.glyphs[this.maxSizeGlyph];\r\n }\r\n }\r\n\r\n get maxHeight(): number {\r\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\r\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\r\n }\r\n\r\n /**\r\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\r\n * For the space character ' ' as defined in the:\r\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\r\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\r\n */\r\n getWidthForCharacterInEm(c: string): number {\r\n const metrics = this.getGlyphMetrics(c);\r\n if (!metrics) {\r\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\r\n return 0.65;\r\n } else {\r\n const advanceWidth = metrics.advanceWidth ?? 0;\r\n return advanceWidth / this.resolution;\r\n }\r\n }\r\n /**\r\n * Retrieve the character's y bounds (ymin, ymax) and height.\r\n */\r\n getYForCharacterInPx(c: string): yExtent {\r\n const metrics = this.getGlyphMetrics(c);\r\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\r\n if (!metrics) {\r\n return rv;\r\n } else {\r\n if (typeof metrics.yMin === 'number') {\r\n rv.yMin = (metrics.yMin / this.resolution) * this.fontSizeInPixels;\r\n }\r\n if (typeof metrics.yMax === 'number') {\r\n rv.yMax = (metrics.yMax / this.resolution) * this.fontSizeInPixels;\r\n }\r\n rv.height = rv.yMax - rv.yMin;\r\n return rv;\r\n }\r\n }\r\n getYForStringInPx(str: string): yExtent {\r\n const entry = this.localHeightCache;\r\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\r\n const cache = entry[str];\r\n if (cache !== undefined) {\r\n return cache;\r\n }\r\n for (let i = 0; i < str.length; ++i) {\r\n const curY = this.getYForCharacterInPx(str[i]);\r\n extent.yMin = Math.min(extent.yMin, curY.yMin);\r\n extent.yMax = Math.max(extent.yMax, curY.yMax);\r\n extent.height = extent.yMax - extent.yMin;\r\n }\r\n entry[str] = extent;\r\n return extent;\r\n }\r\n /**\r\n * Retrieve the total width of `text` in `em` units.\r\n */\r\n getWidthForTextInEm(text: string): number {\r\n const key = this.cacheKey;\r\n // Get the cache for this specific font family, size, weight, style combination.\r\n // The cache contains previously computed widths for different `text` strings.\r\n let cachedWidths = textWidthCache[key];\r\n if (cachedWidths === undefined) {\r\n cachedWidths = {};\r\n textWidthCache[key] = cachedWidths;\r\n }\r\n\r\n let width = cachedWidths[text];\r\n if (width === undefined) {\r\n width = 0;\r\n for (let i = 0; i < text.length; ++i) {\r\n width += this.getWidthForCharacterInEm(text[i]);\r\n }\r\n cachedWidths[text] = width;\r\n }\r\n return width;\r\n }\r\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\r\n getWidthForTextInPx(text: string): number {\r\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\r\n }\r\n\r\n /**\r\n * @param size in pt.\r\n */\r\n setFontSize(size: number): this {\r\n this.size = size;\r\n // The width cache key depends on the current font size.\r\n this.updateCacheKey();\r\n return this;\r\n }\r\n\r\n /** `this.size` is specified in points. Convert to pixels. */\r\n get fontSizeInPixels(): number {\r\n return this.size * VF.Font.scaleToPxFrom.pt;\r\n }\r\n\r\n getResolution(): number {\r\n return this.resolution;\r\n }\r\n}\r\n","import { Vex as SmoVex, Note as VexNote, StaveNote as VexStaveNote, StemmableNote as VexStemmableNote, Beam as VexBeam, Tuplet as VexTuplet, \r\n Voice as VexVoice, Formatter as VexFormatter, Accidental as VexAccidental, \r\n Annotation as VexAnnotation, StaveNoteStruct as VexStaveNoteStruct, \r\n StaveText as VexStaveText, StaveModifier as VexStaveModifier,\r\n TextNote as VexTextNote,\r\nStave as VexStave, StaveModifierPosition as VexStaveModifierPosition,\r\nFont as VexFont, FontInfo as VexFontInfo, FontStyle as VexFontStyle, FontWeight as VexFontWeight,\r\nTupletOptions as VexTupletOptions, Curve as VexCurve, StaveTie as VexStaveTie,\r\nClefNote as VexClefNote,\r\n Music as VexMusic, ChordSymbol as VexChordSymbol, ChordSymbolBlock as VexChordSymbolBlock,\r\nTabStave as VexTabStave, TabNote as VexTabNote, TabSlide as VexTabSlide, TabNotePosition as VexTabNotePosition, \r\nTabNoteStruct as VexTabNoteStruct, PedalMarking as VexPedalMarking, Stem as VexStem\r\n } from \"vexflow_smoosic\";\r\n\r\n /**\r\n * Module vex.ts. This handles vexflow calls and structures that have changed \r\n * between v4 and v5. There will be a custom version of this file for each.\r\n * Most of the differences are trivial - e.g. different naming conventions for variables.\r\n */\r\nimport { smoSerialize } from \"./serializationHelpers\";\r\nimport { SmoMusic } from \"../smo/data/music\";\r\nimport { SvgBox } from \"../smo/data/common\";\r\n// export type Vex = SmoVex;\r\nexport const VexFlow = SmoVex.Flow;\r\nconst VF = VexFlow;\r\nexport type Music = VexMusic;\r\nexport type Note = VexNote;\r\nexport type StaveNote = VexStaveNote;\r\nexport type Stem = VexStem;\r\nexport type StemmableNote = VexStemmableNote;\r\nexport type Beam = VexBeam;\r\nexport type Tuplet = VexTuplet;\r\nexport type TupletOptions = VexTupletOptions;\r\nexport type PedalMarking = VexPedalMarking;\r\nexport type Voice = VexVoice;\r\nexport type Accidental = VexAccidental;\r\nexport type Font = VexFont;\r\nexport type FontInfo = VexFontInfo;\r\nexport type FontStyle = VexFontStyle;\r\nexport type FontWeight = VexFontWeight;\r\nexport type Formatter = VexFormatter;\r\nexport type Annotation = VexAnnotation;\r\nexport type TextNote = VexTextNote;\r\nexport type StaveNoteStruct = VexStaveNoteStruct;\r\nexport type StaveModifier = VexStaveModifier;\r\nexport type StaveText = VexStaveText;\r\nexport type Stave = VexStave;\r\nexport type Curve = VexCurve;\r\nexport type StaveTie = VexStaveTie;\r\nexport type ClefNote = VexClefNote;\r\nexport type StaveModifierPosition = VexStaveModifierPosition;\r\nexport type TabStave = VexTabStave;\r\nexport type TabNote = VexTabNote;\r\nexport type TabSlide = VexTabSlide;\r\nexport type TabNotePosition = VexTabNotePosition;\r\nexport type TabNoteStruct = VexTabNoteStruct;\r\n\r\nexport interface GlyphInfo {\r\n width: number,\r\n height: number,\r\n yTop: number,\r\n yBottom: number,\r\n spacingRight: number,\r\n vexGlyph: string | null\r\n}\r\n\r\n// DI interfaces to create vexflow objects\r\nexport interface CreateVexNoteParams {\r\n isTuplet: boolean,\r\n measureIndex: number,\r\n clef: string,\r\n stemTicks: string,\r\n keys: string[],\r\n noteType: string\r\n}; \r\n\r\n export interface SmoVexTupletParams {\r\n vexNotes: Note[],\r\n numNotes: number,\r\n notesOccupied: number,\r\n location: number\r\n};\r\n\r\nexport function chordSubscriptOffset() {\r\n return VF.ChordSymbol.subscriptOffset;\r\n}\r\nexport function chordSuperscriptOffset() {\r\n return VF.ChordSymbol.superscriptOffset;\r\n}\r\nexport interface SmoVexVoiceParams {\r\n actualBeats: number,\r\n beatDuration: number,\r\n notes: Note[]\r\n}\r\nexport function createVoice(params: SmoVexVoiceParams) {\r\n const voice = new VF.Voice({\r\n num_beats: params.actualBeats,\r\n beat_value: params.beatDuration\r\n }).setMode(VF.Voice.Mode.SOFT);\r\n voice.addTickables(params.notes);\r\n return voice;\r\n}\r\nexport interface SmoVexStaveParams {\r\n x: number,\r\n y: number,\r\n padLeft: number,\r\n id: string,\r\n staffX: number,\r\n staffY: number,\r\n staffWidth: number,\r\n forceClef: boolean,\r\n clef: string,\r\n forceKey: boolean,\r\n key: string,\r\n canceledKey: string | null,\r\n startX: number,\r\n adjX: number,\r\n context: any\r\n}\r\nexport function createTabStave(box: SvgBox, spacing: number, numLines: number): TabStave {\r\n return new VF.TabStave(box.x, box.y, box.width, {\r\n spacing_between_lines_px: spacing,\r\n num_lines: numLines\r\n });\r\n}\r\n/**\r\n * Vex4 and Vex5 handle width differently. Vex5, width comes directly from the \r\n * font glyph, vex4 the glyph is a path so it comes from the stored information about \r\n * the path.\r\n * \r\n * @param smoGlyph \r\n * @returns \r\n */\r\nexport function getGlyphWidth(smoGlyph: GlyphInfo) {\r\n if (smoGlyph.vexGlyph) {\r\n /* const vexGlyph = (VF.Glyphs as Record)[smoGlyph.vexGlyph];\r\n if (vexGlyph) {\r\n return VF.Element.measureWidth(vexGlyph);\r\n }\r\n return VF.Element.measureWidth(smoGlyph.vexGlyph); */\r\n const vf = VF.Glyph.MUSIC_FONT_STACK[0].getGlyphs()[smoGlyph.vexGlyph];\r\n return (vf.x_max - vf.x_min) * glyphPixels();\r\n } \r\n return smoGlyph.width;\r\n}\r\n/**\r\n * V4 uses the glyph name, V5 uses the unicode value\r\n * @returns \r\n */\r\nexport function getSlashGlyph() {\r\n // vexNote = new VF.GlyphNote('\\uE504', { duration });\r\n return new VF.GlyphNote(new VF.Glyph('repeatBarSlash', 38), { duration: 'w' }, { line: 2 });\r\n}\r\nexport function getRepeatBar() {\r\n return new VF.GlyphNote(new VF.Glyph('repeat1Bar', 38), { duration: 'w' }, { line: 2 });\r\n}\r\nexport function getMultimeasureRest(multimeasureLength: number) {\r\n return new VF.MultiMeasureRest(multimeasureLength,\r\n // { numberOfMeasures: this.smoMeasure.svg.multimeasureLength });\r\n { number_of_measures: multimeasureLength });\r\n}\r\nexport function pitchToLedgerLine(vexPitch: string, clef: string) {\r\n return -1.0 * (VF.keyProperties(vexPitch).line - 4.5)\r\n - VF.clefProperties(clef).line_shift;\r\n}\r\nexport function vexCanonicalNotes(): any {\r\n // return VF.Music.canonicalNotes[SmoMusic.noteValues[vexKey].int_val];\r\n return VF.Music.canonical_notes;\r\n}\r\nexport function createStave(params: SmoVexStaveParams) {\r\n const stave = new VF.Stave(params.x, params.y, params.staffWidth - params.padLeft);\r\n stave.setAttribute('id', params.id);\r\n // If there is padLeft, draw an invisible box so the padding is included in the measure box\r\n if (params.padLeft) {\r\n params.context.rect(params.staffX, params.y, params.padLeft, 50, {\r\n fill: 'none', 'stroke-width': 1, stroke: 'white'\r\n });\r\n }\r\n // stave.options.spaceAboveStaffLn = 0; // don't let vex place the staff, we want to.\r\n stave.options.space_above_staff_ln = 0; // don't let vex place the staff, we want to.\r\n // Add a clef and time signature.\r\n if (params.forceClef) {\r\n stave.addClef(params.clef);\r\n }\r\n if (params.forceKey) {\r\n const sig = new VF.KeySignature(params.key);\r\n if (params.canceledKey) {\r\n sig.cancelKey(params.canceledKey);\r\n }\r\n sig.addToStave(stave);\r\n }\r\n // const curX = stave.getNoteStartX();\r\n // stave.setNoteStartX(curX + (params.startX - params.adjX)); \r\n\r\n return stave;\r\n}\r\n\r\nexport function getVexTuplets(params: SmoVexTupletParams) {\r\n const vexTuplet = new VF.Tuplet(params.vexNotes, {\r\n num_notes: params.numNotes,\r\n notes_occupied: params.notesOccupied,\r\n ratioed: false,\r\n bracketed: true,\r\n location: params.location\r\n });\r\n return vexTuplet;\r\n}\r\nexport function getVexNoteParameters(params: CreateVexNoteParams): { noteParams: StaveNoteStruct, duration: string } {\r\n var duration: any = params.stemTicks;\r\n if (typeof (duration) === 'undefined') {\r\n console.warn('bad duration in measure ' + params.measureIndex);\r\n duration = '8';\r\n } \r\n // transpose for instrument-specific keys\r\n const noteParams: StaveNoteStruct = {\r\n clef: params.clef,\r\n keys: params.keys,\r\n duration: duration + params.noteType\r\n };\r\n return { noteParams, duration };\r\n}\r\nexport interface SmoVexStemParams {\r\n voiceCount: number,\r\n voiceIx: number,\r\n isAuto: boolean,\r\n isUp: boolean\r\n}\r\nexport function applyStemDirection(params: SmoVexStemParams, vxParams: StaveNoteStruct) {\r\n if (params.voiceCount === 1 && params.isAuto) {\r\n vxParams.auto_stem = true;\r\n } else if (!params.isAuto) {\r\n vxParams.stem_direction = params.isUp ? 1 : -1;\r\n } else if (params.voiceIx % 2) {\r\n vxParams.stem_direction = -1;\r\n } else {\r\n vxParams.stem_direction = 1;\r\n }\r\n}\r\nconst setSameIfNull = (a: any, b: any) => {\r\n if (typeof (a) === 'undefined' || a === null) {\r\n return b;\r\n }\r\n return a;\r\n};\r\nexport function createStaveText(text: string, position: number, options: any) {\r\n return new VexStaveText(text, position, options);\r\n}\r\nexport interface SmoVexHairpinParams {\r\n vxStart: Note | null,\r\n vxEnd: Note | null,\r\n hairpinType: number,\r\n height: number,\r\n yOffset: number,\r\n leftShiftPx: number,\r\n rightShiftPx: number\r\n}\r\nexport function createHairpin(params: SmoVexHairpinParams) {\r\n const vexParams: Record = {};\r\n if (params.vxStart) {\r\n vexParams.first_note = params.vxStart;\r\n }\r\n if (params.vxEnd) {\r\n vexParams.last_note = params.vxEnd;\r\n }\r\n const hairpin = new VF.StaveHairpin(\r\n vexParams, params.hairpinType);\r\n hairpin.setRenderOptions({\r\n height: params.height,\r\n y_shift: params.yOffset,\r\n left_shift_px: params.leftShiftPx,\r\n right_shift_px: params.rightShiftPx\r\n });\r\n return hairpin;\r\n}\r\nexport interface SmoVexSlurParameters {\r\n vxStart: Note | null,\r\n vxEnd: Note | null,\r\n thickness: number,\r\n xShift: number,\r\n yShift: number,\r\n cps: DOMPoint[],\r\n openingDirection: string,\r\n position: number,\r\n positionEnd: number\r\n}\r\nexport const defaultMeasurePadding = VF.Stave.defaultPadding;\r\nexport function createSlur(params: SmoVexSlurParameters): Curve {\r\n if (params.vxStart === null && params.vxEnd === null) {\r\n throw(' slur with no points');\r\n }\r\n const vxStart = setSameIfNull(params.vxStart, params.vxEnd);\r\n const vxEnd = setSameIfNull(params.vxEnd, params.vxStart);\r\n const curve = new VF.Curve(vxStart!, vxEnd!,\r\n {\r\n thickness: params.thickness,\r\n x_shift: params.xShift,\r\n y_shift: params.yShift,\r\n cps: params.cps,\r\n openingDirection: params.openingDirection,\r\n position: params.position,\r\n position_end: params.positionEnd\r\n } as any); // any until opening direction is imported\r\n return curve;\r\n}\r\nexport interface SmoVexTieParams {\r\n fromLines: number[],\r\n toLines: number[],\r\n firstNote: Note | null,\r\n lastNote: Note | null,\r\n vexOptions: any\r\n}\r\nexport function createTie(params: SmoVexTieParams): StaveTie {\r\n const fromLines = params.fromLines;\r\n const toLines = params.toLines;\r\n const tie = new VF.StaveTie({\r\n first_note: params.firstNote,\r\n last_note: params.lastNote,\r\n first_indices: fromLines,\r\n last_indices: toLines\r\n });\r\n smoSerialize.vexMerge(tie.render_options, params.vexOptions);\r\n return tie;\r\n}\r\nexport const defaultNoteScale: number = 30;\r\nexport const defaultCueScale: number = 19.8;\r\n\r\nexport function glyphPixels() {\r\n return 96 * (defaultNoteScale / (VF.Glyph.MUSIC_FONT_STACK[0].getResolution() * 72));\r\n // return defaultNoteScale;\r\n}\r\n\r\nexport function setFontStack(font: string) {\r\n const fs: Record void> = {\r\n /* Bravura: () => { VexFlow.setFonts('Bravura', 'Gonville', 'Custom'); },\r\n Gonville: () => { VexFlow.setFonts('Gonville', 'Bravura', 'Custom'); },\r\n Petaluma: () => { VexFlow.setFonts('Petaluma', 'Bravura', 'Gonville', 'Custom'); },\r\n Leland: () => { VexFlow.setFonts('Leland', 'Bravura', 'Gonville', 'Custom'); } */\r\n Bravura: () => { VexFlow.setMusicFont('Bravura', 'Gonville', 'Custom'); },\r\n Gonville: () => { VexFlow.setMusicFont('Gonville', 'Bravura', 'Custom'); },\r\n Petaluma: () => { VexFlow.setMusicFont('Petaluma', 'Bravura', 'Gonville', 'Custom'); },\r\n Leland: () => { VexFlow.setMusicFont('Leland', 'Bravura', 'Gonville', 'Custom'); }\r\n };\r\n fs[font]();\r\n}\r\n/**\r\n * Render a dynamics glyph. Return the height of width/height of the glyph\r\n * @param context \r\n * @param text \r\n * @param fontSize \r\n * @param x \r\n * @param y \r\n * @returns \r\n */\r\nexport function renderDynamics(context: any, text: string, fontSize: number, x: number, y: number) {\r\n /* const glyph = new VF.Element();\r\n glyph.setText(text);\r\n glyph.setFontSize(fontSize);\r\n glyph.renderText(context, x, y);\r\n return { width: glyph.getWidth(), height: glyph.getHeight() };*/\r\n const glyph = new VF.Glyph(text, fontSize);\r\n glyph.render(context, x, y);\r\n // vex 5 incompatibility.\r\n // x += VF.TextDynamics.GLYPHS[text].width;\r\n const metrics = glyph.getMetrics();\r\n return { width: metrics.width, height: metrics.height }; \r\n}\r\nexport function getOrnamentGlyph(glyph: string) {\r\n return glyph;\r\n // return vexOrnaments[glyph];\r\n}\r\n\r\nexport function addChordGlyph(cs: VexChordSymbol, symbol: string) {\r\n cs.addGlyph(symbol);\r\n}\r\n/**\r\n * get a glyph code to render\r\n * @param code \r\n * @returns \r\n */\r\nexport function getVexGlyphFromChordCode(code: string) {\r\n if (code === 'csymDiminished' || code === 'csymHalfDiminished' || code === 'csymAugmented' || code === 'csymMajorSeventh') {\r\n return code;\r\n }\r\n return ChordSymbolGlyphs[code].code;\r\n}\r\nexport function createTextNote(code: string) {\r\n return new VexTextNote({ glyph: code, duration: '8' }).setLine(2);\r\n}\r\n/**\r\n * Get the chord symbol glyph from the vex glyph\r\n * @export\r\n * @param {string} code\r\n * @return {*} \r\n */\r\nexport function getChordSymbolGlyphFromCode(code: string) {\r\n const keys = Object.keys(ChordSymbolGlyphs);\r\n const rv = keys.find((key) => ChordSymbolGlyphs[key].code === code);\r\n if (typeof(rv) === 'string') {\r\n return rv;\r\n }\r\n return code;\r\n}\r\nexport function getChordSymbolMetricsForGlyph(code: string) {\r\n if (code === 'b') {\r\n code = 'accidentalFlat';\r\n }\r\n if (code === '#') {\r\n code = 'accidentalSharp';\r\n }\r\n const glyphMetrics = VexChordSymbol.metrics.glyphs;\r\n return glyphMetrics[code];\r\n}\r\n/**\r\n * Vex 5 compatibility. yShift\r\n */\r\nexport function blockMetricsYShift(metrics: any) {\r\n return metrics.y_shift;\r\n}\r\n// Glyph data. Note Vex4 and Vex5 have different requirements. Vex5 expects the unicode identifier (16-bit number)\r\n// where vex4 expects a string glyph\r\nexport const ChordSymbolGlyphs: Record = {\r\n diminished: {\r\n code: 'csymDiminished',\r\n },\r\n dim: {\r\n code: 'csymDiminished',\r\n },\r\n halfDiminished: {\r\n code: 'csymHalfDiminished',\r\n },\r\n '+': {\r\n code: 'csymAugmented',\r\n },\r\n augmented: {\r\n code: 'csymAugmented',\r\n },\r\n majorSeventh: {\r\n code: 'csymMajorSeventh',\r\n },\r\n csymMinor: {\r\n code: 'csymMinor',\r\n },\r\n minor: {\r\n code: 'csymMinor',\r\n },\r\n '-': {\r\n code: 'csymMinor',\r\n },\r\n '(': {\r\n code: 'csymParensLeftTall',\r\n }, \r\n leftParen: {\r\n code: 'csymParensLeftTall',\r\n },\r\n ')': {\r\n code: 'csymParensRightTall',\r\n },\r\n rightParen: {\r\n code: 'csymParensRightTall',\r\n },\r\n leftBracket: {\r\n code: 'csymBracketLeftTall',\r\n },\r\n rightBracket: {\r\n code: 'csymBracketRightTall',\r\n }, \r\n leftParenTall: {\r\n code: 'csymParensLeftVeryTall',\r\n }, rightParenTall: {\r\n code: 'csymParensRightVeryTall',\r\n },\r\n '/': {\r\n code: 'csymDiagonalArrangementSlash',\r\n },\r\n over: {\r\n code: 'csymDiagonalArrangementSlash',\r\n },\r\n '#': {\r\n code: 'accidentalSharp',\r\n },\r\n b: {\r\n code: 'accidentalFlat',\r\n },\r\n};\r\nexport const vexOrnaments: Record = {\r\n mordent: '\\ue56c' /*ornamentShortTrill*/,\r\n mordent_inverted: '\\ue56d' /*ornamentMordent*/,\r\n turn: '\\ue567' /*ornamentTurn*/,\r\n turn_inverted: '\\ue569' /*ornamentTurnSlash*/,\r\n tr: '\\ue566' /*ornamentTrill*/,\r\n upprall: '\\ue5b5' /*ornamentPrecompSlideTrillDAnglebert*/,\r\n downprall: '\\ue5c3' /*ornamentPrecompDoubleCadenceUpperPrefix*/,\r\n prallup: '\\ue5bb' /*ornamentPrecompTrillSuffixDandrieu*/,\r\n pralldown: '\\ue5c8' /*ornamentPrecompTrillLowerSuffix*/,\r\n upmordent: '\\ue5b8' /*ornamentPrecompSlideTrillBach*/,\r\n downmordent: '\\ue5c4' /*ornamentPrecompDoubleCadenceUpperPrefixTurn*/,\r\n lineprall: '\\ue5b2' /*ornamentPrecompAppoggTrill*/,\r\n prallprall: '\\ue56e' /*ornamentTremblement*/,\r\n scoop: '\\ue5d0' /*brassScoop*/,\r\n doit: '\\ue5d5' /*brassDoitMedium*/,\r\n fall: '\\ue5d7' /*brassFallLipShort*/,\r\n doitLong: '\\ue5d2' /*brassLiftMedium*/,\r\n fallLong: '\\ue5de' /*brassFallRoughMedium*/,\r\n bend: '\\ue5e3' /*brassBend*/,\r\n plungerClosed: '\\ue5e5' /*brassMuteClosed*/,\r\n plungerOpen: '\\ue5e7' /*brassMuteOpen*/,\r\n flip: '\\ue5e1' /*brassFlip*/,\r\n jazzTurn: '\\ue5e4' /*brassJazzTurn*/,\r\n smear: '\\ue5e2' /*brassSmear*/,\r\n}","import { SmoSelector, SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiScoreView } from '../sui/scoreView';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { layoutDebug } from '../sui/layoutDebug';\r\n\r\n/**\r\n * A generic function that can be sent used to animate playback\r\n */\r\nexport type AudioAnimationHandler = (view: SuiScoreView, selector: SmoSelector, offsetPct: number, durationPct: number) => void;\r\n/**\r\n * A generic function that can be sent used to clean up playback animation\r\n */\r\nexport type ClearAudioAnimationHandler = (delay: number) => void;\r\n\r\n/**\r\n * Allow users to specify their own music playback animations.\r\n * @category SuiAudio\r\n*/\r\nexport interface SuiAudioAnimationParams {\r\n audioAnimationHandler: AudioAnimationHandler,\r\n clearAudioAnimationHandler: ClearAudioAnimationHandler\r\n}\r\nexport const defaultClearAudioAnimationHandler = (delay: number) => {\r\n if (delay < 1) {\r\n const ell = document.getElementById('vf-music-cursor');\r\n if (ell) {\r\n ell.remove();\r\n }\r\n } else {\r\n setTimeout(() => {\r\n defaultClearAudioAnimationHandler(0);\r\n }, delay);\r\n }\r\n}\r\n /**\r\n * default implementation of playback animation.\r\n * @param selector \r\n * @returns \r\n */\r\n export const defaultAudioAnimationHandler = (view: SuiScoreView, selector: SmoSelector, offsetPct: number, durationPct: number) => {\r\n const score = view.renderer.score;\r\n \r\n if (!score) {\r\n return;\r\n }\r\n const scroller = view.scroller;\r\n const renderer = view.renderer;\r\n // Get note from 0th staff if we can\r\n const measureSel = SmoSelection.measureSelection(score,\r\n score.staves.length - 1, selector.measure);\r\n const zmeasureSel = SmoSelection.measureSelection(score,\r\n 0, selector.measure);\r\n const measure = measureSel?.measure as SmoMeasure;\r\n if (measure.svg.logicalBox && zmeasureSel?.measure?.svg?.logicalBox) {\r\n const context = renderer.pageMap.getRenderer(measure.svg.logicalBox);\r\n const topBox = SvgHelpers.smoBox(zmeasureSel.measure.svg.logicalBox);\r\n topBox.y -= context.box.y;\r\n const botBox = SvgHelpers.smoBox(measure.svg.logicalBox);\r\n botBox.y -= context.box.y;\r\n const height = (botBox.y + botBox.height) - topBox.y;\r\n const measureWidth = botBox.width - measure.svg.adjX;\r\n const nhWidth = 10 / score.layoutManager!.getGlobalLayout().svgScale;\r\n let width = measureWidth * durationPct - 10 / score.layoutManager!.getGlobalLayout().svgScale;\r\n width = Math.max(nhWidth, width);\r\n const y = topBox.y;\r\n let x = topBox.x + measure.svg.adjX + offsetPct * measureWidth;\r\n const noteBox = score.staves[selector.staff].measures[selector.measure].voices[selector.voice].notes[selector.tick];\r\n if (noteBox && noteBox.logicalBox) {\r\n x = noteBox.logicalBox.x;\r\n }\r\n const screenBox = SvgHelpers.boxPoints(x, y, width, height);\r\n const fillParams: Record = {};\r\n fillParams['fill-opacity'] = '0.5';\r\n fillParams['fill'] = '#4444ff';\r\n const ctx = context.getContext();\r\n defaultClearAudioAnimationHandler(0);\r\n ctx.save();\r\n ctx.openGroup('music-cursor', 'music-cursor');\r\n ctx.rect(x, screenBox.y, width, screenBox.height, fillParams);\r\n ctx.closeGroup();\r\n ctx.restore();\r\n layoutDebug.updatePlayDebug(selector, measure.svg.logicalBox);\r\n scroller.scrollVisibleBox(zmeasureSel.measure.svg.logicalBox); \r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { SmoMicrotone } from '../../smo/data/noteModifiers';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoOscillatorInfo } from '../../smo/data/staffModifiers';\r\nimport { SuiSampleMedia, AudioSample } from './samples';\r\n\r\n/**\r\n * Create audio reverb node.\r\n * @category SuiAudio\r\n */\r\nexport class SuiReverb {\r\n static get defaults() {\r\n return { length: 0.2, decay: 2 };\r\n }\r\n static impulse: AudioBuffer | null;\r\n\r\n connect(destination: AudioNode) {\r\n this.output.connect(destination);\r\n }\r\n\r\n disconnect() {\r\n this.output.disconnect();\r\n this.input.disconnect();\r\n }\r\n\r\n // credit: https://github.com/nick-thompson\r\n _buildImpulse() {\r\n let n = 0;\r\n let i = 0;\r\n if (SuiReverb.impulse) {\r\n this.input.buffer = SuiReverb.impulse;\r\n return;\r\n }\r\n\r\n const rate = this._context.sampleRate;\r\n const length = rate * this.length;\r\n const decay = this.decay;\r\n const impulse = this._context.createBuffer(2, length, rate);\r\n const impulseL = impulse.getChannelData(0);\r\n const impulseR = impulse.getChannelData(1);\r\n\r\n for (i = 0; i < length; i++) {\r\n n = this.reverse ? length - i : i;\r\n impulseL[i] = (Math.random() * 2 - 1) * Math.pow(1 - n / length, decay) * this.damp;\r\n impulseR[i] = (Math.random() * 2 - 1) * Math.pow(1 - n / length, decay) * this.damp;\r\n }\r\n SuiReverb.impulse = impulse;\r\n\r\n this.input.buffer = impulse;\r\n }\r\n output: ConvolverNode;\r\n input: ConvolverNode;\r\n length: number;\r\n decay: number;\r\n damp: number = 1.0;\r\n reverse: boolean = false;\r\n _context: AudioContext;\r\n constructor(context: AudioContext) {\r\n this.input = this.output = context.createConvolver();\r\n this.length = SuiReverb.defaults.length;\r\n this.decay = SuiReverb.defaults.decay;\r\n this._context = context;\r\n this._buildImpulse();\r\n }\r\n}\r\n\r\n/**\r\n * Audio custom osc node. Not used much.\r\n */\r\nexport interface WaveTable {\r\n real: number[],\r\n imaginary: number[]\r\n}\r\n/**\r\n * Parameters to create an oscillator for a single note of music\r\n * @category SuiAudio\r\n */\r\nexport interface SuiOscillatorParams {\r\n duration: number,\r\n frequency: number,\r\n attackEnv: number,\r\n decayEnv: number,\r\n sustainEnv: number,\r\n releaseEnv: number,\r\n sustainLevel: number,\r\n releaseLevel: number,\r\n waveform: OscillatorType,\r\n gain: number,\r\n wavetable?: WaveTable,\r\n useReverb: boolean,\r\n instrument: string\r\n}\r\n\r\nexport const SynthWavetable: WaveTable = {\r\n real: [0,\r\n 0.3, 0.3, 0, 0, 0,\r\n 0.1, 0, 0, 0, 0,\r\n 0.05, 0, 0, 0, 0,\r\n 0.01, 0, 0, 0, 0,\r\n 0.01, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0],\r\n imaginary: [0,\r\n 0, 0.05, 0, 0, 0,\r\n 0, 0.01, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0, 0, 0, 0,\r\n 0, 0]\r\n};\r\n/**\r\n * Simple waveform synthesizer thing that plays notes. Oscillator works in either\r\n * analog synthisizer or sampler mode.\r\n * @category SuiAudio\r\n */\r\nexport abstract class SuiOscillator {\r\n static audio: AudioContext = new AudioContext();\r\n static created: number = 0;\r\n static get defaults(): SuiOscillatorParams {\r\n const wavetable: WaveTable = {\r\n real: [], imaginary: []\r\n };\r\n const obj = {\r\n duration: 1000,\r\n frequency: 440,\r\n attackEnv: 0.05,\r\n decayEnv: 0.4,\r\n sustainEnv: 0.8,\r\n releaseEnv: 0.25,\r\n sustainLevel: 0.5,\r\n releaseLevel: 0.1,\r\n waveform: 'custom',\r\n gain: 0.2,\r\n wavetable,\r\n useReverb: false,\r\n instrument: 'piano'\r\n };\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n\r\n static sampleFiles: string[] = ['bb4', 'cn4'];\r\n static samples: AudioSample[] = [];\r\n static playSelectionNow(selection: SmoSelection, score: SmoScore, gain: number) {\r\n // In the midst of re-rendering...\r\n if (!selection.note) {\r\n return;\r\n }\r\n if (selection.note.isRest() || selection.note.isSlash() || selection.note.isHidden()) {\r\n return;\r\n }\r\n const soundInfo = selection.staff.getStaffInstrument(selection.selector.measure);\r\n const oscInfo = SuiSampleMedia.getSmoOscillatorInfo(soundInfo.instrument);\r\n setTimeout(() => {\r\n const ar = SuiOscillator.fromNote(selection.measure, selection.note!, score, oscInfo[0], gain);\r\n ar.forEach((osc) => {\r\n osc.play();\r\n });\r\n }, 1);\r\n }\r\n\r\n static get attackTime() {\r\n return 25;\r\n }\r\n static get decayTime() {\r\n return 15;\r\n }\r\n // ### fromNote\r\n // Create an areray of oscillators for each pitch in a note\r\n static fromNote(measure: SmoMeasure, note: SmoNote, score: SmoScore, soundInfo: SmoOscillatorInfo, gain: number): SuiOscillator[] {\r\n let frequency = 0;\r\n let duration = 0;\r\n const tempo = measure.getTempo();\r\n const bpm = tempo.bpm;\r\n const beats = note.tickCount / 4096;\r\n duration = (beats / bpm) * 60000;\r\n\r\n // adjust if bpm is over something other than 1/4 note\r\n duration = duration * (4096 / tempo.beatDuration);\r\n if (soundInfo.waveform === 'sample') {\r\n duration = 250;\r\n }\r\n\r\n const ar: SuiOscillator[] = [];\r\n gain = isNaN(gain) ? 0.2 : gain;\r\n gain = gain / note.pitches.length;\r\n if (note.noteType === 'r') {\r\n gain = 0.001;\r\n }\r\n note.pitches.forEach((pitch, pitchIx) => {\r\n const mtone: SmoMicrotone | null = note.getMicrotone(pitchIx) ?? null;\r\n frequency = SmoAudioPitch.smoPitchToFrequency(pitch, -1 * measure.transposeIndex, mtone);\r\n const def = SuiOscillator.defaults;\r\n def.instrument = soundInfo.instrument;\r\n def.frequency = frequency;\r\n def.duration = duration;\r\n def.gain = gain;\r\n if (soundInfo.waveform !== 'sample') {\r\n def.waveform = soundInfo.waveform;\r\n if (def.waveform === 'custom') {\r\n def.wavetable = SynthWavetable;\r\n }\r\n const osc = new SuiWavetable(def);\r\n ar.push(osc);\r\n } else {\r\n const osc = new SuiSampler(def);\r\n ar.push(osc);\r\n }\r\n });\r\n\r\n return ar;\r\n }\r\n\r\n static get attributes() {\r\n return ['duration', 'frequency', 'pitch', 'attackEnv', 'sustainEnv', 'decayEnv',\r\n 'releaseEnv', 'sustainLevel', 'releaseLevel', 'waveform', 'wavetable', 'gain'];\r\n }\r\n \r\n static resolveAfter(time: number) {\r\n return new Promise((resolve) => {\r\n const timerFunc = () => {\r\n resolve();\r\n }\r\n setTimeout(() => {\r\n timerFunc();\r\n }, time);\r\n });\r\n }\r\n _playPromise(duration: number, gain: GainNode) {\r\n const audio = SuiOscillator.audio;\r\n const promise = new Promise((resolve) => {\r\n if (this.osc) {\r\n this.osc.start(0);\r\n }\r\n setTimeout(() => {\r\n resolve();\r\n }, duration);\r\n\r\n setTimeout(() => {\r\n if (this.osc) {\r\n this.osc.stop(0);\r\n }\r\n this.disconnect();\r\n }, duration + 500);\r\n });\r\n return promise;\r\n }\r\n\r\n static toFloatArray(ar: number[]): Float32Array {\r\n const rv = new Float32Array(ar.length);\r\n let i = 0;\r\n for (i = 0; i < ar.length; ++i) {\r\n rv[i] = ar[i];\r\n }\r\n return rv;\r\n }\r\n reverb: SuiReverb | null;\r\n attack: number;\r\n decay: number;\r\n sustain: number;\r\n release: number;\r\n waveform: OscillatorType;\r\n attackEnv: number = -1;\r\n duration: number = -1;\r\n decayEnv: number = -1;\r\n sustainEnv: number = -1;\r\n releaseEnv: number = -1;\r\n gain: number = 1.0;\r\n sustainLevel: number = 0;\r\n releaseLevel: number = 0;\r\n frequency: number = -1;\r\n wavetable: WaveTable | null = null;\r\n useReverb: boolean;\r\n gainNode: GainNode | undefined;\r\n delayNode: DelayNode | undefined;\r\n instrument: string;\r\n osc: AudioScheduledSourceNode | undefined;\r\n constructor(parameters: SuiOscillatorParams) {\r\n smoSerialize.serializedMerge(SuiOscillator.attributes, parameters, this);\r\n this.reverb = null;\r\n // this.reverb = null;\r\n this.attack = this.attackEnv * SuiOscillator.attackTime;\r\n this.decay = this.decayEnv * SuiOscillator.decayTime;\r\n this.sustain = this.sustainEnv * this.duration;\r\n this.release = this.releaseEnv * this.duration;\r\n this.instrument = parameters.instrument;\r\n if (parameters.wavetable) {\r\n this.wavetable = parameters.wavetable;\r\n }\r\n this.useReverb = parameters.useReverb;\r\n // this.frequency = this.frequency / 2; // Overtones below partial\r\n this.waveform = parameters.waveform;\r\n if (!parameters.wavetable && this.waveform === 'custom') {\r\n this.waveform = 'sine';\r\n }\r\n }\r\n abstract play(): Promise;\r\n abstract createAudioNode(): AudioScheduledSourceNode;\r\n\r\n disconnect() {\r\n if (this.osc) {\r\n this.osc.disconnect();\r\n }\r\n if (this.gainNode) {\r\n this.gainNode.disconnect();\r\n }\r\n if (this.delayNode) {\r\n this.delayNode.disconnect();\r\n }\r\n if (this.reverb) {\r\n this.reverb.disconnect();\r\n }\r\n SuiOscillator.created -= 1;\r\n }\r\n\r\n /**\r\n * Connect the audio sound source to the output, combining other\r\n * nodes in the mix such as convolver (reverb), delay, and gain.\r\n * Also set up the envelope\r\n * @returns - a promise that tis resolved when `duration` time has expired\r\n */\r\n async createAudioGraph(): Promise {\r\n if (this.frequency === 0) {\r\n return SuiSampler.resolveAfter(this.duration);\r\n }\r\n const audio = SuiOscillator.audio;\r\n const attack = this.attack / 1000;\r\n const decay = this.decay / 1000;\r\n const sustain = this.sustain / 1000;\r\n const release = this.release / 1000;\r\n this.gainNode = audio.createGain();\r\n this.osc = this.createAudioNode();\r\n const gp1 = this.gain;\r\n\r\n if (this.useReverb) {\r\n this.reverb = new SuiReverb(SuiOscillator.audio);\r\n }\r\n\r\n if (this.useReverb && this.reverb) {\r\n this.delayNode = audio.createDelay(this.reverb.length);\r\n }\r\n this.gainNode.gain.exponentialRampToValueAtTime(gp1, audio.currentTime + attack);\r\n this.gainNode.gain.exponentialRampToValueAtTime(this.sustainLevel * gp1, audio.currentTime + attack + decay);\r\n this.gainNode.gain.exponentialRampToValueAtTime(this.releaseLevel * gp1, audio.currentTime + attack + decay + sustain);\r\n this.gainNode.gain.exponentialRampToValueAtTime(0.001, audio.currentTime + attack + decay + sustain + release);\r\n\r\n // osc.connect(gain1);\r\n if (this.useReverb && this.reverb && this.osc) {\r\n this.osc.connect(this.reverb.input);\r\n }\r\n this.osc.connect(this.gainNode);\r\n if (this.delayNode && this.reverb) {\r\n this.reverb.connect(this.delayNode);\r\n this.delayNode.connect(audio.destination);\r\n }\r\n this.gainNode.connect(audio.destination);\r\n SuiOscillator.created += 1;\r\n return this.playPromise(this.duration);\r\n }\r\n playPromise(duration: number): Promise {\r\n const promise = new Promise((resolve) => {\r\n if (this.osc) {\r\n this.osc.start(0);\r\n }\r\n setTimeout(() => {\r\n resolve();\r\n }, duration);\r\n setTimeout(() => {\r\n if (this.osc) {\r\n this.osc.stop(0);\r\n }\r\n this.disconnect();\r\n }, Math.round(duration * 1.05));\r\n });\r\n return promise;\r\n }\r\n}\r\n/**\r\n * An audio output that uses browser audio api OscillatorNode as a sound source\r\n * @category SuiAudio\r\n */\r\nexport class SuiWavetable extends SuiOscillator {\r\n createAudioNode(): AudioScheduledSourceNode {\r\n const node = SuiOscillator.audio.createOscillator();\r\n if (this.wavetable && this.wavetable.imaginary.length > 0 && this.wavetable.real.length > 0 && this.waveform === 'custom') {\r\n const wave = SuiOscillator.audio.createPeriodicWave(SuiOscillator.toFloatArray(this.wavetable.real),\r\n SuiOscillator.toFloatArray(this.wavetable.imaginary),\r\n { disableNormalization: false });\r\n node.setPeriodicWave(wave);\r\n } else {\r\n node.type = this.waveform;\r\n }\r\n node.frequency.value = this.frequency;\r\n return node;\r\n }\r\n // play the audio oscillator for the specified duration. Return a promise that\r\n // resolves after the duration. Also dispose of the audio resources after the play is complete.\r\n async play() {\r\n return this.createAudioGraph();\r\n }\r\n}\r\n\r\n/**\r\n * An audio output primitive that uses frequency-adjusted sampled sounds\r\n */\r\nexport class SuiSampler extends SuiOscillator {\r\n constructor(params: SuiOscillatorParams) {\r\n super(params);\r\n if (SuiSampleMedia.sampleOscMap[this.instrument]) {\r\n const sampleInfo = SuiSampleMedia.sampleOscMap[this.instrument];\r\n if (sampleInfo.length) {\r\n if (sampleInfo[0].sustain === 'sustained') {\r\n this.attack = 0.1 * this.duration;\r\n }\r\n }\r\n }\r\n }\r\n // Note: samplePromise must be complete before you call this \r\n createAudioNode(): AudioScheduledSourceNode {\r\n const node = SuiOscillator.audio.createBufferSource();\r\n const chooserParams = {\r\n instrument: this.instrument,\r\n frequency: this.frequency,\r\n duration: this.duration,\r\n gain: this.gain\r\n }\r\n const sample = SuiSampleMedia.matchedSample(chooserParams);\r\n if (!sample) {\r\n return node;\r\n }\r\n \r\n const cents = 1200 * (Math.log(this.frequency / sample!.frequency))\r\n / Math.log(2);\r\n this.gain = this.gain * sample.gain;\r\n node.buffer = sample!.sample;\r\n node.detune.value = cents; \r\n return node;\r\n }\r\n async play() {\r\n const self = this;\r\n return SuiSampleMedia.samplePromise(SuiOscillator.audio).then(() => {\r\n self.createAudioGraph();\r\n });\r\n }\r\n\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiOscillator, SuiSampler, SuiWavetable, SynthWavetable } from './oscillator';\r\nimport { SmoAudioScore } from '../../smo/xform/audioTrack';\r\nimport { SuiScoreView } from '../sui/scoreView';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SmoTie } from '../../smo/data/staffModifiers';\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { SuiAudioAnimationParams } from './musicCursor';\r\n\r\n/**\r\n * Create audio player for the score from the start point\r\n * @category SuiAudio\r\n */\r\nexport interface SuiAudioPlayerParams {\r\n startIndex: number,\r\n view: SuiScoreView,\r\n score: SmoScore,\r\n audioAnimation: SuiAudioAnimationParams\r\n}\r\n/**\r\n * Parameters used to create just-in-time oscillators\r\n * @category SuiAudio\r\n */\r\nexport interface SoundParams {\r\n frequencies: number[],\r\n duration: number,\r\n offsetPct: number,\r\n durationPct: number,\r\n volume: number,\r\n noteType: string,\r\n instrument: string,\r\n selector: SmoSelector\r\n}\r\n/**\r\n * A list of sound parameters for just-in-time oscillator creation\r\n * @category SuiAudio\r\n */\r\n export interface SoundParamMeasureLink {\r\n soundParams: Record,\r\n endTicks: number,\r\n next: SoundParamMeasureLink | null\r\n}\r\n/**\r\n * A set of oscillators to be played at a certain time.\r\n * @category SuiAudio\r\n */\r\nexport interface CuedAudioContext {\r\n oscs: SuiOscillator[],\r\n playMeasureIndex: number,\r\n playTickIndex: number,\r\n waitTime: number,\r\n offsetPct: number,\r\n durationPct: number,\r\n selector: SmoSelector\r\n}\r\n/**\r\n * A list of oscillators. We keep them in a list until played so we \r\n * can GC them if playing is cancelled\r\n * @category SuiAudio\r\n */\r\nexport interface CuedAudioLink {\r\n sound: CuedAudioContext;\r\n next: CuedAudioLink | null;\r\n}\r\n/**\r\n * Maintain a list of buffers ready to play, since this is a \r\n * system resource.\r\n * @category SuiAudio\r\n */\r\nexport class CuedAudioContexts {\r\n soundHead: CuedAudioLink | null = null;\r\n soundTail: CuedAudioLink | null = null;\r\n paramLinkHead: SoundParamMeasureLink | null = null;\r\n paramLinkTail: SoundParamMeasureLink | null = null;\r\n soundListLength = 0;\r\n playWaitTimer = 0; \r\n playMeasureIndex: number = 0; // index of the measure we are playing\r\n cueMeasureIndex: number = 0; // measure index we are populating\r\n complete: boolean = false;\r\n addToTail(cuedSound: CuedAudioContext) {\r\n const tail = { sound: cuedSound, next: null };\r\n if (this.soundTail === null) {\r\n this.soundTail = tail;\r\n this.soundHead = tail;\r\n } else {\r\n this.soundTail.next = { sound: cuedSound, next: null };\r\n this.soundTail = this.soundTail.next;\r\n }\r\n this.soundListLength += cuedSound.oscs.length;\r\n }\r\n advanceHead(): CuedAudioContext | null {\r\n if (this.soundHead === null) {\r\n return null;\r\n }\r\n const cuedSound = this.soundHead.sound;\r\n this.soundHead = this.soundHead.next;\r\n this.soundListLength -= cuedSound.oscs.length;\r\n return cuedSound;\r\n }\r\n get soundCount() {\r\n return this.soundListLength;\r\n }\r\n reset() {\r\n this.soundHead = null;\r\n this.soundTail = null;\r\n this.paramLinkHead = null;\r\n this.paramLinkTail = null;\r\n this.soundListLength = 0;\r\n this.playWaitTimer = 0;\r\n this.playMeasureIndex = 0;\r\n this.cueMeasureIndex = 0;\r\n this.complete = false;\r\n }\r\n}\r\n/**\r\n * Play the music, ja!\r\n * @category SuiAudio\r\n */\r\nexport class SuiAudioPlayer {\r\n static _playing: boolean = false;\r\n static instanceId: number = 0;\r\n static duplicatePitchThresh = 4;\r\n static voiceThresh = 16;\r\n static _playingInstance: SuiAudioPlayer | null = null;\r\n static set playing(val) {\r\n SuiAudioPlayer._playing = val;\r\n }\r\n static get audioBufferSize() {\r\n return 512;\r\n }\r\n static incrementInstanceId() {\r\n const id = SuiAudioPlayer.instanceId + 1;\r\n SuiAudioPlayer.instanceId = id;\r\n return id;\r\n }\r\n static get playing() {\r\n if (typeof (SuiAudioPlayer._playing) === 'undefined') {\r\n SuiAudioPlayer._playing = false;\r\n }\r\n return SuiAudioPlayer._playing;\r\n }\r\n\r\n static pausePlayer() {\r\n if (SuiAudioPlayer._playingInstance) {\r\n const a = SuiAudioPlayer._playingInstance;\r\n a.paused = true;\r\n a.audioAnimation.clearAudioAnimationHandler(0);\r\n }\r\n SuiAudioPlayer.playing = false;\r\n\r\n }\r\n instanceId: number;\r\n paused: boolean;\r\n view: SuiScoreView;\r\n score: SmoScore;\r\n cuedSounds: CuedAudioContexts;\r\n audioDefaults = SuiOscillator.defaults;\r\n openTies: Record = {};\r\n audioAnimation: SuiAudioAnimationParams;\r\n constructor(parameters: SuiAudioPlayerParams) {\r\n this.instanceId = SuiAudioPlayer.incrementInstanceId();\r\n this.paused = false;\r\n this.view = parameters.view;\r\n this.score = parameters.score;\r\n // Assume tempo is same for all measures\r\n this.cuedSounds = new CuedAudioContexts();\r\n this.audioAnimation = parameters.audioAnimation;\r\n }\r\n\r\n getNoteSoundData(measureIndex: number) {\r\n const measureNotes: Record = {};\r\n let measureTicks = this.score.staves[0].measures[measureIndex].getMaxTicksVoice();\r\n const freqDuplicates: Record> = {};\r\n const voiceCount: Record = {};\r\n this.score.staves.forEach((staff, staffIx) => {\r\n const measure = staff.measures[measureIndex];\r\n measure.voices.forEach((voice, voiceIx) => {\r\n let curTick = 0;\r\n const instrument = staff.getStaffInstrument(measure.measureNumber.measureIndex);\r\n voice.notes.forEach((smoNote, tickIx) => {\r\n const frequencies: number[] = [];\r\n const xpose = -1 * measure.transposeIndex;\r\n const selector: SmoSelector = SmoSelector.default;\r\n selector.measure = measureIndex;\r\n selector.staff = staffIx;\r\n selector.voice = voiceIx;\r\n selector.tick = tickIx;\r\n let ties: SmoTie[] = [];\r\n const tieIx = '' + staffIx + '-' + measureIndex + '-' + voiceIx;\r\n const prevMeasureIx = '' + staffIx + '-' + (measureIndex - 1) + '-' + voiceIx;\r\n if (smoNote.noteType === 'n' && !smoNote.isHidden()) {\r\n ties = staff.getTiesStartingAt(selector);\r\n smoNote.pitches.forEach((pitch, pitchIx) => {\r\n const freq = SmoAudioPitch.smoPitchToFrequency(pitch, xpose, smoNote.getMicrotone(pitchIx) ?? null);\r\n const freqRound = Math.round(freq);\r\n if (!freqDuplicates[curTick]) {\r\n freqDuplicates[curTick] = {};\r\n voiceCount[curTick] = 0;\r\n }\r\n const freqBeat = freqDuplicates[curTick];\r\n if (!freqBeat[freqRound]) {\r\n freqBeat[freqRound] = 0;\r\n }\r\n if (freqBeat[freqRound] < SuiAudioPlayer.duplicatePitchThresh && voiceCount[curTick] < SuiAudioPlayer.voiceThresh) {\r\n frequencies.push(freq);\r\n freqBeat[freqRound] += 1;\r\n voiceCount[curTick] += 1;\r\n }\r\n });\r\n const duration = smoNote.tickCount;\r\n const volume = SmoAudioScore.volumeFromNote(smoNote, SmoAudioScore.dynamicVolumeMap.mf);\r\n const soundData: SoundParams = {\r\n frequencies,\r\n volume,\r\n offsetPct: curTick / measureTicks,\r\n durationPct: duration / measureTicks,\r\n noteType: smoNote.noteType,\r\n duration,\r\n instrument: instrument.instrument,\r\n selector\r\n };\r\n const pushTickArray = (curTick: number, soundData: SoundParams) => {\r\n if (typeof(measureNotes[curTick]) === 'undefined') {\r\n measureNotes[curTick] = [];\r\n }\r\n measureNotes[curTick].push(soundData);\r\n }\r\n // If this is continuation of tied note, just change duration\r\n if (this.openTies[prevMeasureIx]) {\r\n this.openTies[prevMeasureIx]!.duration += duration;\r\n if (ties.length === 0) {\r\n this.openTies[prevMeasureIx] = null;\r\n }\r\n }\r\n else if (this.openTies[tieIx]) {\r\n this.openTies[tieIx]!.duration += duration;\r\n if (ties.length === 0) {\r\n this.openTies[tieIx] = null;\r\n }\r\n } else if (ties.length) {\r\n // If start of tied note, record the tie note, the next note in this voice\r\n // will adjust duration\r\n this.openTies[tieIx] = soundData;\r\n pushTickArray(curTick, soundData);\r\n } else {\r\n pushTickArray(curTick, soundData);\r\n }\r\n }\r\n curTick += Math.round(smoNote.tickCount);\r\n });\r\n });\r\n });\r\n const keys = Object.keys(measureNotes).map((x) => parseInt(x, 10));\r\n if (keys.length) {\r\n measureTicks -= keys.reduce((a, b) => a > b ? a : b);\r\n }\r\n return { endTicks: measureTicks, measureNotes };\r\n }\r\n \r\n createCuedSound(measureIndex: number) {\r\n let i = 0;\r\n let j = 0;\r\n let measureBeat = 0;\r\n if (!SuiAudioPlayer.playing || this.cuedSounds.paramLinkHead === null) {\r\n return;\r\n }\r\n // TODO base on the selection start.\r\n const { endTicks, measureNotes } = { endTicks: this.cuedSounds.paramLinkHead.endTicks, measureNotes: this.cuedSounds.paramLinkHead.soundParams };\r\n this.cuedSounds.paramLinkHead = this.cuedSounds.paramLinkHead.next;\r\n const maxMeasures = this.score.staves[0].measures.length;\r\n const smoTemp = this.score.staves[0].measures[measureIndex].getTempo();\r\n const tempo = smoTemp.bpm * (smoTemp.beatDuration / 4096);\r\n const keys: number[] = [];\r\n Object.keys(measureNotes).forEach((key) => {\r\n keys.push(parseInt(key, 10));\r\n }); \r\n // There is a key for each note in the measure. The value is the number of ticks before that note is played\r\n for (j = 0; j < keys.length; ++j) {\r\n const beatTime = keys[j];\r\n const soundData = measureNotes[beatTime];\r\n let durationPct = 0;\r\n let offsetPct = 0;\r\n if (soundData.length === 0) {\r\n console.log('empty sound measure');\r\n continue;\r\n }\r\n soundData.forEach((ss) => {\r\n if (durationPct === 0) {\r\n durationPct = ss.durationPct;\r\n offsetPct = ss.offsetPct;\r\n }\r\n durationPct = Math.min(durationPct, ss.durationPct);\r\n offsetPct = Math.min(offsetPct, ss.offsetPct);\r\n });\r\n const cuedSound: CuedAudioContext = { oscs: [], waitTime: 0, playMeasureIndex: measureIndex, playTickIndex: j,\r\n offsetPct, durationPct, selector: soundData[0].selector };\r\n const timeRatio = 60000 / (tempo * 4096);\r\n // If there is complete silence here, put a silent beat\r\n if (beatTime > measureBeat) {\r\n const params = this.audioDefaults;\r\n params.frequency = 0;\r\n params.duration = (beatTime - measureBeat) * timeRatio;\r\n params.gain = 0;\r\n params.useReverb = false;\r\n const silence: CuedAudioContext = { oscs: [], waitTime: params.duration, playMeasureIndex: measureIndex, playTickIndex: j,\r\n offsetPct, durationPct, selector: soundData[0].selector };\r\n silence.oscs.push(new SuiSampler(params));\r\n this.cuedSounds.addToTail(silence);\r\n measureBeat = beatTime;\r\n }\r\n this.cuedSounds.addToTail(cuedSound);\r\n soundData.forEach((sound) => {\r\n const adjDuration = Math.round(sound.duration * timeRatio) + 150;\r\n for (i = 0; i < sound.frequencies.length && sound.noteType === 'n'; ++i) {\r\n const freq = sound.frequencies[i];\r\n const params = this.audioDefaults;\r\n params.frequency = freq;\r\n params.duration = adjDuration;\r\n params.gain = sound.volume;\r\n params.instrument = sound.instrument;\r\n params.useReverb = this.score.audioSettings.reverbEnable;\r\n if (this.score.audioSettings.playerType === 'synthesizer') {\r\n params.wavetable = SynthWavetable;\r\n params.waveform = this.score.audioSettings.waveform;\r\n cuedSound.oscs.push(new SuiWavetable(params));\r\n } else {\r\n cuedSound.oscs.push(new SuiSampler(params));\r\n }\r\n }\r\n });\r\n if (j + 1 < keys.length) {\r\n const diff = (keys[j + 1] - keys[j]);\r\n cuedSound.waitTime = diff * timeRatio;\r\n measureBeat += diff;\r\n } else if (measureIndex + 1 < maxMeasures) {\r\n // If the next measure, calculate the frequencies for the next track.\r\n this.cuedSounds.cueMeasureIndex += 1;\r\n cuedSound.waitTime = endTicks * timeRatio;\r\n } else {\r\n this.cuedSounds.complete = true;\r\n }\r\n // }, 1);\r\n }\r\n }\r\n populateSounds(measureIndex: number) {\r\n if (!SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n const interval = 20;\r\n let draining = false;\r\n const buffer = SuiAudioPlayer.audioBufferSize;\r\n const timer = setInterval(() => {\r\n if (this.cuedSounds.complete || SuiAudioPlayer.playing === false) {\r\n clearInterval(timer);\r\n return;\r\n }\r\n if (this.cuedSounds.paramLinkHead === null) {\r\n this.cuedSounds.complete = true;\r\n return;\r\n }\r\n if (draining && this.cuedSounds.soundCount > buffer / 4) {\r\n return;\r\n }\r\n if (this.cuedSounds.soundCount > buffer) {\r\n draining = true;\r\n return;\r\n }\r\n draining = false;\r\n this.createCuedSound(measureIndex);\r\n measureIndex += 1;\r\n }, interval);\r\n }\r\n playSounds() {\r\n this.cuedSounds.playMeasureIndex = 0;\r\n this.cuedSounds.playWaitTimer = 0;\r\n let previousDuration = 0;\r\n const timer = () => {\r\n setTimeout(() => {\r\n const cuedSound = this.cuedSounds.advanceHead();\r\n if (cuedSound === null) {\r\n SuiAudioPlayer._playing = false;\r\n this.audioAnimation.clearAudioAnimationHandler(previousDuration);\r\n return;\r\n }\r\n if (SuiAudioPlayer._playing === false) {\r\n this.audioAnimation.clearAudioAnimationHandler(previousDuration);\r\n return;\r\n }\r\n if (cuedSound.oscs.length === 0) {\r\n this.cuedSounds.playMeasureIndex += 1;\r\n this.cuedSounds.playWaitTimer = cuedSound.waitTime;\r\n console.warn('empty oscs in playback');\r\n timer(); \r\n return;\r\n }\r\n previousDuration = cuedSound.oscs[0].duration;\r\n SuiAudioPlayer._playChord(cuedSound.oscs);\r\n this.audioAnimation.audioAnimationHandler(this.view, cuedSound.selector,\r\n cuedSound.offsetPct, cuedSound.durationPct);\r\n this.cuedSounds.playMeasureIndex += 1;\r\n this.cuedSounds.playWaitTimer = cuedSound.waitTime;\r\n timer();\r\n }, this.cuedSounds.playWaitTimer);\r\n }\r\n timer();\r\n }\r\n playAfter(milliseconds: number, oscs: SuiOscillator[]) {\r\n setTimeout(() => {\r\n SuiAudioPlayer._playChord(oscs);\r\n }, milliseconds)\r\n }\r\n startPlayer(measureIndex: number) {\r\n this.openTies = {};\r\n this.cuedSounds.reset();\r\n this.cuedSounds.cueMeasureIndex = measureIndex;\r\n this.cuedSounds.playMeasureIndex = this.cuedSounds.cueMeasureIndex;\r\n this.cuedSounds.paramLinkHead = null;\r\n this.cuedSounds.paramLinkTail = null;\r\n const endMeasure = this.score.staves[0].measures.length;\r\n let i = 0;\r\n for (i = this.cuedSounds.cueMeasureIndex; i < endMeasure; ++i) {\r\n const { endTicks, measureNotes } = this.getNoteSoundData(i);\r\n const node = {\r\n soundParams: measureNotes,\r\n endTicks,\r\n next: null\r\n };\r\n if (this.cuedSounds.paramLinkHead === null) {\r\n this.cuedSounds.paramLinkHead = node;\r\n this.cuedSounds.paramLinkTail = node;\r\n } else {\r\n this.cuedSounds.paramLinkTail!.next = node;\r\n this.cuedSounds.paramLinkTail = this.cuedSounds.paramLinkTail!.next;\r\n }\r\n }\r\n setTimeout(() => {\r\n this.populateSounds(measureIndex);\r\n }, 1);\r\n const bufferThenPlay = () => {\r\n setTimeout(() => {\r\n if (this.cuedSounds.soundListLength >= SuiAudioPlayer.audioBufferSize || this.cuedSounds.complete) {\r\n this.playSounds();\r\n } else {\r\n bufferThenPlay();\r\n }\r\n }, 50);\r\n }\r\n bufferThenPlay();\r\n }\r\n\r\n static stopPlayer() {\r\n if (SuiAudioPlayer._playingInstance) {\r\n const a = SuiAudioPlayer._playingInstance;\r\n a.audioAnimation.clearAudioAnimationHandler(0);\r\n a.paused = false;\r\n a.cuedSounds.reset();\r\n }\r\n SuiAudioPlayer.playing = false;\r\n }\r\n\r\n static get playingInstance() {\r\n if (!SuiAudioPlayer._playingInstance) {\r\n return null;\r\n }\r\n return SuiAudioPlayer._playingInstance;\r\n }\r\n\r\n // the oscAr contains an oscillator for each pitch in the chord.\r\n // each inner oscillator is a promise, the combined promise is resolved when all\r\n // the beats have completed.\r\n static _playChord(oscAr: SuiOscillator[]) {\r\n var par: Promise[] = [];\r\n oscAr.forEach((osc) => {\r\n par.push(osc.play());\r\n });\r\n return Promise.all(par);\r\n }\r\n\r\n // Starts the player.\r\n play() {\r\n let i = 0;\r\n if (SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n SuiAudioPlayer._playingInstance = this;\r\n SuiAudioPlayer.playing = true;\r\n const startIndex = this.view.tracker.getFirstMeasureOfSelection()?.measureNumber.measureIndex ?? 0;\r\n //for (i = this.startIndex; i < this.score.staves[0].measures.length; ++i) {\r\n // this.tracks.push(SuiAudioPlayer.getTrackSounds(this.audio.tracks, i));\r\n // }\r\n // const sounds = SuiAudioPlayer.getTrackSounds(this.audio.tracks, this.startIndex);\r\n // this.playSoundsAtOffset(sounds, 0);\r\n this.startPlayer(startIndex);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoAudioPitch } from '../../smo/data/music';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoOscillatorInfo, SmoInstrument, SmoOscillatorInfoAllTypes,\r\n SmoOscillatorInfoNumberType, SmoOscillatorInfoNumberArType, SmoOscillatorInfoStringType, SmoOscillatorInfoStringNullType,\r\n SmoOscillatorInfoWaveformType, SmoOscillatorInfoSustainType, SmoOscillatorInfoOptionsType } from '../../smo/data/staffModifiers';\r\n/**\r\n * A set of parameters from the instrument interface used to create audio from samples.\r\n * @category SuiAudio\r\n */\r\n export interface SampleChooserParams {\r\n family?: string,\r\n instrument: string,\r\n frequency: number,\r\n duration: number,\r\n gain: number,\r\n articulation?: string\r\n}\r\n/**\r\n * A function prototype that chooses from among samples to return the correct one for that note\r\n */\r\nexport type SampleChooser = (params: SampleChooserParams, samples: SmoOscillatorInfo[]) => AudioSample | null;\r\n/**\r\n * A specific audio sample that can be converted into an audio node\r\n * @category SuiAudio\r\n */\r\nexport interface AudioSample {\r\n sample: AudioBuffer,\r\n frequency: number,\r\n patch: string,\r\n gain: number\r\n}\r\n/**\r\n * Interface for a chooser function and a set of samples\r\n * @category SuiAudio\r\n */\r\nexport interface InstrumentSampleChooser {\r\n instrument: string,\r\n sampleChooser: SampleChooser,\r\n samples: SmoOscillatorInfo[]\r\n}\r\n\r\nexport const sampleForPercussion = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n const longSamples = samples.filter((ss) => ss.instrument === 'percussion');\r\n let sample: AudioSample | null = null;\r\n if (longSamples.length) {\r\n sample = sampleFromFrequency(params, longSamples);\r\n if (sample) {\r\n return sample;\r\n }\r\n }\r\n return sampleFromFrequency(params, samples);\r\n}\r\n/**\r\n * For instruments like violin that require different samples depending on note duration\r\n * @param params \r\n * @param samples \r\n * @returns \r\n * @category SuiAudio\r\n */\r\nexport const sampleFromMinDuration = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n const longSamples = samples.filter((ss) => ss.minDuration < params.duration && ss.minDuration > 0);\r\n if (longSamples.length) {\r\n return sampleFromFrequency(params, longSamples);\r\n }\r\n return sampleFromFrequency(params, samples.filter((ss) => ss.minDuration === 0));\r\n}\r\n\r\n/**\r\n * Give a set of samples, return the one that closest matches the frequency\r\n * @param params \r\n * @param samples \r\n * @returns \r\n * @category SuiAudio\r\n*/\r\nexport const sampleFromFrequency = (params: SampleChooserParams, samples: SmoOscillatorInfo[]): AudioSample | null => {\r\n let min = 9999;\r\n let rv: AudioSample | null = null;\r\n let i = 0;\r\n const f = params.frequency;\r\n for (i = 0; i < samples.length; ++i) {\r\n const oscInfo = samples[i];\r\n if (!oscInfo.sample || !SuiSampleMedia.sampleBufferMap[oscInfo.sample]) {\r\n continue;\r\n }\r\n const gain = oscInfo.dynamic / 100;\r\n const buffer = SuiSampleMedia.sampleBufferMap[oscInfo.sample];\r\n if (Math.abs(f - oscInfo.nativeFrequency) < min) {\r\n min = Math.abs(f - oscInfo.nativeFrequency);\r\n rv = {\r\n sample: buffer,\r\n frequency: oscInfo.nativeFrequency,\r\n patch: oscInfo.sample,\r\n gain\r\n };\r\n } \r\n }\r\n return rv;\r\n}\r\n/**\r\n * Logic to create audio nodes out of HTML5 media elements\r\n * @category SuiAudio\r\n */\r\nexport class SuiSampleMedia {\r\n static sampleFiles: SmoOscillatorInfo[] = [];\r\n static sampleBufferMap: Record = {};\r\n static sampleOscMap: Record = {};\r\n static instrumentChooser: Record = {};\r\n static receivedBuffer: boolean = false;\r\n static getFamilyForInstrument(instKey: string): string {\r\n const sound = SuiSampleMedia.instrumentChooser[instKey];\r\n if (sound && sound.samples.length) {\r\n return sound.samples[0].family;\r\n }\r\n return 'keyboard';\r\n }\r\n static insertIntoMap(sample: Partial) {\r\n const oscInfo = SmoInstrument.defaultOscillatorParam;\r\n const populatePartial = (partial: Partial, full: SmoOscillatorInfo, \r\n param: SmoOscillatorInfoNumberType | SmoOscillatorInfoNumberArType | SmoOscillatorInfoStringType | SmoOscillatorInfoStringNullType\r\n | SmoOscillatorInfoOptionsType | SmoOscillatorInfoSustainType | SmoOscillatorInfoWaveformType) => {\r\n (full[param] as any) = typeof(partial[param]) === 'undefined' ? full[param] : partial[param];\r\n }\r\n SmoOscillatorInfoAllTypes.forEach((paramType) => {\r\n populatePartial(sample, oscInfo, paramType as any);\r\n });\r\n if (!this.sampleOscMap[oscInfo.instrument]) {\r\n this.sampleOscMap[oscInfo.instrument] = [];\r\n }\r\n this.sampleOscMap[oscInfo.instrument].push(oscInfo);\r\n SuiSampleMedia.sampleFiles.push(oscInfo);\r\n }\r\n static populateSampleMap() {\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'samplecn4',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'samplebb4',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'b', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'sample-piano-a2',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n dynamic: 35,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: 'sample-piano-fs2',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n dynamic: 35,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'f', accidental: '#', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'basspizz-c2-sso',\r\n family: 'strings',\r\n instrument: 'jazzBass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: '#', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'basspizz-c3-sso',\r\n family: 'strings',\r\n instrument: 'jazzBass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: '#', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'eguitar-e3',\r\n family: 'strings',\r\n instrument: 'eGuitar',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'eguitar-d4',\r\n family: 'strings',\r\n instrument: 'eGuitar',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'd', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-bass-a1',\r\n family: 'strings',\r\n instrument: 'bass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 1 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-bass-a3',\r\n family: 'strings',\r\n instrument: 'bass',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-c4',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-b5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violinshort-e5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 0,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e6',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e5',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-violin-e4',\r\n family: 'strings',\r\n instrument: 'violin',\r\n minDuration: 400,\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-cello-bb3',\r\n family: 'strings',\r\n instrument: 'cello',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'b', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-cello-c4',\r\n family: 'strings',\r\n instrument: 'cello',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trumpet-g5-sso',\r\n family: 'brass',\r\n instrument: 'trumpet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trumpet-e4-sso',\r\n family: 'brass',\r\n instrument: 'trumpet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-horn-e4',\r\n family: 'brass',\r\n instrument: 'horn',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-horn-g3',\r\n family: 'brass',\r\n instrument: 'horn',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trombone-g3-sso',\r\n family: 'brass',\r\n instrument: 'trombone',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'trombone-g4-sso',\r\n family: 'brass',\r\n instrument: 'trombone',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-tuba-c2',\r\n family: 'brass',\r\n instrument: 'tuba',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 2 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-tuba-c3',\r\n family: 'brass',\r\n instrument: 'tuba',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-flute-c5',\r\n family: 'wind',\r\n instrument: 'flute',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-flute-c6',\r\n family: 'wind',\r\n instrument: 'flute',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 6 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-clarinet-c4',\r\n family: 'wind',\r\n instrument: 'clarinet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-clarinet-c5',\r\n family: 'wind',\r\n instrument: 'clarinet',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 5 }, 0, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-a3',\r\n family: 'wind',\r\n instrument: 'altoSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-c4',\r\n family: 'wind',\r\n instrument: 'altoSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-a3',\r\n family: 'wind',\r\n instrument: 'tenorSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 3 }, 24, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'sample-asax-c4',\r\n family: 'wind',\r\n instrument: 'tenorSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 24, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'barisax-d2-nz10',\r\n family: 'wind',\r\n instrument: 'bariSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'd', accidental: 'n', octave: 2 }, 12, null),\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'barisax-c3-nz10',\r\n family: 'wind',\r\n instrument: 'bariSax',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 12, null) - 5,\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'pad-c4-vita',\r\n family: 'synth',\r\n instrument: 'pad',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 3 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'sustained',\r\n sample: 'pad-c5-vita',\r\n family: 'synth',\r\n instrument: 'pad',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-hh-closed',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'g', accidental: 'n', octave: 5 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-snare',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'f', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-tom1',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'a', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-tom2',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'e', accidental: 'n', octave: 5 }, 0, null),\r\n dynamic: 100\r\n });\r\n SuiSampleMedia.insertIntoMap({\r\n sustain: 'percussive',\r\n sample: 'drum-drumset-kick',\r\n family: 'drums',\r\n instrument: 'percussion',\r\n nativeFrequency: SmoAudioPitch.smoPitchToFrequency({ letter: 'c', accidental: 'n', octave: 4 }, 0, null),\r\n dynamic: 100\r\n });\r\n const instrumentMap = Object.keys(SuiSampleMedia.sampleOscMap);\r\n instrumentMap.forEach((instrumentKey) => {\r\n SuiSampleMedia.instrumentChooser[instrumentKey] = {\r\n instrument: instrumentKey,\r\n samples: SuiSampleMedia.sampleOscMap[instrumentKey],\r\n sampleChooser: sampleFromFrequency\r\n }\r\n });\r\n SuiSampleMedia.instrumentChooser['violin'].sampleChooser = sampleFromMinDuration;\r\n SuiSampleMedia.instrumentChooser['percussion'].sampleChooser = sampleForPercussion;\r\n }\r\n static getSmoOscillatorInfo(instrument: string) {\r\n if (!SuiSampleMedia.sampleOscMap[instrument]) {\r\n return SuiSampleMedia.sampleOscMap['piano'];\r\n }\r\n return SuiSampleMedia.sampleOscMap[instrument];\r\n }\r\n /**\r\n * Load samples so we can play the music\r\n * @returns - promise, resolved when loaded\r\n */\r\n static samplePromise(audio: AudioContext): Promise {\r\n const mediaElements: HTMLMediaElement[] = [];\r\n let i = 0;\r\n if (SuiSampleMedia.receivedBuffer) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n SuiSampleMedia.populateSampleMap();\r\n const loadedSamples: Record = {};\r\n for (i = 0; i < SuiSampleMedia.sampleFiles.length; ++i) {\r\n const file = SuiSampleMedia.sampleFiles[i];\r\n if (!file.sample) {\r\n continue;\r\n }\r\n const sampleName = file.sample;\r\n const audioElement: HTMLMediaElement | null = document.getElementById(file.sample) as HTMLMediaElement;\r\n if (!loadedSamples[file.sample] && audioElement) {\r\n loadedSamples[file.sample] = true;\r\n const media = audio.createMediaElementSource(audioElement);\r\n mediaElements.push(audioElement);\r\n const req = new XMLHttpRequest();\r\n req.open('GET', media.mediaElement.src, true);\r\n req.responseType = 'arraybuffer';\r\n req.send();\r\n req.onload = () => {\r\n const audioData = req.response;\r\n audio.decodeAudioData(audioData, (decoded) => {\r\n SuiSampleMedia.sampleBufferMap[sampleName] = decoded;\r\n SuiSampleMedia.receivedBuffer = true;\r\n });\r\n };\r\n }\r\n if (mediaElements.length < 1) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n }\r\n const rv = new Promise((resolve: any) => {\r\n const checkSample = () => {\r\n setTimeout(() => {\r\n if (!SuiSampleMedia.receivedBuffer) {\r\n checkSample();\r\n } else {\r\n resolve();\r\n }\r\n }, 100);\r\n };\r\n checkSample();\r\n });\r\n return rv;\r\n }\r\n\r\n static sampleForFrequency(f: number, oscs: SmoOscillatorInfo[]): AudioSample | null {\r\n let min = 9999;\r\n let rv: AudioSample | null = null;\r\n let i = 0;\r\n for (i = 0; i < oscs.length; ++i) {\r\n const oscInfo = oscs[i];\r\n if (!oscInfo.sample || !SuiSampleMedia.sampleBufferMap[oscInfo.sample]) {\r\n continue;\r\n }\r\n const buffer = SuiSampleMedia.sampleBufferMap[oscInfo.sample];\r\n const gain = oscInfo.dynamic / 100;\r\n if (Math.abs(f - oscInfo.nativeFrequency) < min) {\r\n min = Math.abs(f - oscInfo.nativeFrequency);\r\n rv = {\r\n sample: buffer,\r\n frequency: oscInfo.nativeFrequency,\r\n patch: oscInfo.sample,\r\n gain\r\n };\r\n } \r\n }\r\n return rv;\r\n }\r\n static matchedSample(params: SampleChooserParams): AudioSample | null {\r\n let instrumentKey = params.instrument;\r\n if (!SuiSampleMedia.instrumentChooser[instrumentKey]) {\r\n instrumentKey = 'piano';\r\n }\r\n if (!SuiSampleMedia.instrumentChooser[instrumentKey]) {\r\n const keys = Object.keys(SuiSampleMedia.sampleOscMap);\r\n if (keys.length === 0) {\r\n return null;\r\n }\r\n instrumentKey = keys[0];\r\n }\r\n return SuiSampleMedia.instrumentChooser[instrumentKey].sampleChooser(params, SuiSampleMedia.instrumentChooser[instrumentKey].samples);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Utilities for formatting the music by estimating the geometry of the music.\r\n * @module /render/sui/formatter\r\n */\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { vexGlyph } from '../vex/glyphDimensions';\r\nimport { SmoDynamicText, SmoLyric, SmoArticulation, SmoOrnament } from '../../smo/data/noteModifiers';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoBeamer } from '../../smo/xform/beamers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoStaffHairpin, SmoStaffTextBracket, SmoTabStave } from '../../smo/data/staffModifiers';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { ScaledPageLayout, SmoLayoutManager, SmoPageLayout } from '../../smo/data/scoreModifiers';\r\nimport { SmoMeasure, ISmoBeamGroup } from '../../smo/data/measure';\r\nimport { TimeSignature, SmoTempoText } from '../../smo/data//measureModifiers';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { VexFlow, defaultMeasurePadding } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\nconst VF = VexFlow;\r\n\r\nexport interface SuiTickContext {\r\n widths: number[],\r\n tickCounts: number[]\r\n}\r\n/**\r\n * Estimated x, y position of the measure\r\n * @category SuiRender\r\n */\r\nexport interface MeasureEstimate {\r\n measures: SmoMeasure[], x: number, y: number\r\n}\r\nexport interface LineRender {\r\n systems: Record\r\n}\r\n\r\n/**\r\n * Keep track of start/end measures on a page. If the page\r\n * content doesn't change, and the measures don't change, we don't\r\n * need to re-render the content\r\n * @catgegory SuiRender\r\n */\r\nexport interface RenderedPage {\r\n startMeasure: number,\r\n endMeasure: number\r\n}\r\n/**\r\n * Utilities for estimating measure/system/page width and height\r\n * @category SuiRender\r\n */\r\nexport class SuiLayoutFormatter {\r\n score: SmoScore;\r\n systems: Record = {};\r\n columnMeasureMap: Record;\r\n currentPage: number = 0;\r\n svg: SvgPageMap;\r\n renderedPages: Record;\r\n lines: number[] = [];\r\n constructor(score: SmoScore, svg: SvgPageMap, renderedPages: Record) {\r\n this.score = score;\r\n this.svg = svg;\r\n this.columnMeasureMap = {};\r\n this.renderedPages = renderedPages;\r\n this.score.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n if (!this.columnMeasureMap[measure.measureNumber.measureIndex]) {\r\n this.columnMeasureMap[measure.measureNumber.measureIndex] = [];\r\n }\r\n this.columnMeasureMap[measure.measureNumber.measureIndex].push(measure);\r\n });\r\n });\r\n }\r\n \r\n /**\r\n * Once we know which line a measure is going on, make a map for it for easy\r\n * looking during rendering\r\n * @param measures \r\n * @param lineIndex \r\n * @param systemIndex \r\n */\r\n updateSystemMap(measures: SmoMeasure[], lineIndex: number, systemIndex: number) {\r\n if (!this.systems[lineIndex]) {\r\n const nextLr: LineRender = {\r\n systems: {}\r\n };\r\n this.systems[lineIndex] = nextLr;\r\n }\r\n const systemRender = this.systems[lineIndex];\r\n if (!systemRender.systems[systemIndex]) {\r\n systemRender.systems[systemIndex] = measures;\r\n }\r\n }\r\n trimPages(startPageCount: number): boolean {\r\n let pl: SmoPageLayout[] | undefined = this.score?.layoutManager?.pageLayouts;\r\n if (pl) {\r\n if (this.currentPage < pl.length - 1) {\r\n this.score!.layoutManager!.trimPages(this.currentPage);\r\n pl = this.score?.layoutManager?.pageLayouts;\r\n }\r\n if (pl && pl.length !== startPageCount) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * see if page breaks this boundary. If it does, bump the current page and move the system down\r\n * to the new page\r\n * @param scoreLayout \r\n * @param currentLine \r\n * @param bottomMeasure \r\n * @returns \r\n */\r\n checkPageBreak(scoreLayout: ScaledPageLayout, currentLine: SmoMeasure[], bottomMeasure: SmoMeasure): ScaledPageLayout {\r\n let pageAdj = 0;\r\n const lm: SmoLayoutManager = this.score!.layoutManager!;\r\n // See if this measure breaks a page.\r\n const maxY = bottomMeasure.lowestY;\r\n if (maxY > ((this.currentPage + 1) * scoreLayout.pageHeight) - scoreLayout.bottomMargin) {\r\n this.currentPage += 1;\r\n // If this is a new page, make sure there is a layout for it.\r\n lm.addToPageLayouts(this.currentPage);\r\n scoreLayout = lm.getScaledPageLayout(this.currentPage);\r\n\r\n // When adjusting the page, make it so the top staff of the system\r\n // clears the bottom of the page.\r\n const topMeasure = currentLine.reduce((a, b) =>\r\n a.svg.logicalBox.y < b.svg.logicalBox.y ? a : b\r\n );\r\n const minMaxY = topMeasure.svg.logicalBox.y;\r\n pageAdj = (this.currentPage * scoreLayout.pageHeight) - minMaxY;\r\n pageAdj = pageAdj + scoreLayout.topMargin;\r\n\r\n // For each measure on the current line, move it down past the page break;\r\n currentLine.forEach((measure) => {\r\n measure.adjustY(pageAdj);\r\n measure.setY(measure.staffY + pageAdj, '_checkPageBreak');\r\n measure.svg.pageIndex = this.currentPage;\r\n });\r\n }\r\n return scoreLayout;\r\n }\r\n measureToLeft(measure: SmoMeasure) {\r\n const j = measure.measureNumber.staffId;\r\n const i = measure.measureNumber.measureIndex;\r\n return (i > 0 ? this.score!.staves[j].measures[i - 1] : measure);\r\n }\r\n measureAbove(measure: SmoMeasure) {\r\n const j = measure.measureNumber.staffId;\r\n const i = measure.measureNumber.measureIndex;\r\n return (j > 0 ? this.score!.staves[j - 1].measures[i] : measure);\r\n }\r\n // {measures,y,x} the x and y at the left/bottom of the render\r\n /**\r\n * Estimate the dimensions of a column when it's rendered.\r\n * @param scoreLayout \r\n * @param measureIx \r\n * @param systemIndex \r\n * @param lineIndex \r\n * @param x \r\n * @param y \r\n * @returns { MeasureEstimate } - the measures in the column and the x, y location\r\n */\r\n estimateColumn(scoreLayout: ScaledPageLayout, measureIx: number, systemIndex: number, lineIndex: number, x: number, y: number): MeasureEstimate {\r\n const s: any = {};\r\n const measures = this.columnMeasureMap[measureIx];\r\n let rowInSystem = 0;\r\n let voiceCount = 0;\r\n let unalignedCtxCount = 0;\r\n let wsum = 0;\r\n let dsum = 0;\r\n let maxCfgWidth = 0;\r\n let isPickup = false;\r\n // Keep running tab of accidental widths for justification\r\n const contextMap: Record = {};\r\n let measureToSkip = false;\r\n let maxColumnStartX = 0;\r\n measures.forEach((measure) => {\r\n // use measure to left to figure out whether I need to render key signature, etc.\r\n // If I am the first measure, just use self and we always render them on the first measure.\r\n const measureToLeft = this.measureToLeft(measure);\r\n const measureAbove = this.measureAbove(measure);\r\n s.measureKeySig = SmoMusic.vexKeySignatureTranspose(measure.keySignature, 0);\r\n s.keySigLast = SmoMusic.vexKeySignatureTranspose(measureToLeft.keySignature, 0);\r\n s.tempoLast = measureToLeft.getTempo();\r\n if (measure.measureNumber.staffId > 0) {\r\n s.tempoLast = measureAbove.getTempo();\r\n }\r\n s.timeSigLast = measureToLeft.timeSignature;\r\n s.clefLast = measureToLeft.getLastClef();\r\n this.calculateBeginningSymbols(systemIndex, measure, s.clefLast, s.keySigLast, s.timeSigLast, s.tempoLast);\r\n const startX = SuiLayoutFormatter.estimateStartSymbolWidth(measure);\r\n measure.svg.adjX = startX;\r\n maxColumnStartX = Math.max(maxColumnStartX, startX);\r\n });\r\n measures.forEach((measure) => {\r\n let tabHeight = 0;\r\n measure.svg.maxColumnStartX = maxColumnStartX;\r\n SmoBeamer.applyBeams(measure);\r\n voiceCount += measure.voices.length;\r\n if (measure.isPickup()) {\r\n isPickup = true;\r\n }\r\n if (measure.format.skipMeasureCount) {\r\n measureToSkip = true;\r\n }\r\n measure.measureNumber.systemIndex = systemIndex;\r\n measure.svg.rowInSystem = rowInSystem;\r\n measure.svg.lineIndex = lineIndex;\r\n measure.svg.pageIndex = this.currentPage;\r\n\r\n // calculate vertical offsets from the baseline\r\n const stave = this.score.staves[measure.measureNumber.staffId];\r\n const tabStave = stave.getTabStaveForMeasure({ staff: measure.measureNumber.staffId, measure: measure.measureNumber.measureIndex, \r\n voice: 0, tick: 0, pitches: [] });\r\n const offsets = this.estimateMeasureHeight(measure);\r\n\r\n measure.setYTop(offsets.aboveBaseline, 'render:estimateColumn');\r\n measure.setY(y - measure.yTop, 'estimateColumns height');\r\n measure.setX(x, 'render:estimateColumn');\r\n\r\n // Add custom width to measure:\r\n measure.setBox(SvgHelpers.boxPoints(measure.staffX, y, measure.staffWidth, offsets.belowBaseline - offsets.aboveBaseline), 'render: estimateColumn');\r\n this.estimateMeasureWidth(measure, scoreLayout, contextMap);\r\n // account for the extra stave for tablature in the height, also set the dimensions of the stave tab\r\n if (tabStave) {\r\n const stemHeight = tabStave.showStems ? vexGlyph.dimensions['stem'].height : 0;\r\n tabHeight = stemHeight + tabStave.numLines * tabStave.spacing;\r\n measure.svg.tabStaveBox = { x, y: measure.svg.logicalBox.y + measure.svg.logicalBox.height,\r\n width: measure.svg.logicalBox.width, height: tabHeight };\r\n offsets.belowBaseline += measure.svg.tabStaveBox.height;\r\n }\r\n y = y + measure.svg.logicalBox.height + scoreLayout.intraGap + tabHeight;\r\n maxCfgWidth = Math.max(maxCfgWidth, measure.staffWidth);\r\n rowInSystem += 1;\r\n });\r\n // justify this column to the maximum width.\r\n const startX = measures[0].staffX;\r\n const adjX = measures[0].svg.maxColumnStartX;\r\n const contexts = Object.keys(contextMap);\r\n const widths: number[] = [];\r\n const durations: number[] = [];\r\n let minTotalWidth = 0;\r\n contexts.forEach((strIx) => {\r\n const ix = parseInt(strIx);\r\n let tickWidth = 0;\r\n const context = contextMap[ix];\r\n if (context.tickCounts.length < voiceCount) {\r\n unalignedCtxCount += 1;\r\n }\r\n context.widths.forEach((w, ix) => {\r\n wsum += w;\r\n dsum += context.tickCounts[ix];\r\n widths.push(w);\r\n durations.push(context.tickCounts[ix]);\r\n tickWidth = Math.max(tickWidth, w);\r\n });\r\n minTotalWidth += tickWidth;\r\n });\r\n // Vex formatter adjusts location of ticks based to keep the justified music aligned. It does this\r\n // by moving notes to the right. We try to add padding to each tick context based on the 'entropy' of the \r\n // music. 4 quarter notes with no accidentals in all voices will have 0 entropy. All the notes need the same\r\n // amount of space, so they don't need additional space to align.\r\n // wvar - the std deviation in the widths or 'width entropy'\r\n // dvar - the std deviation in the duration between voices or 'duration entropy'\r\n const sumArray = (arr: number[]) => arr.reduce((a, b) => a + b, 0);\r\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\r\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\r\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\r\n\r\n const davg = dsum / durations.length;\r\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\r\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\r\n const unalignedPadding = 2;\r\n\r\n const padmax = Math.max(dpads, wpads) * contexts.length * unalignedPadding;\r\n const unalignedPad = unalignedPadding * unalignedCtxCount;\r\n let maxWidth = Math.max(adjX + minTotalWidth + Math.max(unalignedPad, padmax), maxCfgWidth);\r\n if (scoreLayout.maxMeasureSystem > 0 && !isPickup && !measureToSkip) {\r\n // Add 1 because there is some overhead in each measure, \r\n // so there can never be (width/max) measures in the system\r\n const defaultWidth = (scoreLayout.pageWidth / (scoreLayout.maxMeasureSystem + 1));\r\n maxWidth = Math.max(maxWidth, defaultWidth);\r\n }\r\n const maxX = startX + maxWidth;\r\n measures.forEach((measure) => {\r\n measure.setWidth(maxWidth, 'render:estimateColumn');\r\n // measure.svg.adjX = adjX;\r\n });\r\n const rv = { measures, y, x: maxX };\r\n return rv;\r\n }\r\n /**\r\n * return true if this is the last measure, taking into account multimeasure rest\r\n * @param measureIx \r\n * @returns \r\n */\r\n isLastVisibleMeasure(measureIx: number) {\r\n if (measureIx >= this.score.staves[0].measures.length) {\r\n return true;\r\n }\r\n if (this.score.staves[0].partInfo.expandMultimeasureRests) {\r\n return false;\r\n }\r\n let i = 0;\r\n for (i = measureIx; i < this.score.staves[0].measures.length; ++i) {\r\n const mm = this.score.staves[0].measures[i];\r\n if (!mm.svg.hideMultimeasure) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Calculate the geometry for the entire score, based on estimated measure width and height.\r\n * @returns \r\n */\r\n layout() {\r\n let measureIx = 0;\r\n let systemIndex = 0;\r\n if (!this.score.layoutManager) {\r\n return;\r\n }\r\n let scoreLayout = this.score.layoutManager.getScaledPageLayout(0);\r\n let y = 0;\r\n let x = 0;\r\n let lineIndex = 0;\r\n this.lines = [];\r\n let pageCheck = 0;\r\n // let firstMeasureOnPage = 0;\r\n this.lines.push(lineIndex);\r\n let currentLine: SmoMeasure[] = []; // the system we are esimating\r\n let measureEstimate: MeasureEstimate | null = null;\r\n\r\n layoutDebug.clearDebugBoxes(layoutDebug.values.pre);\r\n layoutDebug.clearDebugBoxes(layoutDebug.values.system);\r\n const timestamp = new Date().valueOf();\r\n\r\n y = scoreLayout.topMargin;\r\n x = scoreLayout.leftMargin;\r\n\r\n while (measureIx < this.score.staves[0].measures.length) {\r\n if (this.score.isPartExposed()) {\r\n if (this.score.staves[0].measures[measureIx].svg.hideMultimeasure) {\r\n measureIx += 1;\r\n continue;\r\n }\r\n }\r\n measureEstimate = this.estimateColumn(scoreLayout, measureIx, systemIndex, lineIndex, x, y);\r\n x = measureEstimate.x;\r\n if (systemIndex > 0 &&\r\n (measureEstimate.measures[0].format.systemBreak || measureEstimate.x > (scoreLayout.pageWidth - scoreLayout.leftMargin))) {\r\n this.justifyY(scoreLayout, measureEstimate.measures.length, currentLine, false);\r\n // find the measure with the lowest y extend (greatest y value), not necessarily one with lowest\r\n // start of staff.\r\n const bottomMeasure: SmoMeasure = currentLine.reduce((a, b) =>\r\n a.lowestY > b.lowestY ? a : b\r\n );\r\n this.checkPageBreak(scoreLayout, currentLine, bottomMeasure);\r\n const renderedPage: RenderedPage | null = this.renderedPages[pageCheck];\r\n if (renderedPage) {\r\n if (pageCheck !== this.currentPage) {\r\n // The last measure in the last system of the previous page\r\n const previousSystem = currentLine[0].measureNumber.measureIndex - 1;\r\n if (renderedPage.endMeasure !== previousSystem) {\r\n this.renderedPages[pageCheck] = null;\r\n } \r\n const nextPage = this.renderedPages[this.currentPage];\r\n if (nextPage && nextPage.startMeasure !== previousSystem + 1) {\r\n this.renderedPages[this.currentPage] = null;\r\n } \r\n }\r\n }\r\n pageCheck = this.currentPage;\r\n\r\n const ld = layoutDebug;\r\n const sh = SvgHelpers;\r\n if (layoutDebug.mask & layoutDebug.values.system) {\r\n currentLine.forEach((measure) => {\r\n if (measure.svg.logicalBox) {\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n ld.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.system);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Now start rendering on the next system.\r\n y = bottomMeasure.lowestY + scoreLayout.interGap;\r\n \r\n currentLine = [];\r\n systemIndex = 0;\r\n x = scoreLayout.leftMargin;\r\n lineIndex += 1;\r\n this.lines.push(lineIndex);\r\n measureEstimate = this.estimateColumn(scoreLayout, measureIx, systemIndex, lineIndex, x, y);\r\n x = measureEstimate.x;\r\n }\r\n measureEstimate?.measures.forEach((measure) => {\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n layoutDebug.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.pre);\r\n }\r\n });\r\n this.updateSystemMap(measureEstimate.measures, lineIndex, systemIndex);\r\n currentLine = currentLine.concat(measureEstimate.measures);\r\n measureIx += 1; \r\n systemIndex += 1;\r\n // If this is the last measure but we have not filled the x extent,\r\n // still justify the vertical staves and check for page break.\r\n if (this.isLastVisibleMeasure(measureIx) && measureEstimate !== null) {\r\n this.justifyY(scoreLayout, measureEstimate.measures.length, currentLine, true);\r\n const bottomMeasure = currentLine.reduce((a, b) =>\r\n a.svg.logicalBox.y + a.svg.logicalBox.height > b.svg.logicalBox.y + b.svg.logicalBox.height ? a : b\r\n );\r\n scoreLayout = this.checkPageBreak(scoreLayout, currentLine, bottomMeasure);\r\n }\r\n }\r\n // If a measure was added to the last page, make sure we re-render the page\r\n const renderedPage: RenderedPage | null = this.renderedPages[this.currentPage];\r\n if (renderedPage) {\r\n if (renderedPage.endMeasure !== currentLine[0].measureNumber.measureIndex) {\r\n this.renderedPages[this.currentPage] = null;\r\n }\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.COMPUTE, new Date().valueOf() - timestamp);\r\n }\r\n \r\n static estimateMusicWidth(smoMeasure: SmoMeasure, tickContexts: Record): number {\r\n const widths: number[] = [];\r\n // Add up the widths of the music glyphs for each voice, including accidentals etc. We save the widths in a hash by duration\r\n // and later consider overlapping/colliding ticks in each voice\r\n const tmObj = smoMeasure.createMeasureTickmaps();\r\n smoMeasure.voices.forEach((voice) => {\r\n let width = 0;\r\n let duration = 0;\r\n const noteCount = voice.notes.length;\r\n voice.notes.forEach((note) => {\r\n let noteWidth = 0;\r\n const dots: number = (note.dots ? note.dots : 0);\r\n let headWidth: number = vexGlyph.width(vexGlyph.dimensions.noteHead);\r\n // Maybe not the best place for this...ideally we'd get the note head glyph from\r\n // the ntoe.\r\n if (note.tickCount >= 4096 * 4 && note.noteType === 'n') {\r\n headWidth *= 2;\r\n }\r\n const dotWidth: number = vexGlyph.width(vexGlyph.dimensions.dot);\r\n noteWidth += headWidth +\r\n vexGlyph.dimensions.noteHead.spacingRight;\r\n // TODO: Consider engraving font and adjust grace note size?\r\n noteWidth += (headWidth + vexGlyph.dimensions.noteHead.spacingRight) * note.graceNotes.length;\r\n noteWidth += dotWidth * dots + vexGlyph.dimensions.dot.spacingRight * dots;\r\n if (!note.isRest() && note.endBeam) {\r\n noteWidth += vexGlyph.dimensions.flag.width;\r\n }\r\n note.pitches.forEach((pitch) => {\r\n const keyAccidental = SmoMusic.getAccidentalForKeySignature(pitch, smoMeasure.keySignature);\r\n const accidentals = tmObj.accidentalArray.filter((ar) =>\r\n (ar.duration as number) < duration && ar.pitches[pitch.letter]);\r\n const acLen = accidentals.length;\r\n const declared = acLen > 0 ?\r\n accidentals[acLen - 1].pitches[pitch.letter].pitch.accidental : keyAccidental;\r\n if (declared !== pitch.accidental || pitch.cautionary) {\r\n noteWidth += vexGlyph.accidentalWidth(pitch.accidental) * 2;\r\n }\r\n });\r\n\r\n let verse = 0;\r\n let lyricBase = note.getLyricForVerse(verse, SmoLyric.parsers.lyric);\r\n while (lyricBase.length) {\r\n let lyric = lyricBase[0] as SmoLyric;\r\n let lyricWidth = 0;\r\n let i = 0;\r\n // TODO: kerning and all that...\r\n if (!lyric.text.length) {\r\n break;\r\n }\r\n // why did I make this return an array?\r\n // oh...because of voices\r\n const textFont =\r\n TextFormatter.create({ family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size, weight: 'normal' });\r\n const lyricText = lyric.getText();\r\n for (i = 0; i < lyricText.length; ++i) {\r\n lyricWidth += textFont.getWidthForTextInPx(lyricText[i])\r\n }\r\n if (lyric.isHyphenated()) {\r\n lyricWidth += 2 * textFont.getWidthForTextInPx('-');\r\n } else {\r\n lyricWidth += 2 * textFont.getWidthForTextInPx('H');\r\n }\r\n noteWidth = Math.max(lyricWidth, noteWidth);\r\n verse += 1;\r\n lyricBase = note.getLyricForVerse(verse, SmoLyric.parsers.lyric);\r\n }\r\n if (!tickContexts[duration]) {\r\n tickContexts[duration] = {\r\n widths: [],\r\n tickCounts: [] \r\n }\r\n }\r\n if (smoMeasure.repeatSymbol) {\r\n noteWidth = vexGlyph.repeatSymbolWidth() / noteCount; \r\n }\r\n tickContexts[duration].widths.push(noteWidth);\r\n tickContexts[duration].tickCounts.push(note.tickCount);\r\n duration += Math.round(note.tickCount);\r\n width += noteWidth;\r\n });\r\n widths.push(width);\r\n });\r\n widths.sort((a, b) => a > b ? -1 : 1);\r\n return widths[0];\r\n }\r\n\r\n static estimateStartSymbolWidth(smoMeasure: SmoMeasure): number {\r\n let width = 0;\r\n // the variables starts and digits used to be in the if statements. I moved them here to fix the resulting error\r\n var starts = smoMeasure.getStartBarline();\r\n var digits = smoMeasure.timeSignature.timeSignature.split('/')[0].length;\r\n if (smoMeasure.svg.forceKeySignature) {\r\n if (smoMeasure.canceledKeySignature) {\r\n width += vexGlyph.keySignatureLength(smoMeasure.canceledKeySignature);\r\n }\r\n width += vexGlyph.keySignatureLength(smoMeasure.keySignature);\r\n }\r\n if (smoMeasure.svg.forceClef) {\r\n const clefGlyph = vexGlyph.clef(smoMeasure.clef);\r\n width += clefGlyph.width + clefGlyph.spacingRight;\r\n }\r\n if (smoMeasure.svg.forceTimeSignature) {\r\n width += vexGlyph.width(vexGlyph.dimensions.timeSignature) * digits + vexGlyph.dimensions.timeSignature.spacingRight;\r\n }\r\n if (starts) {\r\n width += vexGlyph.barWidth(starts);\r\n }\r\n return width;\r\n }\r\n static estimateEndSymbolWidth(smoMeasure: SmoMeasure) {\r\n var width = 0;\r\n var ends = smoMeasure.getEndBarline();\r\n if (ends) {\r\n width += vexGlyph.barWidth(ends);\r\n }\r\n return width;\r\n }\r\n\r\n estimateMeasureWidth(measure: SmoMeasure, scoreLayout: ScaledPageLayout, tickContexts: Record) {\r\n // Calculate the existing staff width, based on the notes and what we expect to be rendered.\r\n let measureWidth = SuiLayoutFormatter.estimateMusicWidth(measure, tickContexts) + defaultMeasurePadding;\r\n // measure.svg.adjX already set based on max column adjX\r\n measure.svg.adjRight = SuiLayoutFormatter.estimateEndSymbolWidth(measure);\r\n measureWidth += measure.svg.adjX + measure.svg.adjRight + measure.format.customStretch + measure.format.padLeft;\r\n const y = measure.svg.logicalBox.y;\r\n // For systems that start with padding, add width for the padding\r\n measure.setWidth(measureWidth, 'estimateMeasureWidth adjX adjRight');\r\n // Calculate the space for left/right text which displaces the measure.\r\n // measure.setX(measure.staffX + textOffsetBox.x,'estimateMeasureWidth');\r\n measure.setBox(SvgHelpers.boxPoints(measure.staffX, y, measure.staffWidth, measure.svg.logicalBox.height),\r\n 'estimate measure width');\r\n }\r\n static _beamGroupForNote(measure: SmoMeasure, note: SmoNote): ISmoBeamGroup | null {\r\n let rv: ISmoBeamGroup | null = null;\r\n if (!note.beam_group) {\r\n return null;\r\n }\r\n measure.beamGroups.forEach((bg) => {\r\n if (!rv) {\r\n if (bg.notes.findIndex((note) => note.beam_group && note.beam_group.id === bg.attrs.id) >= 0) {\r\n rv = bg;\r\n }\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * A system has gone beyond the page width. Lop the last measure off the end and move it to the first measure of the\r\n * next system. Then seal the last system by justifying the measures vertically and horinzontally\r\n * @param scoreLayout \r\n * @param measureEstimate \r\n * @param currentLine \r\n * @param columnCount \r\n * @param lastSystem \r\n */\r\n justifyY(scoreLayout: ScaledPageLayout, rowCount: number, currentLine: SmoMeasure[], lastSystem: boolean) {\r\n let i = 0;\r\n const sh = SvgHelpers;\r\n // If there are fewer measures in the system than the max, don't justify.\r\n // We estimate the staves at the same absolute y value.\r\n // Now, move them down so the top of the staves align for all measures in a row.\r\n const measuresToHide: SmoMeasure[] = [];\r\n let anyNotes = false;\r\n for (i = 0; i < rowCount; ++i) {\r\n // lowest staff has greatest staffY value.\r\n const rowAdj = currentLine.filter((mm) => mm.svg.rowInSystem === i);\r\n \r\n let lowestTabStaff = rowAdj.reduce((a, b) => \r\n a.svg.tabStaveBox && b.svg.tabStaveBox && \r\n a.svg.tabStaveBox.y + a.svg.tabStaveBox.height > b.svg.tabStaveBox.y + b.svg.tabStaveBox.height ?\r\n a : b\r\n );\r\n const lowestStaff = rowAdj.reduce((a, b) =>\r\n a.staffY > b.staffY ? a : b\r\n );\r\n const hasNotes = rowAdj.findIndex((x) => x.isRest() === false) >= 0;\r\n if (hasNotes) {\r\n anyNotes = true;\r\n }\r\n rowAdj.forEach((measure) => {\r\n measure.svg.hideEmptyMeasure = false;\r\n if (this.score.preferences.hideEmptyLines && !hasNotes && !this.score.isPartExposed()) {\r\n measuresToHide.push(measure);\r\n }\r\n const adj = lowestStaff.staffY - measure.staffY;\r\n measure.setY(measure.staffY + adj, 'justifyY');\r\n measure.setBox(sh.boxPoints(measure.svg.logicalBox.x, measure.svg.logicalBox.y + adj, measure.svg.logicalBox.width, measure.svg.logicalBox.height), 'justifyY');\r\n if (lowestTabStaff.svg.tabStaveBox && measure.svg.tabStaveBox) {\r\n measure.svg.tabStaveBox.y = measure.svg.tabStaveBox.y + lowestTabStaff.svg.tabStaveBox.y - measure.svg.tabStaveBox.y;\r\n }\r\n });\r\n const rightStaff = rowAdj.reduce((a, b) =>\r\n a.staffX + a.staffWidth > b.staffX + b.staffWidth ? a : b);\r\n\r\n const ld = layoutDebug;\r\n let justifyX = 0;\r\n let columnCount = rowAdj.length;\r\n // missing offset is for systems that have fewer measures than the default (due to section break or score ending)\r\n let missingOffset = 0;\r\n if (scoreLayout.maxMeasureSystem > 1 && \r\n columnCount < scoreLayout.maxMeasureSystem\r\n && lastSystem) {\r\n missingOffset = (scoreLayout.pageWidth / (scoreLayout.maxMeasureSystem + 1)) * (scoreLayout.maxMeasureSystem - columnCount);\r\n columnCount = scoreLayout.maxMeasureSystem;\r\n }\r\n if (scoreLayout.maxMeasureSystem > 1 || !lastSystem) {\r\n justifyX = Math.round((scoreLayout.pageWidth - (scoreLayout.leftMargin + scoreLayout.rightMargin + rightStaff.staffX + rightStaff.staffWidth + missingOffset))\r\n / columnCount);\r\n }\r\n let justOffset = 0;\r\n rowAdj.forEach((measure) => {\r\n measure.setWidth(measure.staffWidth + justifyX, '_estimateMeasureDimensions justify');\r\n measure.setX(measure.staffX + justOffset, 'justifyY');\r\n measure.setBox(sh.boxPoints(measure.svg.logicalBox.x + justOffset,\r\n measure.svg.logicalBox.y, measure.staffWidth, measure.svg.logicalBox.height), 'justifyY');\r\n const context = this.svg.getRenderer(measure.svg.logicalBox);\r\n if (context) {\r\n ld.debugBox(context.svg, measure.svg.logicalBox, layoutDebug.values.adjust);\r\n }\r\n justOffset += justifyX;\r\n });\r\n }\r\n if (this.score.preferences.hideEmptyLines && anyNotes) {\r\n let adjY = 0;\r\n for (i = 0; i < rowCount; ++i) {\r\n const rowAdj = measuresToHide.filter((mm) => mm.svg.rowInSystem === i);\r\n if (rowAdj.length) {\r\n adjY += rowAdj[0].svg.logicalBox.height;\r\n rowAdj.forEach((mm) => {\r\n mm.svg.logicalBox.height = 0;\r\n mm.svg.hideEmptyMeasure = true;\r\n });\r\n } else {\r\n const rowAdj = currentLine.filter((mm) => mm.svg.rowInSystem === i);\r\n rowAdj.forEach((row) => {\r\n row.setY(row.svg.staffY - adjY, 'format-hide');\r\n });\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * highest value is actually the one lowest on the page\r\n * @param measure \r\n * @param note \r\n * @returns \r\n */\r\n static _highestLowestHead(measure: SmoMeasure, note: SmoNote) {\r\n // note...er warning: Notes always have at least 1 pitch, even a rest\r\n // or glyph has a pitch to indicate the placement\r\n const hilo = { hi: 0, lo: 99999999 }; \r\n note.pitches.forEach((pitch) => { \r\n const line = 5 - SmoMusic.pitchToStaffLine(measure.clef, pitch);\r\n // TODO: use actual note head/rest/glyph. 10 px is space between staff lines\r\n const noteHeight = 10;\r\n const px = (noteHeight * line);\r\n hilo.lo = Math.min(hilo.lo, px - noteHeight / 2);\r\n hilo.hi = Math.max(hilo.hi, px + noteHeight / 2);\r\n });\r\n return hilo;\r\n }\r\n static textFont(lyric: SmoLyric) {\r\n return TextFormatter.create(lyric.fontInfo);\r\n }\r\n\r\n /**\r\n * Calculate the dimensions of symbols based on where in a system we are, like whether we need to show\r\n * the key signature, clef etc.\r\n * @param systemIndex \r\n * @param measure \r\n * @param clefLast \r\n * @param keySigLast \r\n * @param timeSigLast \r\n * @param tempoLast \r\n * @param score \r\n */\r\n calculateBeginningSymbols(systemIndex: number, measure: SmoMeasure,\r\n clefLast: string, keySigLast: string, timeSigLast: TimeSignature, tempoLast: SmoTempoText) {\r\n // The key signature is set based on the transpose index already, i.e. an Eb part in concert C already has 3 sharps.\r\n const xposeScore = this.score?.preferences?.transposingScore && (this.score?.isPartExposed() === false);\r\n const xposeOffset = xposeScore ? measure.transposeIndex : 0;\r\n const measureKeySig = SmoMusic.vexKeySignatureTranspose(measure.keySignature, xposeOffset);\r\n measure.svg.forceClef = (systemIndex === 0 || measure.clef !== clefLast);\r\n measure.svg.forceTimeSignature = (measure.measureNumber.measureIndex === 0 || \r\n (!SmoMeasure.timeSigEqual(timeSigLast, measure.timeSignature)) || measure.timeSignature.displayString.length > 0);\r\n if (measure.timeSignature.display === false) {\r\n measure.svg.forceTimeSignature = false;\r\n }\r\n measure.svg.forceTempo = false;\r\n const tempo = measure.getTempo();\r\n // always print tempo for the first measure, if indicated\r\n if (tempo && measure.measureNumber.measureIndex === 0 && measure.measureNumber.staffId === 0) {\r\n measure.svg.forceTempo = tempo.display && measure.svg.rowInSystem === 0;\r\n } else if (tempo && tempoLast) {\r\n // otherwise get tempo from the measure prior. But only one tempo per system.\r\n if (!SmoTempoText.eq(tempo, tempoLast) && measure.svg.rowInSystem === 0) {\r\n measure.svg.forceTempo = tempo.display;\r\n }\r\n } else if (tempo) {\r\n measure.svg.forceTempo = tempo.display && measure.svg.rowInSystem === 0;\r\n }\r\n if (measureKeySig !== keySigLast && measure.measureNumber.measureIndex > 0) {\r\n measure.canceledKeySignature = SmoMusic.vexKeySigWithOffset(keySigLast, xposeOffset);\r\n measure.svg.forceKeySignature = true;\r\n } else if (systemIndex === 0 && measureKeySig !== 'C') {\r\n measure.svg.forceKeySignature = true;\r\n } else {\r\n measure.svg.forceKeySignature = false;\r\n }\r\n }\r\n\r\n /**\r\n * The baseline is the top line of the staff. aboveBaseline is a negative number\r\n * that indicates how high above the baseline the measure goes. belowBaseline\r\n * is a positive number that indicates how far below the baseline the measure goes.\r\n * the height of the measure is below-above. Vex always renders a staff such that\r\n * the y coordinate passed in for the stave is on the baseline.\r\n * \r\n * Note to past self: this was a really useful comment. Thank you.\r\n * **/\r\n estimateMeasureHeight(measure: SmoMeasure): { aboveBaseline: number, belowBaseline: number } {\r\n let yTop = 0; // highest point, smallest Y value\r\n let yBottom = measure.lines * 10; // lowest point, largest Y value.\r\n let flag: number = -1;\r\n let lyricOffset = 0;\r\n const measureIndex = measure.measureNumber.measureIndex;\r\n const staffIndex = measure.measureNumber.staffId;\r\n const stave = this.score.staves[staffIndex];\r\n stave.renderableModifiers.forEach((mm) => {\r\n if (mm.startSelector.staff === staffIndex && (mm.startSelector.measure <= measureIndex && mm.endSelector.measure >= measureIndex) ||\r\n mm.endSelector.staff === staffIndex && \r\n (mm.endSelector.measure <= measureIndex && mm.endSelector.measure >= measureIndex && mm.endSelector.measure !== mm.startSelector.measure)) {\r\n if (mm.ctor === 'SmoHairpin') {\r\n const hp = mm as SmoStaffHairpin;\r\n if (hp.position === SmoStaffHairpin.positions.ABOVE) {\r\n yTop = yTop - hp.height;\r\n } else {\r\n yBottom = yBottom + hp.height;\r\n }\r\n } else if (mm.ctor === 'SmoStaffTextBracket') {\r\n const tb = mm as SmoStaffTextBracket;\r\n const tbHeight = 14 + (10 * Math.abs(tb.line - 1)); // 14 default font size\r\n if (tb.position === SmoStaffTextBracket.positions.TOP) {\r\n yTop = yTop - tbHeight;\r\n } else {\r\n yBottom = yBottom + tbHeight;\r\n } \r\n }\r\n }\r\n });\r\n if (measure.svg.forceClef) {\r\n yBottom += vexGlyph.clef(measure.clef).yTop + vexGlyph.clef(measure.clef).yBottom;\r\n yTop = yTop - vexGlyph.clef(measure.clef).yTop;\r\n }\r\n\r\n if (measure.svg.forceTempo) {\r\n yTop = Math.min(-1 * vexGlyph.tempo.yTop, yTop);\r\n }\r\n let yBottomOffset = 0;\r\n let yBottomVoiceZero = 0;\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note) => {\r\n const bg = SuiLayoutFormatter._beamGroupForNote(measure, note);\r\n flag = SmoNote.flagStates.auto;\r\n if (bg && note.noteType === 'n') {\r\n flag = bg.notes[0].flagState;\r\n // an auto-flag note is up if the 1st note is middle line\r\n if (flag === SmoNote.flagStates.auto) {\r\n const pitch = bg.notes[0].pitches[0];\r\n flag = SmoMusic.pitchToStaffLine(measure.clef, pitch)\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n }\r\n } else {\r\n flag = note.flagState;\r\n // odd-numbered voices flip default up/down\r\n const voiceMod = voiceIx % 2;\r\n // an auto-flag note is up if the 1st note is middle line\r\n if (flag === SmoNote.flagStates.auto) {\r\n const pitch = note.pitches[0];\r\n flag = SmoMusic.pitchToStaffLine(measure.clef, pitch)\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n if (voiceMod === 1) {\r\n flag = (flag === SmoNote.flagStates.down) ? SmoNote.flagStates.up : SmoNote.flagStates.down;\r\n }\r\n }\r\n }\r\n const hiloHead = SuiLayoutFormatter._highestLowestHead(measure, note);\r\n if (flag === SmoNote.flagStates.down) {\r\n yTop = Math.min(hiloHead.lo, yTop);\r\n yBottom = Math.max(hiloHead.hi + vexGlyph.stem.height, yBottom);\r\n } else {\r\n yTop = Math.min(hiloHead.lo - vexGlyph.stem.height, yTop);\r\n yBottom = Math.max(hiloHead.hi, yBottom);\r\n }\r\n // Lyrics will be rendered below the lowest thing on the staff, so add to\r\n // belowBaseline value based on the max number of verses and font size\r\n // it will extend\r\n });\r\n // Vex won't adjust for music in voices > 0 when placing lyrics. \r\n // So we need to adjust here, if voices > 0 have music below lyrics. \r\n if (voiceIx > 0 && yBottomVoiceZero < yBottom) {\r\n yBottomOffset = yBottom - yBottomVoiceZero;\r\n } else {\r\n yBottomVoiceZero = yBottom;\r\n }\r\n });\r\n let lyricsToAdjust: SmoLyric[] = [];\r\n // get the lowest music part, then consider the lyrics\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note) => {\r\n const lyrics = note.getTrueLyrics();\r\n lyricsToAdjust = lyricsToAdjust.concat(lyrics);\r\n if (lyrics.length) {\r\n const maxLyric = lyrics.reduce((a, b) => a.verse > b.verse ? a : b);\r\n const fontInfo = SuiLayoutFormatter.textFont(maxLyric);\r\n lyricOffset = Math.max((maxLyric.verse + 2) * fontInfo.maxHeight, lyricOffset);\r\n }\r\n const dynamics = note.getModifiers('SmoDynamicText') as SmoDynamicText[];\r\n dynamics.forEach((dyn) => {\r\n yBottom = Math.max((10 * dyn.yOffsetLine - 50) + 11, yBottom);\r\n yTop = Math.min(10 * dyn.yOffsetLine - 50, yTop);\r\n });\r\n note.articulations.forEach((articulation) => {\r\n if (articulation.position === SmoArticulation.positions.above) {\r\n yTop -= 10;\r\n } else {\r\n yBottom += 10;\r\n }\r\n });\r\n note.ornaments.forEach((ornament) => {\r\n if (ornament.position === SmoOrnament.positions.above) {\r\n yTop -= 10;\r\n } else {\r\n yBottom += 10;\r\n }\r\n })\r\n });\r\n });\r\n yBottom += lyricOffset;\r\n if (lyricsToAdjust.length > 0) {\r\n lyricsToAdjust.forEach((lyric: SmoLyric) => {\r\n lyric.musicYOffset = yBottomOffset;\r\n });\r\n }\r\n const mmsel = SmoSelector.measureSelector(stave.staffId, measure.measureNumber.measureIndex);\r\n return { belowBaseline: yBottom, aboveBaseline: yTop };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\ndeclare var $: any;\r\n\r\nexport interface CodeRegion {\r\n time: number,\r\n percent: number\r\n}\r\nexport class layoutDebug {\r\n static get values(): Record {\r\n return {\r\n pre: 1,\r\n play: 2,\r\n adjust: 4,\r\n system: 8,\r\n scroll: 16,\r\n artifactMap: 32,\r\n mouseDebug: 64,\r\n dragDebug: 128,\r\n dialogEvents: 256,\r\n cursor: 512\r\n };\r\n }\r\n\r\n static get classes(): Record {\r\n return {\r\n 1: 'measure-place-dbg',\r\n 2: 'measure-play-dbg',\r\n 4: 'measure-adjust-dbg',\r\n 8: 'system-place-dbg',\r\n 16: 'scroll-box-debug',\r\n 32: 'measure-adjustHeight-dbg',\r\n 64: 'mouse-debug',\r\n 128: 'drag-debug',\r\n 256: '',\r\n 512: 'cursor-adj-dbg',\r\n };\r\n }\r\n static get codeRegions(): Record {\r\n return {\r\n COMPUTE: 0,\r\n PREFORMATA: 1,\r\n PREFORMATB: 2,\r\n PREFORMATC: 3,\r\n FORMAT: 4,\r\n RENDER: 5,\r\n UPDATE_MAP: 6,\r\n POST_RENDER: 7,\r\n MAP: 8,\r\n LAST: 8\r\n };\r\n }\r\n static get codeRegionStrings(): string[] {\r\n return ['COMPUTE', 'PREFORMATA', 'PREFORMATB', 'PREFORMATC', 'FORMAT', 'RENDER', 'UPDATE_MAP', 'POST_RENDER', 'MAP'];\r\n }\r\n static mask: number = 0;\r\n static _textDebug: number[] = [];\r\n static timestampHash: Record = {};\r\n static _dialogEvents: string[] = [];\r\n\r\n static clearTimestamps() {\r\n for (var i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n layoutDebug.timestampHash[i] = 0;\r\n }\r\n }\r\n\r\n static setTimestamp(region: number, millis: number) {\r\n layoutDebug.timestampHash[region] += millis;\r\n }\r\n static printTimeReport() {\r\n let total = 0;\r\n let report: Record = {};\r\n let i = 0;\r\n for (i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n total += layoutDebug.timestampHash[i];\r\n report[layoutDebug.codeRegionStrings[i]] = {\r\n time: layoutDebug.timestampHash[i], percent: 0\r\n };\r\n }\r\n report['total'] = { time: total, percent: 100 };\r\n for (i = 0; i <= layoutDebug.codeRegions.LAST; ++i) {\r\n report[layoutDebug.codeRegionStrings[i]].percent =\r\n Math.round((report[layoutDebug.codeRegionStrings[i]].time * 100) / report.total.time);\r\n }\r\n console.log(JSON.stringify(report, null, ' '));\r\n }\r\n\r\n static flagSet(value: number) {\r\n return layoutDebug.mask & value;\r\n }\r\n\r\n static clearAll() {\r\n layoutDebug.mask = 0;\r\n }\r\n static setAll() {\r\n layoutDebug.mask = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256;\r\n }\r\n static setRenderFlags() {\r\n layoutDebug.mask = 1 + 2 + 4 + 8 + 16 + 32;\r\n }\r\n static clearDebugBoxes(value: number) {\r\n if (layoutDebug.flagSet(value)) {\r\n var selector = 'g.' + layoutDebug.classes[value];\r\n $(selector).remove();\r\n }\r\n }\r\n static debugBox(svg: SVGSVGElement, box: SvgBox | null, flag: number) {\r\n if (!box) {\r\n return;\r\n }\r\n if (!box.height) {\r\n box.height = 1;\r\n }\r\n if (layoutDebug.flagSet(flag)) {\r\n SvgHelpers.debugBox(svg, box, layoutDebug.classes[flag], 0);\r\n }\r\n }\r\n\r\n static setFlag(value: number) {\r\n var flag = layoutDebug.values[value];\r\n if (typeof (layoutDebug.mask) == 'undefined') {\r\n layoutDebug.mask = flag;\r\n return;\r\n }\r\n layoutDebug.mask |= flag;\r\n layoutDebug.setFlagDivs();\r\n }\r\n static setFlagDivs() {\r\n $('.scroll-box-debug').remove();\r\n $('.drag-debug').remove();\r\n $('.mouse-debug').remove();\r\n $('.play-debug').remove();\r\n if (layoutDebug.mask & layoutDebug.values.scroll) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.mouseDebug) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.dragDebug) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n if (layoutDebug.mask & layoutDebug.values.play) {\r\n const dbgDiv = $('
');\r\n $('body').append(dbgDiv); \r\n }\r\n }\r\n static updateScrollDebug(point: SvgPoint) {\r\n const displayString = 'X: ' + point.x + ' Y: ' + point.y;\r\n $('.scroll-box-debug').text(displayString);\r\n $('.scroll-box-debug').css('left', '2%').css('top', '20px');\r\n }\r\n static updateMouseDebug(client: SvgPoint, logical: SvgPoint, offset: SvgPoint) {\r\n const displayString = `clientX: ${client.x} clientY: ${client.y} svg: (${logical.x},${logical.y}) offset (${offset.x}, ${offset.y})`;\r\n $('.mouse-debug').text(displayString);\r\n $('.mouse-debug').css('left', '2%').css('top', '60px').css('position','absolute').css('font-size','11px');\r\n }\r\n static updateDragDebug(client: SvgPoint, logical: SvgPoint, state: string) {\r\n const displayString = `clientX: ${client.x} clientY: ${client.y} svg: (${logical.x},${logical.y}) state ${state})`;\r\n $('.drag-debug').text(displayString);\r\n $('.drag-debug').css('left', '2%').css('top', '80px').css('position','absolute').css('font-size','11px');\r\n }\r\n static updatePlayDebug(selector: SmoSelector, logical: SvgBox) {\r\n const displayString = `mm: ${selector.measure} tick: ${selector.tick} svg: (${logical.x},${logical.y}, ${logical.width}, ${logical.height})`;\r\n $('.play-debug').text(displayString);\r\n $('.play-debug').css('left', '2%').css('top', '100px').css('position','absolute').css('font-size','11px');\r\n }\r\n\r\n static addTextDebug(value: number) {\r\n layoutDebug._textDebug.push(value);\r\n //console.log(value);\r\n }\r\n\r\n static addDialogDebug(value: string) {\r\n layoutDebug._dialogEvents.push(value);\r\n // console.log(value);\r\n }\r\n\r\n static measureHistory(measure: SmoMeasure, oldVal: string, newVal: any, description: string) {\r\n if (layoutDebug.flagSet(layoutDebug.values.measureHistory)) {\r\n var oldExp = (typeof ((measure as any).svg[oldVal]) == 'object') ?\r\n JSON.stringify((measure as any).svg[oldVal]).replace(/\"/g, '') : (measure as any).svg[oldVal];\r\n var newExp = (typeof (newVal) == 'object') ? JSON.stringify(newVal).replace(/\"/g, '') : newVal;\r\n measure.svg.history.push(oldVal + ': ' + oldExp + '=> ' + newExp + ' ' + description);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoSelector, SmoSelection, ModifierTab } from '../../smo/xform/selections';\r\nimport { OutlineInfo, SvgHelpers } from './svgHelpers';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SuiScroller } from './scroller';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SmoNoteModifierBase, SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoScore, SmoModifier } from '../../smo/data/score';\r\nimport { SvgPageMap } from './svgPageMap';\r\n\r\n/**\r\n * DI information about renderer, so we can notify renderer and it can contain\r\n * a tracker object\r\n * @param pageMap {@link SvgPageMap}: SvgPageMap - container of SVG elements and vex renderers\r\n * @param score {@link SmoScore}\r\n * @param dirty lets the caller know the display needs update\r\n * @param passState state machine in rendering part/all of the score\r\n * @param renderPromise awaits on render all\r\n * @param addToReplaceQueue adds a measure to the quick update queue\r\n * @param renderElement a little redundant with svg\r\n * @category SuiRender\r\n */\r\nexport interface SuiRendererBase {\r\n pageMap: SvgPageMap,\r\n score: SmoScore | null,\r\n dirty: boolean,\r\n passState: number,\r\n renderPromise(): Promise,\r\n addToReplaceQueue(mm: SmoSelection[]): void,\r\n renderElement: Element\r\n}\r\n// used to perform highlights in the backgroundd\r\nexport interface HighlightQueue {\r\n selectionCount: number, deferred: boolean\r\n}\r\n/**\r\n * Map the notes in the svg so they can respond to events and interact\r\n * with the mouse/keyboard\r\n * @category SuiRender\r\n */\r\nexport abstract class SuiMapper {\r\n renderer: SuiRendererBase;\r\n scroller: SuiScroller;\r\n // measure to selector map\r\n measureNoteMap: Record = {};\r\n // notes currently selected. Something is always selected\r\n // modifiers (text etc.) that have been selected\r\n modifierSelections: ModifierTab[] = [];\r\n selections: SmoSelection[] = [];\r\n // The list of modifiers near the current selection\r\n localModifiers: ModifierTab[] = [];\r\n modifierIndex: number = -1;\r\n modifierSuggestion: ModifierTab | null = null;\r\n pitchIndex: number = -1;\r\n // By default, defer highlights for performance.\r\n deferHighlightMode: boolean = true;\r\n suggestion: SmoSelection | null = null;\r\n highlightQueue: HighlightQueue;\r\n mouseHintBox: OutlineInfo | null = null;\r\n selectionRects: Record = {};\r\n outlines: Record = {};\r\n mapping: boolean = false;\r\n constructor(renderer: SuiRendererBase, scroller: SuiScroller) {\r\n // renderer renders the music when it changes\r\n this.renderer = renderer;\r\n this.scroller = scroller;\r\n this.modifierIndex = -1;\r\n this.localModifiers = [];\r\n // index if a single pitch of a chord is selected\r\n this.pitchIndex = -1;\r\n // the current selection, which is also the copy/paste destination\r\n this.highlightQueue = { selectionCount: 0, deferred: false };\r\n }\r\n\r\n abstract highlightSelection(): void;\r\n abstract _growSelectionRight(hold?: boolean): number; \r\n abstract _setModifierAsSuggestion(sel: ModifierTab): void;\r\n abstract _setArtifactAsSuggestion(sel: SmoSelection): void;\r\n abstract getIdleTime(): number;\r\n updateHighlight() {\r\n const self = this;\r\n if (this.selections.length === 0) {\r\n this.highlightQueue.deferred = false;\r\n this.highlightQueue.selectionCount = 0;\r\n return;\r\n }\r\n if (this.highlightQueue.selectionCount === this.selections.length) {\r\n this.highlightSelection();\r\n this.highlightQueue.deferred = false;\r\n } else {\r\n this.highlightQueue.selectionCount = this.selections.length;\r\n setTimeout(() => {\r\n self.updateHighlight();\r\n }, 50);\r\n }\r\n }\r\n deferHighlight() {\r\n if (!this.deferHighlightMode) {\r\n this.highlightSelection();\r\n }\r\n const self = this;\r\n if (!this.highlightQueue.deferred) {\r\n this.highlightQueue.deferred = true;\r\n setTimeout(() => {\r\n self.updateHighlight();\r\n }, 50);\r\n }\r\n }\r\n _createLocalModifiersList() {\r\n this.localModifiers = [];\r\n let index = 0;\r\n this.selections.forEach((sel) => {\r\n sel.note?.getGraceNotes().forEach((gg) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: gg, box: gg.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.note?.getModifiers('SmoDynamicText').forEach((dyn) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: dyn, box: dyn.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.measure.getModifiersByType('SmoVolta').forEach((volta) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: volta, box: volta.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.measure.getModifiersByType('SmoTempoText').forEach((tempo) => {\r\n this.localModifiers.push({ index, selection: sel, modifier: tempo, box: tempo.logicalBox ?? SvgBox.default });\r\n index += 1;\r\n });\r\n sel.staff.renderableModifiers.forEach((mod) => {\r\n if (SmoSelector.gteq(sel.selector, mod.startSelector) &&\r\n SmoSelector.lteq(sel.selector, mod.endSelector) && mod.logicalBox) {\r\n const exists = this.localModifiers.find((mm) => mm.modifier.ctor === mod.ctor);\r\n if (!exists) {\r\n this.localModifiers.push({ index, selection: sel, modifier: mod, box: mod.logicalBox });\r\n index += 1;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * When a modifier is selected graphically, update the selection list\r\n * and create a local modifier list\r\n * @param modifierTabs \r\n */\r\n createLocalModifiersFromModifierTabs(modifierTabs: ModifierTab[]) {\r\n const selections: SmoSelection[] = [];\r\n const modMap: Record = {};\r\n modifierTabs.forEach((mt) => {\r\n if (mt.selection) {\r\n const key = SmoSelector.getNoteKey(mt.selection.selector);\r\n if (!modMap[key]) {\r\n selections.push(mt.selection);\r\n modMap[key] = true;\r\n }\r\n }\r\n });\r\n if (selections.length) {\r\n this.selections = selections;\r\n this._createLocalModifiersList();\r\n this.deferHighlight();\r\n }\r\n }\r\n // used by remove dialogs to clear removed thing\r\n clearModifierSelections() {\r\n this.modifierSelections = [];\r\n this._createLocalModifiersList();\r\n this.modifierIndex = -1;\r\n if (this.outlines['staffModifier'] && this.outlines['staffModifier'].element) {\r\n this.outlines['staffModifier'].element.remove();\r\n this.outlines['staffModifier'].element = undefined;\r\n }\r\n // this.eraseRect('staffModifier'); not sure where this should go\r\n }\r\n // ### loadScore\r\n // We are loading a new score. clear the maps so we can rebuild them after\r\n // rendering\r\n loadScore() {\r\n this.measureNoteMap = {};\r\n this.clearModifierSelections();\r\n this.selections = [];\r\n this.highlightQueue = { selectionCount: 0, deferred: false };\r\n }\r\n\r\n // ### _clearMeasureArtifacts\r\n // clear the measure from the measure and note maps so we can rebuild it.\r\n clearMeasureMap(measure: SmoMeasure) {\r\n const selector = { staff: measure.measureNumber.staffId, measure: measure.measureNumber.measureIndex, voice: 0, tick: 0, pitches: [] };\r\n\r\n // Unselect selections in this measure so we can reselect them when re-tracked\r\n const ar: SmoSelection[] = [];\r\n this.selections.forEach((selection) => {\r\n if (selection.selector.staff !== selector.staff || selection.selector.measure !== selector.measure) {\r\n ar.push(selection);\r\n }\r\n });\r\n this.selections = ar;\r\n }\r\n\r\n _copySelectionsByMeasure(staffIndex: number, measureIndex: number) {\r\n const rv = this.selections.filter((sel) => sel.selector.staff === staffIndex && sel.selector.measure === measureIndex);\r\n const ticks = rv.length < 1 ? 0 : rv.map((sel) => (sel.note as SmoNote).tickCount).reduce((a, b) => a + b);\r\n const selectors: SmoSelector[] = [];\r\n rv.forEach((sel) => {\r\n const nsel = JSON.parse(JSON.stringify(sel.selector));\r\n if (!nsel.pitches) {\r\n nsel.pitches = [];\r\n }\r\n selectors.push(nsel);\r\n });\r\n return { ticks, selectors };\r\n }\r\n deleteMeasure(selection: SmoSelection) {\r\n const selCopy = this._copySelectionsByMeasure(selection.selector.staff, selection.selector.measure)\r\n .selectors;\r\n this.clearMeasureMap(selection.measure);\r\n if (selCopy.length) {\r\n selCopy.forEach((selector) => {\r\n const nsel = JSON.parse(JSON.stringify(selector));\r\n if (selector.measure === 0) {\r\n nsel.measure += 1;\r\n } else {\r\n nsel.measure -= 1;\r\n }\r\n this.selections.push(this._getClosestTick(nsel));\r\n });\r\n }\r\n }\r\n _updateNoteModifier(selection: SmoSelection, modMap: Record, modifier: SmoNoteModifierBase, ix: number) {\r\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab(\r\n {\r\n modifier,\r\n selection,\r\n box: modifier.logicalBox,\r\n index: ix\r\n }\r\n );\r\n ix += 1;\r\n const context = this.renderer.pageMap.getRendererFromModifier(modifier);\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n return ix;\r\n }\r\n\r\n _updateModifiers() {\r\n let ix = 0;\r\n const modMap: Record = {};\r\n if (!this.renderer.score) {\r\n return;\r\n }\r\n this.renderer.score.textGroups.forEach((modifier) => {\r\n if (!modMap[modifier.attrs.id] && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection: null,\r\n box: modifier.logicalBox,\r\n index: ix\r\n });\r\n ix += 1;\r\n }\r\n });\r\n const keys = Object.keys(this.measureNoteMap); \r\n keys.forEach((selKey) => {\r\n const selection = this.measureNoteMap[selKey];\r\n selection.staff.renderableModifiers.forEach((modifier) => {\r\n if (SmoSelector.contains(selection.selector, modifier.startSelector, modifier.endSelector)) {\r\n if (!modMap[modifier.attrs.id]) {\r\n if (modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection,\r\n box: modifier.logicalBox,\r\n index: ix\r\n });\r\n ix += 1;\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n }\r\n }\r\n });\r\n selection.measure.modifiers.forEach((modifier) => {\r\n if (modifier.attrs.id\r\n && !modMap[modifier.attrs.id]\r\n && modifier.logicalBox) {\r\n this.renderer.pageMap.addModifierTab({\r\n modifier,\r\n selection,\r\n box: SvgHelpers.smoBox(modifier.logicalBox),\r\n index: ix\r\n });\r\n ix += 1;\r\n modMap[modifier.attrs.id] = true;\r\n }\r\n });\r\n selection.note?.textModifiers.forEach((modifier) => {\r\n if (modifier.logicalBox) {\r\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\r\n }\r\n });\r\n\r\n selection.note?.graceNotes.forEach((modifier) => {\r\n ix = this._updateNoteModifier(selection, modMap, modifier, ix);\r\n });\r\n });\r\n }\r\n // ### _getClosestTick\r\n // given a musical selector, find the note artifact that is closest to it,\r\n // if an exact match is not available\r\n _getClosestTick(selector: SmoSelector): SmoSelection {\r\n let tickKey: string | undefined = '';\r\n const measureKey = Object.keys(this.measureNoteMap).find((k) =>\r\n SmoSelector.sameMeasure(this.measureNoteMap[k].selector, selector)\r\n && this.measureNoteMap[k].selector.tick === 0);\r\n tickKey = Object.keys(this.measureNoteMap).find((k) =>\r\n SmoSelector.sameNote(this.measureNoteMap[k].selector, selector));\r\n const firstObj = this.measureNoteMap[Object.keys(this.measureNoteMap)[0]];\r\n\r\n if (tickKey) {\r\n return this.measureNoteMap[tickKey];\r\n }\r\n if (measureKey) {\r\n return this.measureNoteMap[measureKey];\r\n }\r\n return firstObj;\r\n }\r\n\r\n // ### _setModifierBoxes\r\n // Create the DOM modifiers for the lyrics and other modifiers\r\n _setModifierBoxes(measure: SmoMeasure) {\r\n const context = this.renderer.pageMap.getRenderer(measure.svg.logicalBox);\r\n measure.voices.forEach((voice: SmoVoice) => {\r\n voice.notes.forEach((smoNote: SmoNote) => {\r\n if (context) {\r\n const el = context.svg.getElementById(smoNote.renderId as string);\r\n if (el) {\r\n SvgHelpers.updateArtifactBox(context, (el as any), smoNote);\r\n // TODO: fix this, only works on the first line.\r\n smoNote.getModifiers('SmoLyric').forEach((lyrict: SmoNoteModifierBase) => {\r\n const lyric: SmoLyric = lyrict as SmoLyric;\r\n if (lyric.getText().length || lyric.isHyphenated()) {\r\n const lyricElement = context.svg.getElementById('vf-' + lyric.attrs.id) as SVGSVGElement;\r\n if (lyricElement) {\r\n SvgHelpers.updateArtifactBox(context, lyricElement, lyric as any);\r\n }\r\n }\r\n });\r\n }\r\n smoNote.graceNotes.forEach((g) => {\r\n if (g.element) {\r\n }\r\n var gel = context.svg.getElementById('vf-' + g.renderId) as SVGSVGElement;\r\n SvgHelpers.updateArtifactBox(context, gel, g);\r\n });\r\n smoNote.textModifiers.forEach((modifier) => {\r\n if (modifier.logicalBox && modifier.element) {\r\n SvgHelpers.updateArtifactBox(context, modifier.element, modifier as any);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * returns true of the selections are adjacent\r\n * @param s1 a selections\r\n * @param s2 another election\r\n * @returns \r\n */\r\n isAdjacentSelection(s1: SmoSelection, s2: SmoSelection) {\r\n if (!this.renderer.score) {\r\n return false;\r\n }\r\n const nextSel = SmoSelection.advanceTicks(this.renderer.score, s1, 1);\r\n if (!nextSel) {\r\n return false;\r\n }\r\n return SmoSelector.eq(nextSel.selector, s2.selector);\r\n }\r\n areSelectionsAdjacent() {\r\n let selectionIx = 0;\r\n for (selectionIx = 0; this.selections.length > 1 && selectionIx < this.selections.length - 1; ++selectionIx) {\r\n if (!this.isAdjacentSelection(this.selections[selectionIx], this.selections[selectionIx + 1])) {\r\n return false;\r\n }\r\n }\r\n return true; \r\n }\r\n // ### updateMeasure\r\n // A measure has changed. Update the music geometry for it\r\n mapMeasure(staff: SmoSystemStaff, measure: SmoMeasure, printing: boolean) {\r\n let voiceIx = 0;\r\n let selectedTicks = 0;\r\n\r\n // We try to restore block selections. If all the selections in this block are not adjacent, only restore individual selections\r\n // if possible\r\n let adjacentSels = this.areSelectionsAdjacent();\r\n const lastResortSelection: SmoSelection[] = [];\r\n let selectionChanged = false;\r\n let vix = 0;\r\n let replacedSelectors = 0;\r\n if (!measure.svg.logicalBox) {\r\n return;\r\n }\r\n this._setModifierBoxes(measure);\r\n const timestamp = new Date().valueOf();\r\n // Keep track of any current selections in this measure, we will try to restore them.\r\n const sels = this._copySelectionsByMeasure(staff.staffId, measure.measureNumber.measureIndex);\r\n this.clearMeasureMap(measure);\r\n if (sels.selectors.length) {\r\n vix = sels.selectors[0].voice;\r\n }\r\n sels.selectors.forEach((sel) => {\r\n sel.voice = vix;\r\n });\r\n\r\n measure.voices.forEach((voice) => {\r\n let tick = 0;\r\n voice.notes.forEach((note) => {\r\n const selector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: voiceIx,\r\n tick,\r\n pitches: []\r\n };\r\n if (typeof(note.logicalBox) === 'undefined') {\r\n console.warn('note has no box');\r\n }\r\n // create a selection for the newly rendered note\r\n const selection = new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: [],\r\n box: SvgHelpers.smoBox(SvgHelpers.smoBox(note.logicalBox)),\r\n type: 'rendered'\r\n });\r\n // and add it to the map\r\n this._updateMeasureNoteMap(selection, printing);\r\n\r\n // If this note is the same location as something that was selected, reselect it\r\n if (replacedSelectors < sels.selectors.length && selection.selector.tick === sels.selectors[replacedSelectors].tick &&\r\n selection.selector.voice === vix) {\r\n this.selections.push(selection);\r\n // Reselect any pitches.\r\n if (sels.selectors[replacedSelectors].pitches.length > 0) {\r\n sels.selectors[replacedSelectors].pitches.forEach((pitchIx) => {\r\n if (selection.note && selection.note.pitches.length > pitchIx) {\r\n selection.selector.pitches.push(pitchIx);\r\n }\r\n });\r\n }\r\n const note = selection.note as SmoNote;\r\n selectedTicks += note.tickCount;\r\n replacedSelectors += 1;\r\n selectionChanged = true;\r\n } else if (adjacentSels && selectedTicks > 0 && selectedTicks < sels.ticks && selection.selector.voice === vix) {\r\n // try to select the same length of music as was previously selected. So a 1/4 to 2 1/8, both\r\n // are selected\r\n replacedSelectors += 1;\r\n this.selections.push(selection);\r\n selectedTicks += note.tickCount;\r\n } else if (this.selections.length === 0 && sels.selectors.length === 0 && lastResortSelection.length === 0) {\r\n lastResortSelection.push(selection);\r\n }\r\n tick += 1;\r\n });\r\n voiceIx += 1;\r\n });\r\n // We deleted all the notes that were selected, select something else\r\n if (this.selections.length === 0) {\r\n selectionChanged = true;\r\n this.selections = lastResortSelection;\r\n }\r\n // If there were selections on this measure, highlight them.\r\n if (selectionChanged) {\r\n this.deferHighlight();\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.MAP, new Date().valueOf() - timestamp);\r\n }\r\n\r\n _getTicksFromSelections(): number {\r\n let rv = 0;\r\n this.selections.forEach((sel) => {\r\n if (sel.note) {\r\n rv += sel.note.tickCount;\r\n }\r\n });\r\n return rv;\r\n }\r\n _copySelections(): SmoSelector[] {\r\n const rv: SmoSelector[] = [];\r\n this.selections.forEach((sel) => {\r\n rv.push(sel.selector);\r\n });\r\n return rv;\r\n }\r\n // ### getExtremeSelection\r\n // Get the rightmost (1) or leftmost (-1) selection\r\n getExtremeSelection(sign: number): SmoSelection {\r\n let i = 0;\r\n let rv = this.selections[0];\r\n for (i = 1; i < this.selections.length; ++i) {\r\n const sa = this.selections[i].selector;\r\n if (sa.measure * sign > rv.selector.measure * sign) {\r\n rv = this.selections[i];\r\n } else if (sa.measure === rv.selector.measure && sa.tick * sign > rv.selector.tick * sign) {\r\n rv = this.selections[i];\r\n }\r\n }\r\n return rv;\r\n }\r\n _selectClosest(selector: SmoSelector) {\r\n var artifact = this._getClosestTick(selector);\r\n if (!artifact) {\r\n return;\r\n }\r\n if (this.selections.find((sel) => JSON.stringify(sel.selector)\r\n === JSON.stringify(artifact.selector))) {\r\n return;\r\n }\r\n const note = artifact.note as SmoNote;\r\n if (selector.pitches && selector.pitches.length && selector.pitches.length <= note.pitches.length) {\r\n // If the old selection had only a single pitch, try to recreate that.\r\n artifact.selector.pitches = JSON.parse(JSON.stringify(selector.pitches));\r\n }\r\n this.selections.push(artifact);\r\n }\r\n // ### updateMap\r\n // This should be called after rendering the score. It updates the score to\r\n // graphics map and selects the first object.\r\n updateMap() {\r\n const ts = new Date().valueOf();\r\n this.mapping = true;\r\n let tickSelected = 0;\r\n const selCopy = this._copySelections();\r\n const ticksSelectedCopy = this._getTicksFromSelections();\r\n const firstSelection = this.getExtremeSelection(-1);\r\n this._updateModifiers();\r\n\r\n // Try to restore selection. If there were none, just select the fist\r\n // thing in the score\r\n const firstKey = SmoSelector.getNoteKey(SmoSelector.default);\r\n if (!selCopy.length && this.renderer.score) {\r\n // If there is nothing rendered, don't update tracker\r\n if (typeof(this.measureNoteMap[firstKey]) !== 'undefined' && !firstSelection)\r\n this.selections = [this.measureNoteMap[firstKey]];\r\n } else if (this.areSelectionsAdjacent() && this.selections.length > 1) {\r\n // If there are adjacent selections, restore selections to the ticks that are in the score now\r\n if (!firstSelection) {\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\r\n return;\r\n }\r\n this.selections = [];\r\n this._selectClosest(firstSelection.selector);\r\n const first = this.selections[0];\r\n tickSelected = (first.note as SmoNote).tickCount ?? 0;\r\n while (tickSelected < ticksSelectedCopy && first) {\r\n let delta: number = this._growSelectionRight(true);\r\n if (!delta) {\r\n break;\r\n }\r\n tickSelected += delta;\r\n }\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n this.mapping = false;\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.UPDATE_MAP, new Date().valueOf() - ts);\r\n }\r\n createMousePositionBox(logicalBox: SvgBox) {\r\n const pageMap = this.renderer.pageMap;\r\n const page = pageMap.getRendererFromPoint(logicalBox);\r\n if (page) {\r\n const cof = (pageMap.zoomScale * pageMap.renderScale); \r\n const debugBox = SvgHelpers.smoBox(logicalBox);\r\n debugBox.y -= (page.box.y + 5 / cof);\r\n debugBox.x -= (page.box.x + 5 / cof)\r\n debugBox.width = 10 / cof;\r\n debugBox.height = 10 / cof;\r\n if (!this.mouseHintBox) {\r\n this.mouseHintBox = {\r\n stroke: SvgPageMap.strokes['debug-mouse-box'],\r\n classes: 'hide-print',\r\n box: debugBox,\r\n scroll: { x: 0, y: 0 },\r\n context: page,\r\n timeOff: 1000\r\n };\r\n }\r\n this.mouseHintBox.context = page;\r\n this.mouseHintBox.box = debugBox;\r\n SvgHelpers.outlineRect(this.mouseHintBox);\r\n } \r\n }\r\n eraseMousePositionBox() {\r\n if (this.mouseHintBox && this.mouseHintBox.element) {\r\n this.mouseHintBox.element.remove();\r\n this.mouseHintBox.element = undefined;\r\n }\r\n }\r\n /**\r\n * Find any musical elements at the supplied screen coordinates and set them as the selection\r\n * @param bb \r\n * @returns \r\n */\r\n intersectingArtifact(bb: SvgBox) {\r\n const scrollState = this.scroller.scrollState;\r\n bb = SvgHelpers.boxPoints(bb.x + scrollState.x, bb.y + scrollState.y, bb.width ? bb.width : 1, bb.height ? bb.height : 1);\r\n const logicalBox = this.renderer.pageMap.clientToSvg(bb);\r\n const { selections, page } = this.renderer.pageMap.findArtifact(logicalBox);\r\n if (page) {\r\n const artifacts = selections;\r\n // const artifacts = SvgHelpers.findIntersectingArtifactFromMap(bb, this.measureNoteMap, SvgHelpers.smoBox(this.scroller.scrollState.scroll));\r\n // TODO: handle overlapping suggestions\r\n if (!artifacts.length) {\r\n const sel = this.renderer.pageMap.findModifierTabs(logicalBox);\r\n if (sel.length) {\r\n this._setModifierAsSuggestion(sel[0]);\r\n this.eraseMousePositionBox();\r\n } else {\r\n // no intersection, show mouse hint \r\n this.createMousePositionBox(logicalBox);\r\n }\r\n return;\r\n }\r\n const artifact = artifacts[0];\r\n this.eraseMousePositionBox();\r\n this._setArtifactAsSuggestion(artifact);\r\n }\r\n }\r\n _getRectangleChain(selection: SmoSelection) {\r\n const rv: number[] = [];\r\n if (!selection.note) {\r\n return rv;\r\n }\r\n rv.push(selection.measure.svg.pageIndex);\r\n rv.push(selection.measure.svg.lineIndex);\r\n rv.push(selection.measure.measureNumber.measureIndex);\r\n return rv;\r\n }\r\n _updateMeasureNoteMap(artifact: SmoSelection, printing: boolean) {\r\n const note = artifact.note as SmoNote;\r\n const noteKey = SmoSelector.getNoteKey(artifact.selector);\r\n const activeVoice = artifact.measure.getActiveVoice();\r\n // not has not been drawn yet.\r\n if ((!artifact.box) || (!artifact.measure.svg.logicalBox)) {\r\n return;\r\n }\r\n this.measureNoteMap[noteKey] = artifact;\r\n this.renderer.pageMap.addArtifact(artifact);\r\n artifact.scrollBox = { x: artifact.box.x,\r\n y: artifact.measure.svg.logicalBox.y };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers, SvgBuilder } from \"./svgHelpers\";\r\nimport { buildDom } from \"../../common/htmlHelpers\";\r\nimport { SuiScoreViewOperations } from \"./scoreViewOperations\";\r\nimport { SvgBox, Pitch, PitchLetter } from '../../smo/data/common';\r\ndeclare var $: any;\r\n\r\nexport interface PianoKey {\r\n box: SvgBox,\r\n keyElement: SVGSVGElement\r\n}\r\nexport class SuiPiano {\r\n renderElement: SVGSVGElement | null;\r\n view: SuiScoreViewOperations;\r\n octaveOffset: number = 0;\r\n chordPedal: boolean = false;\r\n objects: PianoKey[] = [];\r\n suggestFadeTimer: NodeJS.Timer | null = null;\r\n elementId: string = 'piano-svg';\r\n constructor(view: SuiScoreViewOperations) {\r\n this.renderElement = (document.getElementById(this.elementId) as any) as SVGSVGElement;\r\n this.view = view;\r\n this.render();\r\n }\r\n\r\n static get dimensions() {\r\n return {\r\n wwidth: 23,\r\n bwidth: 13,\r\n wheight: 120,\r\n bheight: 80,\r\n octaves: 1\r\n };\r\n }\r\n // 7 white keys per octave\r\n static get wkeysPerOctave() {\r\n return 7;\r\n }\r\n static get owidth() {\r\n return SuiPiano.dimensions.wwidth * SuiPiano.wkeysPerOctave;\r\n }\r\n static createAndDisplay() {\r\n // Called by ribbon button.\r\n // $('body').trigger('show-piano-event');\r\n $('body').trigger('forceScrollEvent');\r\n }\r\n\r\n _mapKeys() {\r\n this.objects = [];\r\n var keys: SVGSVGElement[] = [].slice.call(this.renderElement!.getElementsByClassName('piano-key'));\r\n keys.forEach((key) => {\r\n var rect = SvgHelpers.smoBox(key.getBoundingClientRect());\r\n var id = key.getAttributeNS('', 'id');\r\n var artifact = {\r\n keyElement: key,\r\n box: rect,\r\n id: id\r\n };\r\n this.objects.push(artifact);\r\n });\r\n }\r\n _removeClass(classes: string) {\r\n Array.from(this.renderElement!.getElementsByClassName('piano-key')).forEach((el) => {\r\n $(el).removeClass(classes);\r\n });\r\n }\r\n _removeGlow() {\r\n this._removeClass('glow-key');\r\n }\r\n _fadeGlow(el: SVGSVGElement) {\r\n if (this.suggestFadeTimer) {\r\n clearTimeout(this.suggestFadeTimer as any);\r\n }\r\n // Make selection fade if there is a selection.\r\n this.suggestFadeTimer = setTimeout(() => {\r\n $(el).removeClass('glow-key');\r\n }, 1000);\r\n }\r\n bind() {\r\n // The menu option to toggle piano state\r\n $('body').off('show-piano-event').on('show-piano-event', () => {\r\n const isVisible = $('body').hasClass('show-piano');\r\n $('body').toggleClass('show-piano');\r\n this._mapKeys();\r\n });\r\n $('#piano-8va-button').off('click').on('click', (ev: any) => {\r\n $('#piano-8vb-button').removeClass('activated');\r\n if (this.octaveOffset === 0) {\r\n $(ev.currentTarget).addClass('activated');\r\n this.octaveOffset = 1;\r\n } else {\r\n $(ev.currentTarget).removeClass('activated');\r\n this.octaveOffset = 0;\r\n }\r\n });\r\n $('#piano-8vb-button').off('click').on('click', (ev: any) => {\r\n $('#piano-8va-button').removeClass('activated');\r\n if (this.octaveOffset === 0) {\r\n $(ev.currentTarget).addClass('activated');\r\n this.octaveOffset = -1;\r\n } else {\r\n $(ev.currentTarget).removeClass('activated');\r\n this.octaveOffset = 0;\r\n }\r\n });\r\n $('#piano-xpose-up').off('click').on('click', () => {\r\n this.view.transposeSelections(1);\r\n });\r\n $('#piano-xpose-down').off('click').on('click', () => {\r\n this.view.transposeSelections(-1);\r\n });\r\n $('#piano-enharmonic').off('click').on('click', () => {\r\n this.view.toggleEnharmonic();\r\n });\r\n $('button.jsLeft').off('click').on('click', () => {\r\n this.view.tracker.moveSelectionLeft();\r\n });\r\n $('button.jsRight').off('click').on('click', () => {\r\n this.view.tracker.moveSelectionRight(this.view.score, null, false);\r\n });\r\n $('button.jsGrowDuration').off('click').on('click', () => {\r\n this.view.batchDurationOperation('doubleDuration');\r\n });\r\n $('button.jsGrowDot').off('click').on('click', () => {\r\n this.view.batchDurationOperation('dotDuration');\r\n });\r\n $('button.jsShrinkDuration').off('click').on('click', () => {\r\n this.view.batchDurationOperation('halveDuration');\r\n });\r\n $('button.jsShrinkDot').off('click').on('click', () => {\r\n this.view.batchDurationOperation('undotDuration');\r\n });\r\n $('button.jsChord').off('click').on('click', (ev: any) => {\r\n $(ev.currentTarget).toggleClass('activated');\r\n this.chordPedal = !this.chordPedal;\r\n });\r\n $(this.renderElement).off('mousemove').on('mousemove', (ev: any) => {\r\n if (Math.abs(this.objects[0].box.x - this.objects[0].keyElement.getBoundingClientRect().x)\r\n > this.objects[0].box.width / 2) {\r\n console.log('remap piano');\r\n this._mapKeys();\r\n }\r\n if (!this.renderElement) {\r\n return;\r\n }\r\n const clientBox = SvgHelpers.smoBox(SvgHelpers.boxPoints(ev.clientX, ev.clientY, 1, 1)); // last param is scroll offset\r\n\r\n var keyPressed = SvgHelpers.findSmallestIntersection(\r\n clientBox, this.objects) as PianoKey;\r\n if (!keyPressed) {\r\n return;\r\n }\r\n const el: SVGSVGElement = this.renderElement!.getElementById(keyPressed.keyElement.id) as SVGSVGElement;\r\n if ($(el).hasClass('glow-key')) {\r\n return;\r\n }\r\n this._removeGlow();\r\n $(el).addClass('glow-key');\r\n this._fadeGlow(el);\r\n });\r\n $(this.renderElement).off('blur').on('blur', () => {\r\n this._removeGlow();\r\n });\r\n $(this.renderElement).off('click').on('click', (ev: any) => {\r\n this._updateSelections(ev);\r\n });\r\n // the close button on piano itself\r\n $('.close-piano').off('click').on('click', () => {\r\n this.view.score.preferences.showPiano = false;\r\n this.view.updateScorePreferences(this.view.score.preferences);\r\n });\r\n }\r\n static hidePiano() {\r\n if ($('body').hasClass('show-piano')) {\r\n $('body').removeClass('show-piano');\r\n }\r\n }\r\n static showPiano() {\r\n if ($('body').hasClass('show-piano') === false) {\r\n $('body').addClass('show-piano');\r\n // resize the work area.\r\n // $('body').trigger('forceResizeEvent');\r\n }\r\n }\r\n static get isShowing() {\r\n return $('body').hasClass('show-piano');\r\n }\r\n _updateSelections(ev: any) {\r\n // fake a scroller (piano scroller w/b cool tho...)\r\n if (!this.renderElement) {\r\n return;\r\n }\r\n const logicalBox = SvgHelpers.smoBox({ x: ev.clientX, y: ev.clientY });\r\n\r\n var keyPressed =\r\n SvgHelpers.findSmallestIntersection(logicalBox, this.objects) as PianoKey;\r\n if (!keyPressed) {\r\n return;\r\n }\r\n if (!ev.shiftKey && !this.chordPedal) {\r\n this._removeClass('glow-key pressed-key');\r\n } else {\r\n var el = this.renderElement!.getElementById(keyPressed.keyElement.id) as SVGSVGElement;\r\n $(el).addClass('pressed-key');\r\n }\r\n const key = keyPressed.keyElement.id.substr(6, keyPressed.keyElement.id.length - 6);\r\n const pitch: Pitch = {\r\n letter: key[0].toLowerCase() as PitchLetter,\r\n octave: this.octaveOffset,\r\n accidental: key.length > 1 ? key[1] : 'n'\r\n };\r\n\r\n this.view.setPitchPiano(pitch, this.chordPedal);\r\n }\r\n _renderControls() {\r\n var b = buildDom;\r\n var r = b('button').classes('icon icon-cross close close-piano');\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsGrowDuration').append(b('span').classes('icon icon-duration_grow'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsShrinkDuration').append(b('span').classes('icon icon-duration_less'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsGrowDot').append(b('span').classes('icon icon-duration_grow_dot'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsShrinkDot').append(b('span').classes('icon icon-duration_less_dot'));\r\n $('.piano-container .key-right-ctrl').append(r.dom());\r\n\r\n r = b('button').classes('key-ctrl jsLeft').append(b('span').classes('icon icon-arrow-left'));\r\n $('.piano-container .piano-keys').prepend(r.dom());\r\n r = b('button').classes('key-ctrl jsRight').append(b('span').classes('icon icon-arrow-right'));\r\n $('.piano-container .piano-keys').append(r.dom());\r\n\r\n r = b('button').classes('piano-ctrl').attr('id', 'piano-8va-button').append(\r\n b('span').classes('bold-italic').text('8')).append(\r\n b('sup').classes('italic').text('va'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl ').attr('id', 'piano-8vb-button').append(\r\n b('span').classes('bold-italic').text('8')).append(\r\n b('sup').classes('italic').text('vb'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsXposeUp').attr('id', 'piano-xpose-up').append(\r\n b('span').classes('bold').text('+'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsXposeDown').attr('id', 'piano-xpose-down').append(\r\n b('span').classes('bold').text('-'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsEnharmonic').attr('id', 'piano-enharmonic').append(\r\n b('span').classes('bold icon icon-accident'));\r\n\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n r = b('button').classes('piano-ctrl jsChord')\r\n .append(b('span').classes('icon icon-chords'));\r\n $('.piano-container .key-left-ctrl').append(r.dom());\r\n }\r\n handleResize() {\r\n this._mapKeys();\r\n }\r\n playNote() {\r\n }\r\n render() {\r\n var b = SvgBuilder.b;\r\n var d = SuiPiano.dimensions;\r\n // https://www.mathpages.com/home/kmath043.htm\r\n\r\n // Width of white key at back for C,D,E\r\n var b1off = d.wwidth - (d.bwidth * 2 / 3);\r\n\r\n // Width of other white keys at the back.\r\n var b2off = d.wwidth - (d.bwidth * 3) / 4;\r\n\r\n var xwhite = [{\r\n note: 'C',\r\n x: 0\r\n }, {\r\n note: 'D',\r\n x: d.wwidth\r\n }, {\r\n note: 'E',\r\n x: 2 * d.wwidth\r\n }, {\r\n note: 'F',\r\n x: 3 * d.wwidth\r\n }, {\r\n note: 'G',\r\n x: 4 * d.wwidth\r\n }, {\r\n note: 'A',\r\n x: 5 * d.wwidth\r\n }, {\r\n note: 'B',\r\n x: 6 * d.wwidth\r\n }\r\n ];\r\n var xblack = [{\r\n note: 'Db',\r\n x: b1off\r\n }, {\r\n note: 'Eb',\r\n x: 2 * b1off + d.bwidth\r\n }, {\r\n note: 'Gb',\r\n x: 3 * d.wwidth + b2off\r\n }, {\r\n note: 'Ab',\r\n x: (3 * d.wwidth + b2off) + b2off + d.bwidth\r\n }, {\r\n note: 'Bb',\r\n x: SuiPiano.owidth - (b2off + d.bwidth)\r\n }\r\n ];\r\n var wwidth = d.wwidth;\r\n var bwidth = d.bwidth;\r\n var wheight = d.wheight;\r\n var bheight = d.bheight;\r\n var owidth = SuiPiano.wkeysPerOctave * wwidth;\r\n\r\n // Start on C2 to C6 to reduce space\r\n var octaveOff = 7 - d.octaves;\r\n\r\n var x = 0;\r\n var y = 0;\r\n var r = b('g');\r\n for (var i = 0; i < d.octaves; ++i) {\r\n x = i * owidth;\r\n xwhite.forEach((key) => {\r\n var nt = key.note;\r\n var classes = 'piano-key white-key';\r\n if (nt == 'C4') {\r\n classes += ' middle-c';\r\n }\r\n var rect = b('rect').attr('id', 'keyId-' + nt).rect(x + key.x, y, wwidth, wheight, classes);\r\n r.append(rect);\r\n\r\n var tt = b('text').text(x + key.x + (wwidth / 5), bheight + 16, 'note-text', nt);\r\n r.append(tt);\r\n });\r\n xblack.forEach((key) => {\r\n var nt = key.note;\r\n var classes = 'piano-key black-key';\r\n var rect = b('rect').attr('id', 'keyId-' + nt).attr('fill', 'url(#piano-grad)').rect(x + key.x, 0, bwidth, bheight, classes);\r\n r.append(rect);\r\n });\r\n }\r\n var el = (document.getElementById(this.elementId) as any) as SVGSVGElement;\r\n SvgHelpers.gradient(el, 'piano-grad', 'vertical', [{ color: '#000', offset: '0%', opacity: 1 },\r\n { color: '#777', offset: '50%', opacity: 1 }, { color: '#ddd', offset: '100%', opacity: 1 }]);\r\n el.appendChild(r.dom());\r\n this._renderControls();\r\n this._mapKeys();\r\n this.bind();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support the state machine associated with background music rendering.\r\n * @module renderState\r\n */\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { UndoBuffer, UndoEntry } from '../../smo/xform/undo';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { VxSystem } from '../vex/vxSystem';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SuiMapper } from './mapper';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SuiScoreRender, ScoreRenderParams } from './scoreRender';\r\nimport { SuiExceptionHandler } from '../../ui/exceptions';\r\nimport { VexFlow, setFontStack } from '../../common/vex';\r\ndeclare var $: any;\r\n\r\n\r\nexport var scoreChangeEvent = 'smoScoreChangeEvent';\r\n/**\r\n * Manage the state of the score rendering. The score can be rendered either completely,\r\n * or partially for editing. This class works with the RenderDemon to decide when to\r\n * render the score after it has been modified, and keeps track of what the current\r\n * render state is (dirty, etc.)\r\n * @category SuiRender\r\n * */\r\nexport class SuiRenderState {\r\n static debugMask: number = 0;\r\n dirty: boolean;\r\n replaceQ: SmoSelection[];\r\n stateRepCount: 0;\r\n viewportChanged: boolean;\r\n _resetViewport: boolean;\r\n measureMapper: SuiMapper | null;\r\n passState: number = SuiRenderState.passStates.initial;\r\n _score: SmoScore | null = null;\r\n _backupZoomScale: number = 0;\r\n renderer: SuiScoreRender;\r\n idleRedrawTime: number;\r\n idleLayoutTimer: number = 0; // how long the score has been idle\r\n demonPollTime: number;\r\n handlingRedraw: boolean = false;\r\n // signal to render demon that we have suspended background\r\n // rendering because we are recording or playing actions.\r\n suspendRendering: boolean = false;\r\n undoBuffer: UndoBuffer;\r\n undoStatus: number = 0;\r\n\r\n constructor(config: ScoreRenderParams) {\r\n this.dirty = true;\r\n this.replaceQ = [];\r\n this.stateRepCount = 0;\r\n this.setPassState(SuiRenderState.passStates.initial, 'ctor');\r\n this.viewportChanged = false;\r\n this._resetViewport = false;\r\n this.measureMapper = null;\r\n this.renderer = new SuiScoreRender(config);\r\n this.idleRedrawTime = config.config.idleRedrawTime;\r\n this.demonPollTime = config.config.demonPollTime;\r\n this.undoBuffer = config.undoBuffer;\r\n }\r\n get elementId() {\r\n return this.renderer.elementId;\r\n }\r\n get pageMap() {\r\n return this.renderer.vexContainers;\r\n }\r\n // ### setMeasureMapper\r\n // DI/notifier pattern. The measure mapper/tracker is updated when the score is rendered\r\n // so the UI stays in sync with the location of elements in the score.\r\n setMeasureMapper(mapper: SuiMapper) {\r\n this.measureMapper = mapper;\r\n this.renderer.measureMapper = mapper;\r\n }\r\n set stepMode(value: boolean) {\r\n this.suspendRendering = value;\r\n this.renderer.autoAdjustRenderTime = !value;\r\n if (this.measureMapper) {\r\n this.measureMapper.deferHighlightMode = !value;\r\n }\r\n }\r\n\r\n // ### createScoreRenderer\r\n // ### Description;\r\n // to get the score to appear, a div and a score object are required. The layout takes care of creating the\r\n // svg element in the dom and interacting with the vex library.\r\n static createScoreRenderer(config: SmoRenderConfiguration, renderElement: Element, score: SmoScore, undoBuffer: UndoBuffer): SuiRenderState {\r\n const ctorObj: ScoreRenderParams = {\r\n config,\r\n elementId: renderElement,\r\n score,\r\n undoBuffer\r\n };\r\n const renderer = new SuiRenderState(ctorObj);\r\n return renderer;\r\n }\r\n static get passStates(): Record {\r\n return { initial: 0, clean: 2, replace: 3 };\r\n }\r\n get renderElement(): Element {\r\n return this.elementId;\r\n }\r\n notifyFontChange() {\r\n setFontStack(this.score!.engravingFont);\r\n }\r\n addToReplaceQueue(selection: SmoSelection | SmoSelection[]) {\r\n let selections = [];\r\n if (!Array.isArray(selection)) {\r\n selections = [selection];\r\n } else {\r\n selections = selection;\r\n }\r\n if (this.passState === SuiRenderState.passStates.clean ||\r\n this.passState === SuiRenderState.passStates.replace) { \r\n selections.forEach((selection) => {\r\n const existing = this.replaceQ.find((sel) => \r\n sel.selector.staff === selection.selector.staff && sel.selector.measure === selection.selector.measure);\r\n if (existing) {\r\n existing._measure = selection._measure;\r\n } else {\r\n this.replaceQ.push(selection);\r\n }\r\n })\r\n this.setDirty();\r\n }\r\n }\r\n addColumnToReplaceQueue(mm: number) {\r\n if (!this.score) {\r\n return;\r\n }\r\n for (let i = 0; i < this.score.staves.length; ++i) {\r\n const selection = SmoSelection.measureSelection(this.score, i, mm);\r\n if (selection) {\r\n this.addToReplaceQueue(selection);\r\n }\r\n }\r\n }\r\n setDirty() {\r\n if (!this.dirty) {\r\n this.dirty = true;\r\n if (this.passState === SuiRenderState.passStates.clean) {\r\n this.setPassState(SuiRenderState.passStates.replace, 'setDirty');\r\n }\r\n }\r\n }\r\n setRefresh() {\r\n this.dirty = true;\r\n this.setPassState(SuiRenderState.passStates.initial, 'setRefresh');\r\n }\r\n rerenderAll() {\r\n this.dirty = true;\r\n this.setPassState(SuiRenderState.passStates.initial, 'rerenderAll');\r\n this._resetViewport = true;\r\n }\r\n clearLine(measure: SmoMeasure) {\r\n const page = measure.svg.pageIndex;\r\n this.renderer.clearRenderedPage(page);\r\n }\r\n get renderStateClean() {\r\n return this.passState === SuiRenderState.passStates.clean && this.renderer.backgroundRender === false;\r\n }\r\n get renderStateRendered() {\r\n return (this.passState === SuiRenderState.passStates.clean && this.renderer.backgroundRender === false) ||\r\n (this.passState === SuiRenderState.passStates.replace && this.replaceQ.length === 0 && this.renderer.backgroundRender === false);\r\n }\r\n /**\r\n * Do a quick re-render of a measure that has changed, defer the whole score.\r\n * @returns \r\n */\r\n replaceMeasures() {\r\n const staffMap: Record = {};\r\n if (this.score === null || this.measureMapper === null || this.replaceQ.length === 0) {\r\n return;\r\n }\r\n this.replaceQ.forEach((change) => {\r\n this.renderer.replaceSelection(staffMap, change);\r\n });\r\n Object.keys(staffMap).forEach((key) => {\r\n const obj = staffMap[key];\r\n this.renderer.renderModifiers(obj.staff, obj.system);\r\n obj.system.renderEndings(this.measureMapper!.scroller);\r\n obj.system.updateLyricOffsets();\r\n });\r\n this.replaceQ = [];\r\n }\r\n async preserveScroll() {\r\n const scrollState = this.measureMapper!.scroller.scrollState;\r\n await this.renderPromise();\r\n this.measureMapper!.scroller.restoreScrollState(scrollState);\r\n }\r\n\r\n _renderStatePromise(condition: () => boolean): Promise {\r\n const oldSuspend = this.suspendRendering;\r\n this.suspendRendering = false;\r\n const self = this;\r\n const endAction = () => {\r\n self.suspendRendering = oldSuspend;\r\n };\r\n return PromiseHelpers.makePromise(condition, endAction, null, this.demonPollTime);\r\n }\r\n // ### renderPromise\r\n // return a promise that resolves when the score is in a fully rendered state.\r\n renderPromise(): Promise {\r\n return this._renderStatePromise(() => this.renderStateClean);\r\n }\r\n\r\n // ### renderPromise\r\n // return a promise that resolves when the score is in a fully rendered state.\r\n updatePromise() {\r\n this.replaceMeasures();\r\n return this._renderStatePromise(() => this.renderStateRendered);\r\n }\r\n async handleRedrawTimer() {\r\n if (this.handlingRedraw) {\r\n return;\r\n }\r\n if (this.suspendRendering) {\r\n return;\r\n }\r\n this.handlingRedraw = true;\r\n const redrawTime = Math.max(this.renderer.renderTime, this.idleRedrawTime);\r\n // If there has been a change, redraw the score\r\n if (this.passState === SuiRenderState.passStates.initial) {\r\n this.dirty = true;\r\n this.undoStatus = this.undoBuffer.opCount;\r\n this.idleLayoutTimer = Date.now();\r\n\r\n // indicate the display is 'dirty' and we will be refreshing it.\r\n $('body').addClass('refresh-1');\r\n try {\r\n // Sort of a hack. If the viewport changed, the scroll state is already reset\r\n // so we can't preserver the scroll state.\r\n if (!this.renderer.viewportChanged) {\r\n this.preserveScroll();\r\n }\r\n await this.render();\r\n } catch (ex) {\r\n console.error(ex);\r\n SuiExceptionHandler.instance.exceptionHandler(ex);\r\n this.handlingRedraw = false;\r\n }\r\n } else if (this.passState === SuiRenderState.passStates.replace && this.undoStatus === this.undoBuffer.opCount) {\r\n // Consider navigation as activity when deciding to refresh\r\n this.idleLayoutTimer = Math.max(this.idleLayoutTimer, this.measureMapper!.getIdleTime());\r\n $('body').addClass('refresh-1');\r\n // Do we need to refresh the score?\r\n if (this.renderer.backgroundRender === false && Date.now() - this.idleLayoutTimer > redrawTime) {\r\n this.passState = SuiRenderState.passStates.initial;\r\n if (!this.renderer.viewportChanged) {\r\n this.preserveScroll();\r\n }\r\n this.render();\r\n }\r\n } else {\r\n this.idleLayoutTimer = Date.now();\r\n this.undoStatus = this.undoBuffer.opCount;\r\n if (this.replaceQ.length > 0) {\r\n this.render();\r\n }\r\n }\r\n this.handlingRedraw = false;\r\n }\r\n pollRedraw() {\r\n setTimeout(async () => {\r\n await this.handleRedrawTimer();\r\n this.pollRedraw();\r\n }, this.demonPollTime);\r\n }\r\n\r\n startDemon() {\r\n this.pollRedraw();\r\n }\r\n renderTextGroup(gg: SmoTextGroup) {\r\n this.renderer.renderTextGroup(gg);\r\n }\r\n /**\r\n * Set the SVG viewport\r\n * @param reset whether to re-render the entire SVG DOM\r\n * @returns \r\n */\r\n setViewport() {\r\n if (!this.score || !this.renderer) {\r\n return;\r\n }\r\n this.renderer.setViewport();\r\n this.score!.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n if (measure.svg.logicalBox) {\r\n measure.svg.history = ['reset'];\r\n }\r\n });\r\n });\r\n }\r\n renderForPrintPromise(): Promise {\r\n $('body').addClass('print-render');\r\n const self = this;\r\n if (!this.score) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const layoutMgr = this.score!.layoutManager!;\r\n const layout = layoutMgr.getGlobalLayout();\r\n this._backupZoomScale = layout.zoomScale;\r\n layout.zoomScale = 1.0;\r\n layoutMgr.updateGlobalLayout(layout);\r\n this.setViewport();\r\n this.setRefresh();\r\n\r\n const promise = new Promise((resolve) => {\r\n const poll = () => {\r\n setTimeout(() => {\r\n if (!self.dirty && !self.renderer.backgroundRender) {\r\n // tracker.highlightSelection();\r\n $('body').removeClass('print-render');\r\n $('.vf-selection').remove();\r\n $('body').addClass('printing');\r\n $('.musicRelief').css('height', '');\r\n resolve();\r\n } else {\r\n poll();\r\n }\r\n }, 500);\r\n };\r\n poll();\r\n });\r\n return promise;\r\n }\r\n\r\n restoreLayoutAfterPrint() {\r\n const layout = this.score!.layoutManager!.getGlobalLayout();\r\n layout.zoomScale = this._backupZoomScale;\r\n this.score!.layoutManager!.updateGlobalLayout(layout);\r\n this.setViewport();\r\n this.setRefresh();\r\n }\r\n\r\n setPassState(st: number, location: string) {\r\n const oldState = this.passState;\r\n let msg = '';\r\n if (oldState !== st) {\r\n this.stateRepCount = 0;\r\n } else {\r\n this.stateRepCount += 1;\r\n }\r\n\r\n msg = location + ': passState ' + this.passState + '=>' + st;\r\n if (this.stateRepCount > 0) {\r\n msg += ' (' + this.stateRepCount + ')';\r\n }\r\n if (SuiRenderState.debugMask) {\r\n console.log(msg);\r\n }\r\n this.passState = st;\r\n }\r\n\r\n get score(): SmoScore | null {\r\n return this._score;\r\n }\r\n\r\n // used for debugging and drawing dots.\r\n dbgDrawDot(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean) {\r\n const context = this.renderer.getRenderer({ x, y });\r\n if (context) {\r\n context.getContext().beginPath();\r\n context.getContext().arc(x, y, radius, startAngle, endAngle, counterclockwise);\r\n context.getContext().closePath();\r\n context.getContext().fill(); \r\n }\r\n }\r\n set score(score: SmoScore | null) {\r\n if (score === null) {\r\n return;\r\n }\r\n /* if (this._score) {\r\n shouldReset = true;\r\n } */\r\n this.setPassState(SuiRenderState.passStates.initial, 'load score');\r\n const font = score.engravingFont;\r\n this.dirty = true;\r\n this._score = score;\r\n this.renderer.score = score;\r\n this.notifyFontChange();\r\n // if (shouldReset) {\r\n this.setViewport();\r\n if (this.measureMapper) {\r\n this.measureMapper.loadScore();\r\n }\r\n }\r\n\r\n unrenderColumn(measure: SmoMeasure) {\r\n this.score!.staves.forEach((staff) => {\r\n this.renderer.unrenderMeasure(staff.measures[measure.measureNumber.measureIndex]);\r\n });\r\n }\r\n\r\n // ### forceRender\r\n // For unit test applictions that want to render right-away\r\n forceRender() {\r\n this.setRefresh();\r\n this.render();\r\n }\r\n unrenderMeasure(measure: SmoMeasure) {\r\n this.renderer.unrenderMeasure(measure);\r\n }\r\n async rerenderTextGroups() {\r\n await this.renderer.rerenderTextGroups();\r\n }\r\n async unrenderTextGroups() {\r\n this.renderer.unrenderTextGroups();\r\n }\r\n async render(): Promise {\r\n if (this._resetViewport) {\r\n this.setViewport();\r\n this._resetViewport = false;\r\n }\r\n try {\r\n if (SuiRenderState.passStates.replace === this.passState) {\r\n this.replaceMeasures();\r\n } else if (SuiRenderState.passStates.initial === this.passState) {\r\n if (this.renderer.backgroundRender) {\r\n return;\r\n }\r\n this.renderer.layout();\r\n this.renderer.drawPageLines();\r\n this.setPassState(SuiRenderState.passStates.clean, 'rs: complete render');\r\n }\r\n } catch (excp) {\r\n console.warn('exception in render: ' + excp);\r\n }\r\n this.dirty = false;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { StaffModifierBase } from '../../smo/data/staffModifiers';\r\nimport { VxMeasure } from '../vex/vxMeasure';\r\nimport { SuiMapper } from './mapper';\r\nimport { VxSystem } from '../vex/vxSystem';\r\nimport { SvgHelpers, StrokeInfo } from './svgHelpers';\r\nimport { SuiPiano } from './piano';\r\nimport { SuiLayoutFormatter, RenderedPage } from './formatter';\r\nimport { SmoBeamer } from '../../smo/xform/beamers';\r\nimport { SuiTextBlock } from './textRender';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SourceSansProFont } from '../../styles/font_metrics/ssp-sans-metrics';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SvgPageMap, SvgPage } from './svgPageMap';\r\nimport { VexFlow } from '../../common/vex';\r\nimport { Note } from '../../common/vex';\r\n\r\ndeclare var $: any;\r\nconst VF = VexFlow;\r\n/**\r\n * a renderer creates the SVG render context for vexflow from the given element. Then it\r\n * renders the initial score.\r\n * @category SuiRenderParams\r\n */\r\n export interface ScoreRenderParams {\r\n elementId: any,\r\n score: SmoScore,\r\n config: SmoRenderConfiguration,\r\n undoBuffer: UndoBuffer\r\n}\r\n\r\nexport interface MapParameters {\r\n vxSystem: VxSystem, measuresToBox: SmoMeasure[], modifiersToBox: StaffModifierBase[], printing: boolean\r\n}\r\n/**\r\n * This module renders the entire score. It calculates the layout first based on the\r\n * computed dimensions.\r\n * @category SuiRender\r\n**/\r\nexport class SuiScoreRender {\r\n constructor(params: ScoreRenderParams) { \r\n this.elementId = params.elementId;\r\n this.score = params.score;\r\n this.vexContainers = new SvgPageMap(this.score.layoutManager!.globalLayout, this.elementId, this.score.layoutManager!.pageLayouts);\r\n this.setViewport();\r\n }\r\n elementId: any;\r\n startRenderTime: number = 0;\r\n formatter: SuiLayoutFormatter | null = null;\r\n vexContainers: SvgPageMap;\r\n // vexRenderer: any = null;\r\n score: SmoScore | null = null;\r\n measureMapper: SuiMapper | null = null;\r\n measuresToMap: MapParameters[] = [];\r\n viewportChanged: boolean = false;\r\n renderTime: number = 0;\r\n backgroundRender: boolean = false;\r\n static debugMask: number = 0;\r\n renderedPages: Record = {};\r\n _autoAdjustRenderTime: boolean = true;\r\n lyricsToOffset: Map = new Map();\r\n renderingPage: number = -1; \r\n get autoAdjustRenderTime() {\r\n return this._autoAdjustRenderTime;\r\n }\r\n set autoAdjustRenderTime(value: boolean) {\r\n this._autoAdjustRenderTime = value;\r\n }\r\n getRenderer(box: SvgBox | SvgPoint): SvgPage | null {\r\n return this.vexContainers.getRenderer(box);\r\n }\r\n renderTextGroup(gg: SmoTextGroup) {\r\n let ix = 0;\r\n let jj = 0;\r\n if (gg.skipRender || this.score === null || this.measureMapper === null) {\r\n return;\r\n }\r\n gg.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n gg.elements = [];\r\n const layoutManager = this.score!.layoutManager!;\r\n const scaledScoreLayout = layoutManager.getScaledPageLayout(0);\r\n // If this text hasn't been rendered before, estimate the logical box.\r\n const dummyContainer = this.vexContainers.getRendererFromModifier(gg);\r\n if (dummyContainer && !gg.logicalBox) {\r\n const dummyBlock = SuiTextBlock.fromTextGroup(gg, dummyContainer, this.vexContainers, this.measureMapper!.scroller);\r\n gg.logicalBox = dummyBlock.getLogicalBox();\r\n }\r\n\r\n // If this is a per-page score text, get a text group copy for each page.\r\n // else the array contains the original.\r\n const groupAr = SmoTextGroup.getPagedTextGroups(gg, this.score!.layoutManager!.pageLayouts.length, scaledScoreLayout.pageHeight);\r\n groupAr.forEach((newGroup) => {\r\n let container: SvgPage = this.vexContainers.getRendererFromModifier(newGroup);\r\n // If this text is attached to the measure, base the block location on the rendered measure location.\r\n if (newGroup.attachToSelector) {\r\n // If this text is attached to a staff that is not visible, don't draw it.\r\n const mappedStaff = this.score!.staves.find((staff) => staff.staffId === newGroup.selector!.staff);\r\n if (!mappedStaff) {\r\n return;\r\n }\r\n // Indicate the new map;\r\n // newGroup.selector.staff = mappedStaff.staffId; \r\n const mmSel: SmoSelection | null = SmoSelection.measureSelection(this.score!, mappedStaff.staffId, newGroup.selector!.measure);\r\n if (mmSel) {\r\n const mm = mmSel.measure;\r\n if (mm.svg.logicalBox.width > 0) {\r\n const xoff = mm.svg.logicalBox.x + newGroup.musicXOffset;\r\n const yoff = mm.svg.logicalBox.y + newGroup.musicYOffset;\r\n newGroup.textBlocks[0].text.x = xoff;\r\n newGroup.textBlocks[0].text.y = yoff;\r\n }\r\n }\r\n }\r\n if (container) {\r\n const block = SuiTextBlock.fromTextGroup(newGroup, container, this.vexContainers, this.measureMapper!.scroller);\r\n block.render();\r\n if (block.currentBlock?.text.element) {\r\n gg.elements.push(block.currentBlock?.text.element);\r\n }\r\n // For the first one we render, use that as the bounding box for all the text, for\r\n // purposes of mapper/tracker\r\n if (ix === 0) {\r\n gg.logicalBox = JSON.parse(JSON.stringify(block.logicalBox));\r\n // map all the child scoreText objects, too.\r\n for (jj = 0; jj < gg.textBlocks.length; ++jj) {\r\n gg.textBlocks[jj].text.logicalBox = JSON.parse(JSON.stringify(block.inlineBlocks[jj].text.logicalBox));\r\n }\r\n }\r\n ix += 1;\r\n }\r\n });\r\n }\r\n \r\n // ### unrenderAll\r\n // ### Description:\r\n // Delete all the svg elements associated with the score.\r\n unrenderAll() {\r\n if (!this.score) {\r\n return;\r\n }\r\n this.score.staves.forEach((staff) => {\r\n this.unrenderStaff(staff);\r\n });\r\n // $(this.context.svg).find('g.lineBracket').remove();\r\n }\r\n // ### unrenderStaff\r\n // ### Description:\r\n // See unrenderMeasure. Like that, but with a staff.\r\n unrenderStaff(staff: SmoSystemStaff) {\r\n staff.measures.forEach((measure) => {\r\n this.unrenderMeasure(measure);\r\n });\r\n staff.renderableModifiers.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.element.remove();\r\n modifier.element = null;\r\n }\r\n });\r\n }\r\n clearRenderedPage(pg: number) {\r\n if (this.renderedPages[pg]) {\r\n this.renderedPages[pg] = null;\r\n }\r\n }\r\n // ### _setViewport\r\n // Create (or recrate) the svg viewport, considering the dimensions of the score.\r\n setViewport() {\r\n if (this.score === null) {\r\n return;\r\n }\r\n const layoutManager = this.score!.layoutManager!;\r\n // All pages have same width/height, so use that\r\n const layout = layoutManager.getGlobalLayout();\r\n this.vexContainers.updateLayout(layout, layoutManager.pageLayouts);\r\n this.renderedPages = {};\r\n this.viewportChanged = true;\r\n if (this.measureMapper) {\r\n this.measureMapper.scroller.scrollAbsolute(0, 0);\r\n }\r\n if (this.measureMapper) {\r\n this.measureMapper.scroller.updateViewport();\r\n }\r\n // this.context.setFont(this.font.typeface, this.font.pointSize, \"\").setBackgroundFillStyle(this.font.fillStyle);\r\n if (SuiScoreRender.debugMask) {\r\n console.log('layout setViewport: pstate initial');\r\n }\r\n }\r\n\r\n async unrenderTextGroups(): Promise {\r\n return new Promise((resolve) => {\r\n // remove existing modifiers, and also remove parent group for 'extra'\r\n // groups associated with pagination (once per page etc)\r\n for (var i = 0; i < this.score!.textGroups.length; ++i) {\r\n const tg = this.score!.textGroups[i];\r\n tg.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n tg.elements = [];\r\n }\r\n resolve();\r\n });\r\n }\r\n async renderTextGroups(): Promise {\r\n return new Promise((resolve) => {\r\n let tgs = this.score!.textGroups;\r\n if (this.score?.isPartExposed() && this.score.staves[0].partInfo.preserveTextGroups) {\r\n tgs = this.score.staves[0].partInfo.textGroups;\r\n }\r\n // group.classList.add('all-score-text');\r\n for (var i = 0; i < tgs.length; ++i) {\r\n const tg = tgs[i];\r\n this.renderTextGroup(tg);\r\n }\r\n resolve();\r\n });\r\n }\r\n async rerenderTextGroups(): Promise {\r\n await this.unrenderTextGroups();\r\n await this.renderTextGroups();\r\n }\r\n\r\n /**\r\n * for music we've just rendered, get the bounding boxes. We defer this step so we don't force\r\n * a reflow, which can slow rendering.\r\n * @param vxSystem \r\n * @param measures \r\n * @param modifiers \r\n * @param printing \r\n */\r\n measureRenderedElements(vxSystem: VxSystem, measures: SmoMeasure[], modifiers: StaffModifierBase[], printing: boolean) {\r\n const pageContext = vxSystem.context;\r\n measures.forEach((smoMeasure) => {\r\n const element = smoMeasure.svg.element;\r\n if (element) { \r\n smoMeasure.setBox(pageContext.offsetBbox(element), 'vxMeasure bounding box');\r\n }\r\n const vxMeasure = vxSystem.getVxMeasure(smoMeasure);\r\n if (vxMeasure) {\r\n vxMeasure.modifiersToBox.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.logicalBox = pageContext.offsetBbox(modifier.element);\r\n }\r\n });\r\n }\r\n // unit test codes don't have tracker.\r\n if (this.measureMapper) {\r\n const tmpStaff: SmoSystemStaff | undefined = this.score!.staves.find((ss) => ss.staffId === smoMeasure.measureNumber.staffId);\r\n if (tmpStaff) {\r\n this.measureMapper.mapMeasure(tmpStaff, smoMeasure, printing);\r\n }\r\n } \r\n });\r\n modifiers.forEach((modifier) => {\r\n if (modifier.element) {\r\n modifier.logicalBox = pageContext.offsetBbox(modifier.element);\r\n }\r\n });\r\n }\r\n _renderSystem(lineIx: number, printing: boolean) {\r\n if (this.score === null || this.formatter === null) {\r\n return;\r\n }\r\n const measuresToBox: SmoMeasure[] = [];\r\n const modifiersToBox: StaffModifierBase[] = [];\r\n const columns: Record = this.formatter.systems[lineIx].systems;\r\n\r\n // If this page hasn't changed since rendered\r\n const pageIndex = columns[0][0].svg.pageIndex;\r\n \r\n if (this.renderingPage !== pageIndex && this.renderedPages[pageIndex] && !printing) {\r\n if (SuiScoreRender.debugMask) {\r\n console.log(`skipping render on page ${pageIndex}`);\r\n }\r\n return;\r\n }\r\n const context = this.vexContainers.getRendererForPage(pageIndex);\r\n if (this.renderingPage !== pageIndex) {\r\n context.clearMap();\r\n this.renderingPage = pageIndex;\r\n }\r\n const vxSystem: VxSystem = new VxSystem(context, 0, lineIx, this.score);\r\n const colKeys = Object.keys(columns);\r\n colKeys.forEach((colKey) => {\r\n columns[parseInt(colKey, 10)].forEach((measure: SmoMeasure) => {\r\n if (this.measureMapper !== null) {\r\n const modId = 'mod-' + measure.measureNumber.staffId + '-' + measure.measureNumber.measureIndex;\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n vxSystem.renderMeasure(measure, printing);\r\n const pageIndex = measure.svg.pageIndex;\r\n const renderMeasures = this.renderedPages[pageIndex];\r\n if (!renderMeasures) {\r\n this.renderedPages[pageIndex] = {\r\n startMeasure: measure.measureNumber.measureIndex,\r\n endMeasure: measure.measureNumber.measureIndex\r\n }\r\n } else {\r\n renderMeasures.endMeasure = measure.measureNumber.measureIndex;\r\n }\r\n measuresToBox.push(measure);\r\n if (!printing && !measure.format.isDefault) {\r\n const at: any[] = [];\r\n at.push({ y: measure.svg.logicalBox.y - 5 });\r\n at.push({ x: measure.svg.logicalBox.x + 25 });\r\n at.push({ 'font-family': SourceSansProFont.fontFamily });\r\n at.push({ 'font-size': '12pt' });\r\n SvgHelpers.placeSvgText(context.svg, at, 'measure-format', '*');\r\n }\r\n }\r\n });\r\n });\r\n this.score.staves.forEach((stf) => {\r\n this.renderModifiers(stf, vxSystem).forEach((modifier) => {\r\n modifiersToBox.push(modifier);\r\n });\r\n });\r\n if (this.measureMapper !== null) {\r\n vxSystem.renderEndings(this.measureMapper.scroller);\r\n }\r\n this.measuresToMap.push({vxSystem, measuresToBox, modifiersToBox, printing });\r\n // this.measureRenderedElements(vxSystem, measuresToBox, modifiersToBox, printing);\r\n\r\n const timestamp = new Date().valueOf();\r\n if (!this.lyricsToOffset.has(vxSystem.lineIndex)) {\r\n this.lyricsToOffset.set(vxSystem.lineIndex, vxSystem);\r\n }\r\n // vxSystem.updateLyricOffsets();\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.POST_RENDER, new Date().valueOf() - timestamp);\r\n }\r\n _renderNextSystemPromise(systemIx: number, keys: number[], printing: boolean) {\r\n return new Promise((resolve: any) => {\r\n // const sleepDate = new Date().valueOf();\r\n this._renderSystem(keys[systemIx], printing);\r\n requestAnimationFrame(() => resolve());\r\n });\r\n }\r\n\r\n async _renderNextSystem(lineIx: number, keys: number[], printing: boolean) {\r\n createTopDomContainer('#renderProgress', 'progress');\r\n if (lineIx < keys.length) {\r\n const progress = Math.round((100 * lineIx) / keys.length);\r\n $('#renderProgress').attr('max', 100);\r\n $('#renderProgress').val(progress);\r\n await this._renderNextSystemPromise(lineIx,keys, printing);\r\n lineIx++;\r\n await this._renderNextSystem(lineIx, keys, printing);\r\n } else {\r\n await this.rerenderTextGroups();\r\n this.numberMeasures();\r\n this.measuresToMap.forEach((mm) => {\r\n this.measureRenderedElements(mm.vxSystem, mm.measuresToBox, mm.modifiersToBox, mm.printing);\r\n });\r\n this.lyricsToOffset.forEach((vv) => {\r\n vv.updateLyricOffsets();\r\n });\r\n this.measuresToMap = [];\r\n this.lyricsToOffset = new Map();\r\n // We pro-rate the background render timer on how long it takes\r\n // to actually render the score, so we are not thrashing on a large\r\n // score.\r\n if (this._autoAdjustRenderTime) {\r\n this.renderTime = new Date().valueOf() - this.startRenderTime;\r\n }\r\n $('body').removeClass('show-render-progress');\r\n // indicate the display is 'clean' and up-to-date with the score\r\n $('body').removeClass('refresh-1');\r\n if (this.measureMapper !== null) {\r\n this.measureMapper.updateMap();\r\n if (layoutDebug.mask & layoutDebug.values['artifactMap']) {\r\n this.score?.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n mm.voices.forEach((voice: SmoVoice) => {\r\n voice.notes.forEach((note) => {\r\n if (note.logicalBox) {\r\n const page = this.vexContainers.getRendererFromPoint(note.logicalBox);\r\n if (page) {\r\n const noteBox = SvgHelpers.smoBox(note.logicalBox);\r\n noteBox.y -= page.box.y;\r\n SvgHelpers.debugBox(page.svg, noteBox, 'measure-place-dbg', 0);\r\n }\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }\r\n }\r\n this.backgroundRender = false;\r\n }\r\n }\r\n \r\n // ### unrenderMeasure\r\n // All SVG elements are associated with a logical SMO element. We need to erase any SVG element before we change a SMO\r\n // element in such a way that some of the logical elements go away (e.g. when deleting a measure).\r\n unrenderMeasure(measure: SmoMeasure) {\r\n if (!measure) {\r\n return;\r\n }\r\n const modId = 'mod-' + measure.measureNumber.staffId + '-' + measure.measureNumber.measureIndex;\r\n const context = this.vexContainers.getRenderer(measure.svg.logicalBox);\r\n if (!context) {\r\n return;\r\n }\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n\r\n if (measure.svg.element) {\r\n measure.svg.element.remove();\r\n measure.svg.element = null;\r\n if (measure.svg.tabElement) {\r\n measure.svg.tabElement.remove();\r\n measure.svg.tabElement = undefined;\r\n }\r\n }\r\n const renderPage = this.renderedPages[measure.svg.pageIndex];\r\n if (renderPage) {\r\n this.renderedPages[measure.svg.pageIndex] = null;\r\n }\r\n measure.setYTop(0, 'unrender');\r\n }\r\n // ### _renderModifiers\r\n // ### Description:\r\n // Render staff modifiers (modifiers straddle more than one measure, like a slur). Handle cases where the destination\r\n // is on a different system due to wrapping.\r\n renderModifiers(staff: SmoSystemStaff, system: VxSystem): StaffModifierBase[] {\r\n let nextNote: SmoSelection | null = null;\r\n let lastNote: SmoSelection | null = null;\r\n let testNote: Note | null = null;\r\n let vxStart: Note | null = null;\r\n let vxEnd: Note | null = null;\r\n const modifiersToBox: StaffModifierBase[] = [];\r\n const removedModifiers: StaffModifierBase[] = [];\r\n if (this.score === null || this.measureMapper === null) {\r\n return [];\r\n }\r\n const renderedId: Record = {};\r\n staff.renderableModifiers.forEach((modifier) => {\r\n let startNote = SmoSelection.noteSelection(this.score!,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n let endNote = SmoSelection.noteSelection(this.score!,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n if (!startNote || !endNote) {\r\n // If the modifier doesn't have score endpoints, delete it from the score\r\n removedModifiers.push(modifier);\r\n return;\r\n }\r\n if (startNote.note !== null) {\r\n vxStart = system.getVxNote(startNote.note);\r\n }\r\n if (endNote.note !== null) {\r\n vxEnd = system.getVxNote(endNote.note);\r\n }\r\n\r\n // If the modifier goes to the next staff, draw what part of it we can on this staff.\r\n if (vxStart && !vxEnd) {\r\n nextNote = SmoSelection.nextNoteSelection(this.score!,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n if (nextNote === null) {\r\n console.warn('bad selector ' + JSON.stringify(modifier.startSelector, null, ' '));\r\n } else {\r\n if (nextNote.note !== null) {\r\n testNote = system.getVxNote(nextNote.note);\r\n }\r\n while (testNote) {\r\n vxEnd = testNote;\r\n endNote = nextNote;\r\n nextNote = SmoSelection.nextNoteSelection(this.score!,\r\n nextNote.selector.staff, nextNote.selector.measure, nextNote.selector.voice, nextNote.selector.tick);\r\n if (!nextNote) {\r\n break;\r\n }\r\n if (nextNote.note !== null) {\r\n testNote = system.getVxNote(nextNote.note);\r\n } else {\r\n testNote = null;\r\n }\r\n }\r\n }\r\n }\r\n if (vxEnd && !vxStart) {\r\n lastNote = SmoSelection.lastNoteSelection(this.score!,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n if (lastNote !== null && lastNote.note !== null) {\r\n testNote = system.getVxNote(lastNote.note);\r\n while (testNote !== null) {\r\n vxStart = testNote;\r\n startNote = lastNote;\r\n lastNote = SmoSelection.lastNoteSelection(this.score!,\r\n lastNote.selector.staff, lastNote.selector.measure, lastNote.selector.voice, lastNote.selector.tick);\r\n if (!lastNote) {\r\n break;\r\n }\r\n if (lastNote.note !== null) {\r\n testNote = system.getVxNote(lastNote.note);\r\n } else {\r\n testNote = null;\r\n }\r\n }\r\n }\r\n }\r\n if (!vxStart && !vxEnd || renderedId[modifier.attrs.id]) {\r\n return;\r\n }\r\n renderedId[modifier.attrs.id] = true;\r\n system.renderModifier(this.measureMapper!.scroller, modifier, vxStart, vxEnd, startNote, endNote);\r\n modifiersToBox.push(modifier);\r\n });\r\n // Silently remove modifiers from the score if the endpoints no longer exist\r\n removedModifiers.forEach((mod) => {\r\n staff.removeStaffModifier(mod);\r\n });\r\n return modifiersToBox;\r\n }\r\n\r\n drawPageLines() {\r\n let i = 0;\r\n const printing = $('body').hasClass('print-render');\r\n const layoutMgr = this.score!.layoutManager;\r\n if (printing || !layoutMgr) {\r\n return;\r\n }\r\n for (i = 1; i < layoutMgr.pageLayouts.length; ++i) {\r\n const context = this.vexContainers.getRendererForPage(i - 1);\r\n if (context) {\r\n $(context.svg).find('.pageLine').remove();\r\n const scaledPage = layoutMgr.getScaledPageLayout(i);\r\n const y = scaledPage.pageHeight * i - context.box.y;\r\n SvgHelpers.line(context.svg, 0, y, scaledPage.pageWidth, y,\r\n { strokeName: 'line', stroke: '#321', strokeWidth: '2', strokeDasharray: '4,1', fill: 'none', opacity: 1.0 }, 'pageLine');\r\n \r\n }\r\n }\r\n }\r\n replaceSelection(staffMap: Record, change: SmoSelection) {\r\n let system: VxSystem | null = null;\r\n if (this.renderedPages[change.measure.svg.pageIndex]) {\r\n this.renderedPages[change.measure.svg.pageIndex] = null;\r\n }\r\n SmoBeamer.applyBeams(change.measure);\r\n const lineIndex = change.measure.svg.lineIndex;\r\n // Defer modifier update until all selected measures are drawn.\r\n if (!staffMap[lineIndex]) {\r\n const context = this.vexContainers.getRenderer(change.measure.svg.logicalBox);\r\n if (context) {\r\n system = new VxSystem(context, change.measure.staffY, lineIndex, this.score!);\r\n staffMap[lineIndex] = { system, staff: change.staff }; \r\n }\r\n } else {\r\n system = staffMap[lineIndex].system;\r\n }\r\n const selections = SmoSelection.measuresInColumn(this.score!, change.measure.measureNumber.measureIndex);\r\n const measuresToMeasure: SmoMeasure[] = [];\r\n selections.forEach((selection) => {\r\n if (system !== null && this.measureMapper !== null) {\r\n this.unrenderMeasure(selection.measure);\r\n system.renderMeasure(selection.measure, false);\r\n measuresToMeasure.push(selection.measure);\r\n }\r\n });\r\n if (system) {\r\n this.measureRenderedElements(system, measuresToMeasure, [], false);\r\n }\r\n }\r\n\r\n async renderAllMeasures(lines: number[]) {\r\n if (!this.score) {\r\n return;\r\n }\r\n const printing = $('body').hasClass('print-render');\r\n $('.measure-format').remove();\r\n \r\n if (!printing) {\r\n $('body').addClass('show-render-progress');\r\n const isShowing = SuiPiano.isShowing;\r\n if (this.score.preferences.showPiano && !isShowing) {\r\n SuiPiano.showPiano();\r\n this.measureMapper!.scroller.updateViewport();\r\n } else if (isShowing && !this.score.preferences.showPiano) {\r\n SuiPiano.hidePiano();\r\n this.measureMapper!.scroller.updateViewport();\r\n }\r\n }\r\n this.backgroundRender = true;\r\n this.startRenderTime = new Date().valueOf();\r\n this.renderingPage = -1;\r\n this.vexContainers.updateContainerOffset(this.measureMapper!.scroller.scrollState);\r\n await this._renderNextSystem(0, lines, printing);\r\n }\r\n // Number the measures at the first measure in each system.\r\n numberMeasures() {\r\n const printing: boolean = $('body').hasClass('print-render');\r\n const staff = this.score!.staves[0];\r\n const measures = staff.measures.filter((measure) => measure.measureNumber.systemIndex === 0);\r\n $('.measure-number').remove();\r\n\r\n measures.forEach((measure) => {\r\n const context = this.vexContainers.getRenderer(measure.svg.logicalBox);\r\n if (measure.measureNumber.localIndex > 0 && measure.measureNumber.systemIndex === 0 && measure.svg.logicalBox && context) {\r\n const numAr: any[] = [];\r\n const modBox = context.offsetSvgPoint(measure.svg.logicalBox);\r\n numAr.push({ y: modBox.y - 10 });\r\n numAr.push({ x: modBox.x });\r\n numAr.push({ 'font-family': SourceSansProFont.fontFamily });\r\n numAr.push({ 'font-size': '10pt' });\r\n SvgHelpers.placeSvgText(context.svg, numAr, 'measure-number', (measure.measureNumber.localIndex + 1).toString());\r\n\r\n // Show line-feed symbol\r\n if (measure.format.systemBreak && !printing) {\r\n const starAr: any[] = [];\r\n const symbol = '\\u21b0';\r\n starAr.push({ y: modBox.y - 5 });\r\n starAr.push({ x: modBox.x + 25 });\r\n starAr.push({ 'font-family': SourceSansProFont.fontFamily });\r\n starAr.push({ 'font-size': '12pt' });\r\n SvgHelpers.placeSvgText(context.svg, starAr, 'measure-format', symbol);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This calculates the position of all the elements in the score, then renders the score\r\n * @returns \r\n */\r\n async layout() {\r\n if (!this.score) {\r\n return;\r\n }\r\n const score = this.score;\r\n $('head title').text(this.score.scoreInfo.name);\r\n const formatter = new SuiLayoutFormatter(score, this.vexContainers, this.renderedPages);\r\n Object.keys(this.renderedPages).forEach((key) => {\r\n this.vexContainers.clearModifiersForPage(parseInt(key));\r\n });\r\n const startPageCount = this.score.layoutManager!.pageLayouts.length;\r\n this.formatter = formatter;\r\n formatter.layout(); \r\n if (this.formatter.trimPages(startPageCount)) {\r\n this.setViewport();\r\n }\r\n this.measuresToMap = [];\r\n this.lyricsToOffset = new Map();\r\n await this.renderAllMeasures(formatter.lines);\r\n } \r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoGraceNote } from '../../smo/data/noteModifiers';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { StaffModifierBase } from '../../smo/data/staffModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { UndoBuffer, copyUndo } from '../../smo/xform/undo';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SuiScroller } from './scroller';\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SuiTracker } from './tracker';\r\nimport { createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { SuiRenderState, scoreChangeEvent } from './renderState';\r\nimport { ScoreRenderParams } from './scoreRender';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { SuiAudioPlayer } from '../audio/player';\r\nimport { SuiAudioAnimationParams } from '../audio/musicCursor';\r\nimport { SmoTempoText } from '../../smo/data/measureModifiers';\r\nimport { TimeSignature } from '../../smo/data/measureModifiers';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Indicates a stave is/is not displayed in the score\r\n * @category SuiRender\r\n */\r\nexport interface ViewMapEntry {\r\n show: boolean;\r\n}\r\n\r\nexport type updateSelectionFunc = (score: SmoScore, selections: SmoSelection[]) => void;\r\nexport type updateSingleSelectionFunc = (score: SmoScore, selection: SmoSelection) => void;\r\nexport type updateStaffModifierFunc = (score: SmoScore, fromSelection: SmoSelection, toSelection: SmoSelection) => void;\r\n/**\r\n * Base class for all operations on the rendered score. The base class handles the following:\r\n * 1. Undo and recording actions for the operation\r\n * 2. Maintain/change which staves in the score are displayed (staff map)\r\n * 3. Mapping between the displayed score and the data representation\r\n * @category SuiRender\r\n */\r\nexport abstract class SuiScoreView {\r\n static Instance: SuiScoreView | null = null;\r\n score: SmoScore; // The score that is displayed\r\n storeScore: SmoScore; // the full score, including invisible staves\r\n staffMap: number[]; // mapping the 2 things above\r\n storeUndo: UndoBuffer; // undo buffer for operations to above\r\n tracker: SuiTracker; // UI selections\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n storePaste: PasteBuffer;\r\n config: SmoRenderConfiguration;\r\n audioAnimation: SuiAudioAnimationParams;\r\n constructor(config: SmoRenderConfiguration, svgContainer: HTMLElement, score: SmoScore, scrollSelector: HTMLElement, undoBuffer: UndoBuffer) {\r\n this.score = score;\r\n const renderParams: ScoreRenderParams = {\r\n elementId: svgContainer,\r\n score,\r\n config,\r\n undoBuffer\r\n };\r\n this.audioAnimation = config.audioAnimation;\r\n this.renderer = new SuiRenderState(renderParams);\r\n this.config = config;\r\n const scoreJson = score.serialize({ skipStaves: false, useDictionary: false, preserveStaffIds: true });\r\n this.scroller = new SuiScroller(scrollSelector, this.renderer.renderer.vexContainers);\r\n this.storePaste = new PasteBuffer();\r\n this.tracker = new SuiTracker(this.renderer, this.scroller);\r\n this.renderer.setMeasureMapper(this.tracker);\r\n\r\n this.storeScore = SmoScore.deserialize(JSON.stringify(scoreJson));\r\n this.score.synchronizeTextGroups(this.storeScore.textGroups);\r\n this.storeUndo = new UndoBuffer();\r\n this.staffMap = this.defaultStaffMap;\r\n SuiScoreView.Instance = this; // for debugging\r\n this.setMappedStaffIds();\r\n createTopDomContainer('.saveLink'); // for file upload\r\n }\r\n /**\r\n * Await on the full update of the score\r\n * @returns \r\n */\r\n async renderPromise(): Promise {\r\n return this.renderer.renderPromise();\r\n }\r\n /**\r\n * Await on the partial update of the score in the view\r\n * @returns \r\n */\r\n async updatePromise(): Promise {\r\n return this.renderer.updatePromise();\r\n }\r\n async awaitRender(): Promise {\r\n this.renderer.rerenderAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * await on the full update of the score, also resetting the viewport (to reflect layout changes)\r\n * @returns \r\n */\r\n async refreshViewport(): Promise {\r\n this.renderer.preserveScroll();\r\n this.renderer.setViewport();\r\n this.renderer.setRefresh();\r\n await this.renderer.renderPromise();\r\n }\r\n handleScrollEvent(scrollLeft: number, scrollTop: number) {\r\n this.tracker.scroller.handleScroll(scrollLeft, scrollTop);\r\n }\r\n getPartMap(): { keys: number[], partMap: Record } {\r\n let keepNext = false;\r\n let partCount = 0;\r\n let partMap: Record = {};\r\n const keys: number[] = [];\r\n this.storeScore.staves.forEach((staff) => {\r\n const partInfo = staff.partInfo;\r\n partInfo.associatedStaff = staff.staffId;\r\n if (!keepNext) {\r\n partMap[partCount] = partInfo;\r\n keys.push(partCount);\r\n partCount += 1;\r\n if (partInfo.stavesAfter > 0) {\r\n keepNext = true;\r\n }\r\n } else {\r\n keepNext = false;\r\n }\r\n });\r\n return { keys, partMap };\r\n }\r\n /**\r\n * Any method that modifies a set of selections can call this to update \r\n * the score view and the backing score.\r\n * @param actor \r\n * @param selections \r\n */\r\n async modifyCurrentSelections(label: string, actor: updateSelectionFunc) {\r\n const altSelections = this._getEquivalentSelections(this.tracker.selections);\r\n this.undoTrackerMeasureSelections(label);\r\n actor(this.score, this.tracker.selections);\r\n actor(this.storeScore, altSelections);\r\n this._renderChangedMeasures(SmoSelection.getMeasureList(this.tracker.selections));\r\n await this.updatePromise();\r\n }\r\n /**\r\n * Any method that modifies a set of selections can call this to update \r\n * the score view and the backing score.\r\n * @param actor \r\n * @param selections \r\n */\r\n async modifySelection(label: string, selection: SmoSelection, actor: updateSelectionFunc) {\r\n const altSelection = this._getEquivalentSelection(selection);\r\n this.undoTrackerMeasureSelections(label);\r\n actor(this.score, [selection]);\r\n if (altSelection) {\r\n actor(this.storeScore, [altSelection]);\r\n }\r\n this._renderChangedMeasures(SmoSelection.getMeasureList([selection]));\r\n await this.updatePromise();\r\n }\r\n /**\r\n * Any method that modifies a set of selections can call this to update \r\n * the score view and the backing score.\r\n * @param actor \r\n * @param selections \r\n */\r\n async modifySelectionNoWait(label: string, selection: SmoSelection, actor: updateSingleSelectionFunc) {\r\n const altSelection = this._getEquivalentSelection(selection);\r\n this.undoTrackerMeasureSelections(label);\r\n actor(this.score, selection);\r\n if (altSelection) {\r\n actor(this.storeScore, altSelection);\r\n }\r\n this._renderChangedMeasures(SmoSelection.getMeasureList([selection]));\r\n }\r\n /**\r\n * Modifiy a set of columns, e.g. tempo, time, key. This has different undo behavior, don't \r\n * pend on the result because there may be a combination of operations.\r\n * @param label \r\n * @param selections \r\n * @param actor \r\n */\r\n modifyColumnsSelectionsNoWait(label: string, selections: SmoSelection[], actor: updateSingleSelectionFunc) {\r\n this.undoColumnRange(label, selections);\r\n selections.forEach((selection) => {\r\n const altSelection = this._getEquivalentSelection(selection);\r\n actor(this.score, selection);\r\n if (altSelection) {\r\n actor(this.storeScore, altSelection);\r\n } \r\n });\r\n this._renderChangedMeasures(selections);\r\n }\r\n /**\r\n * This is used in some Smoosic demos and pens.\r\n * @param action any action, but most usefully a SuiScoreView method\r\n * @param repetition number of times to repeat, waiting on render promise between\r\n * if not specified, defaults to 1\r\n * @returns promise, resolved action has been completed and score is updated.\r\n */\r\n async waitableAction(action: () => void, repetition?: number) {\r\n const rep = repetition ?? 1;\r\n const self = this;\r\n const promise = new Promise((resolve: any) => {\r\n const fc = async (count: number) => {\r\n if (count > 0) {\r\n action();\r\n await self.renderer.updatePromise();\r\n fc(count - 1);\r\n } else {\r\n resolve();\r\n }\r\n };\r\n fc(rep);\r\n });\r\n return promise;\r\n }\r\n\r\n /**\r\n * The plural form of _getEquivalentSelection\r\n * @param selections \r\n * @returns \r\n */\r\n _getEquivalentSelections(selections: SmoSelection[]): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n selections.forEach((selection) => {\r\n const sel = this._getEquivalentSelection(selection);\r\n if (sel !== null) {\r\n rv.push(sel);\r\n }\r\n });\r\n return rv;\r\n }\r\n // Get a long enough list of measures to paste into\r\n getPasteMeasureList() {\r\n // The length of the paste buffer, in ticks\r\n const ticksToPaste = this.storePaste.getCopyBufferTickCount();\r\n const selections: SmoSelection[] = SmoSelection.getMeasureList(this.tracker.selections);\r\n const tm = selections[0].measure.tickmapForVoice(selections[0].selector.voice);\r\n // The last measure selected\r\n const lastSelection = this.tracker.selections[this.tracker.selections.length - 1];\r\n // length of first selected measure, in ticks\r\n const measureTicks = this.tracker.selections[0].measure.getTicksFromVoice(this.tracker.selections[0].selector.voice);\r\n // remaining ticks after first selection. This is our starting point.\r\n let startTick = measureTicks - tm.durationMap[this.tracker.selections[0].selector.tick];\r\n // Add ticks for all remaining measures\r\n for (let i = 1; i < selections.length; ++i) {\r\n const sel = selections[i];\r\n startTick += sel.measure.getTicksFromVoice(0);\r\n }\r\n // if we are short, and there are measures left, add them to the selection list\r\n if (startTick < ticksToPaste && lastSelection.selector.measure < (this.score.staves[0].measures.length + 1)) {\r\n const newSel = SmoSelection.measureSelection(this.score, selections[0].selector.staff, lastSelection.selector.measure + 1);\r\n if (newSel) {\r\n selections.push(newSel);\r\n }\r\n }\r\n return selections;\r\n }\r\n /**\r\n * A staff modifier has changed, create undo operations for the measures affected\r\n * @param label \r\n * @param staffModifier \r\n * @param subtype \r\n */\r\n undoStaffModifier(label: string, staffModifier: StaffModifierBase, subtype: number) {\r\n const copy = StaffModifierBase.deserialize(staffModifier.serialize());\r\n copy.startSelector = this._getEquivalentSelector(copy.startSelector);\r\n copy.endSelector = this._getEquivalentSelector(copy.endSelector);\r\n const copySer = copy.serialize();\r\n // Copy ID so we can undo properly\r\n copySer.attrs = JSON.parse(JSON.stringify(staffModifier.attrs));\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.STAFF_MODIFIER, SmoSelector.default,\r\n copySer, subtype);\r\n }\r\n /** \r\n * Return the index of the page that is in the center of the client screen.\r\n */\r\n getFocusedPage(): number {\r\n if (this.score.layoutManager === undefined) {\r\n return 0;\r\n }\r\n const scrollAvg = this.tracker.scroller.netScroll.y + (this.tracker.scroller.viewport.height / 2);\r\n const midY = scrollAvg;\r\n const layoutManager = this.score.layoutManager.getGlobalLayout();\r\n const lh = layoutManager.pageHeight / layoutManager.svgScale;\r\n const lw = layoutManager.pageWidth / layoutManager.svgScale;\r\n const pt = this.renderer.pageMap.svgToClient(SvgHelpers.smoBox({ x: lw, y: lh }));\r\n return Math.round(midY / pt.y);\r\n }\r\n /**\r\n * Create a rectangle undo, like a multiple columns but not necessarily the whole\r\n * score.\r\n */\r\n _undoColumn(label: string, measureIndex: number) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.COLUMN, SmoSelector.default,\r\n { score: this.storeScore, measureIndex }, UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n /**\r\n * Score preferences don't affect the display, but they do have an undo\r\n * @param label \r\n */\r\n _undoScorePreferences(label: string) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.SCORE_ATTRIBUTES, SmoSelector.default, this.storeScore, UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n undoColumnRange(label: string, measureSelections: SmoSelection[]) {\r\n const checked: Record = {};\r\n measureSelections.forEach((measureSelection) => {\r\n if (!checked[measureSelection.selector.measure]) {\r\n checked[measureSelection.selector.measure] = true;\r\n this._undoColumn(label, measureSelection.selector.measure);\r\n }\r\n });\r\n }\r\n undoMeasureRange(label: string, measureSelections: SmoSelection[]) {\r\n measureSelections.forEach((measureSelection) => {\r\n const equiv = this._getEquivalentSelection(measureSelection);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n });\r\n return measureSelections;\r\n }\r\n /**\r\n * Add to the undo buffer the current set of measures selected.\r\n * @param label \r\n * @returns \r\n */\r\n undoTrackerMeasureSelections(label: string): SmoSelection[] {\r\n const measureSelections = SmoSelection.getMeasureList(this.tracker.selections);\r\n return this.undoMeasureRange(label, measureSelections);\r\n }\r\n /**\r\n * operation that only affects the first selection. Setup undo for the measure\r\n */\r\n _undoFirstMeasureSelection(label: string): SmoSelection {\r\n const sel = this.tracker.selections[0];\r\n const equiv = this._getEquivalentSelection(sel);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n return sel;\r\n }\r\n /**\r\n * Add the selection to the undo buffer\r\n * @param label \r\n * @param selection \r\n */\r\n _undoSelection(label: string, selection: SmoSelection) {\r\n const equiv = this._getEquivalentSelection(selection);\r\n if (equiv !== null) {\r\n this.storeUndo.addBuffer(label,\r\n UndoBuffer.bufferTypes.MEASURE, equiv.selector, equiv.measure,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n }\r\n /**\r\n * Add multiple selections to the undo buffer as a group\r\n * @param label \r\n * @param selections \r\n */\r\n _undoSelections(label: string, selections: SmoSelection[]) {\r\n this.storeUndo.grouping = true;\r\n selections.forEach((selection) => {\r\n this._undoSelection(label, selection);\r\n });\r\n this.storeUndo.grouping = false;\r\n }\r\n\r\n /** \r\n * Update renderer for measures that have changed\r\n */\r\n _renderChangedMeasures(measureSelections: SmoSelection[]) {\r\n if (!Array.isArray(measureSelections)) {\r\n measureSelections = [measureSelections];\r\n }\r\n measureSelections.forEach((measureSelection) => {\r\n this.renderer.addToReplaceQueue(measureSelection);\r\n });\r\n }\r\n /**\r\n * Update renderer for some columns\r\n * @param fromSelector \r\n * @param toSelector \r\n */\r\n _renderRectangle(fromSelector: SmoSelector, toSelector: SmoSelector) {\r\n this._getRectangleSelections(fromSelector, toSelector).forEach((s) => {\r\n this.renderer.addToReplaceQueue(s);\r\n });\r\n }\r\n\r\n /**\r\n * Setup undo for operation that affects the whole score\r\n * @param label \r\n */\r\n _undoScore(label: string) {\r\n this.storeUndo.addBuffer(label, UndoBuffer.bufferTypes.SCORE, SmoSelector.default, this.storeScore,\r\n UndoBuffer.bufferSubtypes.NONE);\r\n }\r\n /**\r\n * Get the selector from this.storeScore that maps to the displayed selector from this.score\r\n * @param selector \r\n * @returns \r\n */\r\n _getEquivalentSelector(selector: SmoSelector) {\r\n const rv = JSON.parse(JSON.stringify(selector));\r\n rv.staff = this.staffMap[selector.staff];\r\n return rv;\r\n }\r\n /**\r\n * Get the equivalent staff id from this.storeScore that maps to the displayed selector from this.score\r\n * @param staffId \r\n * @returns \r\n */\r\n _getEquivalentStaff(staffId: number) {\r\n return this.staffMap[staffId];\r\n }\r\n /**\r\n * Get the equivalent selection from this.storeScore that maps to the displayed selection from this.score\r\n * @param selection \r\n * @returns \r\n */\r\n _getEquivalentSelection(selection: SmoSelection): SmoSelection | null {\r\n try {\r\n if (typeof (selection.selector.tick) === 'undefined') {\r\n return SmoSelection.measureSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure);\r\n }\r\n if (typeof (selection.selector.pitches) === 'undefined') {\r\n return SmoSelection.noteSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice,\r\n selection.selector.tick);\r\n }\r\n return SmoSelection.pitchSelection(this.storeScore, this.staffMap[selection.selector.staff], selection.selector.measure, selection.selector.voice,\r\n selection.selector.tick, selection.selector.pitches);\r\n } catch (ex) {\r\n console.warn(ex);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Get the equivalent selection from this.storeScore that maps to the displayed selection from this.score\r\n * @param selection \r\n * @returns \r\n */\r\n _getEquivalentGraceNote(selection: SmoSelection, gn: SmoGraceNote): SmoGraceNote {\r\n if (selection.note !== null) {\r\n const rv = selection.note.getGraceNotes().find((gg) => gg.attrs.id === gn.attrs.id);\r\n if (rv) {\r\n return rv;\r\n }\r\n }\r\n return gn;\r\n }\r\n /**\r\n * Get the rectangle of selections indicated by the parameters from the score\r\n * @param startSelector \r\n * @param endSelector \r\n * @param score \r\n * @returns \r\n */\r\n _getRectangleSelections(startSelector: SmoSelector, endSelector: SmoSelector): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n let i = 0;\r\n let j = 0;\r\n for (i = startSelector.staff; i <= endSelector.staff; i++) {\r\n for (j = startSelector.measure; j <= endSelector.measure; j++) {\r\n const target = SmoSelection.measureSelection(this.score, i, j);\r\n if (target !== null) {\r\n rv.push(target);\r\n }\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * set the grouping flag for undo operations\r\n * @param val \r\n */\r\n groupUndo(val: boolean) {\r\n this.storeUndo.grouping = val;\r\n }\r\n\r\n /**\r\n * Show all staves, 1:1 mapping of view score staff to stored score staff\r\n */\r\n get defaultStaffMap(): number[] {\r\n let i = 0;\r\n const rv: number[] = [];\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n rv.push(i);\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Bootstrapping function, creates the renderer and associated timers\r\n */\r\n startRenderingEngine() {\r\n if (!this.renderer.score) {\r\n // If there is only one part, display the part.\r\n if (this.storeScore.isPartExposed()) {\r\n this.exposePart(this.score.staves[0]);\r\n }\r\n // If the score is transposing, hide the instrument xpose settings\r\n this._setTransposing();\r\n this.renderer.score = this.score;\r\n this.renderer.setViewport();\r\n }\r\n this.renderer.startDemon();\r\n }\r\n /**\r\n * Gets the current mapping of displayed staves to score staves (this.storeScore)\r\n * @returns \r\n */\r\n getView(): ViewMapEntry[] {\r\n const rv = [];\r\n let i = 0;\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n const show = this.staffMap.indexOf(i) >= 0;\r\n rv.push({ show });\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Update the staff ID when the view changes\r\n */\r\n setMappedStaffIds() {\r\n this.score.staves.forEach((staff) => {\r\n if (!this.isPartExposed()) {\r\n staff.partInfo.displayCues = staff.partInfo.cueInScore;\r\n } else {\r\n staff.partInfo.displayCues = false;\r\n }\r\n staff.setMappedStaffId(this.staffMap[staff.staffId]);\r\n });\r\n }\r\n resetPartView() {\r\n if (this.staffMap.length === 1) {\r\n const staff = this.storeScore.staves[this.staffMap[0]];\r\n this.exposePart(staff);\r\n }\r\n }\r\n /**\r\n * Exposes a part: hides non-part staves, shows part staves.\r\n * Note this will reset the view. After this operation, staff 0 will\r\n * be the selected part.\r\n * @param staff \r\n */\r\n exposePart(staff: SmoSystemStaff) {\r\n let i = 0;\r\n const exposeMap: ViewMapEntry[] = [];\r\n let pushNext = false;\r\n for (i = 0; i < this.storeScore.staves.length; ++i) {\r\n const tS = this.storeScore.staves[i];\r\n const show = tS.staffId === staff.staffId;\r\n if (pushNext) {\r\n exposeMap.push({ show: true });\r\n pushNext = false;\r\n } else {\r\n exposeMap.push({ show });\r\n if (tS.partInfo.stavesAfter > 0 && show) {\r\n pushNext = true;\r\n }\r\n }\r\n }\r\n this.setView(exposeMap);\r\n }\r\n /**\r\n * Indicates if the score is displaying in part-mode vs. score mode.\r\n * @returns \r\n */\r\n isPartExposed(): boolean {\r\n return this.score.isPartExposed();\r\n }\r\n /**\r\n * Parts have different formatting options from the parent score, indluding layout. Reset\r\n * them when exposing a part.\r\n */\r\n _mapPartFormatting() {\r\n this.score.layoutManager = this.score.staves[0].partInfo.layoutManager;\r\n let replacedText = false;\r\n this.score.staves.forEach((staff) => {\r\n staff.updateMeasureFormatsForPart();\r\n if (staff.partInfo.preserveTextGroups && !replacedText) {\r\n const tga: SmoTextGroup[] = [];\r\n replacedText = true;\r\n staff.partInfo.textGroups.forEach((tg) => {\r\n tga.push(tg);\r\n });\r\n this.score.textGroups = tga;\r\n }\r\n });\r\n }\r\n /**\r\n * Update the list of staves in the score that are displayed.\r\n */\r\n setView(rows: ViewMapEntry[]) {\r\n let i = 0;\r\n const any = rows.find((row) => row.show === true);\r\n if (!any) {\r\n return;\r\n }\r\n const nscore = SmoScore.deserialize(JSON.stringify(this.storeScore.serialize(\r\n { skipStaves: true, useDictionary: false, preserveStaffIds: false })));\r\n const staffMap = [];\r\n for (i = 0; i < rows.length; ++i) {\r\n const row = rows[i];\r\n if (row.show) {\r\n const srcStave = this.storeScore.staves[i];\r\n const jsonObj = srcStave.serialize({ skipMaps: false, preserveIds: true });\r\n jsonObj.staffId = staffMap.length;\r\n const nStave = SmoSystemStaff.deserialize(jsonObj);\r\n nStave.mapStaffFromTo(i, nscore.staves.length);\r\n nscore.staves.push(nStave);\r\n if (srcStave.keySignatureMap) {\r\n nStave.keySignatureMap = JSON.parse(JSON.stringify(srcStave.keySignatureMap));\r\n }\r\n nStave.measures.forEach((measure: SmoMeasure, ix) => {\r\n const srcMeasure = srcStave.measures[ix];\r\n measure.tempo = new SmoTempoText(srcMeasure.tempo.serialize());\r\n measure.timeSignature = new TimeSignature(srcMeasure.timeSignature);\r\n measure.keySignature = srcMeasure.keySignature;\r\n });\r\n staffMap.push(i);\r\n }\r\n }\r\n nscore.numberStaves();\r\n this.staffMap = staffMap;\r\n this.score = nscore;\r\n // Indicate which score staff view staves are mapped to, to decide to display\r\n // modifiers.\r\n this.setMappedStaffIds();\r\n // TODO: add part-specific measure formatting, etc.\r\n this._setTransposing();\r\n this.renderer.score = nscore;\r\n // If this current view is a part, show the part layout\r\n if (this.isPartExposed()) {\r\n this._mapPartFormatting(); \r\n this.score.staves.forEach((staff) => {\r\n staff.partInfo.displayCues = false;\r\n });\r\n SmoOperation.computeMultipartRest(nscore);\r\n } else {\r\n this.score.staves.forEach((staff) => {\r\n staff.partInfo.displayCues = staff.partInfo.cueInScore;\r\n });\r\n }\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n this.renderer.setViewport();\r\n }\r\n /**\r\n * view all the staffs in score mode.\r\n */\r\n viewAll() {\r\n this.score = SmoScore.deserialize(JSON.stringify(\r\n this.storeScore.serialize({ skipStaves: false, useDictionary: false, preserveStaffIds: true })));\r\n this.staffMap = this.defaultStaffMap;\r\n this.setMappedStaffIds();\r\n this._setTransposing();\r\n this.score.synchronizeTextGroups(this.storeScore.textGroups);\r\n this.renderer.score = this.score;\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n this.renderer.setViewport();\r\n }\r\n /**\r\n * Update score based on transposing flag.\r\n */\r\n _setTransposing() {\r\n if (!this.isPartExposed()) {\r\n const xpose = this.score.preferences?.transposingScore;\r\n if (xpose) {\r\n this.score.setTransposing();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update the view after loading or restoring a completely new score\r\n * @param score \r\n * @returns \r\n */\r\n async changeScore(score: SmoScore) {\r\n this.storeUndo.reset();\r\n SuiAudioPlayer.stopPlayer();\r\n this.renderer.score = score;\r\n this.renderer.setViewport();\r\n this.storeScore = SmoScore.deserialize(JSON.stringify(\r\n score.serialize({ skipStaves: false, useDictionary: false, preserveStaffIds: true })));\r\n this.score = score;\r\n // If the score is non-transposing, hide the instrument xpose settings\r\n this._setTransposing();\r\n this.staffMap = this.defaultStaffMap;\r\n this.setMappedStaffIds();\r\n this.score.synchronizeTextGroups(this.storeScore.textGroups);\r\n if (this.storeScore.isPartExposed()) {\r\n this.exposePart(this.score.staves[0]);\r\n }\r\n const rv = await this.awaitRender();\r\n window.dispatchEvent(new CustomEvent(scoreChangeEvent, { detail: { view: this } }));\r\n return rv;\r\n }\r\n replaceMeasureView(measureRange: number[]) {\r\n for (let i = measureRange[0]; i <= measureRange[1]; ++i) {\r\n this.score.staves.forEach((staff) => {\r\n const staffId = staff.staffId;\r\n const altStaff = this.storeScore.staves[this._getEquivalentStaff(staffId)];\r\n if (altStaff) {\r\n staff.syncStaffModifiers(i, altStaff);\r\n }\r\n // Get a copy of the backing score, and map it to the score stave. this.score may have fewer staves\r\n // than this.storeScore\r\n const svg = JSON.parse(JSON.stringify(staff.measures[i].svg));\r\n const serialized = UndoBuffer.serializeMeasure(this.storeScore.staves[this.staffMap[staffId]].measures[i]);\r\n serialized.measureNumber.staffId = staffId;\r\n const xpose = serialized.transposeIndex ?? 0;\r\n const concertKey = SmoMusic.vexKeySigWithOffset(serialized.keySignature ?? 'c', -1 * xpose);\r\n serialized.keySignature = concertKey;\r\n const rmeasure = SmoMeasure.deserialize(serialized);\r\n rmeasure.svg = svg;\r\n const selector: SmoSelector = { staff: staffId, measure: i, voice: 0, tick: 0, pitches: [] };\r\n this.score.replaceMeasure(selector, rmeasure);\r\n });\r\n this.renderer.addColumnToReplaceQueue(i);\r\n }\r\n }\r\n /**\r\n * for the view score, the renderer decides what to render\r\n * depending on what is undone.\r\n * @returns \r\n */\r\n async undo() {\r\n if (!this.renderer.score) {\r\n return;\r\n }\r\n \r\n if (!this.storeUndo.buffersAvailable()) {\r\n return;\r\n }\r\n const staffMap: Record = {};\r\n const identityMap: Record = {};\r\n this.defaultStaffMap.forEach((nn) => identityMap[nn] = nn);\r\n this.staffMap.forEach((mm, ix) => staffMap[mm] = ix);\r\n // A score-level undo might have changed the score.\r\n const fullScore = this.storeUndo.undoScorePeek();\r\n // text undo is handled differently since there is usually not\r\n // an associated measure.\r\n const scoreText = this.storeUndo.undoScoreTextGroupPeek();\r\n const partText = this.storeUndo.undoPartTextGroupPeek();\r\n if (scoreText || partText) {\r\n await this.renderer.unrenderTextGroups();\r\n }\r\n const measureRange = this.storeUndo.getMeasureRange();\r\n if (!(fullScore || scoreText || partText)) {\r\n for (let i = measureRange[0]; i <= measureRange[1]; ++i) {\r\n this.renderer.unrenderColumn(this.score.staves[0].measures[i]);\r\n }\r\n }\r\n this.storeScore = this.storeUndo.undo(this.storeScore, identityMap, true);\r\n if (fullScore) {\r\n this.viewAll();\r\n this.renderer.setRefresh();\r\n } else if (partText) {\r\n this.setView(this.getView());\r\n } else if (scoreText) {\r\n this.score.synchronizeTextGroups(this.storeScore.textGroups);\r\n this.renderer.rerenderTextGroups();\r\n } else {\r\n this.replaceMeasureView(measureRange);\r\n }\r\n await this.renderer.updatePromise();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiScoreView, updateStaffModifierFunc } from './scoreView';\r\nimport { SmoScore, engravingFontType } from '../../smo/data/score';\r\nimport { SmoSystemStaffParams, SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { KeyEvent, SvgBox, Pitch, PitchLetter } from '../../smo/data/common';\r\nimport { SmoRenderConfiguration } from './configuration';\r\nimport { SmoSystemGroup, SmoPageLayout, SmoGlobalLayout, SmoLayoutManager, SmoAudioPlayerSettings,\r\n SmoScorePreferences, SmoScoreInfo } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoDynamicText, SmoNoteModifierBase, SmoGraceNote, SmoArticulation, \r\n SmoOrnament, SmoLyric, SmoMicrotone, SmoArpeggio, SmoArpeggioType, SmoClefChange, \r\n SmoTabNote} from '../../smo/data/noteModifiers';\r\nimport { SmoTempoText, SmoVolta, SmoBarline, SmoRepeatSymbol, \r\n SmoRehearsalMark, SmoMeasureFormat, TimeSignature } from '../../smo/data/measureModifiers';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SmoOperation, createStaffModifierType\r\n } from '../../smo/xform/operations';\r\nimport { BatchSelectionOperation } from '../../smo/xform/operations';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { SuiOscillator } from '../audio/oscillator';\r\nimport { XmlToSmo } from '../../smo/mxml/xmlToSmo';\r\nimport { SuiAudioPlayer } from '../audio/player';\r\nimport { SuiXhrLoader } from '../../ui/fileio/xhrLoader';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { StaffModifierBase, \r\n SmoInstrument, SmoInstrumentParams, SmoStaffTextBracket, SmoTabStave } from '../../smo/data/staffModifiers';\r\nimport { SuiPiano } from './piano';\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { parseJsonText } from 'typescript';\r\ndeclare var $: any;\r\ndeclare var SmoConfig: SmoRenderConfiguration;\r\n\r\n\r\n/**\r\n * MVVM-like operations on the displayed score.\r\n * \r\n * All operations that can be performed on a 'live' score go through this\r\n * module. It maps the score view to the actual score and makes sure the\r\n * model and view stay in sync. \r\n * \r\n * Because this object operates on the current selections, \r\n * all operations return promise so applications can wait for the \r\n * operation to complete and update the selection list.\r\n * @category SuiRender\r\n */\r\nexport class SuiScoreViewOperations extends SuiScoreView {\r\n /**\r\n * Add a new text group to the score \r\n * @param textGroup a new text group\r\n * @returns \r\n */\r\n async addTextGroup(textGroup: SmoTextGroup): Promise {\r\n const altNew = SmoTextGroup.deserializePreserveId(textGroup.serialize());\r\n const isPartExposed = this.isPartExposed();\r\n let selector = textGroup.selector ?? SmoSelector.default;\r\n const partInfo = this.score.staves[0].partInfo;\r\n const bufType = isPartExposed && partInfo.preserveTextGroups\r\n ? UndoBuffer.bufferTypes.PART_MODIFIER : UndoBuffer.bufferTypes.SCORE_MODIFIER;\r\n if (bufType === UndoBuffer.bufferTypes.PART_MODIFIER) {\r\n selector.staff = this.staffMap[0];\r\n } \r\n this.storeUndo.addBuffer('remove text group', bufType,\r\n selector, textGroup, UndoBuffer.bufferSubtypes.ADD);\r\n if (isPartExposed && partInfo.preserveTextGroups) {\r\n this.score.staves[0].partInfo.updateTextGroup(textGroup, true);\r\n const partInfo = this.storeScore.staves[this._getEquivalentStaff(0)].partInfo;\r\n partInfo.updateTextGroup(altNew, true); \r\n } else {\r\n this.score.updateTextGroup(textGroup, true);\r\n this.storeScore.updateTextGroup(altNew, true);\r\n }\r\n await this.renderer.rerenderTextGroups();\r\n }\r\n\r\n /**\r\n * Remove the text group from the score\r\n * @param textGroup \r\n * @returns \r\n */\r\n async removeTextGroup(textGroup: SmoTextGroup): Promise {\r\n let selector = textGroup.selector ?? SmoSelector.default;\r\n const partInfo = this.score.staves[0].partInfo;\r\n const isPartExposed = this.isPartExposed();\r\n const bufType = isPartExposed && partInfo.preserveTextGroups \r\n ? UndoBuffer.bufferTypes.PART_MODIFIER : UndoBuffer.bufferTypes.SCORE_MODIFIER;\r\n let ogText = this.storeScore.textGroups.find((tg) => tg.attrs.id === textGroup.attrs.id);\r\n if (isPartExposed && partInfo.preserveTextGroups) {\r\n ogText = partInfo.textGroups.find((tg) => tg.attrs.id === textGroup.attrs.id);\r\n }\r\n if (bufType === UndoBuffer.bufferTypes.PART_MODIFIER) {\r\n selector.staff = this.staffMap[0];\r\n } else {\r\n selector.staff = this.staffMap[selector.staff];\r\n }\r\n if (!ogText) {\r\n return;\r\n }\r\n this.storeUndo.addBuffer('remove text group', bufType,\r\n selector, ogText, UndoBuffer.bufferSubtypes.REMOVE);\r\n const altGroup = SmoTextGroup.deserializePreserveId(textGroup.serialize());\r\n textGroup.elements.forEach((el) => el.remove());\r\n textGroup.elements = [];\r\n if (isPartExposed && partInfo.preserveTextGroups) {\r\n partInfo.updateTextGroup(textGroup, false);\r\n this.storeScore.staves[this._getEquivalentStaff(0)].partInfo.updateTextGroup(altGroup, false);\r\n } else {\r\n this.score.updateTextGroup(textGroup, false);\r\n this.storeScore.updateTextGroup(altGroup, false);\r\n }\r\n await this.renderer.rerenderTextGroups();\r\n }\r\n\r\n /**\r\n * UPdate an existing text group. The original is passed in, because since TG not tied to a musical\r\n * element, we need to find the one we're updating.\r\n * @param oldVersion \r\n * @param newVersion \r\n * @returns \r\n */\r\n async updateTextGroup(newVersion: SmoTextGroup): Promise {\r\n const selector = newVersion.selector ?? SmoSelector.default;\r\n const isPartExposed = this.isPartExposed();\r\n const partInfo = this.score.staves[0].partInfo;\r\n // Back up the original score text\r\n let ogtg = this.storeScore.textGroups.find((tg) => tg.attrs.id === newVersion.attrs.id);\r\n if (isPartExposed && partInfo.preserveTextGroups) {\r\n ogtg = partInfo.textGroups.find((tg) => tg.attrs.id === newVersion.attrs.id);\r\n }\r\n if (!ogtg) {\r\n // there is nothing to update, return.\r\n return;\r\n }\r\n if (ogtg) {\r\n const bufType = isPartExposed && partInfo.preserveTextGroups \r\n ? UndoBuffer.bufferTypes.PART_MODIFIER : UndoBuffer.bufferTypes.SCORE_MODIFIER;\r\n // if this is part text, make sure the undo buffer is associated with the part stave\r\n // in the full score, so undo works properly\r\n if (bufType === UndoBuffer.bufferTypes.PART_MODIFIER) {\r\n selector.staff = this.staffMap[0];\r\n } else {\r\n selector.staff = this.staffMap[selector.staff];\r\n }\r\n this.storeUndo.addBuffer('modify text',\r\n bufType, selector, ogtg, UndoBuffer.bufferSubtypes.UPDATE);\r\n }\r\n const altNew = SmoTextGroup.deserializePreserveId(newVersion.serialize());\r\n this.score.updateTextGroup(newVersion, true);\r\n // If this is part text, don't store it in the score text, except for the displayed score\r\n if (!isPartExposed) {\r\n this.storeScore.updateTextGroup(altNew, true);\r\n } else {\r\n this.storeScore.staves[this._getEquivalentStaff(0)].partInfo.updateTextGroup(altNew, true);\r\n }\r\n // TODO: only render the one TG.\r\n await this.renderer.rerenderTextGroups();\r\n // return this.renderer.updatePromise();\r\n }\r\n /**\r\n * load an mxml score remotely, return a promise that \r\n * completes when the file is loaded\r\n * @param url where to find the xml file\r\n * @returns \r\n */\r\n async loadRemoteXml(url: string): Promise {\r\n const req = new SuiXhrLoader(url);\r\n const self = this;\r\n // Shouldn't we return promise of actually displaying the score?\r\n await req.loadAsync();\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(req.value, 'text/xml');\r\n const score = XmlToSmo.convert(xml);\r\n score.layoutManager!.zoomToWidth($('body').width());\r\n await self.changeScore(score);\r\n }\r\n /**\r\n * load a remote score in SMO format\r\n * @param url url to find the score\r\n * @returns \r\n */\r\n async loadRemoteJson(url: string) : Promise {\r\n const req = new SuiXhrLoader(url);\r\n await req.loadAsync();\r\n const score = SmoScore.deserialize(req.value);\r\n await this.changeScore(score);\r\n }\r\n /**\r\n * Load a remote score, return promise when it's been loaded\r\n * from afar.\r\n * @param pref \r\n * @returns \r\n */\r\n async loadRemoteScore(url: string): Promise {\r\n if (url.endsWith('xml') || url.endsWith('mxl')) {\r\n return this.loadRemoteXml(url);\r\n } else {\r\n return this.loadRemoteJson(url);\r\n }\r\n }\r\n async updateAudioSettings(pref: SmoAudioPlayerSettings) {\r\n this._undoScorePreferences('Update preferences');\r\n this.score.audioSettings = pref;\r\n this.storeScore.audioSettings = new SmoAudioPlayerSettings(pref);\r\n // No rendering to be done\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Global settings that control how the score editor behaves\r\n * @param pref \r\n * @returns \r\n */\r\n async updateScorePreferences(pref: SmoScorePreferences): Promise {\r\n this._undoScorePreferences('Update preferences');\r\n const oldXpose = this.score.preferences.transposingScore;\r\n const curXpose = pref.transposingScore;\r\n this.score.updateScorePreferences(new SmoScorePreferences(pref));\r\n this.storeScore.updateScorePreferences(new SmoScorePreferences(pref));\r\n if (curXpose === false && oldXpose === true) {\r\n this.score.setNonTransposing();\r\n } else if (curXpose === true && oldXpose === false) {\r\n this.score.setTransposing();\r\n }\r\n this.renderer.setDirty();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update information about the score, composer etc.\r\n * @param scoreInfo \r\n * @returns \r\n */\r\n async updateScoreInfo(scoreInfo: SmoScoreInfo): Promise {\r\n this._undoScorePreferences('Update preferences');\r\n this.score.scoreInfo = scoreInfo;\r\n this.storeScore.scoreInfo = JSON.parse(JSON.stringify(scoreInfo));\r\n return this.renderer.updatePromise()\r\n }\r\n async addRemoveArpeggio(code: SmoArpeggioType) {\r\n await this.modifyCurrentSelections('add/remove addRemoveArpeggio',\r\n (score, selections) => {\r\n selections.forEach((sel) => {\r\n if (sel.note) {\r\n if (code === 'none') {\r\n sel.note.arpeggio = undefined;\r\n } else {\r\n sel.note.arpeggio = new SmoArpeggio({ type: code });\r\n }\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * A clef change mid-measure (clefNote)\r\n * @param clef \r\n */\r\n async addRemoveClefChange(clef: SmoClefChange) {\r\n await this.modifyCurrentSelections('add/remove addRemoveClefChange',\r\n (score, selections) => {\r\n selections.forEach((sel) => {\r\n const measureClef = sel.measure.clef;\r\n if (sel.note) {\r\n if (measureClef === clef.clef) {\r\n sel.note.clefNote = null;\r\n } else {\r\n sel.note.clefNote = clef;\r\n }\r\n }\r\n });\r\n }); \r\n }\r\n /**\r\n * Modify the dynamics assoicated with the specific selection\r\n * @param selection \r\n * @param dynamic \r\n * @returns \r\n */\r\n async addDynamic(selection: SmoSelection, dynamic: SmoDynamicText): Promise {\r\n await this.modifySelection('add dynamic', selection, (score, selections) => {\r\n SmoOperation.addDynamic(selections[0], dynamic);\r\n });\r\n }\r\n /**\r\n * Remove dynamics from the selection \r\n * @param selection \r\n * @param dynamic \r\n * @returns \r\n */\r\n async _removeDynamic(selection: SmoSelection, dynamic: SmoDynamicText): Promise {\r\n const equiv = this._getEquivalentSelection(selection);\r\n if (equiv !== null && equiv.note !== null) {\r\n const altModifiers = equiv.note.getModifiers('SmoDynamicText');\r\n SmoOperation.removeDynamic(selection, dynamic);\r\n if (altModifiers.length) {\r\n SmoOperation.removeDynamic(equiv, altModifiers[0] as SmoDynamicText);\r\n }\r\n }\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Remove dynamics from the current selection\r\n * @param dynamic\r\n * @returns \r\n */\r\n async removeDynamic(dynamic: SmoDynamicText): Promise {\r\n const sel = this.tracker.modifierSelections[0];\r\n if (!sel.selection) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n this.tracker.selections = [sel.selection];\r\n this._undoFirstMeasureSelection('remove dynamic');\r\n this._removeDynamic(sel.selection, dynamic);\r\n this.renderer.addToReplaceQueue(sel.selection);\r\n await this.renderer.updatePromise()\r\n }\r\n /**\r\n * we never really delete a note, but we will convert it into a rest and if it's\r\n * already a rest we will try to hide it.\r\n * Operates on current selections\r\n * */\r\n async deleteNote(): Promise {\r\n const measureSelections = this.undoTrackerMeasureSelections('delete note');\r\n this.tracker.selections.forEach((sel) => {\r\n if (sel.note) {\r\n\r\n const altSel = this._getEquivalentSelection(sel);\r\n\r\n // set the pitch to be a good position for the rest\r\n const pitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[sel.measure.clef]));\r\n const altPitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[altSel!.measure.clef]));\r\n sel.note.pitches = [pitch];\r\n altSel!.note!.pitches = [altPitch];\r\n\r\n // If the note is a note, make it into a rest. If the note is a rest already,\r\n // make it invisible. If it is invisible already, make it back into a rest.\r\n if (sel.note.isRest() && !sel.note.isHidden()) {\r\n sel.note.makeHidden(true);\r\n altSel!.note!.makeHidden(true);\r\n } else {\r\n sel.note.makeRest();\r\n altSel!.note!.makeRest();\r\n sel.note.makeHidden(false);\r\n altSel!.note!.makeHidden(false);\r\n }\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise()\r\n }\r\n /**\r\n * The lyric editor moves around, so we can't depend on the tracker for the\r\n * correct selection. We get it directly from the editor.\r\n * \r\n * @param selector - the selector of the note with the lyric to remove\r\n * @param lyric - a copy of the lyric to remove. We use the verse, parser to identify it\r\n * @returns render promise\r\n */\r\n async removeLyric(selector: SmoSelector, lyric: SmoLyric): Promise {\r\n const selection = SmoSelection.noteFromSelector(this.score, selector);\r\n if (selection === null) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n this._undoSelection('remove lyric', selection);\r\n selection.note!.removeLyric(lyric);\r\n const equiv = this._getEquivalentSelection(selection);\r\n const storeLyric = equiv!.note!.getLyricForVerse(lyric.verse, lyric.parser);\r\n if (typeof (storeLyric) !== 'undefined') {\r\n equiv!.note!.removeLyric(lyric);\r\n }\r\n this.renderer.addToReplaceQueue(selection);\r\n lyric.deleted = true;\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * @param selector where to add or update the lyric\r\n * @param lyric a copy of the lyric to remove\r\n * @returns \r\n */\r\n async addOrUpdateLyric(selector: SmoSelector, lyric: SmoLyric): Promise {\r\n const selection = SmoSelection.noteFromSelector(this.score, selector);\r\n if (selection === null) {\r\n return;\r\n }\r\n this._undoSelection('update lyric', selection);\r\n selection.note!.addLyric(lyric);\r\n const equiv = this._getEquivalentSelection(selection);\r\n const altLyric = SmoNoteModifierBase.deserialize(lyric.serialize() as any) as SmoLyric;\r\n equiv!.note!.addLyric(altLyric);\r\n this.renderer.addToReplaceQueue(selection);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Delete all the notes for the currently selected voice\r\n * @returns \r\n */\r\n async depopulateVoice(): Promise {\r\n const measureSelections = this.undoTrackerMeasureSelections('depopulate voice');\r\n measureSelections.forEach((selection) => {\r\n const ix = selection.measure.getActiveVoice();\r\n if (ix !== 0) {\r\n SmoOperation.depopulateVoice(selection, ix);\r\n const equiv = this._getEquivalentSelection(selection);\r\n SmoOperation.depopulateVoice(equiv!, ix);\r\n }\r\n });\r\n SmoOperation.setActiveVoice(this.score, 0);\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Change the active voice in a multi-voice measure.\r\n * @param index \r\n * @returns \r\n */\r\n _changeActiveVoice(index: number): SmoSelection[] {\r\n const measuresToAdd: SmoSelection[] = [];\r\n const measureSelections = SmoSelection.getMeasureList(this.tracker.selections);\r\n measureSelections.forEach((measureSelection) => {\r\n if (index === measureSelection.measure.voices.length) {\r\n measuresToAdd.push(measureSelection);\r\n }\r\n });\r\n return measuresToAdd;\r\n }\r\n /**\r\n * Populate a new voice with default notes\r\n * @param index the voice to populate\r\n * @returns \r\n */\r\n async populateVoice(index: number): Promise {\r\n const measuresToAdd = this._changeActiveVoice(index);\r\n if (measuresToAdd.length === 0) {\r\n SmoOperation.setActiveVoice(this.score, index);\r\n this.tracker.selectActiveVoice();\r\n return this.renderer.updatePromise();\r\n }\r\n measuresToAdd.forEach((selection) => {\r\n this._undoSelection('popualteVoice', selection);\r\n SmoOperation.populateVoice(selection, index);\r\n const equiv = this._getEquivalentSelection(selection);\r\n SmoOperation.populateVoice(equiv!, index);\r\n });\r\n SmoOperation.setActiveVoice(this.score, index);\r\n this._renderChangedMeasures(measuresToAdd);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Assign an instrument to a set of measures\r\n * @param instrument the instrument to assign to the selections\r\n * @param selections \r\n * @returns \r\n */\r\n async changeInstrument(instrument: SmoInstrument, selections: SmoSelection[]): Promise {\r\n if (typeof (selections) === 'undefined') {\r\n selections = this.tracker.selections;\r\n }\r\n this._undoSelections('change instrument', selections);\r\n const altSelections = this._getEquivalentSelections(selections);\r\n SmoOperation.changeInstrument(instrument, selections);\r\n SmoOperation.changeInstrument(instrument, altSelections);\r\n this._renderChangedMeasures(selections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Set the time signature for a selection\r\n * @param timeSignature actual time signature\r\n */\r\n async setTimeSignature(timeSignature: TimeSignature): Promise {\r\n this._undoScore('Set time signature');\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n SmoOperation.setTimeSignature(this.score, selections, timeSignature);\r\n SmoOperation.setTimeSignature(this.storeScore, altSelections, timeSignature);\r\n this._renderChangedMeasures(SmoSelection.getMeasureList(this.tracker.selections));\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move selected staff up or down in the score.\r\n * @param index direction to move\r\n * @returns \r\n */\r\n async moveStaffUpDown(index: number): Promise {\r\n this._undoScore('re-order staves');\r\n // Get staff to move\r\n const selection = this._getEquivalentSelection(this.tracker.selections[0]);\r\n // Make the move in the model, and reset the view so we can see the new\r\n // arrangement\r\n SmoOperation.moveStaffUpDown(this.storeScore, selection!, index);\r\n this.viewAll();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update the staff group for a score, which determines how the staves\r\n * are justified and bracketed\r\n * @param staffGroup \r\n */\r\n async addOrUpdateStaffGroup(staffGroup: SmoSystemGroup): Promise {\r\n this._undoScore('group staves');\r\n // Assume that the view is now set to full score\r\n this.score.addOrReplaceSystemGroup(staffGroup);\r\n this.storeScore.addOrReplaceSystemGroup(staffGroup);\r\n this.renderer.setDirty();\r\n await this.renderer.updatePromise();\r\n }\r\n async updateTabStave(tabStave: SmoTabStave) {\r\n const selections = SmoSelection.getMeasuresBetween(this.score, tabStave.startSelector, tabStave.endSelector);\r\n const altSelections = this._getEquivalentSelections(selections);\r\n if (selections.length === 0) {\r\n return;\r\n }\r\n this._undoSelections('updateTabStave', selections);\r\n const staff: number = selections[0].selector.staff;\r\n const altStaff = altSelections[0].selector.staff;\r\n const altTabStave = new SmoTabStave(tabStave.serialize());\r\n altTabStave.startSelector.staff = altStaff;\r\n altTabStave.endSelector.staff = altStaff;\r\n altTabStave.attrs.id = tabStave.attrs.id;\r\n this.score.staves[staff].updateTabStave(tabStave);\r\n this.storeScore.staves[altStaff].updateTabStave(altTabStave);\r\n this._renderChangedMeasures(SmoSelection.getMeasureList(this.tracker.selections));\r\n await this.renderer.updatePromise();\r\n }\r\n async removeTabStave() {\r\n const selections = this.tracker.selections;\r\n const altSelections = this._getEquivalentSelections(selections);\r\n if (selections.length === 0) {\r\n return;\r\n }\r\n this._undoSelections('updateTabStave', selections);\r\n const stavesToRemove: SmoTabStave[] = [];\r\n const altStavesToRemove: SmoTabStave[] = [];\r\n const added: Record = {};\r\n selections.forEach((sel, ix) => {\r\n const altSel = altSelections[ix];\r\n const tabStave = sel.staff.getTabStaveForMeasure(sel.selector);\r\n const altTabStave = altSel.staff.getTabStaveForMeasure(altSel.selector);\r\n if (tabStave && altTabStave) {\r\n if (!added[tabStave.attrs.id]) {\r\n added[tabStave.attrs.id] = tabStave;\r\n stavesToRemove.push(tabStave);\r\n altStavesToRemove.push(altTabStave);\r\n }\r\n }\r\n });\r\n selections[0].staff.removeTabStaves(stavesToRemove);\r\n altSelections[0].staff.removeTabStaves(altStavesToRemove);\r\n this._renderChangedMeasures(SmoSelection.getMeasureList(this.tracker.selections));\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update tempo for all or part of the score\r\n * @param measure the measure with the tempo. Tempo is measure-wide parameter\r\n * @param scoreMode if true, update whole score. Else selections\r\n * @returns \r\n */\r\n async updateTempoScore(measure: SmoMeasure, tempo: SmoTempoText, scoreMode: boolean, selectionMode: boolean): Promise {\r\n let measureIndex = 0; \r\n const originalTempo = new SmoTempoText(measure.tempo);\r\n this._undoColumn('update tempo', measure.measureNumber.measureIndex);\r\n let startMeasure = measure.measureNumber.measureIndex;\r\n let endMeasure = this.score.staves[0].measures.length;\r\n let displayed = false;\r\n if (selectionMode) {\r\n const endSel = this.tracker.getExtremeSelection(1);\r\n if (endSel.selector.measure > startMeasure) {\r\n endMeasure = endSel.selector.measure;\r\n }\r\n }\r\n // If we are only changing the position of the text, it only affects the tempo measure.\r\n if (SmoTempoText.eq(originalTempo, tempo) && tempo.yOffset !== originalTempo.yOffset && endMeasure > startMeasure) {\r\n endMeasure = startMeasure + 1; \r\n }\r\n for (measureIndex = startMeasure; measureIndex < endMeasure; ++measureIndex) {\r\n if (!scoreMode && !selectionMode) {\r\n // If not whole score or selections, change until the tempo doesn't match previous measure's tempo (next tempo change)\r\n const compMeasure = this.score.staves[0].measures[measureIndex];\r\n if (SmoTempoText.eq(originalTempo, compMeasure.tempo) || displayed === false) {\r\n const sel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n const altSel = SmoSelection.measureSelection(this.storeScore, 0, measureIndex);\r\n if (sel && sel.measure.tempo.display && !displayed) {\r\n this.renderer.addToReplaceQueue(sel);\r\n displayed = true;\r\n }\r\n if (sel) {\r\n SmoOperation.addTempo(this.score, sel, tempo);\r\n }\r\n if (altSel) {\r\n SmoOperation.addTempo(this.storeScore, altSel, tempo);\r\n }\r\n } else {\r\n break;\r\n }\r\n } else {\r\n const sel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n const altSel = SmoSelection.measureSelection(this.storeScore, 0, measureIndex);\r\n if (sel) {\r\n SmoOperation.addTempo(this.score, sel, tempo);\r\n if (!displayed) {\r\n this.renderer.addToReplaceQueue(sel);\r\n displayed = true;\r\n }\r\n }\r\n if (altSel) {\r\n SmoOperation.addTempo(this.storeScore, altSel, tempo);\r\n }\r\n }\r\n }\r\n await this.renderer.updatePromise();\r\n }\r\n async updateTabNote(tabNote: SmoTabNote) {\r\n const selections = SmoSelection.getMeasuresBetween(this.score, \r\n this.tracker.getExtremeSelection(-1).selector, this.tracker.getExtremeSelection(1).selector);\r\n const altSelections = this._getEquivalentSelections(selections);\r\n this._undoSelections('updateTabNote', selections);\r\n SmoOperation.updateTabNote(selections, tabNote);\r\n SmoOperation.updateTabNote(altSelections, tabNote);\r\n this.renderer.addToReplaceQueue(selections);\r\n await this.renderer.updatePromise();\r\n }\r\n async removeTabNote() {\r\n const selections = SmoSelection.getMeasuresBetween(this.score, \r\n this.tracker.getExtremeSelection(-1).selector, this.tracker.getExtremeSelection(1).selector);\r\n const altSelections = this._getEquivalentSelections(selections);\r\n this._undoSelections('updateTabNote', selections);\r\n SmoOperation.removeTabNote(selections);\r\n SmoOperation.removeTabNote(altSelections);\r\n this.renderer.addToReplaceQueue(selections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * 'remove' tempo, which means either setting the bars to the \r\n * default tempo, or the previously-set tempo.\r\n * @param scoreMode whether to reset entire score\r\n */\r\n async removeTempo(measure: SmoMeasure, tempo: SmoTempoText, scoreMode: boolean, selectionMode: boolean): Promise {\r\n const startSelection = this.tracker.selections[0];\r\n if (startSelection.selector.measure > 0) {\r\n const measureIx = startSelection.selector.measure - 1;\r\n const target = startSelection.staff.measures[measureIx];\r\n const tempo = target.getTempo();\r\n const newTempo = new SmoTempoText(tempo);\r\n newTempo.display = false;\r\n this.updateTempoScore(measure, newTempo, scoreMode, selectionMode);\r\n } else {\r\n this.updateTempoScore(measure, new SmoTempoText(SmoTempoText.defaults), scoreMode, selectionMode);\r\n }\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add a grace note to the selected real notes.\r\n */\r\n async addGraceNote(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('add grace note');\r\n selections.forEach((selection) => {\r\n const index = selection.note!.getGraceNotes().length;\r\n const pitches = JSON.parse(JSON.stringify(selection.note!.pitches));\r\n const grace = new SmoGraceNote({\r\n pitches, ticks:\r\n { numerator: 2048, denominator: 1, remainder: 0 }\r\n });\r\n SmoOperation.addGraceNote(selection, grace, index);\r\n\r\n const altPitches = JSON.parse(JSON.stringify(selection.note!.pitches));\r\n const altGrace = new SmoGraceNote({\r\n pitches: altPitches, ticks:\r\n { numerator: 2048, denominator: 1, remainder: 0 }\r\n });\r\n altGrace.attrs.id = grace.attrs.id;\r\n const altSelection = this._getEquivalentSelection(selection);\r\n SmoOperation.addGraceNote(altSelection!, altGrace, index);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * remove selected grace note\r\n * @returns\r\n */\r\n async removeGraceNote(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('remove grace note');\r\n selections.forEach((selection) => {\r\n // TODO: get the correct offset\r\n SmoOperation.removeGraceNote(selection, 0);\r\n const altSel = (this._getEquivalentSelection(selection));\r\n SmoOperation.removeGraceNote(altSel!, 0);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle slash in stem of grace note\r\n */\r\n async slashGraceNotes(): Promise {\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n const measureSelections = this.undoTrackerMeasureSelections('slash grace note toggle');\r\n grace.forEach((gn) => {\r\n SmoOperation.slashGraceNotes(gn);\r\n if (gn.selection !== null) {\r\n const altSelection = this._getEquivalentSelection(gn.selection);\r\n const altGn = this._getEquivalentGraceNote(altSelection!, gn.modifier as SmoGraceNote);\r\n SmoOperation.slashGraceNotes({\r\n selection: altSelection, modifier: altGn as any,\r\n box: SvgBox.default, index: 0\r\n });\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n async transposeScore(offset: number): Promise {\r\n this._undoScore('transpose score');\r\n SmoOperation.transposeScore(this.score, offset);\r\n SmoOperation.transposeScore(this.storeScore, offset);\r\n this.renderer.rerenderAll();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * transpose selected notes\r\n * @param offset 1/2 steps\r\n * @returns \r\n */\r\n async transposeSelections(offset: number): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('transpose');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n if (artifact.selection !== null && artifact.selection.note !== null) {\r\n const gn1 = artifact.modifier as SmoGraceNote;\r\n const index = artifact.selection.note.graceNotes.findIndex((x) => x.attrs.id === gn1.attrs.id);\r\n const altSelection = this._getEquivalentSelection(artifact.selection);\r\n if (altSelection && altSelection.note !== null) {\r\n const gn2 = altSelection.note.graceNotes[index];\r\n SmoOperation.transposeGraceNotes(altSelection!, [gn2], offset);\r\n }\r\n SmoOperation.transposeGraceNotes(artifact.selection, [gn1], offset);\r\n }\r\n });\r\n\r\n } else {\r\n selections.forEach((selected) => {\r\n SmoOperation.transpose(selected, offset);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.transpose(altSel!, offset);\r\n });\r\n if (selections.length === 1 && this.score.preferences.autoPlay) {\r\n SuiOscillator.playSelectionNow(selections[0], this.score, 1);\r\n }\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle the accidental spelling of the selected notes\r\n * @returns\r\n */\r\n async toggleEnharmonic(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('toggle enharmonic');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n SmoOperation.toggleGraceNoteEnharmonic(artifact.selection!, [artifact.modifier as SmoGraceNote]);\r\n const altSelection = this._getEquivalentSelection(artifact.selection!);\r\n const altGr = this._getEquivalentGraceNote(altSelection!, artifact.modifier as SmoGraceNote);\r\n SmoOperation.toggleGraceNoteEnharmonic(altSelection!,\r\n [altGr]);\r\n });\r\n } else {\r\n selections.forEach((selected) => {\r\n if (typeof (selected.selector.pitches) === 'undefined') {\r\n selected.selector.pitches = [];\r\n }\r\n SmoOperation.toggleEnharmonic(selected);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.toggleEnharmonic(altSel!);\r\n });\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Toggle cautionary/courtesy accidentals\r\n */\r\n async toggleCourtesyAccidentals(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('toggle courtesy accidental');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n if (grace.length) {\r\n grace.forEach((artifact) => {\r\n const gn1 = [artifact.modifier] as SmoGraceNote[];\r\n SmoOperation.toggleGraceNoteCourtesy(artifact.selection, gn1);\r\n const altSel = this._getEquivalentSelection(artifact.selection!);\r\n const gn2 = this._getEquivalentGraceNote(altSel!, gn1[0]);\r\n SmoOperation.toggleGraceNoteCourtesy(altSel!, [gn2]);\r\n });\r\n } else {\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleCourtesyAccidental(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleCourtesyAccidental(altSel!);\r\n });\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * change the duration of notes for selected, creating more \r\n * or fewer notes. \r\n * After the change, reset the selection so it's as close as possible \r\n * to the original length\r\n * @param operation \r\n * @returns \r\n */\r\n async batchDurationOperation(operation: BatchSelectionOperation): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('change duration');\r\n const grace = this.tracker.getSelectedGraceNotes();\r\n const graceMap: Record = {\r\n doubleDuration: 'doubleGraceNoteDuration',\r\n halveDuration: 'halveGraceNoteDuration'\r\n };\r\n if (grace.length && typeof (graceMap[operation]) !== 'undefined') {\r\n operation = graceMap[operation];\r\n grace.forEach((artifact) => {\r\n (SmoOperation as any)[operation](artifact.selection, artifact.modifier);\r\n const altSelection = this._getEquivalentSelection(artifact.selection!);\r\n const gn2 = this._getEquivalentGraceNote(altSelection!, artifact.modifier as SmoGraceNote);\r\n (SmoOperation as any)[operation](altSelection!, gn2);\r\n });\r\n } else {\r\n const altAr = this._getEquivalentSelections(selections);\r\n SmoOperation.batchSelectionOperation(this.score, selections, operation);\r\n SmoOperation.batchSelectionOperation(this.storeScore, altAr, operation);\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle selected modifier on selected notes\r\n * @param modifier \r\n * @param ctor parent class constructor (e.g. SmoOrnament)\r\n * @returns \r\n */\r\n async toggleArticulation(modifier: string, ctor: string): Promise {\r\n const measureSelections = this.undoTrackerMeasureSelections('toggle articulation');\r\n this.tracker.selections.forEach((sel) => {\r\n if (ctor === 'SmoArticulation') {\r\n const aa = new SmoArticulation({ articulation: modifier });\r\n const altAa = new SmoArticulation({ articulation: modifier });\r\n altAa.attrs.id = aa.attrs.id;\r\n if (sel.note) {\r\n sel.note.toggleArticulation(aa);\r\n }\r\n const altSelection = this._getEquivalentSelection(sel);\r\n if (altSelection && altSelection.note) {\r\n altSelection.note.toggleArticulation(altAa);\r\n }\r\n } else {\r\n const aa = new SmoOrnament({ ornament: modifier });\r\n const altAa = new SmoOrnament({ ornament: modifier });\r\n altAa.attrs.id = aa.attrs.id;\r\n const altSelection = this._getEquivalentSelection(sel!);\r\n if (sel.note) {\r\n sel.note.toggleOrnament(aa);\r\n }\r\n if (altSelection && altSelection.note) {\r\n altSelection.note.toggleOrnament(altAa);\r\n }\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n async setArticulation(modifier: SmoArticulation, set: boolean): Promise {\r\n const measureSelections = this.undoTrackerMeasureSelections('set articulation');\r\n this.tracker.selections.forEach((sel) => {\r\n const altAa = new SmoArticulation(modifier);\r\n if (sel.note) {\r\n sel.note.setArticulation(modifier, set);\r\n }\r\n const altSelection = this._getEquivalentSelection(sel);\r\n if (altSelection && altSelection.note) {\r\n altSelection.note.toggleArticulation(altAa);\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise(); \r\n }\r\n async setOrnament(modifier: SmoOrnament, set: boolean): Promise {\r\n const measureSelections = this.undoTrackerMeasureSelections('set articulation');\r\n this.tracker.selections.forEach((sel) => {\r\n const altAa = new SmoOrnament(modifier);\r\n if (sel.note) {\r\n sel.note.setOrnament(modifier, set);\r\n }\r\n const altSelection = this._getEquivalentSelection(sel);\r\n if (altSelection && altSelection.note) {\r\n altSelection.note.setOrnament(altAa, set);\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise(); \r\n }\r\n /**\r\n * convert non-tuplet not to a tuplet\r\n * @param numNotes 3 means triplet, etc.\r\n */\r\n async makeTuplet(numNotes: number): Promise {\r\n const selection = this.tracker.selections[0];\r\n const measureSelections = this.undoTrackerMeasureSelections('make tuplet');\r\n SmoOperation.makeTuplet(selection, numNotes);\r\n const altSelection = this._getEquivalentSelection(selection!);\r\n SmoOperation.makeTuplet(altSelection!, numNotes);\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Convert selected tuplet to a single (if possible) non-tuplet\r\n */\r\n async unmakeTuplet(): Promise {\r\n const selection = this.tracker.selections[0];\r\n const measureSelections = this.undoTrackerMeasureSelections('unmake tuplet');\r\n SmoOperation.unmakeTuplet(selection);\r\n const altSelection = this._getEquivalentSelection(selection);\r\n SmoOperation.unmakeTuplet(altSelection!);\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * Create a chord by adding an interval to selected note\r\n * @param interval 1/2 steps\r\n * @returns \r\n */\r\n async setInterval(interval: number): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('set interval');\r\n selections.forEach((selected) => {\r\n SmoOperation.interval(selected, interval);\r\n const altSelection = this._getEquivalentSelection(selected);\r\n SmoOperation.interval(altSelection!, interval);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n\r\n /**\r\n * change the selected chord into a single note\r\n * @returns\r\n */\r\n async collapseChord(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('collapse chord');\r\n selections.forEach((selected) => {\r\n const note: SmoNote | null = selected.note;\r\n if (note) {\r\n const pp = JSON.parse(JSON.stringify(note.pitches[0]));\r\n const altpp = JSON.parse(JSON.stringify(note.pitches[0]));\r\n // No operation for this?\r\n note.pitches = [pp];\r\n const altSelection = this._getEquivalentSelection(selected);\r\n altSelection!.note!.pitches = [altpp];\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Toggle chicken-scratches, for jazz improv, comping etc.\r\n */\r\n async toggleSlash(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('make slash');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleSlash(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleSlash(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * make selected notes into a rest, or visa-versa\r\n * @returns\r\n */\r\n async makeRest(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('make rest');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleRest(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleRest(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n async clearAllBeams(): Promise {\r\n this._undoScore('clearAllBeams');\r\n SmoOperation.clearAllBeamGroups(this.score);\r\n SmoOperation.clearAllBeamGroups(this.storeScore);\r\n await this.awaitRender();\r\n }\r\n async clearSelectedBeams() {\r\n const selections = this.tracker.selections;\r\n const measures = SmoSelection.getMeasureList(selections);\r\n const altSelections = this._getEquivalentSelections(selections);\r\n SmoOperation.clearBeamGroups(this.score, selections);\r\n SmoOperation.clearBeamGroups(this.storeScore, altSelections);\r\n this._renderChangedMeasures(measures);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle the 'end beam' flag for selected notes\r\n * @returns \r\n */\r\n async toggleBeamGroup(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('toggle beam group');\r\n selections.forEach((selection) => {\r\n SmoOperation.toggleBeamGroup(selection);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.toggleBeamGroup(altSel!);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n async toggleCue() {\r\n const measureSelections = this.undoTrackerMeasureSelections('toggle note cue');\r\n this.tracker.selections.forEach((selection) => {\r\n const altSelection = this._getEquivalentSelection(selection);\r\n if (selection.note && selection.note.isRest() === false) {\r\n selection.note.isCue = !selection.note.isCue;\r\n if (altSelection && altSelection.note) {\r\n altSelection.note.isCue = selection.note.isCue;\r\n }\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * up or down\r\n * @returns \r\n */\r\n async toggleBeamDirection(): Promise {\r\n const selections = this.tracker.selections;\r\n if (selections.length < 1) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const measureSelections = this.undoTrackerMeasureSelections('toggle beam direction');\r\n SmoOperation.toggleBeamDirection(selections);\r\n SmoOperation.toggleBeamDirection(this._getEquivalentSelections(selections));\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add the selected notes to a beam group\r\n */\r\n async beamSelections(): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('beam selections');\r\n SmoOperation.beamSelections(this.score, selections);\r\n SmoOperation.beamSelections(this.storeScore, this._getEquivalentSelections(selections));\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * change key signature for selected measures\r\n * @param keySignature vex key signature\r\n */\r\n async addKeySignature(keySignature: string): Promise {\r\n const measureSelections = this.undoTrackerMeasureSelections('set key signature ' + keySignature);\r\n measureSelections.forEach((sel) => {\r\n SmoOperation.addKeySignature(this.score, sel, keySignature);\r\n const altSel = this._getEquivalentSelection(sel);\r\n SmoOperation.addKeySignature(this.storeScore, altSel!, keySignature);\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Sets a pitch from the piano widget.\r\n * @param pitch {Pitch}\r\n * @param chordPedal {boolean} - indicates we are adding to a chord\r\n */\r\n async setPitchPiano(pitch: Pitch, chordPedal: boolean): Promise {\r\n const measureSelections = this.undoTrackerMeasureSelections(\r\n 'setAbsolutePitch ' + pitch.letter + '/' + pitch.accidental);\r\n this.tracker.selections.forEach((selected) => {\r\n const npitch: Pitch = {\r\n letter: pitch.letter,\r\n accidental: pitch.accidental, octave: pitch.octave\r\n };\r\n const octave = SmoMeasure.defaultPitchForClef[selected.measure.clef].octave;\r\n npitch.octave += octave;\r\n const altSel = this._getEquivalentSelection(selected);\r\n if (chordPedal && selected.note) {\r\n selected.note.toggleAddPitch(npitch);\r\n altSel!.note!.toggleAddPitch(npitch);\r\n } else {\r\n SmoOperation.setPitch(selected, [npitch]);\r\n SmoOperation.setPitch(altSel!, [npitch]);\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * show or hide the piano widget\r\n * @param value to show it\r\n */\r\n async showPiano(value: boolean): Promise {\r\n this.score.preferences.showPiano = value;\r\n this.storeScore.preferences.showPiano = value;\r\n if (value) {\r\n SuiPiano.showPiano();\r\n } else {\r\n SuiPiano.hidePiano();\r\n }\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Render a pitch for each letter name-pitch in the string,\r\n * @param pitches letter names for pitches\r\n * @returns promise, resolved when all pitches rendered\r\n * @see setPitch\r\n */\r\n async setPitchesPromise(pitches: PitchLetter[]): Promise {\r\n const self = this;\r\n const promise = new Promise((resolve: any) => {\r\n const fc = async (index: number) => {\r\n if (index >= pitches.length) {\r\n resolve();\r\n } else {\r\n await self.setPitch(pitches[index]);\r\n fc(index + 1);\r\n }\r\n };\r\n fc(0);\r\n });\r\n await promise;\r\n }\r\n\r\n /**\r\n * Add a pitch to the score at the cursor. This tries to find the best pitch\r\n * to match the letter key (F vs F# for instance) based on key and surrounding notes\r\n * @param letter string\r\n */\r\n async setPitch(letter: PitchLetter): Promise {\r\n const selections = this.tracker.selections;\r\n const measureSelections = this.undoTrackerMeasureSelections('set pitch ' + letter);\r\n selections.forEach((selected) => {\r\n const selector = selected.selector;\r\n let hintSel = SmoSelection.lastNoteSelectionNonRest(this.score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n if (!hintSel) {\r\n hintSel = SmoSelection.nextNoteSelectionNonRest(this.score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n // The selection no longer exists, possibly deleted\r\n if (hintSel === null || hintSel.note === null) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const pitch = SmoMusic.getLetterNotePitch(hintSel.note.pitches[0],\r\n letter, hintSel.measure.keySignature);\r\n SmoOperation.setPitch(selected, [pitch]);\r\n const altSel = this._getEquivalentSelection(selected);\r\n SmoOperation.setPitch(altSel!, [pitch]);\r\n if (this.score.preferences.autoAdvance) {\r\n this.tracker.moveSelectionRight(this.score, null, true);\r\n }\r\n });\r\n if (selections.length === 1 && this.score.preferences.autoPlay) {\r\n SuiOscillator.playSelectionNow(selections[0], this.score, 1);\r\n }\r\n this._renderChangedMeasures(measureSelections);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Generic clipboard copy action\r\n */\r\n async copy(): Promise {\r\n const altAr: SmoSelection[] = [];\r\n this.tracker.selections.forEach((sel) => {\r\n const noteSelection = this._getEquivalentSelection(sel);\r\n if (noteSelection !== null) {\r\n altAr.push(noteSelection);\r\n }\r\n });\r\n this.storePaste.setSelections(this.storeScore, altAr);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * clipboard paste action\r\n * @returns \r\n */\r\n async paste(): Promise {\r\n // We undo the whole score on a paste, since we don't yet know the\r\n // extent of the overlap\r\n this.renderer.preserveScroll();\r\n const selections: SmoSelection[] = this.getPasteMeasureList();\r\n const firstSelection = selections[0];\r\n const measureEnd = selections[selections.length - 1].selector.measure;\r\n const measureRange = [firstSelection.selector.measure, measureEnd];\r\n this.storeUndo.grouping = true;\r\n // Undo the paste by selecting all the affected measures\r\n for (let i = measureRange[0]; i <= measureRange[1]; ++i) {\r\n this._undoColumn('paste', i);\r\n this.renderer.unrenderColumn(this.score.staves[0].measures[i]);\r\n }\r\n this.storeUndo.grouping = false;\r\n const altSelection = this._getEquivalentSelection(firstSelection);\r\n const altTarget = altSelection!.selector;\r\n altTarget.tick = this.tracker.selections[0].selector.tick;\r\n // paste the clipboard into the destination\r\n this.storePaste.pasteSelections(altTarget);\r\n // Refresh those measures.\r\n this.replaceMeasureView(measureRange);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * specify a note head other than the default for the duration\r\n * @param head \r\n */\r\n async setNoteHead(head: string): Promise {\r\n await this.modifyCurrentSelections('set note head', (score, selections) => {\r\n SmoOperation.setNoteHead(selections, head);\r\n });\r\n }\r\n\r\n /**\r\n * Add a volta for selected measures\r\n */\r\n async addEnding(): Promise {\r\n // TODO: we should have undo for columns\r\n this._undoScore('Add Volta');\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const params = SmoVolta.defaults;\r\n params.startBar = ft.selector.measure;\r\n params.endBar = tt.selector.measure;\r\n params.number = 1;\r\n const volta = new SmoVolta(params);\r\n const altVolta = new SmoVolta(params);\r\n this._renderChangedMeasures([ft, tt]);\r\n SmoOperation.addEnding(this.storeScore, altVolta);\r\n SmoOperation.addEnding(this.score, volta);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * @param ending volta settings\r\n * @returns \r\n */\r\n async updateEnding(ending: SmoVolta): Promise {\r\n this._undoScore('Change Volta');\r\n ending.elements.forEach((el) => {\r\n $(el).find('g.' + ending.attrs.id).remove();\r\n });\r\n ending.elements = [];\r\n SmoOperation.removeEnding(this.storeScore, ending);\r\n SmoOperation.removeEnding(this.score, ending);\r\n const altVolta = new SmoVolta(ending);\r\n SmoOperation.addEnding(this.storeScore, altVolta);\r\n SmoOperation.addEnding(this.score, ending);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param ending volta to remove\r\n * @returns \r\n */\r\n async removeEnding(ending: SmoVolta): Promise {\r\n this._undoScore('Remove Volta');\r\n ending.elements.forEach((el) => {\r\n $(el).find('g.' + ending.attrs.id).remove();\r\n });\r\n ending.elements = [];\r\n SmoOperation.removeEnding(this.storeScore, ending);\r\n SmoOperation.removeEnding(this.score, ending);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param position begin or end\r\n * @param barline barline type\r\n * @returns \r\n */\r\n async setBarline(position: number, barline: number): Promise {\r\n const obj = new SmoBarline({ position, barline });\r\n const altObj = new SmoBarline({ position, barline });\r\n const selection = this.tracker.selections[0];\r\n this._undoColumn('set barline', selection.selector.measure);\r\n SmoOperation.setMeasureBarline(this.score, selection, obj);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.setMeasureBarline(this.storeScore, altSel!, altObj);\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * \r\n * @param position start or end\r\n * @param symbol coda, etc.\r\n */\r\n async setRepeatSymbol(position: number, symbol: number): Promise {\r\n const params = SmoRepeatSymbol.defaults;\r\n params.position = position;\r\n params.symbol = symbol;\r\n const obj = new SmoRepeatSymbol(params);\r\n const altObj = new SmoRepeatSymbol(params);\r\n const selection = this.tracker.selections[0];\r\n this._undoColumn('set repeat symbol', selection.selector.measure);\r\n SmoOperation.setRepeatSymbol(this.score, selection, obj);\r\n const altSel = this._getEquivalentSelection(selection);\r\n SmoOperation.setRepeatSymbol(this.storeScore, altSel!, altObj);\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * toggle rehearsal mark on first selected measure\r\n * @returns\r\n */\r\n async toggleRehearsalMark(): Promise {\r\n const selection = this.tracker.getExtremeSelection(-1);\r\n const altSelection = this._getEquivalentSelection(selection);\r\n const cmd = selection.measure.getRehearsalMark() ? 'removeRehearsalMark' : 'addRehearsalMark';\r\n SmoOperation[cmd](this.score, selection, new SmoRehearsalMark(SmoRehearsalMark.defaults));\r\n SmoOperation[cmd](this.storeScore, altSelection!, new SmoRehearsalMark(SmoRehearsalMark.defaults));\r\n this._renderChangedMeasures([selection]);\r\n return this.renderer.updatePromise();\r\n }\r\n _removeStaffModifier(modifier: StaffModifierBase) {\r\n this.score.staves[modifier.associatedStaff].removeStaffModifier(modifier);\r\n const altModifier = StaffModifierBase.deserialize(modifier.serialize());\r\n altModifier.attrs.id = modifier.attrs.id;\r\n altModifier.startSelector = this._getEquivalentSelector(altModifier.startSelector);\r\n altModifier.endSelector = this._getEquivalentSelector(altModifier.endSelector);\r\n this.storeScore.staves[this._getEquivalentStaff(modifier.associatedStaff)].removeStaffModifier(altModifier);\r\n }\r\n /**\r\n * Remove selected modifier\r\n * @param modifier slur, hairpin, etc.\r\n * @returns \r\n */\r\n async removeStaffModifier(modifier: StaffModifierBase): Promise {\r\n this.undoStaffModifier('Set measure proportion', modifier,\r\n UndoBuffer.bufferSubtypes.REMOVE);\r\n this._removeStaffModifier(modifier);\r\n this._renderRectangle(modifier.startSelector, modifier.endSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Change a staff modifier\r\n * @param original original version\r\n * @param modifier modified version\r\n * @returns \r\n */\r\n async addOrUpdateStaffModifier(original: StaffModifierBase, modifier: StaffModifierBase): Promise {\r\n if (!modifier) {\r\n if (original) {\r\n // Handle legacy API changed\r\n modifier = StaffModifierBase.deserialize(original);\r\n } else {\r\n console.warn('update modifier: bad modifier');\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n }\r\n const existing = this.score.staves[modifier.startSelector.staff]\r\n .getModifier(modifier);\r\n const subtype = existing === null ? UndoBuffer.bufferSubtypes.ADD :\r\n UndoBuffer.bufferSubtypes.UPDATE;\r\n this.undoStaffModifier('Set measure proportion', original,\r\n subtype);\r\n this._removeStaffModifier(modifier);\r\n const copy = StaffModifierBase.deserialize(modifier.serialize());\r\n copy.startSelector = this._getEquivalentSelector(copy.startSelector);\r\n copy.endSelector = this._getEquivalentSelector(copy.endSelector);\r\n const sel = SmoSelection.noteFromSelector(this.score, modifier.startSelector);\r\n if (sel !== null) {\r\n const altSel = this._getEquivalentSelection(sel);\r\n SmoOperation.addStaffModifier(sel, modifier);\r\n SmoOperation.addStaffModifier(altSel!, copy);\r\n const modId = 'mod-' + sel.selector.staff + '-' + sel.selector.measure;\r\n const context = this.renderer.renderer.getRenderer(sel.measure.svg.logicalBox);\r\n if (context) {\r\n SvgHelpers.removeElementsByClass(context.svg, modId);\r\n }\r\n }\r\n this._renderRectangle(modifier.startSelector, modifier.endSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n lineOperation(op: createStaffModifierType) {\r\n // if (this.tracker.selections.length < 2) {\r\n // return;\r\n // }\r\n const measureSelections = this.undoTrackerMeasureSelections('create staff modifier');\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const ftAlt = this._getEquivalentSelection(ft);\r\n const ttAlt = this._getEquivalentSelection(tt);\r\n const modifier = op(ft, tt);\r\n const altModifier = op(ftAlt!, ttAlt!);\r\n altModifier.attrs.id = modifier.attrs.id;\r\n ft.staff.addStaffModifier(modifier);\r\n ftAlt?.staff.addStaffModifier(altModifier);\r\n this.undoStaffModifier('add ' + op, modifier, UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(measureSelections);\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n async crescendo(): Promise {\r\n this.lineOperation(SmoOperation.createCrescendo);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n async crescendoBracket(): Promise {\r\n this.lineOperation(SmoOperation.createCrescendoBracket);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n async dimenuendo(): Promise {\r\n this.lineOperation(SmoOperation.createDimenuendoBracket);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n async accelerando(): Promise {\r\n this.lineOperation(SmoOperation.createAccelerandoBracket);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Add crescendo to selection\r\n */\r\n async ritard(): Promise {\r\n this.lineOperation(SmoOperation.createRitardBracket);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * diminuendo hairpin\r\n * @returns \r\n */\r\n async decrescendo(): Promise {\r\n this.lineOperation(SmoOperation.createDecrescendo);\r\n return this.renderer.updatePromise();\r\n }\r\n async removeTextBracket(bracket: SmoStaffTextBracket): Promise {\r\n return this.removeStaffModifier(bracket);\r\n }\r\n async addOrReplaceStaffModifier(callback: updateStaffModifierFunc, modifier: StaffModifierBase): Promise {\r\n const from1 = SmoSelection.noteFromSelector(this.score, modifier.startSelector);\r\n const to1 = SmoSelection.noteFromSelector(this.score, modifier.endSelector);\r\n if (from1 === null || to1 === null) {\r\n return;\r\n }\r\n const altFrom = this._getEquivalentSelection(from1);\r\n const altTo = this._getEquivalentSelection(to1);\r\n if (altFrom === null || altTo === null) {\r\n return;\r\n }\r\n callback(this.score, from1, to1);\r\n callback(this.storeScore, altFrom, altTo);\r\n const redraw = SmoSelection.getMeasuresBetween(this.score, from1.selector, to1.selector);\r\n this.undoStaffModifier('add repl text bracket', modifier, UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(redraw);\r\n return this.renderer.updatePromise();\r\n }\r\n async addOrReplaceTextBracket(modifier: SmoStaffTextBracket) {\r\n const from1 = SmoSelection.noteFromSelector(this.score, modifier.startSelector);\r\n const to1 = SmoSelection.noteFromSelector(this.score, modifier.endSelector);\r\n if (from1 === null || to1 === null) {\r\n return;\r\n }\r\n const altFrom = this._getEquivalentSelection(from1);\r\n const altTo = this._getEquivalentSelection(to1);\r\n if (altFrom === null || altTo === null) {\r\n return;\r\n }\r\n SmoOperation.addOrReplaceBracket(modifier, from1, to1);\r\n SmoOperation.addOrReplaceBracket(modifier, altFrom, altTo);\r\n const redraw = SmoSelection.getMeasuresBetween(this.score, from1.selector, to1.selector);\r\n this.undoStaffModifier('add repl text bracket', modifier, UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(redraw);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Slur selected notes\r\n * @returns\r\n */\r\n async addSlur(): Promise {\r\n const measureSelections = SmoSelection.getMeasureList(this.tracker.selections);\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const ftAlt = this._getEquivalentSelection(ft);\r\n const ttAlt = this._getEquivalentSelection(tt);\r\n const modifier = SmoOperation.createSlur(this.score, ft, tt);\r\n ft.staff.addStaffModifier(modifier);\r\n // make sure score and backup have same ID for undo.\r\n const altModifier = SmoOperation.createSlur(this.storeScore, ftAlt!, ttAlt!);\r\n altModifier.attrs.id = modifier.attrs.id;\r\n ftAlt?.staff.addStaffModifier(altModifier);\r\n this.undoStaffModifier('add slur', modifier, UndoBuffer.bufferSubtypes.ADD);\r\n this._renderChangedMeasures(measureSelections);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * tie selected notes\r\n * @returns \r\n */\r\n async tie(): Promise {\r\n this.lineOperation(SmoOperation.createTie);\r\n return this.renderer.updatePromise();\r\n }\r\n async updateZoom(zoomFactor: number): Promise {\r\n const original = this.score.layoutManager!.getGlobalLayout();\r\n original.zoomScale = zoomFactor;\r\n this.score.layoutManager!.globalLayout.zoomScale = zoomFactor;\r\n this.renderer.pageMap.updateZoom(zoomFactor);\r\n this.renderer.pageMap.updateContainerOffset(this.scroller.scrollState);\r\n }\r\n /**\r\n * set global page for score, zoom etc.\r\n * @param layout global SVG settings\r\n * @returns \r\n */\r\n async setGlobalLayout(layout: SmoGlobalLayout): Promise {\r\n this._undoScore('Set Global Layout');\r\n const original = this.score.layoutManager!.getGlobalLayout().svgScale;\r\n this.score.layoutManager!.updateGlobalLayout(layout);\r\n this.score.scaleTextGroups(original / layout.svgScale);\r\n this.storeScore.layoutManager!.updateGlobalLayout(layout);\r\n this.renderer.rerenderAll();\r\n return this.renderer.preserveScroll();\r\n }\r\n /**\r\n * Set the layout of a single page\r\n * @param layout page layout\r\n * @param pageIndex which page to change\r\n * @returns \r\n */\r\n async setPageLayout(layout: SmoPageLayout, pageIndex: number) {\r\n this.score.layoutManager!.updatePage(layout, pageIndex);\r\n this.storeScore.layoutManager!.updatePage(layout, pageIndex);\r\n // If we are in part mode, save the page layout in the part so it is there next time\r\n // the part is exposed.\r\n if (this.isPartExposed()) {\r\n this.score.staves.forEach((staff, staffIx) => {\r\n staff.partInfo.layoutManager.updatePage(layout, pageIndex);\r\n const altStaff = this.storeScore.staves[this.staffMap[staffIx]];\r\n altStaff.partInfo.layoutManager.updatePage(layout, pageIndex);\r\n });\r\n }\r\n await this.refreshViewport();\r\n }\r\n async setPageLayouts(layout: SmoPageLayout, startIndex: number, endIndex: number) {\r\n this._undoScore('Set Page Layout');\r\n let i = 0;\r\n for (i = startIndex; i <= endIndex; ++i) {\r\n this.setPageLayout(layout, i);\r\n }\r\n this.renderer.rerenderAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update the music font\r\n * @param family \r\n * @returns \r\n */\r\n async setEngravingFontFamily(family: engravingFontType): Promise {\r\n this.score.engravingFont = family;\r\n this.storeScore.engravingFont = family;\r\n this.renderer.notifyFontChange(); \r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Upate global font used for chord changes\r\n * @param fontInfo\r\n * @returns \r\n */\r\n async setChordFont(fontInfo: FontInfo): Promise {\r\n this._undoScore('Set Chord Font');\r\n this.score.setChordFont(fontInfo);\r\n this.storeScore.setChordFont(fontInfo);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update font used for lyrics\r\n * @param fontInfo \r\n * @returns \r\n */\r\n async setLyricFont(fontInfo: FontInfo): Promise {\r\n this._undoScore('Set Lyric Font');\r\n this.score.setLyricFont(fontInfo);\r\n this.storeScore.setLyricFont(fontInfo);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * @param value if false, lyric widths don't affect measure width\r\n * @returns \r\n */\r\n async setLyricAdjustWidth(value: boolean): Promise {\r\n this._undoScore('Set Lyric Adj Width');\r\n this.score.setLyricAdjustWidth(value);\r\n this.storeScore.setLyricAdjustWidth(value);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * delete selected measures\r\n * @returns \r\n */\r\n async deleteMeasure(): Promise {\r\n this._undoScore('Delete Measure');\r\n if (this.storeScore.staves[0].measures.length < 2) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const selections = SmoSelection.getMeasureList(this.tracker.selections);\r\n // THe measures get renumbered, so keep the index at 0\r\n const index = selections[0].selector.measure;\r\n for (var i = 0; i < selections.length; ++i) {\r\n // Unrender the deleted measure\r\n this.score.staves.forEach((staff) => {\r\n this.tracker.clearMeasureMap(staff.measures[index]);\r\n this.renderer.unrenderMeasure(staff.measures[index]);\r\n this.renderer.unrenderMeasure(staff.measures[staff.measures.length - 1]);\r\n // A little hacky - delete the modifiers if they start or end on\r\n // the measure\r\n staff.renderableModifiers.forEach((modifier) => {\r\n if (modifier.startSelector.measure === index || modifier.endSelector.measure === index) {\r\n if (modifier.logicalBox) {\r\n const context = this.renderer.renderer.getRenderer(modifier.logicalBox);\r\n if (context) {\r\n $(context.svg).find('g.' + modifier.attrs.id).remove();\r\n }\r\n }\r\n }\r\n });\r\n });\r\n // Remove the SVG artifacts mapped to this measure.\r\n this.score.deleteMeasure(index);\r\n this.storeScore.deleteMeasure(index);\r\n // Note: index doesn't increment since there are now 1 fewer measures\r\n };\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * add number of measures, with default notes selections\r\n * @param append \r\n * @param numberToAdd \r\n * @returns \r\n */\r\n async addMeasures(append: boolean, numberToAdd: number): Promise {\r\n let pos = 0;\r\n let ix = 0;\r\n this._undoScore('Add Measure');\r\n for (ix = 0; ix < numberToAdd; ++ix) {\r\n const measure = this.tracker.getFirstMeasureOfSelection();\r\n if (measure) {\r\n const nmeasure = SmoMeasure.getDefaultMeasureWithNotes(measure);\r\n pos = measure.measureNumber.measureIndex;\r\n if (append) {\r\n pos += 1;\r\n }\r\n nmeasure.measureNumber.measureIndex = pos;\r\n nmeasure.setActiveVoice(0);\r\n this.score.addMeasure(pos);\r\n this.storeScore.addMeasure(pos);\r\n }\r\n }\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * add a single measure before or after selection\r\n * @param append \r\n * @returns \r\n */\r\n async addMeasure(append: boolean): Promise {\r\n this._undoScore('Add Measure');\r\n let pos = 0;\r\n const measure = this.tracker.getFirstMeasureOfSelection();\r\n if (!measure) {\r\n return;\r\n }\r\n const nmeasure = SmoMeasure.getDefaultMeasureWithNotes(measure);\r\n pos = measure.measureNumber.measureIndex;\r\n if (append) {\r\n pos += 1;\r\n }\r\n nmeasure.measureNumber.measureIndex = pos;\r\n nmeasure.setActiveVoice(0);\r\n this.score.addMeasure(pos);\r\n this.storeScore.addMeasure(pos);\r\n this.renderer.clearLine(measure);\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * remove an entire line of music\r\n * @returns\r\n */\r\n async removeStaff(): Promise {\r\n this._undoScore('Remove Instrument');\r\n if (this.storeScore.staves.length < 2 || this.score.staves.length < 2) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n // if we are looking at a subset of the score,\r\n // revert to the full score view before removing the staff.\r\n const sel = this.tracker.selections[0];\r\n const scoreSel = this._getEquivalentSelection(sel);\r\n const staffIndex = scoreSel!.selector.staff;\r\n SmoOperation.removeStaff(this.storeScore, staffIndex);\r\n this.viewAll();\r\n this.renderer.setRefresh();\r\n return this.renderer.updatePromise();\r\n }\r\n async addStaff(instrument: SmoSystemStaffParams): Promise {\r\n this._undoScore('Add Instrument');\r\n // if we are looking at a subset of the score, we won't see the new staff. So\r\n // revert to the full view\r\n const staff = SmoOperation.addStaff(this.storeScore, instrument);\r\n const instKeys = Object.keys(staff.measureInstrumentMap);\r\n // update the key signatures for the new part\r\n instKeys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n const inst = staff.measureInstrumentMap[numKey];\r\n const selections = SmoSelection.innerSelections(this.storeScore, inst.startSelector, inst.endSelector);\r\n SmoOperation.changeInstrument(inst, selections);\r\n })\r\n if (instrument.staffId > 0) {\r\n const selection = SmoSelection.measureSelection(this.storeScore, instrument.staffId - 1, 0);\r\n const sel = SmoSelector.default;\r\n sel.staff = instrument.staffId - 1;\r\n if (selection) {\r\n let grp = this.storeScore.getSystemGroupForStaff(selection);\r\n if (grp) {\r\n grp.endSelector.staff = instrument.staffId;\r\n } else {\r\n let grp = new SmoSystemGroup(SmoSystemGroup.defaults);\r\n grp.startSelector.staff = instrument.staffId - 1;\r\n grp.endSelector.staff = instrument.staffId;\r\n this.storeScore.systemGroups.push(grp);\r\n }\r\n }\r\n }\r\n this.viewAll();\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Update part info assumes that the part is currently exposed - that\r\n * staff 0 is the first staff in the part prior to editing.\r\n * @param info\r\n */\r\n async updatePartInfo(info: SmoPartInfo): Promise {\r\n let i: number = 0;\r\n this._undoScore('Update part info');\r\n const storeStaff = this.staffMap[0] - info.stavesBefore;\r\n const partLength = info.stavesBefore + info.stavesAfter + 1;\r\n const resetView = !SmoLayoutManager.areLayoutsEqual(info.layoutManager.getGlobalLayout(), this.score.layoutManager!.getGlobalLayout());\r\n const restChange = this.score.staves[0].partInfo.expandMultimeasureRests != info.expandMultimeasureRests;\r\n const stavesChange = this.score.staves[0].partInfo.stavesAfter !== info.stavesAfter;\r\n for (i = 0; i < partLength; ++i) {\r\n const nStaffIndex = storeStaff + i;\r\n const nInfo = new SmoPartInfo(info);\r\n nInfo.stavesBefore = i;\r\n nInfo.stavesAfter = partLength - i - 1;\r\n this.storeScore.staves[nStaffIndex].partInfo = nInfo;\r\n // If the staff index is currently displayed, \r\n const displayedIndex = this.staffMap.findIndex((x) => x === nStaffIndex);\r\n if (displayedIndex >= 0) {\r\n this.score.staves[displayedIndex].partInfo = new SmoPartInfo(nInfo);\r\n this.score.layoutManager = nInfo.layoutManager;\r\n }\r\n }\r\n if (resetView || restChange || stavesChange) {\r\n SmoOperation.computeMultipartRest(this.score);\r\n // this.resetPartView();\r\n this.renderer.rerenderAll()\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * A simpler API for applications to add a new staff to the score.\r\n * @param params - the instrument, which determines clef, etc.\r\n * @returns \r\n */\r\n async addStaffSimple(params: Partial): Promise {\r\n const instrumentParams = SmoInstrument.defaults;\r\n instrumentParams.startSelector.staff = instrumentParams.endSelector.staff = this.score.staves.length;\r\n instrumentParams.clef = params.clef ?? instrumentParams.clef;\r\n\r\n const staffParams = SmoSystemStaff.defaults;\r\n staffParams.staffId = this.storeScore.staves.length; // add a staff\r\n staffParams.measureInstrumentMap[0] = new SmoInstrument(instrumentParams);\r\n this.addStaff(staffParams);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Save the score to local storage.\r\n */\r\n quickSave() {\r\n const scoreStr = JSON.stringify(this.storeScore.serialize());\r\n localStorage.setItem(smoSerialize.localScore, scoreStr);\r\n }\r\n updateRepeatCount(count: number) {\r\n const measureSelections = this.undoTrackerMeasureSelections('repeat bar');\r\n const symbol = count > 0 ? true : false; \r\n measureSelections.forEach((ms) => {\r\n const store = this._getEquivalentSelection(ms);\r\n ms.measure.repeatCount = count;\r\n ms.measure.repeatSymbol = symbol;\r\n if (store) {\r\n store.measure.repeatCount = count;\r\n store.measure.repeatSymbol = symbol;\r\n }\r\n });\r\n this._renderChangedMeasures(measureSelections);\r\n return this.updatePromise();\r\n }\r\n /**\r\n * Update the measure formatting parameters for the current selection\r\n * @param format generic measure formatting parameters\r\n * @returns \r\n */\r\n setMeasureFormat(format: SmoMeasureFormat): Promise {\r\n const label = 'set measure format';\r\n const fromSelector = this.tracker.getExtremeSelection(-1).selector;\r\n const toSelector = this.tracker.getExtremeSelection(1).selector;\r\n const measureSelections = this.tracker.getSelectedMeasures();\r\n // If the formatting is on a part, preserve it in the part's info\r\n const isPart = this.isPartExposed();\r\n measureSelections.forEach((m) => {\r\n this._undoColumn(label, m.selector.measure);\r\n SmoOperation.setMeasureFormat(this.score, m, format);\r\n if (isPart) {\r\n m.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n const alt = this._getEquivalentSelection(m);\r\n SmoOperation.setMeasureFormat(this.storeScore, alt!, format);\r\n if (isPart) {\r\n alt!.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n });\r\n this._renderRectangle(fromSelector, toSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Remove system breaks from the measure formatting for selected measures\r\n * @returns \r\n */\r\n removeSystemBreaks(): Promise {\r\n const label = 'set measure format';\r\n const fromSelector = this.tracker.getExtremeSelection(-1).selector;\r\n const toSelector = this.tracker.getExtremeSelection(1).selector;\r\n const measureSelections = this.tracker.getSelectedMeasures();\r\n // If the formatting is on a part, preserve it in the part's info\r\n const isPart = this.isPartExposed();\r\n measureSelections.forEach((m) => {\r\n this._undoColumn(label, m.selector.measure);\r\n const format = new SmoMeasureFormat(m.measure.format);\r\n format.systemBreak = false;\r\n SmoOperation.setMeasureFormat(this.score, m, format);\r\n if (isPart) {\r\n m.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n const alt = this._getEquivalentSelection(m);\r\n SmoOperation.setMeasureFormat(this.storeScore, alt!, format);\r\n if (isPart) {\r\n alt!.staff.partInfo.measureFormatting[m.measure.measureNumber.measureIndex] = new SmoMeasureFormat(format);\r\n }\r\n });\r\n this._renderRectangle(fromSelector, toSelector);\r\n return this.renderer.updatePromise();\r\n }\r\n renumberMeasures(measureIndex: number, localIndex: number) {\r\n this.score.updateRenumberingMap(measureIndex, localIndex);\r\n this.storeScore.updateRenumberingMap(measureIndex, localIndex);\r\n const mmsel = SmoSelection.measureSelection(this.score, 0, measureIndex);\r\n if (mmsel) {\r\n this._renderChangedMeasures([mmsel]);\r\n }\r\n return this.renderer.updatePromise();\r\n }\r\n /**\r\n * Play the music from the starting selection\r\n * @returns \r\n */\r\n playFromSelection(): void {\r\n var mm = this.tracker.getExtremeSelection(-1);\r\n if (SuiAudioPlayer.playingInstance && SuiAudioPlayer.playingInstance.paused) {\r\n SuiAudioPlayer.playingInstance.play();\r\n return;\r\n }\r\n if (SuiAudioPlayer.playing) {\r\n return;\r\n }\r\n new SuiAudioPlayer({ audioAnimation: this.audioAnimation, score: this.score, startIndex: mm.selector.measure, view: this }).play();\r\n }\r\n stopPlayer() {\r\n SuiAudioPlayer.stopPlayer();\r\n }\r\n pausePlayer() {\r\n SuiAudioPlayer.pausePlayer();\r\n }\r\n\r\n /**\r\n * Proxy calls to move the tracker parameters according to the\r\n * rules of the 'Home' key (depending on shift/ctrl/alt)\r\n * @param ev \r\n * @returns \r\n */\r\n async moveHome(ev: KeyEvent): Promise {\r\n this.tracker.moveHome(this.score, ev);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Proxy calls to move the tracker parameters according to the\r\n * rules of the 'End' key (depending on shift/ctrl/alt)\r\n * @param ev \r\n * @returns \r\n */\r\n async moveEnd(ev: KeyEvent): Promise {\r\n this.tracker.moveEnd(this.score, ev);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Grow the current selection by one to the left, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n async growSelectionLeft(): Promise {\r\n this.tracker.growSelectionLeft();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Grow the current selection by one to the right, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n async growSelectionRight(): Promise {\r\n this.tracker.growSelectionRight();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Select the next tabbable modifier near one of the selected notes\r\n * @param keyEv \r\n * @returns \r\n */\r\n async advanceModifierSelection(keyEv: KeyEvent): Promise {\r\n this.tracker.advanceModifierSelection(this.score, keyEv);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Select the next entire measure, if possible\r\n * @returns \r\n */\r\n async growSelectionRightMeasure(): Promise {\r\n this.tracker.growSelectionRightMeasure();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor forwards, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n async moveSelectionRight(ev: KeyEvent): Promise {\r\n this.tracker.moveSelectionRight(this.score, ev, true);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor backwards, if possible\r\n * @param ev \r\n * @returns \r\n */\r\n async moveSelectionLeft(): Promise {\r\n this.tracker.moveSelectionLeft();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor back entire measure, if possible\r\n * @returns \r\n */\r\n async moveSelectionLeftMeasure(): Promise {\r\n this.tracker.moveSelectionLeftMeasure();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Advance cursor forward one measure, if possible\r\n * @returns \r\n */\r\n async moveSelectionRightMeasure(): Promise {\r\n this.tracker.moveSelectionRightMeasure();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor to a higher pitch in the current chord, with wrap\r\n * @returns \r\n */\r\n async moveSelectionPitchUp(): Promise {\r\n this.tracker.moveSelectionPitchUp();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor to a lower pitch in the current chord, with wrap\r\n */\r\n async moveSelectionPitchDown(): Promise {\r\n this.tracker.moveSelectionPitchDown();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor up a staff in the system, if possible\r\n * @returns \r\n */\r\n async moveSelectionUp(): Promise {\r\n this.tracker.moveSelectionUp();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Move cursor down a staff in the system, if possible\r\n * @returns \r\n */\r\n async moveSelectionDown(): Promise {\r\n this.tracker.moveSelectionDown();\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Set the current suggestions (hover element) as the selection\r\n * @returns \r\n */\r\n async selectSuggestion(evData: KeyEvent): Promise {\r\n this.tracker.selectSuggestion(this.score, evData);\r\n await this.renderer.updatePromise();\r\n }\r\n /**\r\n * Find an element at the given box, and make it the current selection\r\n * */\r\n async intersectingArtifact(evData: SvgBox): Promise {\r\n this.tracker.intersectingArtifact(evData);\r\n await this.renderer.updatePromise();\r\n } \r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from './svgHelpers';\r\nimport { SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { layoutDebug } from './layoutDebug';\r\ndeclare var $: any;\r\n\r\n/**\r\n * Respond to scroll events in music DOM, and handle the scroll of the viewport\r\n * @category SuiRender\r\n */\r\nexport class SuiScroller {\r\n selector: HTMLElement;\r\n svgPages: SvgPageMap;\r\n _scroll: SvgPoint;\r\n _offsetInitial: SvgPoint;\r\n viewport: SvgBox = SvgBox.default;\r\n logicalViewport: SvgBox = SvgBox.default;\r\n scrolling: boolean = false;\r\n // ### constructor\r\n // selector is the scrollable DOM container of the music container\r\n // (grandparent of svg element)\r\n constructor(selector: HTMLElement, svgPages: SvgPageMap) {\r\n const self = this;\r\n this.selector = selector;\r\n this._scroll = { x: 0, y: 0 };\r\n this.svgPages = svgPages;\r\n const scroller = $(selector);\r\n this._offsetInitial = { x: $(scroller).offset().left, y: $(scroller).offset().top };\r\n }\r\n\r\n get scrollState(): SvgPoint {\r\n return { x: this._scroll.x, y: this._scroll.y };\r\n }\r\n restoreScrollState(state: SvgPoint) {\r\n this.scrollOffset(state.x - this._scroll.x, state.y - this._scroll.y);\r\n this.deferUpdateDebug();\r\n }\r\n\r\n // ### handleScroll\r\n // update viewport in response to scroll events\r\n handleScroll(x: number, y: number) {\r\n this._scroll = { x, y };\r\n this.deferUpdateDebug();\r\n }\r\n updateDebug() {\r\n layoutDebug.updateScrollDebug(this._scroll);\r\n }\r\n deferUpdateDebug() {\r\n if (layoutDebug.mask & layoutDebug.values.scroll) {\r\n setTimeout(() => {\r\n this.updateDebug();\r\n }, 1);\r\n }\r\n }\r\n\r\n scrollAbsolute(x: number, y: number) {\r\n $(this.selector)[0].scrollLeft = x;\r\n $(this.selector)[0].scrollTop = y;\r\n this.netScroll.x = this._scroll.x = x;\r\n this.netScroll.y = this._scroll.y = y;\r\n this.deferUpdateDebug();\r\n }\r\n\r\n /**\r\n * Scroll such that the box is fully visible, if possible (if it is\r\n * not larger than the screen) \r\n **/\r\n scrollVisibleBox(box: SvgBox) {\r\n let yoff = 0;\r\n let xoff = 0;\r\n\r\n const screenBox = this.svgPages.svgToClientNoOffset(box);\r\n const scrollState = this.scrollState;\r\n const scrollDown = () => screenBox.y + screenBox.height > scrollState.y + this.viewport.height;\r\n const scrollUp = () => screenBox.y < scrollState.y;\r\n const scrollLeft = () => screenBox.x < scrollState.x;\r\n const scrollRight = () => screenBox.x + screenBox.width > scrollState.x + this.viewport.width;\r\n // Math: make sure we don't scroll down if scrollUp is indicated, etc.\r\n if (scrollUp()) {\r\n yoff = Math.min(screenBox.y - scrollState.y, 0);\r\n } \r\n if (scrollDown()) {\r\n yoff = Math.max(screenBox.y - (scrollState.y - screenBox.height), 0);\r\n }\r\n if (scrollLeft()) {\r\n xoff = Math.min(screenBox.x - scrollState.x, 0);\r\n }\r\n if (scrollRight()) {\r\n xoff = Math.max(screenBox.x - (scrollState.x - screenBox.height), 0);\r\n }\r\n this.scrollOffset(xoff, yoff);\r\n}\r\n // Update viewport size, and also fix height of scroll region.\r\n updateViewport() {\r\n $(this.selector).css('height', (window.innerHeight - $(this.selector).offset().top).toString() + 'px');\r\n this.viewport = SvgHelpers.boxPoints(\r\n $(this.selector).offset().left,\r\n $(this.selector).offset().top,\r\n $(this.selector).width(),\r\n $(this.selector).height());\r\n this.deferUpdateDebug();\r\n }\r\n\r\n // ### scrollBox\r\n // get the current viewport, in scrolled coordinates. When tracker maps the\r\n // music element to client coordinates, these are the coordinates used in the\r\n // map\r\n get scrollBox(): SvgBox {\r\n return SvgHelpers.boxPoints(this.viewport.x + this.netScroll.x,\r\n this.viewport.y + this.netScroll.y,\r\n this.viewport.width,\r\n this.viewport.height\r\n );\r\n }\r\n\r\n // ### scrollOffset\r\n // scroll the offset from the starting scroll point\r\n scrollOffset(x: number, y: number) {\r\n const xScreen = Math.max(this._scroll.x + x, 0);\r\n const yScreen = Math.max(this._scroll.y + y, 0);\r\n this.scrollAbsolute(xScreen, yScreen);\r\n }\r\n\r\n // ### netScroll\r\n // return the net amount we've scrolled, based on when the maps were make (initial)\r\n // , the offset of the container, and the absolute coordinates of the scrollbar.\r\n get netScroll() {\r\n var xoffset = $(this.selector).offset().left - this._offsetInitial.x;\r\n var yoffset = $(this.selector).offset().top - this._offsetInitial.y;\r\n return { x: this._scroll.x - xoffset, y: this._scroll.y - yoffset };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { Transposable, SvgBox, SvgPoint } from '../../smo/data/common';\r\nimport { SvgPage } from './svgPageMap';\r\n\r\ndeclare var $: any;\r\n\r\nexport interface StrokeInfo {\r\n strokeName: string,\r\n stroke: string,\r\n strokeWidth: string | number,\r\n strokeDasharray: string | number,\r\n fill: string,\r\n opacity: number\r\n}\r\n\r\nexport interface OutlineInfo {\r\n stroke: StrokeInfo,\r\n classes: string,\r\n box: SvgBox | SvgBox[],\r\n scroll: SvgPoint,\r\n context: SvgPage,\r\n timeOff: number,\r\n timer?: number,\r\n element?: SVGSVGElement\r\n}\r\n\r\nexport interface GradientInfo {\r\n color: string, offset: string, opacity: number\r\n}\r\n\r\nexport interface Boxable {\r\n box: SvgBox\r\n}\r\n\r\nexport class SvgBuilder {\r\n e: Element;\r\n constructor(el: string) {\r\n const ns = SvgHelpers.namespace;\r\n this.e = document.createElementNS(ns, el);\r\n }\r\n classes(cl: string): SvgBuilder {\r\n this.e.setAttributeNS('', 'class', cl);\r\n return this;\r\n }\r\n attr(name: string, value: string): SvgBuilder {\r\n this.e.setAttributeNS('', name, value);\r\n return this;\r\n }\r\n\r\n text(x: number | string, y: number | string, classes: string, text: string): SvgBuilder {\r\n x = typeof (x) == 'string' ? x : x.toString();\r\n y = typeof (y) == 'string' ? y : y.toString();\r\n this.e.setAttributeNS('', 'class', classes);\r\n this.e.setAttributeNS('', 'x', x);\r\n this.e.setAttributeNS('', 'y', y);\r\n this.e.textContent = text;\r\n return this;\r\n }\r\n rect(x: number | string, y: number | string, width: number | string, height: number | string, classes: string): SvgBuilder {\r\n x = typeof (x) == 'string' ? x : x.toString();\r\n y = typeof (y) == 'string' ? y : y.toString();\r\n width = typeof (width) == 'string' ? width : width.toString();\r\n height = typeof (height) == 'string' ? height : height.toString();\r\n this.e.setAttributeNS('', 'x', x);\r\n this.e.setAttributeNS('', 'y', y);\r\n this.e.setAttributeNS('', 'width', width);\r\n this.e.setAttributeNS('', 'height', height);\r\n if (classes) {\r\n this.e.setAttributeNS('', 'class', classes);\r\n }\r\n return this;\r\n }\r\n line(x1: number | string, y1: number | string, x2: number | string, y2: number | string, classes: string): SvgBuilder {\r\n x1 = typeof (x1) == 'string' ? x1 : x1.toString();\r\n y1 = typeof (y1) == 'string' ? y1 : y1.toString();\r\n x2 = typeof (x2) == 'string' ? x2 : x2.toString();\r\n y2 = typeof (y2) == 'string' ? y2 : y2.toString();\r\n\r\n this.e.setAttributeNS('', 'x1', x1);\r\n this.e.setAttributeNS('', 'y1', y1);\r\n this.e.setAttributeNS('', 'x2', x2);\r\n this.e.setAttributeNS('', 'y2', y2);\r\n if (classes) {\r\n this.e.setAttributeNS('', 'class', classes);\r\n }\r\n return this;\r\n }\r\n append(el: any): SvgBuilder {\r\n this.e.appendChild(el.e);\r\n return this;\r\n }\r\n dom(): Element {\r\n return this.e;\r\n }\r\n static b(element: string): SvgBuilder {\r\n return new SvgBuilder(element);\r\n }\r\n}\r\n// ## SvgHelpers\r\n// Mostly utilities for converting coordinate spaces based on transforms, etc.\r\n// ### static class methods:\r\n// ---\r\nexport class SvgHelpers {\r\n static get namespace(): string {\r\n return \"http://www.w3.org/2000/svg\";\r\n }\r\n\r\n // ### gradient\r\n // Create an svg linear gradient.\r\n // Stops look like this:\r\n // `[{color:\"#eee\", offset:\"0%\",opacity:0.5}]`\r\n // orientation is horizontal or vertical\r\n static gradient(svg: SVGSVGElement, id: string, orientation: string, stops: GradientInfo[]) {\r\n var ns = SvgHelpers.namespace;\r\n var x2 = orientation === 'vertical' ? 0 : 1;\r\n var y2 = orientation === 'vertical' ? 1 : 0;\r\n\r\n var e = document.createElementNS(ns, 'linearGradient');\r\n e.setAttributeNS('', 'id', id);\r\n e.setAttributeNS('', 'x1', '0');\r\n e.setAttributeNS('', 'x2', x2.toString());\r\n e.setAttributeNS('', 'y1', '0');\r\n e.setAttributeNS('', 'y2', y2.toString());\r\n stops.forEach((stop) => {\r\n var s = document.createElementNS(ns, 'stop');\r\n s.setAttributeNS('', 'stop-opacity', stop.opacity.toString());\r\n s.setAttributeNS('', 'stop-color', stop.color);\r\n s.setAttributeNS('', 'offset', stop.offset);\r\n e.appendChild(s);\r\n\r\n });\r\n svg.appendChild(e);\r\n }\r\n\r\n static renderCursor(svg: SVGSVGElement, x: number, y: number, height: number) {\r\n var ns = SvgHelpers.namespace;\r\n const width = height * 0.4;\r\n x = x - (width / 2);\r\n var mcmd = (d: string, x: number, y: number) => {\r\n return d + 'M ' + x.toString() + ' ' + y.toString() + ' ';\r\n };\r\n var qcmd = (d: string, x1: number, y1: number, x2: number, y2: number) => {\r\n return d + 'q ' + x1.toString() + ' ' + y1.toString() + ' ' + x2.toString() + ' ' + y2.toString() + ' ';\r\n };\r\n var lcmd = (d: string, x: number, y: number) => {\r\n return d + 'L ' + x.toString() + ' ' + y.toString() + ' ';\r\n };\r\n var x1 = (width / 2) * .333;\r\n var y1 = -1 * (x1 / 4);\r\n var x2 = (width / 2);\r\n var y2 = x2 / 4;\r\n var ns = SvgHelpers.namespace;\r\n var e = document.createElementNS(ns, 'path');\r\n var d = '';\r\n d = mcmd(d, x, y);\r\n d = qcmd(d, x1, y1, x2, y2);\r\n d = lcmd(d, x + (width / 2), y + height - (width / 8));\r\n d = mcmd(d, x + width, y);\r\n d = qcmd(d, -1 * x1, y1, -1 * x2, y2);\r\n d = mcmd(d, x, y + height);\r\n d = qcmd(d, x1, -1 * y1, x2, -1 * y2);\r\n d = mcmd(d, x + width, y + height);\r\n d = qcmd(d, -1 * x1, -1 * y1, -1 * x2, -1 * y2);\r\n e.setAttributeNS('', 'd', d);\r\n e.setAttributeNS('', 'stroke-width', '1');\r\n e.setAttributeNS('', 'stroke', '#555');\r\n e.setAttributeNS('', 'fill', 'none');\r\n svg.appendChild(e);\r\n }\r\n\r\n // ### boxNote\r\n // update the note geometry based on current viewbox conditions.\r\n // This may not be the appropriate place for this...maybe in layout\r\n static updateArtifactBox(context: SvgPage, element: SVGSVGElement | undefined, artifact: Transposable) {\r\n if (!element) {\r\n console.log('updateArtifactBox: undefined element!');\r\n return;\r\n }\r\n artifact.logicalBox = context.offsetBbox(element);\r\n }\r\n\r\n // ### eraseOutline\r\n // Erases old outlineRects.\r\n static eraseOutline(params: OutlineInfo) {\r\n // Hack: Assume a stroke style, should just take a stroke param.\r\n if (params.element) {\r\n params.element.remove();\r\n params.element = undefined;\r\n }\r\n }\r\n\r\n static outlineRect(params: OutlineInfo) {\r\n const context = params.context;\r\n if (params.element && params.timer) {\r\n clearTimeout(params.timer);\r\n params.timer = undefined;\r\n params.element.remove();\r\n params.element = undefined;\r\n }\r\n if (params.timeOff) {\r\n params.timer = window.setTimeout(() => {\r\n if (params.element) {\r\n params.element.remove();\r\n params.element = undefined;\r\n params.timer = undefined;\r\n }\r\n }, params.timeOff);\r\n }\r\n // Don't highlight in print mode.\r\n if ($('body').hasClass('printing')) {\r\n return;\r\n }\r\n const classes = params.classes.length > 0 ? params.classes + ' ' + params.stroke.strokeName : params.stroke.strokeName;\r\n var grp = context.getContext().openGroup(classes, classes + '-outline');\r\n params.element = grp;\r\n const boxes = Array.isArray(params.box) ? params.box : [params.box];\r\n\r\n boxes.forEach((box: SvgBox) => {\r\n if (box) {\r\n var strokeObj:any = params.stroke;\r\n strokeObj['stroke-width'] = params.stroke.strokeWidth;\r\n var margin = 5;\r\n /* if (params.clientCoordinates === true) {\r\n box = SvgHelpers.smoBox(SvgHelpers.clientToLogical(context.svg, SvgHelpers.smoBox(SvgHelpers.adjustScroll(box, scroll))));\r\n } */\r\n context.getContext().rect(box.x - margin, box.y - margin, box.width + margin * 2, box.height + margin * 2, strokeObj);\r\n }\r\n });\r\n context.getContext().closeGroup(grp);\r\n }\r\n\r\n static setSvgStyle(element: Element, attrs: StrokeInfo) {\r\n element.setAttributeNS('', 'stroke', attrs.stroke);\r\n if (attrs.strokeDasharray) {\r\n element.setAttributeNS('', 'stroke-dasharray', attrs.strokeDasharray.toString());\r\n }\r\n if (attrs.strokeWidth) {\r\n element.setAttributeNS('', 'stroke-width', attrs.strokeWidth.toString());\r\n }\r\n if (attrs.fill) {\r\n element.setAttributeNS('', 'fill', attrs.fill);\r\n }\r\n }\r\n static rect(svg: Document, box: SvgBox, attrs: StrokeInfo, classes: string) {\r\n var rect = document.createElementNS(SvgHelpers.namespace, 'rect');\r\n SvgHelpers.setSvgStyle(rect, attrs);\r\n if (classes) {\r\n rect.setAttributeNS('', 'class', classes);\r\n }\r\n svg.appendChild(rect);\r\n return rect;\r\n }\r\n\r\n static line(svg: SVGSVGElement, x1: number | string, y1: number | string, x2: number | string, y2: number | string, attrs: StrokeInfo, classes: string) {\r\n var line = document.createElementNS(SvgHelpers.namespace, 'line');\r\n x1 = typeof (x1) == 'string' ? x1 : x1.toString();\r\n y1 = typeof (y1) == 'string' ? y1 : y1.toString();\r\n x2 = typeof (x2) == 'string' ? x2 : x2.toString();\r\n y2 = typeof (y2) == 'string' ? y2 : y2.toString();\r\n\r\n line.setAttributeNS('', 'x1', x1);\r\n line.setAttributeNS('', 'y1', y1);\r\n line.setAttributeNS('', 'x2', x2);\r\n line.setAttributeNS('', 'y2', y2);\r\n SvgHelpers.setSvgStyle(line, attrs);\r\n if (classes) {\r\n line.setAttributeNS('', 'class', classes);\r\n }\r\n svg.appendChild(line);\r\n }\r\n\r\n static arrowDown(svg: SVGSVGElement, box: SvgBox) {\r\n const arrowStroke: StrokeInfo = { strokeName: 'arrow-stroke', stroke: '#321', strokeWidth: '2', strokeDasharray: '4,1', fill: 'none', opacity: 1.0 };\r\n SvgHelpers.line(svg, box.x + box.width / 2, box.y, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n var arrowY = box.y + box.height / 4;\r\n SvgHelpers.line(svg, box.x, arrowY, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n SvgHelpers.line(svg, box.x + box.width, arrowY, box.x + box.width / 2, box.y + box.height, arrowStroke, '');\r\n }\r\n static debugBox(svg: SVGSVGElement, box: SvgBox | null, classes: string, voffset: number) {\r\n voffset = voffset ?? 0;\r\n classes = classes ?? '';\r\n if (!box)\r\n return;\r\n classes += ' svg-debug-box';\r\n var b = SvgBuilder.b;\r\n var mid = box.x + box.width / 2;\r\n var xtext = 'x1: ' + Math.round(box.x);\r\n var wtext = 'x2: ' + Math.round(box.width + box.x);\r\n var ytext = 'y1: ' + Math.round(box.y);\r\n var htext = 'y2: ' + Math.round(box.height + box.y);\r\n var ytextp = Math.round(box.y + box.height);\r\n var ytextp2 = Math.round(box.y + box.height - 30);\r\n\r\n var r = b('g').classes(classes)\r\n .append(\r\n b('text').text(box.x + 20, box.y - 14 + voffset, 'svg-debug-text', xtext))\r\n .append(\r\n b('text').text(mid - 20, box.y - 14 + voffset, 'svg-debug-text', wtext))\r\n .append(\r\n b('line').line(box.x, box.y - 2, box.x + box.width, box.y - 2, ''))\r\n .append(\r\n b('line').line(box.x, box.y - 8, box.x, box.y + 5, ''))\r\n .append(\r\n b('line').line(box.x + box.width, box.y - 8, box.x + box.width, box.y + 5, ''))\r\n .append(\r\n b('text').text(Math.round(box.x - 14 + voffset), ytextp, 'svg-vdebug-text', ytext)\r\n .attr('transform', 'rotate(-90,' + Math.round(box.x - 14 + voffset) + ',' + ytextp + ')'));\r\n if (box.height > 2) {\r\n r.append(\r\n b('text').text(Math.round(box.x - 14 + voffset), ytextp2, 'svg-vdebug-text', htext)\r\n .attr('transform', 'rotate(-90,' + Math.round(box.x - 14 + voffset) + ',' + (ytextp2) + ')'))\r\n .append(\r\n b('line').line(Math.round(box.x - 2), Math.round(box.y + box.height), box.x - 2, box.y, ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y + box.height), box.x + 6, Math.round(box.y + box.height), ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y), Math.round(box.x + 6), Math.round(box.y),''));\r\n }\r\n svg.appendChild(r.dom());\r\n }\r\n static debugBoxNoText(svg: SVGSVGElement, box: SvgBox | null, classes: string, voffset: number) {\r\n voffset = voffset ?? 0;\r\n classes = classes ?? '';\r\n if (!box)\r\n return;\r\n classes += ' svg-debug-box';\r\n var b = SvgBuilder.b;\r\n var r = b('g').classes(classes)\r\n .append(\r\n b('line').line(box.x, box.y - 2, box.x + box.width, box.y - 2, ''))\r\n .append(\r\n b('line').line(box.x, box.y - 8, box.x, box.y + 5, ''))\r\n .append(\r\n b('line').line(box.x + box.width, box.y - 8, box.x + box.width, box.y + 5, ''));\r\n if (box.height > 2) {\r\n r.append(\r\n b('line').line(Math.round(box.x - 2), Math.round(box.y + box.height), box.x - 2, box.y, ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y + box.height), box.x + 6, Math.round(box.y + box.height), ''))\r\n .append(\r\n b('line').line(Math.round(box.x - 8), Math.round(box.y), Math.round(box.x + 6), Math.round(box.y),''));\r\n }\r\n svg.appendChild(r.dom());\r\n }\r\n\r\n static placeSvgText(svg: SVGSVGElement, attributes: Record[], classes: string, text: string): SVGSVGElement {\r\n var ns = SvgHelpers.namespace;\r\n var e = document.createElementNS(ns, 'text');\r\n attributes.forEach((attr) => {\r\n var key: string = Object.keys(attr)[0];\r\n e.setAttributeNS('', key, attr[key].toString());\r\n })\r\n if (classes) {\r\n e.setAttributeNS('', 'class', classes);\r\n }\r\n var tn = document.createTextNode(text);\r\n e.appendChild(tn);\r\n svg.appendChild(e);\r\n return (e as any);\r\n }\r\n static doesBox1ContainBox2(box1?: SvgBox, box2?: SvgBox): boolean {\r\n if (!box1 || !box2) {\r\n return false;\r\n }\r\n const i1 = box2.x - box1.x;\r\n const i2 = box2.y - box1.y;\r\n return (i1 > 0 && i1 < box1.width && i2 > 0 && i2 < box1.height);\r\n }\r\n\r\n // ### findIntersectionArtifact\r\n // find all object that intersect with the rectangle\r\n static findIntersectingArtifact(clientBox: SvgBox, objects: Boxable[]): Boxable[] {\r\n var box = SvgHelpers.smoBox(clientBox); //svgHelpers.untransformSvgPoint(this.context.svg,clientBox);\r\n\r\n // box.y = box.y - this.renderElement.offsetTop;\r\n // box.x = box.x - this.renderElement.offsetLeft;\r\n var rv: Boxable[] = [];\r\n objects.forEach((object) => {\r\n // Measure has been updated, but not drawn.\r\n if (!object.box) {\r\n // console.log('there is no box');\r\n } else {\r\n var obox = SvgHelpers.smoBox(object.box);\r\n if (SvgHelpers.doesBox1ContainBox2(obox, box)) {\r\n rv.push(object);\r\n }\r\n }\r\n });\r\n\r\n return rv;\r\n }\r\n\r\n static findSmallestIntersection(clientBox: SvgBox, objects: Boxable[]) {\r\n var ar = SvgHelpers.findIntersectingArtifact(clientBox, objects);\r\n if (!ar.length) {\r\n return null;\r\n }\r\n var rv = ar[0];\r\n var min = ar[0].box.width * ar[0].box.height;\r\n ar.forEach((obj) => {\r\n var tst = obj.box.width * obj.box.height;\r\n if (tst < min) {\r\n rv = obj;\r\n min = tst;\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n static translateElement(g: SVGSVGElement, x: number | string, y: number | string) {\r\n g.setAttributeNS('', 'transform', 'translate(' + x + ' ' + y + ')');\r\n }\r\n\r\n static stringify(box: SvgBox): string {\r\n if (box['width']) {\r\n\r\n return JSON.stringify({\r\n x: box.x,\r\n y: box.y,\r\n width: box.width,\r\n height: box.height\r\n }, null, ' ');\r\n } else {\r\n return JSON.stringify({\r\n x: box.x,\r\n y: box.y\r\n }, null, ' ');\r\n }\r\n }\r\n\r\n static log(box: SvgBox) {\r\n if (box['width']) {\r\n console.log(JSON.stringify({\r\n x: box.x,\r\n y: box.y,\r\n width: box.width,\r\n height: box.height\r\n }, null, ' '));\r\n } else {\r\n console.log('{}');\r\n }\r\n }\r\n\r\n // ### smoBox:\r\n // return a simple box object that can be serialized, copied\r\n // (from svg DOM box)\r\n static smoBox(box: any) {\r\n if (typeof (box) === \"undefined\" || box === null) {\r\n return SvgBox.default;\r\n }\r\n let testBox = box;\r\n if (Array.isArray(box)) {\r\n testBox = box[0];\r\n }\r\n const hround = (f: number): number => {\r\n return Math.round((f + Number.EPSILON) * 100) / 100;\r\n }\r\n const x = typeof (testBox.x) == 'undefined' ? hround(testBox.left) : hround(testBox.x);\r\n const y = typeof (testBox.y) == 'undefined' ? hround(testBox.top) : hround(testBox.y);\r\n return ({\r\n x: hround(x),\r\n y: hround(y),\r\n width: hround(testBox.width),\r\n height: hround(testBox.height)\r\n });\r\n }\r\n // ### unionRect\r\n // grow the bounding box two objects to include both.\r\n static unionRect(b1: SvgBox, b2: SvgBox): SvgBox {\r\n const x = Math.min(b1.x, b2.x);\r\n const y = Math.min(b1.y, b2.y);\r\n const width = Math.max(b1.x + b1.width, b2.x + b2.width) - x;\r\n const height = Math.max(b1.y + b1.height, b2.y + b2.height) - y;\r\n return {\r\n x: x,\r\n y: y,\r\n width: width,\r\n height: height\r\n };\r\n }\r\n\r\n static boxPoints(x: number, y: number, w: number, h: number): SvgBox {\r\n return ({\r\n x: x,\r\n y: y,\r\n width: w,\r\n height: h\r\n });\r\n }\r\n\r\n // ### svgViewport\r\n // set `svg` element to `width`,`height` and viewport `scale`\r\n static svgViewport(svg: SVGSVGElement, xOffset: number, yOffset: Number, width: number, height: number, scale: number) {\r\n svg.setAttributeNS('', 'width', '' + width);\r\n svg.setAttributeNS('', 'height', '' + height);\r\n svg.setAttributeNS('', 'viewBox', '' + xOffset + ' ' + yOffset + ' ' + Math.round(width / scale) + ' ' +\r\n Math.round(height / scale));\r\n }\r\n static removeElementsByClass(svg: SVGSVGElement, className: string) {\r\n const els = svg.getElementsByClassName(className);\r\n const ellength = els.length\r\n for (var xxx = 0; xxx < ellength; ++xxx) {\r\n els[0].remove();\r\n }\r\n }\r\n}\r\n","import { SvgHelpers, StrokeInfo } from \"./svgHelpers\";\r\nimport { SvgPoint, SvgBox, Renderable } from '../../smo/data/common';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { SmoGlobalLayout, SmoPageLayout } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { ModifierTab } from '../../smo/xform/selections';\r\nimport { VexFlow } from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\n/**\r\n * classes for managing the SVG containers where the music is rendered. Each\r\n * page is a different SVG element. Screen coordinates need to be mapped to the\r\n * correct page and then to the correct element on that page.\r\n * @module /render/sui/svgPageMap\r\n */\r\ndeclare var $: any;\r\n/**\r\n * A selection map maps a sub-section of music (a measure, for instance) to a region\r\n * on the screen. SelectionMap can contain other SelectionMaps with\r\n * different 'T', for instance, notes in a measure, in a 'Russian Dolls' kind of model.\r\n * This allows us to search for elements in < O(n) time and avoid\r\n * expensive geometry operations.\r\n */\r\nexport abstract class SelectionMap {\r\n /**\r\n * Create a key from the selection (selector). e.g. (1,1)\r\n * @param selection \r\n */\r\n abstract createKey(selection: SmoSelection): K;\r\n /**\r\n * get a set of coordinates from this selection, if it has been rendered.\r\n * @param selection \r\n */\r\n abstract boxFromSelection(selection: SmoSelection): SvgBox;\r\n /**\r\n * Add the selection to our map, and possibly to our child map.\r\n * @param key \r\n * @param selection \r\n */\r\n abstract addKeyToMap(key: K, selection: SmoSelection): void;\r\n /**\r\n * find a collection of selection that match a bounding box, possibly by\r\n * recursing through our child SelectionMaps.\r\n * @param value \r\n * @param box \r\n * @param rv \r\n */\r\n abstract findValueInMap(value: T, box: SvgBox): SmoSelection[];\r\n /**\r\n * the outer bounding box of these selections\r\n */\r\n box: SvgBox = SvgBox.default;\r\n /**\r\n * map of key to child SelectionMaps or SmoSelections\r\n */\r\n systemMap: Map = new Map();\r\n /**\r\n * Given a bounding box (or point), find all the musical elements contained\r\n * in that point\r\n * @param box \r\n * @returns SmoSelection[]\r\n */\r\n findArtifact(box: SvgBox): SmoSelection[] {\r\n let rv: SmoSelection[] = [];\r\n for (const [key, value] of this.systemMap) {\r\n rv = rv.concat(this.findValueInMap(value, box));\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Add a rendered element to the map, and update the bounding box\r\n * @param selection \r\n * @returns \r\n */\r\n addArtifact(selection: SmoSelection) {\r\n if (!selection.note || !selection.note.logicalBox) {\r\n return; \r\n }\r\n const bounds = this.boxFromSelection(selection);\r\n if (this.systemMap.size === 0) {\r\n this.box = JSON.parse(JSON.stringify(bounds));\r\n }\r\n const ix = this.createKey(selection);\r\n this.addKeyToMap(ix, selection);\r\n this.box = SvgHelpers.unionRect(bounds, this.box);\r\n }\r\n}\r\n\r\n/**\r\n * logic to map a set of notes to a region on the screen, for searching\r\n */\r\nexport class MappedNotes extends SelectionMap{\r\n createKey(selection: SmoSelection): string {\r\n return `${selection.selector.voice}-${selection.selector.tick}`;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n return selection.note?.logicalBox ?? SvgBox.default;\r\n }\r\n addKeyToMap(key: string, selection: SmoSelection) {\r\n this.systemMap.set(key, selection);\r\n }\r\n findValueInMap(value: SmoSelection, box: SvgBox): SmoSelection[] {\r\n const rv: SmoSelection[] = [];\r\n const note = value.note;\r\n if (note && note.logicalBox && SvgHelpers.doesBox1ContainBox2(note.logicalBox, box)) {\r\n rv.push(value);\r\n }\r\n return rv;\r\n }\r\n}\r\n/**\r\n * Map of measures to a region on the page.\r\n */\r\nexport class MappedMeasures extends SelectionMap {\r\n box: SvgBox = SvgBox.default;\r\n systemMap: Map = new Map();\r\n createKey(selection: SmoSelection): string {\r\n return `${selection.selector.staff}-${selection.selector.measure}`;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n const noteBox = selection.note?.logicalBox ?? SvgBox.default;\r\n return SvgHelpers.unionRect(noteBox, selection.measure.svg.logicalBox);\r\n }\r\n addKeyToMap(key: string, selection: SmoSelection) {\r\n if (!this.systemMap.has(key)) {\r\n const nnote = new MappedNotes();\r\n this.systemMap.set(key, nnote); \r\n }\r\n this.systemMap.get(key)?.addArtifact(selection);\r\n }\r\n findValueInMap(value: MappedNotes, box: SvgBox): SmoSelection[] {\r\n let rv: SmoSelection[] = [];\r\n if (SvgHelpers.doesBox1ContainBox2(value.box, box)) {\r\n rv = rv.concat(value.findArtifact(box));\r\n }\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * Map of the systems on a page. Each system has a unique line index\r\n * which is the hash\r\n */\r\nexport class MappedSystems extends SelectionMap {\r\n box: SvgBox = SvgBox.default;\r\n systemMap: Map = new Map();\r\n createKey(selection: SmoSelection):number {\r\n return selection.measure.svg.lineIndex;\r\n }\r\n boxFromSelection(selection: SmoSelection): SvgBox {\r\n const noteBox = selection.note?.logicalBox ?? SvgBox.default;\r\n return SvgHelpers.unionRect(noteBox, selection.measure.svg.logicalBox);\r\n }\r\n addKeyToMap(selectionKey: number, selection: SmoSelection) {\r\n if (!this.systemMap.has(selectionKey)) {\r\n const nmeasure = new MappedMeasures();\r\n this.systemMap.set(selectionKey, nmeasure);\r\n }\r\n this.systemMap.get(selectionKey)?.addArtifact(selection);\r\n }\r\n findValueInMap(value: MappedMeasures, box: SvgBox) {\r\n let rv: SmoSelection[] = [];\r\n if (SvgHelpers.doesBox1ContainBox2(value.box, box)) {\r\n rv = rv.concat(value.findArtifact(box));\r\n }\r\n return rv;\r\n } \r\n clearMeasure(selection: SmoSelection) {\r\n if (this.systemMap.has(selection.measure.svg.lineIndex)) {\r\n const mmap = this.systemMap.get(selection.measure.svg.lineIndex);\r\n if (mmap) {\r\n this.systemMap.delete(selection.measure.svg.lineIndex);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Each page is a different SVG element, with its own offset within the DOM. This\r\n * makes partial updates faster. SvgPage keeps track of all musical elements in SelectionMaps.\r\n * staff and score modifiers are kept in seperate lists since they may span multiple\r\n * musical elements (e.g. slurs, text elements).\r\n */\r\nexport class SvgPage {\r\n _renderer: any;\r\n pageNumber: number;\r\n box: SvgBox;\r\n systemMap: MappedSystems = new MappedSystems();\r\n modifierYKeys: number[] = [];\r\n modifierTabDivs: Record = {};\r\n static get defaultMap() {\r\n return {\r\n box: SvgBox.default,\r\n systemMap: new Map()\r\n };\r\n }\r\n /**\r\n * Modifiers are divided into `modifierDivs` vertical \r\n * rectangles for event lookup.\r\n */\r\n static get modifierDivs() {\r\n return 8;\r\n }\r\n /**\r\n * This is the VextFlow renderer context (SVGContext)\r\n * @returns \r\n */\r\n getContext(): any {\r\n return this._renderer.getContext();\r\n }\r\n get divSize(): number {\r\n return this.box.height / SvgPage.modifierDivs;\r\n }\r\n constructor(renderer: any, pageNumber: number, box: SvgBox) {\r\n this._renderer = renderer;\r\n this.pageNumber = pageNumber;\r\n this.box = box;\r\n let divEnd = this.divSize;\r\n for (let i = 0; i < SvgPage.modifierDivs; ++i) {\r\n this.modifierYKeys.push(divEnd);\r\n divEnd += this.divSize;\r\n }\r\n }\r\n /**\r\n * Given SVG y, return the div for modifiers\r\n * @param y \r\n * @returns \r\n */\r\n divIndex(y: number): number {\r\n return Math.round((y - this.box.y) / this.divSize);\r\n }\r\n /**\r\n * Remove all elements and modifiers in this page, for a redraw.\r\n */\r\n clearMap() {\r\n this.systemMap = new MappedSystems();\r\n this.modifierTabDivs = {};\r\n }\r\n /**\r\n * Clear mapped objects associated with a measure, including any\r\n * modifiers that span that measure.\r\n * @param selection \r\n */\r\n clearMeasure(selection: SmoSelection) { \r\n this.systemMap.clearMeasure(selection);\r\n const div = this.divIndex(selection.measure.svg.logicalBox.y);\r\n if (div < this.modifierYKeys.length) {\r\n const mods: ModifierTab[] = [];\r\n this.modifierTabDivs[div].forEach((mt: ModifierTab) => {\r\n if (mt.selection) {\r\n if (!SmoSelector.sameMeasure(mt.selection.selector, selection.selector)) {\r\n mods.push(mt);\r\n }\r\n } else {\r\n mods.push(mt);\r\n }\r\n });\r\n this.modifierTabDivs[div] = mods;\r\n }\r\n }\r\n /**\r\n * add a modifier to the page, indexed by its rectangle\r\n * @param modifier \r\n */\r\n addModifierTab(modifier: ModifierTab) {\r\n const div = this.divIndex(modifier.box.y);\r\n if (div < this.modifierYKeys.length) {\r\n if (!this.modifierTabDivs[div]) {\r\n this.modifierTabDivs[div] = [];\r\n }\r\n this.modifierTabDivs[div].push(modifier);\r\n }\r\n }\r\n /**\r\n * Add a new selection to the page\r\n * @param selection \r\n */\r\n addArtifact(selection: SmoSelection) { \r\n this.systemMap.addArtifact(selection);\r\n }\r\n /**\r\n * Try to find a selection on this page, based on the mouse event\r\n * @param box \r\n * @returns \r\n */\r\n findArtifact(box: SvgBox): SmoSelection[] {\r\n return this.systemMap.findArtifact(box);\r\n }\r\n /**\r\n * Try to find a modifier on this page, based on the mouse event\r\n * @param box \r\n * @returns \r\n */\r\n findModifierTabs(box: SvgBox): ModifierTab[] {\r\n const rv:ModifierTab[] = [];\r\n const div = this.divIndex(box.y);\r\n if (div < this.modifierYKeys.length) {\r\n if (this.modifierTabDivs[div]) {\r\n this.modifierTabDivs[div].forEach((modTab) => {\r\n if (SvgHelpers.doesBox1ContainBox2(modTab.box, box)) {\r\n rv.push(modTab);\r\n }\r\n });\r\n }\r\n }\r\n return rv;\r\n }\r\n clearModifiers() { \r\n Object.keys(this.modifierTabDivs).forEach((key) => {\r\n const modifiers = this.modifierTabDivs[parseInt(key)];\r\n modifiers.forEach((mod) => {\r\n if (mod instanceof SmoTextGroup) {\r\n (mod as SmoTextGroup).elements.forEach((element) => {\r\n element.remove();\r\n });\r\n (mod as SmoTextGroup).elements = [];\r\n }\r\n });\r\n });\r\n this.modifierTabDivs = {};\r\n }\r\n /**\r\n * Measure the bounding box of an element. Return the box as if the top of the first page were 0,0.\r\n * Bounding boxes are stored in absolute coordinates from the top of the first page. When rendering\r\n * elements, we adjust the coordinates for hte local page.\r\n * @param element \r\n * @returns \r\n */\r\n offsetBbox(element: SVGSVGElement): SvgBox {\r\n const yoff = this.box.y;\r\n const xoff = this.box.x;\r\n const lbox = element.getBBox();\r\n return ({ x: lbox.x + xoff, y: lbox.y + yoff, width: lbox.width, height: lbox.height });\r\n }\r\n /**\r\n * Adjust the bounding box to local coordinates for this page.\r\n * @param box \r\n * @returns \r\n */\r\n offsetSvgBox(box: SvgBox) {\r\n return { x: box.x - this.box.x, y: box.y - this.box.y, width: box.width, height: box.height };\r\n }\r\n /**\r\n * Adjust the point to local coordinates for this page.\r\n * @param box \r\n * @returns \r\n */\r\n offsetSvgPoint(box: SvgPoint) {\r\n return { x: box.x - this.box.x, y: box.y - this.box.y };\r\n }\r\n get svg(): SVGSVGElement {\r\n return this.getContext().svg as SVGSVGElement;\r\n }\r\n}\r\n/**\r\n * A container for all the SVG elements, and methods to manage adding and finding elements. Each\r\n * page of the score has its own SVG element.\r\n */\r\nexport class SvgPageMap {\r\n _layout: SmoGlobalLayout;\r\n _container: HTMLElement;\r\n _pageLayouts: SmoPageLayout[];\r\n vfRenderers: SvgPage[] = [];\r\n static get strokes(): Record {\r\n return {\r\n 'debug-mouse-box': {\r\n strokeName: 'debug-mouse',\r\n stroke: '#7ce',\r\n strokeWidth: 3,\r\n strokeDasharray: '1,1',\r\n fill: 'none',\r\n opacity: 0.6\r\n }\r\n };\r\n }\r\n containerOffset: SvgPoint = SvgPoint.default;\r\n /**\r\n * \r\n * @param layout - defines the page width/height and relative zoom common to all the pages\r\n * @param container - the parent DOM element that contains all the pages\r\n * @param pages - the layouts (margins, etc) for each pages.\r\n */\r\n constructor(layout: SmoGlobalLayout, container: HTMLElement, pages: SmoPageLayout[]) {\r\n this._layout = layout;\r\n this._container = container;\r\n this._pageLayouts = pages;\r\n }\r\n get container() {\r\n return this._container;\r\n }\r\n /**\r\n * Update the offset of the music container DOM element, in client coordinates. This is used\r\n * when converting absolute screen coordinates (like from a mouse event) to SVG coordinates\r\n * @param scrollPoint \r\n */\r\n updateContainerOffset(scrollPoint: SvgPoint) {\r\n const rect = SvgHelpers.smoBox(this.container.getBoundingClientRect());\r\n this.containerOffset = { x: rect.x + scrollPoint.x, y: rect.y + scrollPoint.y };\r\n }\r\n get layout() {\r\n return this._layout;\r\n }\r\n get pageLayouts() {\r\n return this._pageLayouts;\r\n }\r\n get zoomScale() {\r\n return this.layout.zoomScale;\r\n }\r\n get renderScale() {\r\n return this.layout.svgScale;\r\n }\r\n get pageDivHeight() {\r\n return this.layout.pageHeight * this.zoomScale;\r\n }\r\n get pageDivWidth() {\r\n return this.layout.pageWidth * this.zoomScale;\r\n }\r\n get pageHeight() {\r\n return this.layout.pageHeight / this.layout.svgScale;\r\n }\r\n get pageWidth() {\r\n return this.layout.pageWidth / this.layout.svgScale;\r\n }\r\n get totalHeight() {\r\n return this.pageDivHeight * this.pageLayouts.length;\r\n }\r\n /**\r\n * create/re-create all the page SVG elements\r\n */\r\n createRenderers() {\r\n // $(this.container).html('');\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(this.totalHeight) + 'px');\r\n const toRemove: HTMLElement[] = [];\r\n this.vfRenderers.forEach((renderer) => {\r\n const container = (renderer.svg as SVGSVGElement).parentElement;\r\n if (container) {\r\n toRemove.push(container);\r\n }\r\n });\r\n toRemove.forEach((tt) => {\r\n tt.remove();\r\n });\r\n this.vfRenderers = [];\r\n this.pageLayouts.forEach(() => {\r\n this.addPage();\r\n });\r\n }\r\n addPage() {\r\n const ix = this.vfRenderers.length;\r\n const container = document.createElement('div');\r\n container.setAttribute('id', 'smoosic-svg-div-' + ix.toString());\r\n this._container.append(container);\r\n const vexRenderer = new VF.Renderer(container, VF.Renderer.Backends.SVG);\r\n const svg = (vexRenderer.getContext() as any).svg as SVGSVGElement;\r\n SvgHelpers.svgViewport(svg, 0, 0, this.pageDivWidth, this.pageDivHeight, this.renderScale * this.zoomScale);\r\n const topY = this.pageHeight * ix;\r\n const box = SvgHelpers.boxPoints(0, topY, this.pageWidth, this.pageHeight);\r\n this.vfRenderers.push(new SvgPage(vexRenderer, ix, box));\r\n }\r\n updateZoom(zoomScale: number) {\r\n this.layout.zoomScale = zoomScale;\r\n this.vfRenderers.forEach((pp) => {\r\n SvgHelpers.svgViewport(pp.svg, 0, 0, this.pageDivWidth, this.pageDivHeight, this.renderScale * this.zoomScale);\r\n });\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(this.totalHeight) + 'px');\r\n }\r\n\r\n /**\r\n * Convert from screen/client event to SVG space. We assume the scroll offset is already added to `box`\r\n * @param box \r\n * @returns \r\n */\r\n clientToSvg(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x - this.containerOffset.x) / cof;\r\n const y = (box.y - this.containerOffset.y) / cof;\r\n const logicalBox = SvgHelpers.boxPoints(x, y, Math.max(box.width / cof, 1), Math.max(box.height / cof, 1));\r\n logicalBox.y -= Math.round(logicalBox.y / this.layout.pageHeight) / this.layout.svgScale;\r\n if (layoutDebug.mask | layoutDebug.values['mouseDebug']) {\r\n layoutDebug.updateMouseDebug(box, logicalBox, this.containerOffset);\r\n }\r\n return logicalBox;\r\n }\r\n /**\r\n * Convert from SVG bounding box to screen coordinates\r\n * @param box \r\n * @returns \r\n */\r\n svgToClient(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x * cof) + this.containerOffset.x;\r\n const y = (box.y * cof) + this.containerOffset.y;\r\n const clientBox = SvgHelpers.boxPoints(x, y, box.width * cof, box.height * cof);\r\n return clientBox;\r\n }\r\n /**\r\n * Convert from SVG bounding box to screen coordinates\r\n * @param box \r\n * @returns \r\n */\r\n svgToClientNoOffset(box: SvgBox) {\r\n const cof = (this.zoomScale * this.renderScale);\r\n const x = (box.x * cof);\r\n const y = (box.y * cof);\r\n const clientBox = SvgHelpers.boxPoints(x, y, box.width * cof, box.height * cof);\r\n return clientBox;\r\n }\r\n\r\n /**\r\n * Find a selection from a mouse event\r\n * @param box - location of a mouse event or specific screen coordinates\r\n * @returns \r\n */\r\n findArtifact(logicalBox: SvgBox): { selections: SmoSelection[], page: SvgPage} {\r\n const selections: SmoSelection[] = [];\r\n const page = this.getRenderer(logicalBox);\r\n if (page) {\r\n return { selections: page.findArtifact(logicalBox), page };\r\n }\r\n return { selections, page: this.vfRenderers[0] };\r\n }\r\n /**\r\n * Find any modifiers intersecting with `box`\r\n * @param box \r\n * @returns \r\n */\r\n findModifierTabs(logicalBox: SvgBox): ModifierTab[] {\r\n const page = this.getRenderer(logicalBox);\r\n if (page) {\r\n return page.findModifierTabs(logicalBox);\r\n }\r\n return [];\r\n }\r\n /**\r\n * add a rendered page to the page map\r\n * @param selection \r\n * @returns \r\n */\r\n addArtifact(selection: SmoSelection) {\r\n if (!selection.note || !selection.note.logicalBox) {\r\n return;\r\n }\r\n const page = this.getRenderer(selection.note.logicalBox);\r\n if (page) {\r\n page.addArtifact(selection);\r\n }\r\n }\r\n /**\r\n * add a rendered modifier to the page map\r\n * @param modifier \r\n */\r\n addModifierTab(modifier: ModifierTab) {\r\n const page = this.getRenderer(modifier.box);\r\n if (page) {\r\n page.addModifierTab(modifier);\r\n }\r\n }\r\n clearModifiersForPage(page: number) {\r\n if (this.vfRenderers.length > page) {\r\n this.vfRenderers[page].clearModifiers();\r\n }\r\n }\r\n /**\r\n * The number of pages is changing, remove the last page\r\n * @returns \r\n */\r\n removePage() {\r\n let i = 0;\r\n // Don't remove the only page\r\n if (this.vfRenderers.length < 2) {\r\n return;\r\n }\r\n\r\n // Remove last page div\r\n const elementId = 'smoosic-svg-div-' + (this.vfRenderers.length - 1).toString();\r\n const container = document.getElementById(elementId);\r\n if (container) {\r\n container.remove();\r\n }\r\n // pop last renderer off the stack.\r\n const renderers = [];\r\n const layouts = [];\r\n for (i = 0; i < this.vfRenderers.length - 1; ++i) {\r\n renderers.push(this.vfRenderers[i]);\r\n layouts.push(this.pageLayouts[i]);\r\n }\r\n this.vfRenderers = renderers;\r\n this._pageLayouts = layouts;\r\n\r\n // update page height\r\n const totalHeight = this.pageDivHeight * this.pageLayouts.length ;\r\n $(this.container).css('width', '' + Math.round(this.pageDivWidth) + 'px');\r\n $(this.container).css('height', '' + Math.round(totalHeight) + 'px');\r\n }\r\n /**\r\n * The score dimensions have changed, clear maps and recreate the pages.\r\n * @param layout \r\n * @param pageLayouts \r\n */\r\n updateLayout(layout: SmoGlobalLayout, pageLayouts: SmoPageLayout[]) {\r\n this._layout = layout;\r\n this._pageLayouts = pageLayouts;\r\n this.createRenderers();\r\n }\r\n /**\r\n * Return the page by index\r\n * @param page \r\n * @returns \r\n */\r\n getRendererForPage(page: number) {\r\n if (this.vfRenderers.length > page) {\r\n return this.vfRenderers[page];\r\n }\r\n return this.vfRenderers[this.vfRenderers.length - 1];\r\n }\r\n /**\r\n * Return the SvgPage based on SVG point (conversion from client coordinates already done)\r\n * @param point \r\n * @returns \r\n */\r\n getRendererFromPoint(point: SvgPoint): SvgPage | null {\r\n const ix = Math.floor(point.y / (this.layout.pageHeight / this.layout.svgScale));\r\n if (ix < this.vfRenderers.length) {\r\n return this.vfRenderers[ix];\r\n }\r\n return null;\r\n }\r\n /**\r\n * Return the SvgPage based on SVG point (conversion from client coordinates already done)\r\n * @param box \r\n * @returns \r\n */\r\n getRenderer(box: SvgBox | SvgPoint): SvgPage {\r\n const rv = this.getRendererFromPoint({ x: box.x, y: box.y });\r\n if (rv) {\r\n return rv;\r\n }\r\n return this.vfRenderers[0];\r\n }\r\n /**\r\n * Return the page based on the coordinates of a modifier\r\n * @param modifier \r\n * @returns \r\n */\r\n getRendererFromModifier(modifier?: Renderable) {\r\n let rv = this.vfRenderers[0];\r\n if (modifier && modifier.logicalBox) {\r\n const context = this.getRenderer(modifier.logicalBox);\r\n if (context) {\r\n rv = context;\r\n }\r\n }\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiInlineText, SuiTextBlock } from './textRender';\r\nimport { SuiRenderState } from './renderState';\r\nimport { SuiScroller } from './scroller';\r\nimport { layoutDebug } from './layoutDebug';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { OutlineInfo, StrokeInfo, SvgHelpers } from './svgHelpers';\r\nimport { SmoScoreText, SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SvgBox, KeyEvent } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SvgPage } from './svgPageMap';\r\nimport { SuiScoreViewOperations } from './scoreViewOperations';\r\nimport { SvgPageMap } from './svgPageMap';\r\nimport { VexFlow, getChordSymbolGlyphFromCode } from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\ndeclare var $: any;\r\n\r\n/**\r\n * Basic parameters to create a text editor\r\n * @param context Vex renderer context\r\n * @param scroller\r\n * @param x initial x position\r\n * @param y initial y position\r\n * @param text initial text\r\n */\r\nexport interface SuiTextEditorParams {\r\n pageMap: SvgPageMap,\r\n context: SvgPage,\r\n scroller: SuiScroller,\r\n x: number,\r\n y: number,\r\n text: string\r\n}\r\nexport interface SuiLyricEditorParams extends SuiTextEditorParams {\r\n lyric: SmoLyric\r\n}\r\n\r\nexport interface SuiTextSessionParams {\r\n scroller: SuiScroller;\r\n renderer: SuiRenderState;\r\n scoreText: SmoScoreText;\r\n text: string;\r\n x: number;\r\n y: number;\r\n textGroup: SmoTextGroup;\r\n}\r\n\r\nexport interface SuiLyricSessionParams {\r\n score: SmoScore;\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n view: SuiScoreViewOperations;\r\n verse: number;\r\n selector: SmoSelector;\r\n}\r\nexport type SuiTextStrokeName = 'text-suggestion' | 'text-selection' | 'text-highlight' | 'text-drag' | 'inactive-text';\r\n/**\r\n * The heirarchy of text editing objects goes:\r\n * \r\n * `dialog -> component -> session -> editor`\r\n * \r\n * Editors and Sessions are defined in this module.\r\n * ### editor\r\n * handles low-level events and renders the preview using one\r\n * of the text layout objects.\r\n * ### session\r\n * creates and destroys editors, e.g. for lyrics that have a Different\r\n * editor instance for each note.\r\n * \r\n * ## SuiTextEditor\r\n * The base text editor handles the positioning and inserting\r\n * of text blocks into the text area. The derived class shoud interpret key events.\r\n * A container class will manage the session for starting/stopping the editor\r\n * and retrieving the results into the target object.\r\n * */\r\nexport class SuiTextEditor {\r\n static get States(): Record {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n // parsers use this convention to represent text types (superscript)\r\n static textTypeToChar(textType: number): string {\r\n if (textType === SuiInlineText.textTypes.superScript) {\r\n return '^';\r\n }\r\n if (textType === SuiInlineText.textTypes.subScript) {\r\n return '%';\r\n }\r\n return '';\r\n }\r\n\r\n static textTypeFromChar(char: string): number {\r\n if (char === '^') {\r\n return SuiInlineText.textTypes.superScript;\r\n }\r\n if (char === '%') {\r\n return SuiInlineText.textTypes.subScript;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n svgText: SuiInlineText | null = null;\r\n context: SvgPage;\r\n outlineInfo: OutlineInfo | null = null;\r\n pageMap: SvgPageMap;\r\n x: number = 0;\r\n y: number = 0;\r\n text: string;\r\n textPos: number = 0;\r\n selectionStart: number = -1;\r\n selectionLength: number = -1;\r\n empty: boolean = true;\r\n scroller: SuiScroller;\r\n suggestionIndex: number = -1;\r\n cursorState: boolean = false;\r\n cursorRunning: boolean = false;\r\n textType: number = SuiInlineText.textTypes.normal;\r\n fontWeight: string = 'normal';\r\n fontFamily: string = 'Merriweather';\r\n fontSize: number = 14;\r\n state: number = SuiTextEditor.States.RUNNING;\r\n suggestionRect: OutlineInfo | null = null;\r\n constructor(params: SuiTextEditorParams) {\r\n this.scroller = params.scroller;\r\n this.context = params.context;\r\n this.x = params.x;\r\n this.y = params.y;\r\n this.text = params.text;\r\n this.pageMap = params.pageMap;\r\n }\r\n\r\n static get strokes(): Record {\r\n return {\r\n 'text-suggestion': {\r\n strokeName: 'text-suggestion',\r\n stroke: '#cce',\r\n strokeWidth: 1,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n 'text-selection': {\r\n strokeName: 'text-selection',\r\n stroke: '#99d',\r\n strokeWidth: 1,\r\n fill: 'none',\r\n strokeDasharray: '',\r\n opacity: 1.0\r\n }, \r\n 'text-highlight': {\r\n strokeName: 'text-highlight',\r\n stroke: '#dd9',\r\n strokeWidth: 1,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n }, \r\n 'text-drag': {\r\n strokeName: 'text-drag',\r\n stroke: '#d99',\r\n strokeWidth: 1,\r\n strokeDasharray: '2,1',\r\n fill: '#eee',\r\n opacity: 0.3\r\n },\r\n 'inactive-text': {\r\n strokeName: 'inactive-text',\r\n stroke: '#fff',\r\n strokeWidth: 1,\r\n strokeDasharray: '',\r\n fill: '#ddd',\r\n opacity: 0.3\r\n }\r\n };\r\n }\r\n\r\n // ### _suggestionParameters\r\n // Create the svg text outline parameters\r\n _suggestionParameters(box: SvgBox, strokeName: SuiTextStrokeName): OutlineInfo {\r\n const outlineStroke = SuiTextEditor.strokes[strokeName];\r\n if (!this.suggestionRect) {\r\n this.suggestionRect = {\r\n context: this.context, box, classes: '',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n };\r\n this.suggestionRect.box = SvgHelpers.smoBox(box);\r\n return this.suggestionRect;\r\n }\r\n\r\n // ### _expandSelectionToSuggestion\r\n // Expand the selection to include the character the user clicked on.\r\n _expandSelectionToSuggestion() {\r\n if (this.suggestionIndex < 0) {\r\n return;\r\n }\r\n if (this.selectionStart < 0) {\r\n this._setSelectionToSugggestion();\r\n return;\r\n } else if (this.selectionStart > this.suggestionIndex) {\r\n const oldStart = this.selectionStart;\r\n this.selectionStart = this.suggestionIndex;\r\n this.selectionLength = (oldStart - this.selectionStart) + this.selectionLength;\r\n } else if (this.selectionStart < this.suggestionIndex\r\n && this.selectionStart > this.selectionStart + this.selectionLength) {\r\n this.selectionLength = (this.suggestionIndex - this.selectionStart) + 1;\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### _setSelectionToSugggestion\r\n // Set the selection to the character the user clicked on.\r\n _setSelectionToSugggestion() {\r\n this.selectionStart = this.suggestionIndex;\r\n this.selectionLength = 1;\r\n this.suggestionIndex = -1;\r\n this._updateSelections();\r\n }\r\n\r\n rerender() {\r\n this.svgText?.unrender();\r\n this.svgText?.render();\r\n }\r\n // ### handleMouseEvent\r\n // Handle hover/click behavior for the text under edit.\r\n // Returns: true if the event was handled here\r\n handleMouseEvent(ev: any): boolean {\r\n let handled = false;\r\n if (this.svgText === null) {\r\n return false;\r\n }\r\n const clientBox = SvgHelpers.boxPoints(\r\n ev.clientX + this.scroller.scrollState.x,\r\n ev.clientY + this.scroller.scrollState.y, \r\n 1, 1);\r\n const logicalBox = this.pageMap.clientToSvg(clientBox);\r\n var blocks = this.svgText.getIntersectingBlocks(logicalBox);\r\n\r\n // The mouse is not over the text\r\n if (!blocks.length) {\r\n if (this.suggestionRect) {\r\n SvgHelpers.eraseOutline(this.suggestionRect);\r\n }\r\n\r\n // If the user clicks and there was a previous selection, treat it as selected\r\n if (ev.type === 'click' && this.suggestionIndex >= 0) {\r\n if (ev.shiftKey) {\r\n this._expandSelectionToSuggestion();\r\n } else {\r\n this._setSelectionToSugggestion();\r\n }\r\n handled = true;\r\n this.rerender();\r\n }\r\n return handled;\r\n }\r\n handled = true;\r\n // outline the text that is hovered. Since mouse is a point\r\n // there should only be 1\r\n blocks.forEach((block) => {\r\n SvgHelpers.outlineRect(this._suggestionParameters(block.box, 'text-suggestion'));\r\n this.suggestionIndex = block.index;\r\n });\r\n // if the user clicked on it, add it to the selection.\r\n if (ev.type === 'click') {\r\n if (this.suggestionRect) {\r\n SvgHelpers.eraseOutline(this.suggestionRect);\r\n }\r\n if (ev.shiftKey) {\r\n this._expandSelectionToSuggestion();\r\n } else {\r\n this._setSelectionToSugggestion();\r\n }\r\n const npos = this.selectionStart + this.selectionLength;\r\n if (npos >= 0 && npos <= this.svgText.blocks.length) {\r\n this.textPos = npos;\r\n }\r\n this.rerender();\r\n }\r\n return handled;\r\n }\r\n\r\n // ### _serviceCursor\r\n // Flash the cursor as a background task\r\n _serviceCursor() {\r\n if (this.cursorState) {\r\n this.svgText?.renderCursorAt(this.textPos - 1, this.textType);\r\n } else {\r\n this.svgText?.removeCursor();\r\n }\r\n this.cursorState = !this.cursorState;\r\n }\r\n // ### _refreshCursor\r\n // If the text position changes, update the cursor position right away\r\n // don't wait for blink.\r\n _refreshCursor() {\r\n this.svgText?.removeCursor();\r\n this.cursorState = true;\r\n this._serviceCursor();\r\n }\r\n\r\n get _endCursorCondition(): boolean {\r\n return this.cursorRunning === false;\r\n }\r\n\r\n _cursorPreResolve() {\r\n this.svgText?.removeCursor();\r\n }\r\n\r\n _cursorPoll() {\r\n this._serviceCursor();\r\n }\r\n\r\n // ### startCursorPromise\r\n // Used by the calling logic to start the cursor.\r\n // returns a promise that can be pended when the editing ends.\r\n startCursorPromise(): Promise {\r\n var self = this;\r\n this.cursorRunning = true;\r\n this.cursorState = true;\r\n self.svgText?.renderCursorAt(this.textPos, SuiInlineText.textTypes.normal);\r\n return PromiseHelpers.makePromise(() => this._endCursorCondition, () => this._cursorPreResolve(), () => this._cursorPoll(), 333);\r\n }\r\n stopCursor() {\r\n this.cursorRunning = false;\r\n }\r\n\r\n // ### setTextPos\r\n // Set the text position within the editor space and update the cursor\r\n setTextPos(val: number) {\r\n this.textPos = val;\r\n this._refreshCursor();\r\n }\r\n // ### moveCursorRight\r\n // move cursor right within the block of text.\r\n moveCursorRight() {\r\n if (this.svgText === null) {\r\n return;\r\n }\r\n if (this.textPos <= this.svgText.blocks.length) {\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n }\r\n // ### moveCursorRight\r\n // move cursor left within the block of text.\r\n moveCursorLeft() {\r\n if (this.textPos > 0) {\r\n this.setTextPos(this.textPos - 1);\r\n }\r\n }\r\n\r\n // ### moveCursorRight\r\n // highlight the text selections\r\n _updateSelections() {\r\n let i = 0;\r\n const end = this.selectionStart + this.selectionLength;\r\n const start = this.selectionStart;\r\n this.svgText?.blocks.forEach((block) => {\r\n const val = start >= 0 && i >= start && i < end;\r\n this.svgText!.setHighlight(block, val);\r\n ++i;\r\n });\r\n }\r\n\r\n // ### _checkGrowSelectionLeft\r\n // grow selection within the bounds\r\n _checkGrowSelectionLeft() {\r\n if (this.selectionStart > 0) {\r\n this.selectionStart -= 1;\r\n this.selectionLength += 1;\r\n }\r\n }\r\n // ### _checkGrowSelectionRight\r\n // grow selection within the bounds\r\n _checkGrowSelectionRight() {\r\n if (this.svgText === null) {\r\n return;\r\n }\r\n const end = this.selectionStart + this.selectionLength;\r\n if (end < this.svgText.blocks.length) {\r\n this.selectionLength += 1;\r\n }\r\n }\r\n\r\n // ### growSelectionLeft\r\n // handle the selection keys\r\n growSelectionLeft() {\r\n if (this.selectionStart === -1) {\r\n this.moveCursorLeft();\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n } else if (this.textPos === this.selectionStart) {\r\n this.moveCursorLeft();\r\n this._checkGrowSelectionLeft();\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### growSelectionRight\r\n // handle the selection keys\r\n growSelectionRight() {\r\n if (this.selectionStart === -1) {\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n this.moveCursorRight();\r\n } else if (this.selectionStart + this.selectionLength === this.textPos) {\r\n this._checkGrowSelectionRight();\r\n this.moveCursorRight();\r\n }\r\n this._updateSelections();\r\n }\r\n\r\n // ### _clearSelections\r\n // Clear selected text\r\n _clearSelections() {\r\n this.selectionStart = -1;\r\n this.selectionLength = 0;\r\n }\r\n\r\n // ### deleteSelections\r\n // delete the selected blocks of text/glyphs\r\n deleteSelections() {\r\n let i = 0;\r\n const blockPos = this.selectionStart;\r\n for (i = 0; i < this.selectionLength; ++i) {\r\n this.svgText?.removeBlockAt(blockPos); // delete shifts blocks so keep index the same.\r\n }\r\n this.setTextPos(blockPos);\r\n this.selectionStart = -1;\r\n this.selectionLength = 0;\r\n }\r\n\r\n // ### parseBlocks\r\n // THis can be overridden by the base class to create the correct combination\r\n // of text and glyph blocks based on the underlying text\r\n parseBlocks() {\r\n let i = 0;\r\n \r\n this.svgText = new SuiInlineText({\r\n context: this.context, startX: this.x, startY: this.y,\r\n fontFamily: this.fontFamily, fontSize: this.fontSize, fontWeight: this.fontWeight, scroller: this.scroller,\r\n purpose: SuiInlineText.textPurposes.edit,\r\n fontStyle: 'normal', pageMap: this.pageMap\r\n });\r\n for (i = 0; i < this.text.length; ++i) {\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = this.text[i]\r\n this.svgText.addTextBlockAt(i, def);\r\n this.empty = false;\r\n }\r\n this.textPos = this.text.length;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n // ### evKey\r\n // Handle key events that filter down to the editor\r\n async evKey(evdata: KeyEvent): Promise {\r\n const removeCurrent = () => {\r\n if (this.svgText) {\r\n this.svgText.element?.remove();\r\n this.svgText.element = null;\r\n }\r\n }\r\n if (evdata.code === 'ArrowRight') {\r\n if (evdata.shiftKey) {\r\n this.growSelectionRight();\r\n } else {\r\n this.moveCursorRight();\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'ArrowLeft') {\r\n if (evdata.shiftKey) {\r\n this.growSelectionLeft();\r\n } else {\r\n this.moveCursorLeft();\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'Backspace') {\r\n removeCurrent();\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n } else {\r\n if (this.textPos > 0) {\r\n this.selectionStart = this.textPos - 1;\r\n this.selectionLength = 1;\r\n this.deleteSelections();\r\n }\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.code === 'Delete') {\r\n removeCurrent();\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n } else {\r\n if (this.textPos > 0 && this.svgText !== null && this.textPos < this.svgText.blocks.length) {\r\n this.selectionStart = this.textPos;\r\n this.selectionLength = 1;\r\n this.deleteSelections();\r\n }\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n if (evdata.key.charCodeAt(0) >= 33 && evdata.key.charCodeAt(0) <= 126 && evdata.key.length === 1) {\r\n removeCurrent();\r\n const isPaste = evdata.ctrlKey && evdata.key === 'v';\r\n let text = evdata.key;\r\n if (isPaste) {\r\n text = await navigator.clipboard.readText();\r\n }\r\n if (this.empty) {\r\n this.svgText?.removeBlockAt(0);\r\n this.empty = false;\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = text;\r\n this.svgText?.addTextBlockAt(0, def);\r\n this.setTextPos(1);\r\n } else {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = text;\r\n def.textType = this.textType;\r\n this.svgText?.addTextBlockAt(this.textPos, def);\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nexport class SuiTextBlockEditor extends SuiTextEditor {\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiTextEditorParams) {\r\n super(params);\r\n $(this.context.svg).find('g.vf-text-highlight').remove();\r\n this.parseBlocks();\r\n }\r\n\r\n _highlightEditor() {\r\n if (this.svgText === null || this.svgText.blocks.length === 0) {\r\n return;\r\n }\r\n const bbox = this.svgText.getLogicalBox();\r\n const outlineStroke = SuiTextEditor.strokes['text-highlight'];\r\n if (this.outlineInfo && this.outlineInfo.element) {\r\n this.outlineInfo.element.remove();\r\n }\r\n this.outlineInfo = {\r\n context: this.context, box: bbox, classes: '',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState,\r\n timeOff: 0\r\n };\r\n SvgHelpers.outlineRect(this.outlineInfo);\r\n }\r\n\r\n getText(): string {\r\n if (this.svgText !== null) {\r\n return this.svgText.getText();\r\n }\r\n return '';\r\n }\r\n\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (evdata.key.charCodeAt(0) === 32) {\r\n if (this.empty) {\r\n this.svgText?.removeBlockAt(0);\r\n this.empty = false;\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = ' ';\r\n this.svgText?.addTextBlockAt(0, def);\r\n this.setTextPos(1);\r\n } else {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const def = SuiInlineText.blockDefaults;\r\n def.text = ' ';\r\n def.textType = this.textType;\r\n this.svgText?.addTextBlockAt(this.textPos, def);\r\n this.setTextPos(this.textPos + 1);\r\n }\r\n this.rerender();\r\n return true;\r\n }\r\n const rv = super.evKey(evdata);\r\n this._highlightEditor();\r\n return rv;\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n $(this.context.svg).find('g.vf-text-highlight').remove();\r\n this.stopCursor();\r\n this.svgText?.unrender();\r\n }\r\n}\r\n\r\nexport class SuiLyricEditor extends SuiTextEditor {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4 };\r\n }\r\n parseBlocks() {\r\n let i = 0;\r\n const def = SuiInlineText.defaults;\r\n def.context = this.context;\r\n def.startX = this.x;\r\n def.startY = this.y;\r\n def.scroller = this.scroller;\r\n this.svgText = new SuiInlineText(def);\r\n for (i = 0; i < this.text.length; ++i) {\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.text = this.text[i];\r\n this.svgText.addTextBlockAt(i, blockP);\r\n this.empty = false;\r\n }\r\n this.textPos = this.text.length;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n\r\n getText(): string {\r\n if (this.svgText !== null) {\r\n return this.svgText.getText();\r\n }\r\n return '';\r\n }\r\n lyric: SmoLyric;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiLyricEditorParams) {\r\n super(params);\r\n this.text = params.lyric.getText();\r\n if (params.lyric.isHyphenated()) {\r\n this.text += '-';\r\n }\r\n this.lyric = params.lyric;\r\n this.parseBlocks();\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n this.stopCursor();\r\n if (this.svgText !== null) {\r\n this.svgText.unrender();\r\n }\r\n }\r\n}\r\n\r\nexport class SuiChordEditor extends SuiTextEditor {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4 };\r\n }\r\n static get SymbolModifiers() {\r\n return {\r\n NONE: 1,\r\n SUBSCRIPT: 2,\r\n SUPERSCRIPT: 3\r\n };\r\n }\r\n\r\n // ### toTextTypeChar\r\n // Given an old text type and a desited new text type,\r\n // return what the new text type character should be\r\n static toTextTypeChar(oldTextType: number, newTextType: number): string {\r\n const tt = SuiInlineText.getTextTypeResult(oldTextType, newTextType);\r\n return SuiTextEditor.textTypeToChar(tt);\r\n }\r\n\r\n static toTextTypeTransition(oldTextType: number, result: number): string {\r\n const tt = SuiInlineText.getTextTypeTransition(oldTextType, result);\r\n return SuiTextEditor.textTypeToChar(tt);\r\n }\r\n\r\n setTextType(textType: number) {\r\n this.textType = textType;\r\n }\r\n\r\n // Handle the case where user changed super/subscript in the middle of the\r\n // string.\r\n _updateSymbolModifiers() {\r\n let change = this.textPos;\r\n let render = false;\r\n let i = 0;\r\n for (i = this.textPos; this.svgText !== null && i < this.svgText.blocks.length; ++i) {\r\n const block = this.svgText!.blocks[i];\r\n if (block.textType !== this.textType &&\r\n block.textType !== change) {\r\n change = block.textType;\r\n block.textType = this.textType;\r\n render = true;\r\n } else {\r\n break;\r\n }\r\n }\r\n if (render) {\r\n this.rerender();\r\n }\r\n }\r\n _setSymbolModifier(char: string): boolean {\r\n if (['^', '%'].indexOf(char) < 0) {\r\n return false;\r\n }\r\n const currentTextType = this.textType;\r\n const transitionType = SuiTextEditor.textTypeFromChar(char);\r\n this.textType = SuiInlineText.getTextTypeResult(currentTextType, transitionType);\r\n this._updateSymbolModifiers();\r\n return true;\r\n }\r\n\r\n parseBlocks() {\r\n let readGlyph = false;\r\n let curGlyph = '';\r\n let blockIx = 0; // so we skip modifier characters\r\n let i = 0;\r\n const params = SuiInlineText.defaults;\r\n params.context = this.context;\r\n params.startX = this.x;\r\n params.startY = this.y;\r\n params.scroller = this.scroller;\r\n this.svgText = new SuiInlineText(params);\r\n\r\n for (i = 0; i < this.text.length; ++i) {\r\n const char = this.text[i];\r\n const isSymbolModifier = this._setSymbolModifier(char);\r\n if (char === '@') {\r\n if (!readGlyph) {\r\n readGlyph = true;\r\n curGlyph = '';\r\n } else {\r\n this._addGlyphAt(blockIx, curGlyph);\r\n blockIx += 1;\r\n readGlyph = false;\r\n }\r\n } else if (!isSymbolModifier) {\r\n if (readGlyph) {\r\n curGlyph = curGlyph + char;\r\n } else {\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.text = char;\r\n blockP.textType = this.textType;\r\n this.svgText.addTextBlockAt(blockIx, blockP);\r\n blockIx += 1;\r\n }\r\n }\r\n this.empty = false;\r\n }\r\n this.textPos = blockIx;\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this.rerender();\r\n }\r\n\r\n // ### getText\r\n // Get the text value that we persist\r\n getText(): string {\r\n if (this.svgText === null || this.svgText.blocks.length < 1) {\r\n return '';\r\n }\r\n let text = '';\r\n let textType = this.svgText.blocks[0].textType;\r\n this.svgText.blocks.forEach((block) => {\r\n if (block.textType !== textType) {\r\n text += SuiChordEditor.toTextTypeTransition(textType, block.textType);\r\n textType = block.textType;\r\n }\r\n if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n text += '@' + block.glyphCode + '@';\r\n } else {\r\n text += block.text;\r\n }\r\n });\r\n return text;\r\n }\r\n\r\n _addGlyphAt(ix: number, code: string) {\r\n if (this.selectionStart >= 0) {\r\n this.deleteSelections();\r\n }\r\n const blockP = SuiInlineText.blockDefaults;\r\n blockP.glyphCode = code;\r\n blockP.textType = this.textType;\r\n this.svgText?.addGlyphBlockAt(ix, blockP);\r\n this.textPos += 1;\r\n }\r\n unrender() {\r\n if (this.svgText) {\r\n this.svgText.element?.remove();\r\n }\r\n }\r\n async evKey(evdata: KeyEvent): Promise {\r\n let edited = false;\r\n if (this._setSymbolModifier(evdata.key)) {\r\n return true;\r\n }\r\n // Dialog gives us a specific glyph code\r\n if (evdata.key[0] === '@' && evdata.key.length > 2) {\r\n this.unrender();\r\n const glyph = evdata.key.substr(1, evdata.key.length - 2);\r\n this._addGlyphAt(this.textPos, getChordSymbolGlyphFromCode(glyph));\r\n this.rerender();\r\n edited = true;\r\n } else if (VF.ChordSymbol.glyphs[evdata.key[0]]) { // glyph shortcut like 'b'\r\n this.unrender();\r\n // hack: vexflow 5 broke this\r\n this._addGlyphAt(this.textPos, evdata.key[0]);\r\n this.rerender();\r\n edited = true;\r\n } else {\r\n // some ordinary key\r\n edited = await super.evKey(evdata);\r\n }\r\n if (this.svgText !== null && this.svgText.blocks.length > this.textPos && this.textPos >= 0) {\r\n this.textType = this.svgText.blocks[this.textPos].textType;\r\n }\r\n return edited;\r\n }\r\n lyric: SmoLyric;\r\n\r\n // ### ctor\r\n // ### args\r\n // params: {lyric: SmoLyric,...}\r\n constructor(params: SuiLyricEditorParams) {\r\n super(params);\r\n this.text = params.lyric.text;\r\n this.lyric = params.lyric;\r\n this.textType = SuiInlineText.textTypes.normal;\r\n this.parseBlocks();\r\n }\r\n\r\n stopEditor() {\r\n this.state = SuiTextEditor.States.STOPPING;\r\n this.stopCursor();\r\n this.svgText?.unrender();\r\n }\r\n\r\n // ### _markStopped\r\n // Indicate this editor session is done running\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n}\r\nexport interface SuiDragSessionParams {\r\n context: SvgPageMap;\r\n scroller: SuiScroller;\r\n textGroup: SmoTextGroup;\r\n}\r\n\r\nexport class SuiDragSession {\r\n pageMap: SvgPageMap;\r\n page: SvgPage;\r\n scroller: SuiScroller;\r\n outlineBox: SvgBox;\r\n textObject: SuiTextBlock;\r\n dragging: boolean = false;\r\n outlineRect: OutlineInfo | null = null;\r\n textGroup: SmoTextGroup;\r\n constructor(params: SuiDragSessionParams) {\r\n this.textGroup = params.textGroup;\r\n this.pageMap = params.context;\r\n this.scroller = params.scroller;\r\n this.page = this.pageMap.getRendererFromModifier(this.textGroup);\r\n // create a temporary text object for dragging\r\n this.textObject = SuiTextBlock.fromTextGroup(this.textGroup, this.page, this.pageMap, this.scroller); // SuiTextBlock\r\n this.dragging = false;\r\n this.outlineBox = this.textObject.getLogicalBox();\r\n }\r\n\r\n _outlineBox() {\r\n const outlineStroke = SuiTextEditor.strokes['text-drag'];\r\n const x = this.outlineBox.x - this.page.box.x;\r\n const y = this.outlineBox.y - this.page.box.y;\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context: this.page, \r\n box: SvgHelpers.boxPoints(x , y + this.outlineBox.height, this.outlineBox.width, this.outlineBox.height),\r\n classes: 'text-drag',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n }\r\n this.outlineRect.box = SvgHelpers.boxPoints(x , y + this.outlineBox.height, this.outlineBox.width, this.outlineBox.height),\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n unrender() {\r\n this.textGroup.elements.forEach((el) => {\r\n el.remove();\r\n });\r\n this.textGroup.elements = [];\r\n this.textObject.unrender();\r\n }\r\n scrolledClientBox(x: number, y: number) {\r\n return { x: x + this.scroller.scrollState.x, y: y + this.scroller.scrollState.y, width: 1, height: 1 };\r\n }\r\n checkBounds() {\r\n if (this.outlineBox.y < this.outlineBox.height) {\r\n this.outlineBox.y = this.outlineBox.height;\r\n }\r\n if (this.outlineBox.x < 0) {\r\n this.outlineBox.x = 0;\r\n }\r\n if (this.outlineBox.x > this.page.box.x + this.page.box.width - this.outlineBox.width) {\r\n this.outlineBox.x = this.page.box.x + this.page.box.width - this.outlineBox.width;\r\n }\r\n if (this.outlineBox.y > this.page.box.y + this.page.box.height) {\r\n this.outlineBox.y = this.page.box.y + this.page.box.height;\r\n }\r\n }\r\n startDrag(e: any) {\r\n const evBox = this.scrolledClientBox(e.clientX, e.clientY);\r\n const svgMouseBox = this.pageMap.clientToSvg(evBox);\r\n svgMouseBox.y -= this.outlineBox.height;\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(svgMouseBox, this.outlineBox, 'start');\r\n }\r\n if (!SvgHelpers.doesBox1ContainBox2(this.outlineBox, svgMouseBox)) {\r\n return;\r\n }\r\n this.dragging = true;\r\n this.outlineBox = svgMouseBox;\r\n const currentBox = this.textObject.getLogicalBox();\r\n this.outlineBox.width = currentBox.width;\r\n this.outlineBox.height = currentBox.height;\r\n this.unrender();\r\n this.checkBounds();\r\n this._outlineBox();\r\n }\r\n\r\n mouseMove(e: any) {\r\n if (!this.dragging) {\r\n return;\r\n }\r\n const evBox = this.scrolledClientBox(e.clientX, e.clientY);\r\n const svgMouseBox = this.pageMap.clientToSvg(evBox);\r\n svgMouseBox.y -= this.outlineBox.height;\r\n this.outlineBox = SvgHelpers.smoBox(svgMouseBox);\r\n const currentBox = this.textObject.getLogicalBox();\r\n this.outlineBox.width = currentBox.width;\r\n this.outlineBox.height = currentBox.height;\r\n this.checkBounds();\r\n\r\n this.textObject.offsetStartX(this.outlineBox.x - currentBox.x);\r\n this.textObject.offsetStartY(this.outlineBox.y - currentBox.y);\r\n this.textObject.render();\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(svgMouseBox, this.outlineBox, 'drag');\r\n }\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect = null;\r\n }\r\n this._outlineBox();\r\n }\r\n\r\n endDrag() {\r\n // this.textObject.render();\r\n const newBox = this.textObject.getLogicalBox();\r\n const curBox = this.textGroup.logicalBox ?? SvgBox.default;\r\n if (layoutDebug.mask & layoutDebug.values['dragDebug']) {\r\n layoutDebug.updateDragDebug(curBox, newBox, 'end');\r\n }\r\n this.textGroup.offsetX(newBox.x - curBox.x);\r\n this.textGroup.offsetY(newBox.y - curBox.y + this.outlineBox.height);\r\n this.dragging = false;\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect = null;\r\n }\r\n }\r\n}\r\n\r\n// ## SuiTextSession\r\n// session for editing plain text\r\nexport class SuiTextSession {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n scroller: SuiScroller;\r\n scoreText: SmoScoreText;\r\n text: string;\r\n x: number;\r\n y: number;\r\n textGroup: SmoTextGroup;\r\n fontFamily: string = '';\r\n fontWeight: string = '';\r\n fontSize: number = 14;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n editor: SuiTextBlockEditor | null = null;\r\n renderer: SuiRenderState;\r\n cursorPromise: Promise | null = null;\r\n constructor(params: SuiTextSessionParams) {\r\n this.scroller = params.scroller;\r\n this.renderer = params.renderer;\r\n this.scoreText = params.scoreText;\r\n this.text = this.scoreText.text;\r\n this.x = params.x;\r\n this.y = params.y;\r\n this.textGroup = params.textGroup;\r\n this.renderer = params.renderer;\r\n\r\n // Create a text group if one was not a startup parameter\r\n if (!this.textGroup) {\r\n this.textGroup = new SmoTextGroup(SmoTextGroup.defaults);\r\n }\r\n // Create a scoreText if one was not a startup parameter, or\r\n // get it from the text group\r\n if (!this.scoreText) {\r\n if (this.textGroup && this.textGroup.textBlocks.length) {\r\n this.scoreText = this.textGroup.textBlocks[0].text;\r\n } else {\r\n const stDef = SmoScoreText.defaults;\r\n stDef.x = this.x;\r\n stDef.y = this.y;\r\n this.scoreText = new SmoScoreText(stDef);\r\n this.textGroup.addScoreText(this.scoreText, SmoTextGroup.relativePositions.RIGHT);\r\n }\r\n }\r\n this.fontFamily = SmoScoreText.familyString(this.scoreText.fontInfo.family);\r\n this.fontWeight = SmoScoreText.weightString(this.scoreText.fontInfo.weight);\r\n this.fontSize = SmoScoreText.fontPointSize(this.scoreText.fontInfo.size);\r\n this.text = this.scoreText.text;\r\n }\r\n\r\n // ### _isRefreshed\r\n // renderer has partially rendered text(promise condition)\r\n get _isRefreshed(): boolean {\r\n return this.renderer.dirty === false;\r\n }\r\n\r\n get isStopped(): boolean {\r\n return this.state === SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n get isRunning(): boolean {\r\n return this.state === SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n // ### _isRendered\r\n // renderer has rendered text(promise condition)\r\n get _isRendered(): boolean {\r\n return this.renderer.passState === SuiRenderState.passStates.clean;\r\n }\r\n\r\n _removeScoreText() {\r\n const selector = '#' + this.scoreText.attrs.id;\r\n $(selector).remove();\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric session\r\n startSession() {\r\n const context = this.renderer.pageMap.getRenderer({ x: this.x, y: this.y });\r\n if (context) {\r\n this.editor = new SuiTextBlockEditor({\r\n x: this.x, y: this.y, scroller: this.scroller,\r\n context: context, text: this.scoreText.text, pageMap: this.renderer.pageMap\r\n });\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this.state = SuiTextEditor.States.RUNNING;\r\n this._removeScoreText();\r\n }\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Stop the lyric session, return promise for done\r\n stopSession(): Promise {\r\n if (this.editor) {\r\n this.scoreText.text = this.editor.getText();\r\n this.scoreText.tryParseUnicode(); // convert unicode chars\r\n this.editor.stopEditor();\r\n }\r\n return PromiseHelpers.makePromise(()=> this._isRendered,() => this._markStopped(), null, 100);\r\n }\r\n\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.state !== SuiTextEditor.States.RUNNING || this.editor === null) {\r\n return false;\r\n }\r\n const rv = await this.editor.evKey(evdata);\r\n if (rv) {\r\n this._removeScoreText();\r\n }\r\n return rv;\r\n }\r\n\r\n handleMouseEvent(ev: any) {\r\n if (this.isRunning && this.editor !== null) {\r\n this.editor.handleMouseEvent(ev);\r\n }\r\n }\r\n}\r\n// ## SuiLyricSession\r\n// Manage editor for lyrics, jupmping from note to note if asked\r\nexport class SuiLyricSession {\r\n static get States() {\r\n return { RUNNING: 1, STOPPING: 2, STOPPED: 4, PENDING_EDITOR: 8 };\r\n }\r\n score: SmoScore;\r\n renderer: SuiRenderState;\r\n scroller: SuiScroller;\r\n view: SuiScoreViewOperations;\r\n parser: number;\r\n verse: number;\r\n selector: SmoSelector;\r\n selection: SmoSelection | null;\r\n note: SmoNote | null = null;\r\n originalText: string;\r\n lyric: SmoLyric | null = null;\r\n text: string = '';\r\n editor: SuiLyricEditor | null = null;\r\n state: number = SuiTextEditor.States.PENDING_EDITOR;\r\n cursorPromise: Promise | null = null;\r\n constructor(params: SuiLyricSessionParams) {\r\n this.score = params.score;\r\n this.renderer = params.renderer;\r\n this.scroller = params.scroller;\r\n this.view = params.view;\r\n this.parser = SmoLyric.parsers.lyric;\r\n this.verse = params.verse;\r\n this.selector = params.selector;\r\n this.selection = SmoSelection.noteFromSelector(this.score, this.selector);\r\n if (this.selection !== null) {\r\n this.note = this.selection.note;\r\n }\r\n this.originalText = '';\r\n }\r\n\r\n // ### _setLyricForNote\r\n // Get the text from the editor and update the lyric with it.\r\n _setLyricForNote() {\r\n this.lyric = null;\r\n if (!this.note) {\r\n return;\r\n }\r\n const lar = this.note.getLyricForVerse(this.verse, SmoLyric.parsers.lyric);\r\n if (lar.length) {\r\n this.lyric = lar[0] as SmoLyric;\r\n }\r\n if (!this.lyric) {\r\n const scoreFont = this.score.fonts.find((fn) => fn.name === 'lyrics');\r\n const fontInfo = JSON.parse(JSON.stringify(scoreFont));\r\n const lyricD = SmoLyric.defaults;\r\n lyricD.text = '';\r\n lyricD.verse = this.verse;\r\n lyricD.fontInfo = fontInfo;\r\n this.lyric = new SmoLyric(lyricD);\r\n }\r\n this.text = this.lyric.text;\r\n this.originalText = this.text;\r\n // this.view.addOrUpdateLyric(this.selection.selector, this.lyric);\r\n }\r\n\r\n // ### _endLyricCondition\r\n // Lyric editor has stopped running (promise condition)\r\n get _endLyricCondition(): boolean {\r\n return this.editor !== null && this.editor.state !== SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _endLyricCondition\r\n // renderer has partially rendered text(promise condition)\r\n get _isRefreshed(): boolean {\r\n return this.renderer.renderStateRendered;\r\n }\r\n\r\n // ### _isRendered\r\n // renderer has rendered text(promise condition)\r\n get _isRendered(): boolean {\r\n return this.renderer.renderStateClean;\r\n }\r\n\r\n get _pendingEditor(): boolean {\r\n return this.state !== SuiTextEditor.States.PENDING_EDITOR;\r\n }\r\n\r\n // ### _hideLyric\r\n // Hide the lyric so you only see the editor.\r\n _hideLyric() {\r\n if (this.lyric !== null && this.lyric.selector) {\r\n $(this.lyric.selector).remove();\r\n }\r\n }\r\n\r\n get isStopped(): boolean {\r\n return this.state === SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n get isRunning(): boolean {\r\n return this.state === SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _markStopped\r\n // Indicate this editor session is done running\r\n _markStopped() {\r\n this.state = SuiTextEditor.States.STOPPED;\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric editor for a note (current selected note)\r\n _startSessionForNote() {\r\n if (this.lyric === null || this.note === null || this.note.logicalBox === null) {\r\n return;\r\n }\r\n let startX = this.note.logicalBox.x;\r\n let startY = this.note.logicalBox.y + this.note.logicalBox.height + \r\n SmoScoreText.fontPointSize(this.lyric.fontInfo.size);\r\n this.lyric.skipRender = true;\r\n const lyricRendered = this.lyric.text.length > 0;\r\n if (this.lyric.logicalBox !== null) {\r\n startX = this.lyric.logicalBox.x;\r\n startY = this.lyric.logicalBox.y + this.lyric.logicalBox.height;\r\n }\r\n const context = this.view.renderer.pageMap.getRenderer({ x: startX, y: startY });\r\n if (context) {\r\n this.editor = new SuiLyricEditor({\r\n context,\r\n lyric: this.lyric, x: startX, y: startY, scroller: this.scroller,\r\n text: this.lyric.getText(),\r\n pageMap: this.renderer.pageMap\r\n });\r\n this.state = SuiTextEditor.States.RUNNING;\r\n if (!lyricRendered && this.editor !== null && this.editor.svgText !== null) {\r\n const delta = 2 * this.editor.svgText.maxFontHeight(1.0) * (this.lyric.verse + 1);\r\n this.editor.svgText.offsetStartY(delta);\r\n }\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this._hideLyric();\r\n \r\n }\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Start the lyric session\r\n startSession() {\r\n this._setLyricForNote();\r\n this._startSessionForNote();\r\n this.state = SuiTextEditor.States.RUNNING;\r\n }\r\n\r\n // ### _startSessionForNote\r\n // Stop the lyric session, return promise for done\r\n async stopSession() {\r\n if (this.editor && !this._endLyricCondition) {\r\n await this._updateLyricFromEditor();\r\n this.editor.stopEditor();\r\n }\r\n return PromiseHelpers.makePromise(() => this._isRendered, () => this._markStopped(), null, 100);\r\n }\r\n\r\n // ### _advanceSelection\r\n // Based on a skip character, move the editor forward/back one note.\r\n async _advanceSelection(isShift: boolean) {\r\n const nextSelection = isShift ? SmoSelection.lastNoteSelectionFromSelector(this.score, this.selector)\r\n : SmoSelection.nextNoteSelectionFromSelector(this.score, this.selector);\r\n if (nextSelection) {\r\n this.selector = nextSelection.selector;\r\n this.selection = nextSelection;\r\n this.note = nextSelection.note;\r\n this._setLyricForNote();\r\n const conditionArray: any = [];\r\n this.state = SuiTextEditor.States.PENDING_EDITOR;\r\n conditionArray.push(PromiseHelpers.makePromiseObj(() => this._endLyricCondition, null, null, 100));\r\n conditionArray.push(PromiseHelpers.makePromiseObj(() => this._isRefreshed,() => this._startSessionForNote(), null, 100));\r\n await PromiseHelpers.promiseChainThen(conditionArray);\r\n }\r\n }\r\n\r\n // ### advanceSelection\r\n // external interfoace to move to next/last note\r\n async advanceSelection(isShift: boolean) {\r\n if (this.isRunning) {\r\n await this._updateLyricFromEditor();\r\n await this._advanceSelection(isShift);\r\n }\r\n }\r\n\r\n async removeLyric() {\r\n if (this.selection && this.lyric) {\r\n await this.view.removeLyric(this.selection.selector, this.lyric);\r\n this.lyric.skipRender = true;\r\n await this.advanceSelection(false);\r\n }\r\n }\r\n\r\n // ### _updateLyricFromEditor\r\n // The editor is done running, so update the lyric now.\r\n async _updateLyricFromEditor() {\r\n if (this.editor === null || this.lyric === null) {\r\n return;\r\n }\r\n const txt = this.editor.getText();\r\n this.lyric.setText(txt);\r\n this.lyric.skipRender = false;\r\n this.editor.stopEditor();\r\n if (!this.lyric.deleted && this.originalText !== txt && this.selection !== null) {\r\n await this.view.addOrUpdateLyric(this.selection.selector, this.lyric);\r\n }\r\n }\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.state !== SuiTextEditor.States.RUNNING) {\r\n return false;\r\n }\r\n if (evdata.key === '-' || evdata.key === ' ') {\r\n // skip\r\n const back = evdata.shiftKey && evdata.key === ' ';\r\n if (evdata.key === '-' && this.editor !== null) {\r\n await this.editor.evKey(evdata);\r\n }\r\n this._updateLyricFromEditor();\r\n this._advanceSelection(back);\r\n } else if (this.editor !== null) {\r\n await this.editor.evKey(evdata);\r\n this._hideLyric();\r\n }\r\n return true;\r\n }\r\n get textType(): number {\r\n if (this.isRunning && this.editor !== null) {\r\n return this.editor.textType;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n\r\n set textType(type) {\r\n if (this.editor) {\r\n this.editor.textType = type;\r\n }\r\n }\r\n // ### handleMouseEvent\r\n // Mouse event (send to editor)\r\n handleMouseEvent(ev: any) {\r\n if (this.state !== SuiTextEditor.States.RUNNING || this.editor === null) {\r\n return;\r\n }\r\n this.editor.handleMouseEvent(ev);\r\n }\r\n}\r\n\r\nexport class SuiChordSession extends SuiLyricSession {\r\n editor: SuiLyricEditor | null = null;\r\n constructor(params: SuiLyricSessionParams) {\r\n super(params);\r\n this.parser = SmoLyric.parsers.chord;\r\n }\r\n\r\n // ### evKey\r\n // Key handler (pass to editor)\r\n async evKey(evdata: KeyEvent): Promise {\r\n let edited = false;\r\n if (this.state !== SuiTextEditor.States.RUNNING) {\r\n return false;\r\n }\r\n if (evdata.code === 'Enter') {\r\n this._updateLyricFromEditor();\r\n this._advanceSelection(evdata.shiftKey);\r\n edited = true;\r\n } else if (this.editor !== null) {\r\n edited = await this.editor.evKey(evdata);\r\n }\r\n this._hideLyric();\r\n return edited;\r\n }\r\n\r\n // ### _setLyricForNote\r\n // Get the text from the editor and update the lyric with it.\r\n _setLyricForNote() {\r\n this.lyric = null;\r\n if (this.note === null) {\r\n return;\r\n }\r\n const lar = this.note.getLyricForVerse(this.verse, this.parser);\r\n if (lar.length) {\r\n this.lyric = lar[0] as SmoLyric;\r\n }\r\n if (!this.lyric) {\r\n const scoreFont = this.score.fonts.find((fn) => fn.name === 'chords');\r\n const fontInfo = JSON.parse(JSON.stringify(scoreFont));\r\n const ldef = SmoLyric.defaults;\r\n ldef.text = '';\r\n ldef.verse = this.verse;\r\n ldef.parser = this.parser;\r\n ldef.fontInfo = fontInfo;\r\n this.lyric = new SmoLyric(ldef);\r\n this.note.addLyric(this.lyric);\r\n }\r\n this.text = this.lyric.text;\r\n }\r\n // ### _startSessionForNote\r\n // Start the lyric editor for a note (current selected note)\r\n _startSessionForNote() {\r\n if (this.lyric === null) {\r\n return;\r\n }\r\n if (this.selection === null || this.note === null || this.note.logicalBox === null) {\r\n return;\r\n }\r\n let startX = this.note.logicalBox.x;\r\n let startY = this.selection.measure.svg.logicalBox.y;\r\n if (this.lyric.logicalBox !== null) {\r\n startX = this.lyric.logicalBox.x;\r\n startY = this.lyric.logicalBox.y + this.lyric.logicalBox.height;\r\n }\r\n this.selection.measure.svg.logicalBox.y + this.selection.measure.svg.logicalBox.height - 70;\r\n const context = this.renderer.pageMap.getRenderer({ x: startX, y: startY });\r\n if (context) {\r\n this.editor = new SuiChordEditor({\r\n context,\r\n lyric: this.lyric, x: startX, y: startY, scroller: this.scroller,\r\n text: this.lyric.getText(),\r\n pageMap: this.renderer.pageMap\r\n });\r\n this.state = SuiTextEditor.States.RUNNING;\r\n if (this.editor !== null && this.editor.svgText !== null) {\r\n const delta = (-1) * this.editor.svgText.maxFontHeight(1.0) * (this.lyric.verse + 1);\r\n this.editor.svgText.offsetStartY(delta);\r\n }\r\n this.cursorPromise = this.editor.startCursorPromise();\r\n this._hideLyric(); \r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers, OutlineInfo } from './svgHelpers';\r\nimport { SmoTextGroup, SmoScoreText } from '../../smo/data/scoreText';\r\nimport { SuiTextEditor } from './textEdit';\r\nimport { SuiScroller } from './scroller';\r\nimport { SmoAttrs, SvgBox, getId } from '../../smo/data/common';\r\nimport { SvgPage, SvgPageMap } from './svgPageMap';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { VexFlow,\r\n chordSubscriptOffset, chordSuperscriptOffset, FontInfo, getVexGlyphFromChordCode, \r\n getChordSymbolMetricsForGlyph, blockMetricsYShift } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\ndeclare var $: any;\r\nconst VF = VexFlow;\r\n\r\n// From textfont.ts in VF\r\n\r\n/**\r\n * parameters to render text\r\n * @category SuiParameters\r\n */\r\nexport interface SuiInlineTextParams {\r\n fontFamily: string,\r\n fontWeight: string,\r\n fontSize: number,\r\n fontStyle: string,\r\n startX: number,\r\n startY: number,\r\n scroller: SuiScroller,\r\n purpose: string,\r\n context: SvgPage,\r\n pageMap: SvgPageMap\r\n}\r\n/**\r\n * metrics for a single line of text. A textGroup can be composed\r\n * of multiple inline blocks.\r\n * @category SuiParameters\r\n */\r\nexport interface SuiInlineBlock {\r\n symbolType: number,\r\n textType: number,\r\n highlighted: boolean,\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number,\r\n scale: number,\r\n metrics: any,\r\n glyph: any,\r\n glyphCode: string,\r\n text: string\r\n}\r\nexport interface SuiInlineArtifact {\r\n block: SuiInlineBlock,\r\n box: SvgBox,\r\n index: number\r\n}\r\n// ## textRender.js\r\n// Classes responsible for formatting and rendering text in SVG space.\r\n\r\n/**\r\n * Inline text is a block of SVG text with the same font. Each block can\r\n * contain either text or an svg (vex) glyph. Each block in the text has its own\r\n * metrics so we can support inline svg text editors (cursor).\r\n * @category SuiRender\r\n */\r\nexport class SuiInlineText {\r\n static get textTypes() {\r\n return { normal: 0, superScript: 1, subScript: 2 };\r\n }\r\n static get symbolTypes() {\r\n return {\r\n GLYPH: 1,\r\n TEXT: 2,\r\n LINE: 3\r\n };\r\n }\r\n static get textPurposes(): Record {\r\n return {render: 'sui-inline-render', edit: 'sui-inline-edit' };\r\n }\r\n\r\n // ### textTypeTransitions\r\n // Given a current text type and a type change request, what is the result\r\n // text type? This truth table tells you.\r\n static get textTypeTransitions(): number[][] {\r\n return [\r\n [1, 1, 0],\r\n [1, 0, 1],\r\n [1, 2, 2],\r\n [2, 2, 0],\r\n [2, 0, 2],\r\n [2, 1, 1],\r\n [0, 1, 1],\r\n [0, 0, 0],\r\n [0, 2, 2]\r\n ];\r\n }\r\n\r\n static getTextTypeResult(oldType: number, newType: number): number {\r\n let rv = SuiInlineText.textTypes.normal;\r\n let i = 0;\r\n for (i = 0; i < SuiInlineText.textTypeTransitions.length; ++i) {\r\n const tt = SuiInlineText.textTypeTransitions[i];\r\n if (tt[0] === oldType && tt[1] === newType) {\r\n rv = tt[2];\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n static getTextTypeTransition(oldType: number, result: number): number {\r\n let rv = SuiInlineText.textTypes.normal;\r\n let i = 0;\r\n for (i = 0; i < SuiInlineText.textTypeTransitions.length; ++i) {\r\n const tt = SuiInlineText.textTypeTransitions[i];\r\n if (tt[0] === oldType && tt[2] === result) {\r\n rv = tt[1];\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n get spacing(): number {\r\n return VF.ChordSymbol.spacingBetweenBlocks;\r\n }\r\n\r\n static get defaults(): SuiInlineTextParams {\r\n return JSON.parse(JSON.stringify({\r\n blocks: [],\r\n fontFamily: 'Merriweather',\r\n fontSize: 14,\r\n startX: 100,\r\n startY: 100,\r\n fontWeight: 500,\r\n fontStyle: 'normal',\r\n scale: 1,\r\n activeBlock: -1,\r\n artifacts: [],\r\n purpose: 'render',\r\n classes: '',\r\n updatedMetrics: false\r\n }));\r\n }\r\n fontFamily: string;\r\n fontWeight: string;\r\n fontStyle: string;\r\n fontSize: number;\r\n width: number = -1;\r\n height: number = -1;\r\n purpose: string;\r\n\r\n attrs: SmoAttrs;\r\n textFont: TextFormatter;\r\n startX: number;\r\n startY: number;\r\n blocks: SuiInlineBlock[] = [];\r\n updatedMetrics: boolean = false;\r\n context: SvgPage;\r\n pageMap: SvgPageMap;\r\n scroller: SuiScroller;\r\n artifacts: SuiInlineArtifact[] = [];\r\n logicalBox: SvgBox = SvgBox.default;\r\n element: SVGSVGElement | null = null;\r\n\r\n updateFontInfo(): TextFormatter {\r\n const tf = TextFormatter.create({\r\n family: this.fontFamily,\r\n weight: this.fontWeight,\r\n size: this.fontSize,\r\n style: this.fontStyle\r\n });\r\n return tf;\r\n }\r\n // ### constructor just creates an empty svg\r\n constructor(params: SuiInlineTextParams) {\r\n this.fontFamily = params.fontFamily;\r\n this.fontWeight = params.fontWeight;\r\n this.fontStyle = params.fontStyle;\r\n this.fontSize = params.fontSize;\r\n this.textFont = this.updateFontInfo();\r\n this.scroller = params.scroller;\r\n this.startX = params.startX;\r\n this.startY = params.startY;\r\n this.purpose = params.purpose;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SuiInlineText'\r\n };\r\n this.context = params.context;\r\n this.pageMap = params.pageMap;\r\n }\r\n\r\n static fromScoreText(scoreText: SmoScoreText, context: SvgPage, pageMap: SvgPageMap, scroller: SuiScroller): SuiInlineText {\r\n \r\n const params: SuiInlineTextParams = {\r\n fontFamily: SmoScoreText.familyString(scoreText.fontInfo.family),\r\n fontWeight: SmoScoreText.weightString(scoreText.fontInfo.weight),\r\n fontStyle: scoreText.fontInfo.style ?? 'normal',\r\n startX: scoreText.x, startY: scoreText.y,\r\n scroller,\r\n purpose: SuiInlineText.textPurposes.render,\r\n fontSize: SmoScoreText.fontPointSize(scoreText.fontInfo.size), context,\r\n pageMap\r\n };\r\n const rv = new SuiInlineText(params);\r\n rv.attrs.id = scoreText.attrs.id;\r\n const blockParams = SuiInlineText.blockDefaults;\r\n blockParams.text = scoreText.text;\r\n rv.addTextBlockAt(0, blockParams);\r\n return rv;\r\n }\r\n\r\n static get blockDefaults(): SuiInlineBlock {\r\n return JSON.parse(JSON.stringify({\r\n symbolType: SuiInlineText.symbolTypes.TEXT,\r\n textType: SuiInlineText.textTypes.normal,\r\n highlighted: false,\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n scale: 1.0,\r\n glyph: {},\r\n text: '',\r\n glyphCode: ''\r\n }));\r\n }\r\n\r\n // ### pointsToPixels\r\n // The font size is specified in points, convert to 'pixels' in the svg space\r\n get pointsToPixels(): number {\r\n return this.textFont.fontSizeInPixels;\r\n }\r\n\r\n offsetStartX(offset: number) {\r\n this.startX += offset;\r\n this.blocks.forEach((block) => {\r\n block.x += offset;\r\n });\r\n }\r\n\r\n offsetStartY(offset: number) {\r\n this.startY += offset;\r\n this.blocks.forEach((block) => {\r\n block.y += offset;\r\n });\r\n }\r\n maxFontHeight(scale: number): number {\r\n return this.textFont.maxHeight * scale;\r\n }\r\n\r\n _glyphOffset(block: SuiInlineBlock): number {\r\n return blockMetricsYShift(block.glyph.getMetrics()) * this.pointsToPixels * block.scale;\r\n }\r\n\r\n /**\r\n * Based on the font metrics, compute the width of the strings and glyph that make up\r\n * this block\r\n */\r\n _calculateBlockIndex() {\r\n var curX = this.startX;\r\n var maxH = 0;\r\n let superXAlign = 0;\r\n let superXWidth = 0;\r\n let prevBlock: SuiInlineBlock | null = null;\r\n let i = 0;\r\n this.textFont.setFontSize(this.fontSize);\r\n this.blocks.forEach((block) => {\r\n // super/subscript\r\n const sp = this.isSuperscript(block);\r\n const sub = this.isSubcript(block);\r\n\r\n block.width = 0;\r\n block.height = 0;\r\n\r\n // coeff for sub/super script\r\n const subAdj = (sp || sub) ? VF.ChordSymbol.superSubRatio : 1.0;\r\n // offset for super/sub\r\n let subOffset = 0;\r\n if (sp) {\r\n subOffset = chordSuperscriptOffset() * this.pointsToPixels;\r\n } else if (sub) {\r\n subOffset = chordSubscriptOffset() * this.pointsToPixels;\r\n } else {\r\n subOffset = 0;\r\n }\r\n block.x = curX;\r\n if (block.symbolType === SuiInlineText.symbolTypes.TEXT) {\r\n for (i = 0; i < block.text.length; ++i) {\r\n const ch = block.text[i];\r\n const glyph = this.textFont.getGlyphMetrics(ch);\r\n block.width += ((glyph.advanceWidth ?? 0) / this.textFont.getResolution()) * this.pointsToPixels * block.scale * subAdj;\r\n const blockHeight = (glyph.ha / this.textFont.getResolution()) * this.pointsToPixels * block.scale;\r\n block.height = block.height < blockHeight ? blockHeight : block.height;\r\n block.y = this.startY + (subOffset * block.scale);\r\n }\r\n } else if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n // TODO: vexflow broke leftSideBearing and advanceWidth\r\n // vex5\r\n /*\r\n block.width = (block.glyph.getMetrics().width) * this.pointsToPixels * block.scale;\r\n block.height = (block.glyph.getMetrics().ha) * this.pointsToPixels * block.scale;\r\n block.x += block.glyph.getMetrics().xMin * this.pointsToPixels * block.scale;\r\n */\r\n block.width = (block.metrics.advanceWidth / VF.ChordSymbol.engravingFontResolution) * this.pointsToPixels * block.scale;\r\n block.height = (block.glyph.metrics.ha / VF.ChordSymbol.engravingFontResolution) * this.pointsToPixels * block.scale; \r\n block.x += block.metrics.leftSideBearing / VF.ChordSymbol.engravingFontResolution * this.pointsToPixels * block.scale;\r\n block.y = this.startY + this._glyphOffset(block) + subOffset;\r\n }\r\n // Line subscript up with super if the follow each other\r\n if (sp) {\r\n if (superXAlign === 0) {\r\n superXAlign = block.x;\r\n }\r\n } else if (sub) {\r\n if (superXAlign > 0 && prevBlock !== null) {\r\n block.x = superXAlign;\r\n superXWidth = prevBlock.x + prevBlock.width;\r\n curX = superXAlign;\r\n superXAlign = 0;\r\n } else {\r\n if (superXWidth > 0 && superXWidth < block.width + block.x) {\r\n superXWidth = block.width + block.x;\r\n }\r\n }\r\n } else if (superXWidth > 0) {\r\n block.x = superXWidth + VF.ChordSymbol.spacingBetweenBlocks;\r\n superXWidth = 0;\r\n } else {\r\n superXAlign = 0;\r\n }\r\n curX += block.width;\r\n maxH = block.height > maxH ? maxH : block.height;\r\n prevBlock = block;\r\n });\r\n this.width = curX - this.startX;\r\n this.height = maxH;\r\n this.updatedMetrics = true;\r\n }\r\n\r\n // ### getLogicalBox\r\n // return the calculated svg metrics. In SMO parlance the\r\n // logical box is in SVG space, 'renderedBox' is in client space.\r\n getLogicalBox(): SvgBox {\r\n let rv: SvgBox = SvgBox.default;\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n const adjBox = (box: SvgBox) => {\r\n const nbox = SvgHelpers.smoBox(box);\r\n nbox.y = nbox.y - nbox.height;\r\n return nbox;\r\n };\r\n this.blocks.forEach((block) => {\r\n if (!rv.x) {\r\n rv = SvgHelpers.smoBox(adjBox(block));\r\n } else {\r\n rv = SvgHelpers.unionRect(rv, adjBox(block));\r\n }\r\n });\r\n return rv;\r\n }\r\n // ### renderCursorAt\r\n // When we are using textLayout to render editor, create a cursor that adjusts it's size\r\n renderCursorAt(position: number, textType: number) {\r\n let adjH = 0;\r\n let adjY = 0;\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n const group = this.context.getContext().openGroup();\r\n group.id = 'inlineCursor';\r\n const h = this.fontSize;\r\n if (this.blocks.length <= position || position < 0) {\r\n const x = this.startX - this.context.box.x;\r\n const y = this.startY - this.context.box.y;\r\n SvgHelpers.renderCursor(group, x, y - h, h);\r\n this.context.getContext().closeGroup();\r\n return;\r\n }\r\n const block = this.blocks[position];\r\n adjH = block.symbolType === SuiInlineText.symbolTypes.GLYPH ? h / 2 : h;\r\n // For glyph, add y adj back to the cursor since it's not a glyph\r\n adjY = block.symbolType === SuiInlineText.symbolTypes.GLYPH ? block.y - this._glyphOffset(block) :\r\n block.y;\r\n if (typeof (textType) === 'number' && textType !== SuiInlineText.textTypes.normal) {\r\n const ratio = textType !== SuiInlineText.textTypes.normal ? VF.ChordSymbol.superSubRatio : 1.0;\r\n adjH = adjH * ratio;\r\n if (textType !== block.textType) {\r\n if (textType === SuiInlineText.textTypes.superScript) {\r\n adjY -= h / 2;\r\n } else {\r\n adjY += h / 2;\r\n }\r\n }\r\n }\r\n const x = block.x + block.width - this.context.box.x;\r\n const y = adjY - (adjH * block.scale) - this.context.box.y;\r\n SvgHelpers.renderCursor(group, x, y, adjH * block.scale);\r\n this.context.getContext().closeGroup();\r\n }\r\n removeCursor() {\r\n $('svg #inlineCursor').remove();\r\n }\r\n unrender() {\r\n this.element?.remove();\r\n this.element = null;\r\n }\r\n getIntersectingBlocks(box: SvgBox): SuiInlineArtifact[] {\r\n if (!this.artifacts) {\r\n return [];\r\n }\r\n return SvgHelpers.findIntersectingArtifact(box, this.artifacts) as SuiInlineArtifact[];\r\n }\r\n _addBlockAt(position: number, block: SuiInlineBlock) {\r\n if (position >= this.blocks.length) {\r\n this.blocks.push(block);\r\n } else {\r\n this.blocks.splice(position, 0, block);\r\n }\r\n }\r\n removeBlockAt(position: number) {\r\n this.blocks.splice(position, 1);\r\n this.updatedMetrics = false;\r\n }\r\n\r\n // ### addTextBlockAt\r\n // Add a text block to the line of text.\r\n // params must contain at least:\r\n // {text:'xxx'}\r\n addTextBlockAt(position: number, params: SuiInlineBlock) {\r\n const block: SuiInlineBlock = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n smoSerialize.vexMerge(block, params);\r\n block.text = params.text;\r\n block.scale = params.scale ? params.scale : 1;\r\n this._addBlockAt(position, block);\r\n this.updatedMetrics = false;\r\n }\r\n _getGlyphBlock(params: SuiInlineBlock): SuiInlineBlock {\r\n // vex 5\r\n /* const block: SuiInlineBlock = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n smoSerialize.vexMerge(block, params);\r\n params.text = params.glyphCode;\r\n block.text = params.text;\r\n block.scale = params.scale ? params.scale : 1; */\r\n const block = JSON.parse(JSON.stringify(SuiInlineText.blockDefaults));\r\n block.symbolType = SuiInlineText.symbolTypes.GLYPH;\r\n\r\n block.glyphCode = params.glyphCode;\r\n const vexCode = getVexGlyphFromChordCode(block.glyphCode);\r\n block.glyph = new VF.Glyph(vexCode, this.fontSize);\r\n // Vex 4 feature, vex 5 elimitated metrics here\r\n block.metrics = getChordSymbolMetricsForGlyph(vexCode);\r\n block.scale = (params.textType && params.textType !== SuiInlineText.textTypes.normal) ?\r\n 2 * VF.ChordSymbol.superSubRatio : 2;\r\n\r\n block.textType = params.textType ? params.textType : SuiInlineText.textTypes.normal;\r\n\r\n block.glyph.scale = block.glyph.scale * block.scale;\r\n return block;\r\n }\r\n // ### addGlyphBlockAt\r\n // Add a glyph block to the line of text. Params must include:\r\n // {glyphCode:'csymDiminished'}\r\n addGlyphBlockAt(position: number, params: SuiInlineBlock) {\r\n const block = this._getGlyphBlock(params);\r\n this._addBlockAt(position, block);\r\n this.updatedMetrics = false;\r\n }\r\n isSuperscript(block: SuiInlineBlock): boolean {\r\n return block.textType === SuiInlineText.textTypes.superScript;\r\n }\r\n isSubcript(block: SuiInlineBlock): boolean {\r\n return block.textType === SuiInlineText.textTypes.subScript;\r\n }\r\n getHighlight(block: SuiInlineBlock): boolean {\r\n return block.highlighted;\r\n }\r\n setHighlight(block: SuiInlineBlock, value: boolean) {\r\n block.highlighted = value;\r\n }\r\n\r\n rescale(scale: number) {\r\n scale = (scale * this.fontSize < 6) ? 6 / this.fontSize : scale;\r\n scale = (scale * this.fontSize > 72) ? 72 / this.fontSize : scale;\r\n this.blocks.forEach((block) => {\r\n block.scale = scale;\r\n });\r\n this.updatedMetrics = false;\r\n }\r\n\r\n render() {\r\n if (!this.updatedMetrics) {\r\n this._calculateBlockIndex();\r\n }\r\n\r\n this.context.getContext().setFont({\r\n family: this.fontFamily, size: this.fontSize, weight: this.fontWeight, style: this.fontStyle\r\n });\r\n const group = this.context.getContext().openGroup();\r\n this.element = group;\r\n const mmClass = 'suiInlineText';\r\n let ix = 0;\r\n group.classList.add('vf-' + this.attrs.id);\r\n group.classList.add(this.attrs.id);\r\n group.classList.add(mmClass);\r\n group.classList.add(this.purpose);\r\n group.id = this.attrs.id;\r\n this.artifacts = [];\r\n\r\n this.blocks.forEach((block) => {\r\n var bg = this.context.getContext().openGroup();\r\n bg.classList.add('textblock-' + this.attrs.id + ix);\r\n this._drawBlock(block);\r\n this.context.getContext().closeGroup();\r\n const artifact: SuiInlineArtifact = { block, box: SvgBox.default, index: 0 };\r\n artifact.box = this.context.offsetBbox(bg);\r\n artifact.index = ix;\r\n this.artifacts.push(artifact);\r\n ix += 1;\r\n });\r\n this.context.getContext().closeGroup();\r\n this.logicalBox = this.context.offsetBbox(group);\r\n }\r\n\r\n _drawBlock(block: SuiInlineBlock) {\r\n const sp = this.isSuperscript(block);\r\n const sub = this.isSubcript(block);\r\n const highlight = this.getHighlight(block);\r\n const y = block.y - this.context.box.y; // relative y into page\r\n\r\n if (highlight) {\r\n this.context.getContext().save();\r\n this.context.getContext().setFillStyle('#999');\r\n }\r\n\r\n // This is how svgcontext expects to get 'style'\r\n const weight = this.fontWeight;\r\n const style = this.fontStyle;\r\n const family = this.fontFamily;\r\n if (sp || sub) {\r\n this.context.getContext().save();\r\n this.context.getContext().setFont({\r\n family, size: this.fontSize * VF.ChordSymbol.superSubRatio * block.scale, weight, style\r\n });\r\n } else {\r\n this.context.getContext().setFont({ family, size: this.fontSize * block.scale, weight, style });\r\n }\r\n if (block.symbolType === SuiInlineText.symbolTypes.TEXT) {\r\n this.context.getContext().fillText(block.text, block.x, y);\r\n } else if (block.symbolType === SuiInlineText.symbolTypes.GLYPH) {\r\n block.glyph.render(this.context.getContext(), block.x, y);\r\n }\r\n if (sp || sub) {\r\n this.context.getContext().restore();\r\n }\r\n if (highlight) {\r\n this.context.getContext().restore();\r\n }\r\n }\r\n\r\n getText(): string {\r\n let rv = '';\r\n this.blocks.forEach((block) => {\r\n rv += block.text;\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport interface SuiTextBlockBlock {\r\n text: SuiInlineText;\r\n position: number;\r\n activeText: boolean;\r\n}\r\nexport interface SuiTextBlockParams {\r\n blocks: SuiTextBlockBlock[];\r\n scroller: SuiScroller;\r\n spacing: number;\r\n context: SvgPage;\r\n skipRender: boolean;\r\n justification: number;\r\n}\r\nexport interface SuiTextBlockJusityCalc {\r\n blocks: SuiInlineText[], minx: number, maxx: number, width: number\r\n}\r\n// ## SuiTextBlock\r\n// A text block is a set of inline blocks that can be aligned/arranged in different ways.\r\nexport class SuiTextBlock {\r\n static get relativePosition() {\r\n return {\r\n ABOVE: SmoTextGroup.relativePositions.ABOVE,\r\n BELOW: SmoTextGroup.relativePositions.BELOW,\r\n LEFT: SmoTextGroup.relativePositions.LEFT,\r\n RIGHT: SmoTextGroup.relativePositions.RIGHT\r\n };\r\n }\r\n inlineBlocks: SuiTextBlockBlock[] = [];\r\n scroller: SuiScroller;\r\n spacing: number = 0;\r\n context: SvgPage;\r\n skipRender: boolean;\r\n currentBlockIndex: number = 0;\r\n justification: number;\r\n outlineRect: OutlineInfo | null = null;\r\n currentBlock: SuiTextBlockBlock | null = null;\r\n logicalBox: SvgBox = SvgBox.default;\r\n constructor(params: SuiTextBlockParams) {\r\n this.inlineBlocks = [];\r\n this.scroller = params.scroller;\r\n this.spacing = params.spacing;\r\n this.context = params.context;\r\n this.skipRender = false; // used when editing the text\r\n if (params.blocks.length < 1) {\r\n const inlineParams = SuiInlineText.defaults;\r\n inlineParams.scroller = this.scroller;\r\n inlineParams.context = this.context;\r\n const inst = new SuiInlineText(inlineParams);\r\n params.blocks = [{ text: inst, position: SmoTextGroup.relativePositions.RIGHT, activeText: true }];\r\n }\r\n params.blocks.forEach((block) => {\r\n if (!this.currentBlock) {\r\n this.currentBlock = block;\r\n this.currentBlockIndex = 0;\r\n }\r\n this.inlineBlocks.push(block);\r\n });\r\n this.justification = params.justification ? params.justification :\r\n SmoTextGroup.justifications.LEFT;\r\n }\r\n render() {\r\n this.unrender(); \r\n this.inlineBlocks.forEach((block) => {\r\n block.text.render();\r\n if (block.activeText) {\r\n this._outlineBox(this.context, block.text.logicalBox);\r\n }\r\n if (!this.logicalBox || this.logicalBox.width < 1) {\r\n this.logicalBox = SvgHelpers.smoBox(block.text.logicalBox);\r\n } else {\r\n this.logicalBox = SvgHelpers.unionRect(this.logicalBox, block.text.logicalBox);\r\n }\r\n });\r\n }\r\n _outlineBox(context: any, box: SvgBox) {\r\n const outlineStroke = SuiTextEditor.strokes['text-highlight'];\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context, box, classes: 'text-drag',\r\n stroke: outlineStroke, scroll: this.scroller.scrollState, timeOff: 1000\r\n };\r\n }\r\n this.outlineRect.box = box;\r\n this.outlineRect.context = context;\r\n this.outlineRect.scroll = this.scroller.scrollState;\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n\r\n offsetStartX(offset: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.offsetStartX(offset);\r\n });\r\n }\r\n\r\n offsetStartY(offset: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.offsetStartY(offset);\r\n });\r\n }\r\n\r\n rescale(scale: number) {\r\n this.inlineBlocks.forEach((block) => {\r\n block.text.rescale(scale);\r\n });\r\n }\r\n\r\n get x(): number {\r\n return this.getLogicalBox().x;\r\n }\r\n get y(): number {\r\n return this.getLogicalBox().y;\r\n }\r\n\r\n maxFontHeight(scale: number): number {\r\n let rv = 0;\r\n this.inlineBlocks.forEach((block) => {\r\n const blockHeight = block.text.maxFontHeight(scale);\r\n rv = blockHeight > rv ? blockHeight : rv;\r\n });\r\n return rv;\r\n }\r\n static blockFromScoreText(scoreText: SmoScoreText, context: SvgPage, pageMap: SvgPageMap, position: number, scroller: SuiScroller): SuiTextBlockBlock {\r\n var inlineText = SuiInlineText.fromScoreText(scoreText, context, pageMap, scroller);\r\n return { text: inlineText, position, activeText: true };\r\n }\r\n\r\n getLogicalBox(): SvgBox {\r\n return this._calculateBoundingClientRect();\r\n }\r\n _calculateBoundingClientRect(): SvgBox {\r\n let rv: SvgBox = SvgBox.default;\r\n this.inlineBlocks.forEach((block) => {\r\n if (!rv.x) {\r\n rv = block.text.getLogicalBox();\r\n } else {\r\n rv = SvgHelpers.unionRect(rv, block.text.getLogicalBox());\r\n }\r\n });\r\n rv.y = rv.y - rv.height;\r\n return rv;\r\n }\r\n static fromTextGroup(tg: SmoTextGroup, context: SvgPage, pageMap: SvgPageMap, scroller: SuiScroller): SuiTextBlock {\r\n const blocks: SuiTextBlockBlock[] = [];\r\n\r\n // Create an inline block for each ScoreText\r\n tg.textBlocks.forEach((stBlock) => {\r\n const st = stBlock.text;\r\n const newText = SuiTextBlock.blockFromScoreText(st, context, pageMap, stBlock.position, scroller);\r\n newText.activeText = stBlock.activeText;\r\n blocks.push(newText);\r\n });\r\n const rv = new SuiTextBlock({\r\n blocks, justification: tg.justification, spacing: tg.spacing, context, scroller,\r\n skipRender: false\r\n });\r\n rv._justify();\r\n return rv;\r\n }\r\n unrender() {\r\n this.inlineBlocks.forEach((block) => {\r\n if (block.text.element) {\r\n block.text.element.remove();\r\n block.text.element = null;\r\n }\r\n });\r\n }\r\n // ### _justify\r\n // justify the blocks according to the group justify policy and the\r\n // relative position of the blocks\r\n _justify() {\r\n let hIx = 0;\r\n let left = 0;\r\n let minx = 0;\r\n let maxx = 0;\r\n let lvl = 0;\r\n let maxwidth = 0;\r\n let runningWidth = 0;\r\n let runningHeight = 0;\r\n if (!this.inlineBlocks.length) {\r\n return;\r\n }\r\n minx = this.inlineBlocks[0].text.startX;\r\n // We justify relative to first block x/y.\r\n const initialX = this.inlineBlocks[0].text.startX;\r\n const initialY = this.inlineBlocks[0].text.startY;\r\n const vert: Record = {};\r\n this.inlineBlocks.forEach((inlineBlock) => {\r\n const block = inlineBlock.text;\r\n const blockBox = block.getLogicalBox();\r\n // If this is a horizontal positioning, reset to first blokc position\r\n //\r\n if (hIx > 0) {\r\n block.startX = initialX;\r\n block.startY = initialY;\r\n }\r\n minx = block.startX < minx ? block.startX : minx;\r\n maxx = (block.startX + blockBox.width) > maxx ? block.startX + blockBox.width : maxx;\r\n\r\n lvl = inlineBlock.position === SmoTextGroup.relativePositions.ABOVE ? lvl + 1 : lvl;\r\n lvl = inlineBlock.position === SmoTextGroup.relativePositions.BELOW ? lvl - 1 : lvl;\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.RIGHT) {\r\n block.startX += runningWidth;\r\n if (hIx > 0) {\r\n block.startX += this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.LEFT) {\r\n if (hIx > 0) {\r\n block.startX = minx - blockBox.width;\r\n minx = block.startX;\r\n block.startX -= this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.BELOW) {\r\n block.startY += runningHeight;\r\n if (hIx > 0) {\r\n block.startY += this.spacing;\r\n }\r\n }\r\n if (inlineBlock.position === SmoTextGroup.relativePositions.ABOVE) {\r\n block.startY -= runningHeight;\r\n if(hIx > 0) {\r\n block.startY -= this.spacing;\r\n }\r\n }\r\n if (!vert[lvl]) {\r\n vert[lvl] = {\r\n blocks: [block], minx: block.startX, maxx: block.startX + blockBox.width,\r\n width: blockBox.width\r\n };\r\n maxwidth = vert[lvl].width;\r\n vert[lvl].blocks = [block];\r\n vert[lvl].minx = block.startX;\r\n vert[lvl].maxx = block.startX + blockBox.width;\r\n maxwidth = vert[lvl].width = blockBox.width;\r\n } else {\r\n vert[lvl].blocks.push(block);\r\n vert[lvl].minx = vert[lvl].minx < block.startX ? vert[lvl].minx : block.startX;\r\n vert[lvl].maxx = vert[lvl].maxx > (block.startX + blockBox.width) ?\r\n vert[lvl].maxx : (block.startX + blockBox.width);\r\n vert[lvl].width += blockBox.width;\r\n maxwidth = maxwidth > vert[lvl].width ? maxwidth : vert[lvl].width;\r\n }\r\n runningWidth += blockBox.width;\r\n runningHeight += blockBox.height;\r\n hIx += 1;\r\n block.updatedMetrics = false;\r\n });\r\n\r\n const levels = Object.keys(vert);\r\n\r\n // Horizontal justify the vertical blocks\r\n levels.forEach((level) => {\r\n const vobj = vert[level];\r\n if (this.justification === SmoTextGroup.justifications.LEFT) {\r\n left = minx - vobj.minx;\r\n } else if (this.justification === SmoTextGroup.justifications.RIGHT) {\r\n left = maxx - vobj.maxx;\r\n } else {\r\n left = (maxwidth / 2) - (vobj.width / 2);\r\n left += minx - vobj.minx;\r\n }\r\n vobj.blocks.forEach((block) => {\r\n block.offsetStartX(left);\r\n });\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiMapper, SuiRendererBase } from './mapper';\r\nimport { SvgHelpers, StrokeInfo, OutlineInfo } from './svgHelpers';\r\nimport { SmoSelection, SmoSelector, ModifierTab } from '../../smo/xform/selections';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SuiOscillator } from '../audio/oscillator';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SvgBox, KeyEvent } from '../../smo/data/common';\r\nimport { SuiScroller } from './scroller';\r\nimport { PasteBuffer } from '../../smo/xform/copypaste';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { layoutDebug } from './layoutDebug';\r\ndeclare var $: any;\r\n\r\n/**\r\n * SuiTracker\r\n A tracker maps the UI elements to the logical elements ,and allows the user to\r\n move through the score and make selections, for navigation and editing.\r\n */\r\nexport class SuiTracker extends SuiMapper {\r\n idleTimer: number = Date.now();\r\n musicCursorGlyph: SVGSVGElement | null = null;\r\n static get strokes(): Record {\r\n return {\r\n suggestion: {\r\n strokeName: 'suggestion',\r\n stroke: '#fc9',\r\n strokeWidth: 3,\r\n strokeDasharray: '4,1',\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n selection: {\r\n strokeName: 'selection',\r\n stroke: '#99d',\r\n strokeWidth: 3,\r\n strokeDasharray: 2,\r\n fill: 'none',\r\n opacity: 1.0\r\n },\r\n staffModifier: {\r\n strokeName: 'staffModifier',\r\n stroke: '#933',\r\n strokeWidth: 3,\r\n fill: 'none',\r\n strokeDasharray: 0,\r\n opacity: 1.0\r\n }, pitchSelection: {\r\n strokeName: 'pitchSelection',\r\n stroke: '#933',\r\n strokeWidth: 3,\r\n fill: 'none',\r\n strokeDasharray: 0,\r\n opacity: 1.0\r\n }\r\n\r\n };\r\n }\r\n constructor(renderer: SuiRendererBase, scroller: SuiScroller) {\r\n super(renderer, scroller);\r\n }\r\n // ### renderElement\r\n // the element the score is rendered on\r\n get renderElement(): Element {\r\n return this.renderer.renderElement;\r\n }\r\n\r\n get score(): SmoScore | null {\r\n return this.renderer.score;\r\n }\r\n\r\n getIdleTime(): number {\r\n return this.idleTimer;\r\n }\r\n\r\n getSelectedModifier() {\r\n if (this.modifierSelections.length) {\r\n return this.modifierSelections[0];\r\n }\r\n return null;\r\n }\r\n\r\n getSelectedModifiers() {\r\n return this.modifierSelections;\r\n }\r\n\r\n static serializeEvent(evKey: KeyEvent | null): any {\r\n if (!evKey) {\r\n return [];\r\n }\r\n const rv = {};\r\n smoSerialize.serializedMerge(['type', 'shiftKey', 'ctrlKey', 'altKey', 'key', 'keyCode'], evKey, rv);\r\n return rv;\r\n }\r\n\r\n advanceModifierSelection(score: SmoScore, keyEv: KeyEvent | null) {\r\n if (!keyEv) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n const offset = keyEv.key === 'ArrowLeft' ? -1 : 1;\r\n this.modifierIndex = this.modifierIndex + offset;\r\n this.modifierIndex = (this.modifierIndex === -2 && this.localModifiers.length) ?\r\n this.localModifiers.length - 1 : this.modifierIndex;\r\n if (this.modifierIndex >= this.localModifiers.length || this.modifierIndex < 0) {\r\n this.modifierIndex = -1;\r\n this.modifierSelections = [];\r\n $('.vf-staffModifier').remove();\r\n return;\r\n }\r\n const local: ModifierTab = this.localModifiers[this.modifierIndex];\r\n const box: SvgBox = SvgHelpers.smoBox(local.box) as SvgBox;\r\n this.modifierSelections = [{ index: 0, box, modifier: local.modifier, selection: local.selection }];\r\n this._highlightModifier();\r\n }\r\n\r\n static stringifyBox(box: SvgBox): string {\r\n return '{x:' + box.x + ',y:' + box.y + ',width:' + box.width + ',height:' + box.height + '}';\r\n }\r\n\r\n // ### _getOffsetSelection\r\n // Get the selector that is the offset of the first existing selection\r\n _getOffsetSelection(offset: number): SmoSelector {\r\n if (!this.score) {\r\n return SmoSelector.default;\r\n }\r\n let testSelection = this.getExtremeSelection(Math.sign(offset));\r\n const scopyTick = JSON.parse(JSON.stringify(testSelection.selector));\r\n const scopyMeasure = JSON.parse(JSON.stringify(testSelection.selector));\r\n scopyTick.tick += offset;\r\n scopyMeasure.measure += offset;\r\n const targetMeasure = SmoSelection.measureSelection(this.score, testSelection.selector.staff,\r\n scopyMeasure.measure);\r\n if (targetMeasure && targetMeasure.measure && targetMeasure.measure.voices.length <= scopyMeasure.voice) {\r\n scopyMeasure.voice = 0;\r\n }\r\n if (targetMeasure && targetMeasure.measure) {\r\n scopyMeasure.tick = (offset < 0) ? targetMeasure.measure.voices[scopyMeasure.voice].notes.length - 1 : 0;\r\n }\r\n\r\n if (testSelection.measure.voices.length > scopyTick.voice &&\r\n testSelection.measure.voices[scopyTick.voice].notes.length > scopyTick.tick && scopyTick.tick >= 0) {\r\n if (testSelection.selector.voice !== testSelection.measure.getActiveVoice()) {\r\n scopyTick.voice = testSelection.measure.getActiveVoice();\r\n testSelection = this._getClosestTick(scopyTick);\r\n return testSelection.selector;\r\n }\r\n return scopyTick;\r\n } else if (targetMeasure &&\r\n scopyMeasure.measure < testSelection.staff.measures.length && scopyMeasure.measure >= 0) {\r\n return scopyMeasure;\r\n }\r\n return testSelection.selector;\r\n }\r\n\r\n getSelectedGraceNotes(): ModifierTab[] {\r\n if (!this.modifierSelections.length) {\r\n return [];\r\n }\r\n const ff = this.modifierSelections.filter((mm) =>\r\n mm.modifier?.attrs?.type === 'SmoGraceNote'\r\n );\r\n return ff;\r\n }\r\n\r\n isGraceNoteSelected(): boolean {\r\n if (this.modifierSelections.length) {\r\n const ff = this.modifierSelections.findIndex((mm) => mm.modifier.attrs.type === 'SmoGraceNote');\r\n return ff >= 0;\r\n }\r\n return false;\r\n }\r\n\r\n _growGraceNoteSelections(offset: number) {\r\n this.idleTimer = Date.now();\r\n const far = this.modifierSelections.filter((mm) => mm.modifier.attrs.type === 'SmoGraceNote');\r\n if (!far.length) {\r\n return;\r\n }\r\n const ix = (offset < 0) ? 0 : far.length - 1;\r\n const sel: ModifierTab = far[ix] as ModifierTab;\r\n const left = this.localModifiers.filter((mt) =>\r\n mt.modifier?.attrs?.type === 'SmoGraceNote' && sel.selection && mt.selection &&\r\n SmoSelector.sameNote(mt.selection.selector, sel.selection.selector)\r\n );\r\n if (ix + offset < 0 || ix + offset >= left.length) {\r\n return;\r\n }\r\n const leftSel = left[ix + offset];\r\n if (!leftSel) {\r\n console.warn('bad selector in _growGraceNoteSelections');\r\n }\r\n leftSel.box = leftSel.box ?? SvgBox.default;\r\n this.modifierSelections.push(leftSel);\r\n this._highlightModifier();\r\n }\r\n get autoPlay(): boolean {\r\n return this.renderer.score ? this.renderer.score.preferences.autoPlay : false;\r\n }\r\n\r\n growSelectionRight() {\r\n this._growSelectionRight(false);\r\n }\r\n _growSelectionRight(skipPlay: boolean): number {\r\n this.idleTimer = Date.now();\r\n if (this.isGraceNoteSelected()) {\r\n this._growGraceNoteSelections(1);\r\n return 0;\r\n }\r\n const nselect = this._getOffsetSelection(1);\r\n // already selected\r\n const artifact = this._getClosestTick(nselect);\r\n if (!artifact) {\r\n return 0;\r\n }\r\n if (this.selections.find((sel) => SmoSelector.sameNote(sel.selector, artifact.selector))) {\r\n return 0;\r\n }\r\n if (!this.mapping && this.autoPlay && skipPlay === false && this.score) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n this.selections.push(artifact);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n return (artifact.note as SmoNote).tickCount;\r\n }\r\n moveHome(score: SmoScore, evKey: KeyEvent) {\r\n this.idleTimer = Date.now();\r\n const ls = this.selections[0].staff;\r\n if (evKey.ctrlKey) {\r\n const mm = ls.measures[0];\r\n const homeSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: 0, voice: mm.getActiveVoice(), tick: 0, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], homeSel);\r\n } else {\r\n this.selections = [homeSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (homeSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(homeSel.measure.svg.logicalBox);\r\n }\r\n }\r\n } else {\r\n const system = this.selections[0].measure.svg.lineIndex;\r\n const lm = ls.measures.find((mm) =>\r\n mm.svg.lineIndex === system && mm.measureNumber.systemIndex === 0);\r\n const mm = lm as SmoMeasure;\r\n const homeSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: mm.measureNumber.measureIndex, voice: mm.getActiveVoice(),\r\n tick: 0, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], homeSel);\r\n } else if (homeSel?.measure?.svg?.logicalBox) {\r\n this.selections = [homeSel];\r\n this.scroller.scrollVisibleBox(homeSel.measure.svg.logicalBox);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n }\r\n }\r\n moveEnd(score: SmoScore, evKey: KeyEvent) {\r\n this.idleTimer = Date.now();\r\n const ls = this.selections[0].staff;\r\n if (evKey.ctrlKey) {\r\n const lm = ls.measures[ls.measures.length - 1];\r\n const voiceIx = lm.getActiveVoice();\r\n const voice = lm.voices[voiceIx];\r\n const endSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: ls.measures.length - 1, voice: voiceIx, tick: voice.notes.length - 1, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], endSel);\r\n } else {\r\n this.selections = [endSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (endSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(endSel.measure.svg.logicalBox);\r\n }\r\n }\r\n } else {\r\n const system = this.selections[0].measure.svg.lineIndex;\r\n // find the largest measure index on this staff in this system\r\n const measures = ls.measures.filter((mm) =>\r\n mm.svg.lineIndex === system);\r\n const lm = measures.reduce((a, b) =>\r\n b.measureNumber.measureIndex > a.measureNumber.measureIndex ? b : a);\r\n const ticks = lm.voices[lm.getActiveVoice()].notes.length;\r\n const endSel = this._getClosestTick({ staff: ls.staffId,\r\n measure: lm.measureNumber.measureIndex, voice: lm.getActiveVoice(), tick: ticks - 1, pitches: [] });\r\n if (evKey.shiftKey) {\r\n this._selectBetweenSelections(score, this.selections[0], endSel);\r\n } else {\r\n this.selections = [endSel];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n if (endSel.measure.svg.logicalBox) {\r\n this.scroller.scrollVisibleBox(endSel.measure.svg.logicalBox);\r\n }\r\n }\r\n }\r\n }\r\n growSelectionRightMeasure() {\r\n let toSelect = 0;\r\n const rightmost = this.getExtremeSelection(1);\r\n const ticksLeft = rightmost.measure.voices[rightmost.measure.activeVoice]\r\n .notes.length - rightmost.selector.tick;\r\n if (ticksLeft === 0) {\r\n if (rightmost.selector.measure < rightmost.staff.measures.length) {\r\n const mix = rightmost.selector.measure + 1;\r\n rightmost.staff.measures[mix].setActiveVoice(rightmost.selector.voice);\r\n toSelect = rightmost.staff.measures[mix]\r\n .voices[rightmost.staff.measures[mix].activeVoice].notes.length;\r\n }\r\n } else {\r\n toSelect = ticksLeft;\r\n }\r\n while (toSelect > 0) {\r\n this._growSelectionRight(true);\r\n toSelect -= 1;\r\n }\r\n }\r\n\r\n growSelectionLeft(): number {\r\n if (this.isGraceNoteSelected()) {\r\n this._growGraceNoteSelections(-1);\r\n return 0;\r\n }\r\n this.idleTimer = Date.now();\r\n const nselect = this._getOffsetSelection(-1);\r\n // already selected\r\n const artifact = this._getClosestTick(nselect);\r\n if (!artifact) {\r\n return 0;\r\n }\r\n if (this.selections.find((sel) => SmoSelector.sameNote(sel.selector, artifact.selector))) {\r\n return 0;\r\n }\r\n artifact.measure.setActiveVoice(nselect.voice);\r\n this.selections.push(artifact);\r\n if (this.autoPlay && this.score) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n return (artifact.note as SmoNote).tickCount;\r\n }\r\n\r\n // if we are being moved right programmatically, avoid playing the selected note.\r\n moveSelectionRight(score: SmoScore, evKey: KeyEvent | null, skipPlay: boolean) {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n // const original = JSON.parse(JSON.stringify(this.getExtremeSelection(-1).selector));\r\n const nselect = this._getOffsetSelection(1);\r\n // skip any measures that are not displayed due to rest or repetition\r\n const mselect = SmoSelection.measureSelection(this.score, nselect.staff, nselect.measure); \r\n if (mselect?.measure.svg.multimeasureLength) {\r\n nselect.measure += mselect?.measure.svg.multimeasureLength;\r\n }\r\n if (mselect) {\r\n mselect.measure.setActiveVoice(nselect.voice);\r\n }\r\n this._replaceSelection(nselect, skipPlay);\r\n }\r\n\r\n moveSelectionLeft() {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n const nselect = this._getOffsetSelection(-1);\r\n // Skip multimeasure rests in parts\r\n const mselect = SmoSelection.measureSelection(this.score, nselect.staff, nselect.measure);\r\n while (nselect.measure > 0 && mselect && (mselect.measure.svg.hideMultimeasure || mselect.measure.svg.multimeasureLength > 0)) {\r\n nselect.measure -= 1;\r\n }\r\n if (mselect) {\r\n mselect.measure.setActiveVoice(nselect.voice);\r\n } \r\n this._replaceSelection(nselect, false);\r\n }\r\n moveSelectionLeftMeasure() {\r\n this._moveSelectionMeasure(-1);\r\n }\r\n moveSelectionRightMeasure() {\r\n this._moveSelectionMeasure(1);\r\n }\r\n _moveSelectionMeasure(offset: number) {\r\n const selection = this.getExtremeSelection(Math.sign(offset));\r\n this.idleTimer = Date.now();\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n selector.measure += offset;\r\n selector.tick = 0;\r\n const selObj = this._getClosestTick(selector);\r\n if (selObj) {\r\n this.selections = [selObj];\r\n }\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n\r\n _moveStaffOffset(offset: number) {\r\n if (this.selections.length === 0 || this.score === null) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n const nselector = JSON.parse(JSON.stringify(this.selections[0].selector));\r\n nselector.staff = this.score.incrementActiveStaff(offset);\r\n \r\n this.selections = [this._getClosestTick(nselector)];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n removePitchSelection() {\r\n if (this.outlines['pitchSelection']) {\r\n if (this.outlines['pitchSelection'].element) {\r\n this.outlines['pitchSelection'].element.remove();\r\n }\r\n delete this.outlines['pitchSelection'];\r\n }\r\n }\r\n\r\n // ### _moveSelectionPitch\r\n // Suggest a specific pitch in a chord, so we can transpose just the one note vs. the whole chord.\r\n _moveSelectionPitch(index: number) {\r\n this.idleTimer = Date.now();\r\n if (!this.selections.length) {\r\n return;\r\n }\r\n const sel = this.selections[0];\r\n const note = sel.note as SmoNote;\r\n if (note.pitches.length < 2) {\r\n this.pitchIndex = -1;\r\n this.removePitchSelection();\r\n return;\r\n }\r\n this.pitchIndex = (this.pitchIndex + index) % note.pitches.length;\r\n sel.selector.pitches = [];\r\n sel.selector.pitches.push(this.pitchIndex);\r\n this._highlightPitchSelection(note, this.pitchIndex);\r\n }\r\n moveSelectionPitchUp() {\r\n this._moveSelectionPitch(1);\r\n }\r\n moveSelectionPitchDown() {\r\n if (!this.selections.length) {\r\n return;\r\n }\r\n this._moveSelectionPitch((this.selections[0].note as SmoNote).pitches.length - 1);\r\n }\r\n\r\n moveSelectionUp() {\r\n this._moveStaffOffset(-1);\r\n }\r\n moveSelectionDown() {\r\n this._moveStaffOffset(1);\r\n }\r\n\r\n containsArtifact(): boolean {\r\n return this.selections.length > 0;\r\n }\r\n\r\n _replaceSelection(nselector: SmoSelector, skipPlay: boolean) {\r\n if (this.score === null) {\r\n return;\r\n }\r\n var artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, nselector.voice, nselector.tick);\r\n if (!artifact) {\r\n artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, 0, nselector.tick);\r\n }\r\n if (!artifact) {\r\n artifact = SmoSelection.noteSelection(this.score, nselector.staff, nselector.measure, 0, 0);\r\n }\r\n if (!artifact) {\r\n // disappeared - default to start\r\n artifact = SmoSelection.noteSelection(this.score, 0, 0, 0, 0);\r\n }\r\n if (!skipPlay && this.autoPlay && artifact) {\r\n SuiOscillator.playSelectionNow(artifact, this.score, 1);\r\n }\r\n if (!artifact) {\r\n return;\r\n }\r\n artifact.measure.setActiveVoice(nselector.voice);\r\n\r\n // clear modifier selections\r\n this.clearModifierSelections();\r\n this.score.setActiveStaff(nselector.staff);\r\n const mapKey = Object.keys(this.measureNoteMap).find((k) =>\r\n artifact && SmoSelector.sameNote(this.measureNoteMap[k].selector, artifact.selector)\r\n );\r\n if (!mapKey) {\r\n return;\r\n }\r\n const mapped = this.measureNoteMap[mapKey];\r\n // If this is a new selection, remove pitch-specific and replace with note-specific\r\n if (!nselector.pitches || nselector.pitches.length === 0) {\r\n this.pitchIndex = -1;\r\n }\r\n\r\n this.selections = [mapped];\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n\r\n getFirstMeasureOfSelection() {\r\n if (this.selections.length) {\r\n return this.selections[0].measure;\r\n }\r\n return null;\r\n }\r\n // ## measureIterator\r\n // Description: iterate over the any measures that are part of the selection\r\n getSelectedMeasures(): SmoSelection[] {\r\n const set: number[] = [];\r\n const rv: SmoSelection[] = [];\r\n if (!this.score) {\r\n return [];\r\n }\r\n this.selections.forEach((sel) => {\r\n const measure = SmoSelection.measureSelection(this.score!, sel.selector.staff, sel.selector.measure);\r\n if (measure) {\r\n const ix = measure.selector.measure;\r\n if (set.indexOf(ix) === -1) {\r\n set.push(ix);\r\n rv.push(measure);\r\n }\r\n }\r\n });\r\n return rv;\r\n }\r\n\r\n _addSelection(selection: SmoSelection) {\r\n const ar: SmoSelection[] = this.selections.filter((sel) =>\r\n SmoSelector.neq(sel.selector, selection.selector)\r\n );\r\n if (this.autoPlay && this.score) {\r\n SuiOscillator.playSelectionNow(selection, this.score, 1);\r\n }\r\n ar.push(selection);\r\n this.selections = ar;\r\n }\r\n\r\n _selectFromToInStaff(score: SmoScore, sel1: SmoSelection, sel2: SmoSelection) {\r\n const selections = SmoSelection.innerSelections(score, sel1.selector, sel2.selector);\r\n /* .filter((ff) => \r\n ff.selector.voice === sel1.measure.activeVoice\r\n ); */\r\n this.selections = [];\r\n // Get the actual selections from our map, since the client bounding boxes are already computed\r\n selections.forEach((sel) => {\r\n const key = SmoSelector.getNoteKey(sel.selector);\r\n sel.measure.setActiveVoice(sel.selector.voice);\r\n // Skip measures that are not rendered because they are part of a multi-rest\r\n if (this.measureNoteMap && this.measureNoteMap[key]) {\r\n this.selections.push(this.measureNoteMap[key]);\r\n }\r\n });\r\n\r\n if (this.selections.length === 0) {\r\n this.selections = [sel1];\r\n }\r\n this.idleTimer = Date.now();\r\n }\r\n _selectBetweenSelections(score: SmoScore, s1: SmoSelection, s2: SmoSelection) {\r\n const min = SmoSelector.gt(s1.selector, s2.selector) ? s2 : s1;\r\n const max = SmoSelector.lt(min.selector, s2.selector) ? s2 : s1;\r\n this._selectFromToInStaff(score, min, max);\r\n this._createLocalModifiersList();\r\n this.highlightQueue.selectionCount = this.selections.length;\r\n this.deferHighlight();\r\n }\r\n selectSuggestion(score: SmoScore,ev: KeyEvent) {\r\n if (!this.suggestion || !this.suggestion.measure || this.score === null) {\r\n return;\r\n }\r\n this.idleTimer = Date.now();\r\n\r\n if (this.modifierSuggestion) {\r\n this.modifierIndex = -1;\r\n this.modifierSelections = [this.modifierSuggestion];\r\n this.modifierSuggestion = null;\r\n this.createLocalModifiersFromModifierTabs(this.modifierSelections);\r\n // If we selected due to a mouse click, move the selection to the\r\n // selected modifier\r\n this._highlightModifier();\r\n return;\r\n } else if (ev.type === 'click') {\r\n this.clearModifierSelections(); // if we click on a non-modifier, clear the\r\n // modifier selections\r\n }\r\n\r\n if (ev.shiftKey) {\r\n const sel1 = this.getExtremeSelection(-1);\r\n if (sel1.selector.staff === this.suggestion.selector.staff) {\r\n this._selectBetweenSelections(score, sel1, this.suggestion);\r\n return;\r\n }\r\n }\r\n\r\n if (ev.ctrlKey) {\r\n this._addSelection(this.suggestion);\r\n this._createLocalModifiersList();\r\n this.deferHighlight();\r\n return;\r\n }\r\n if (this.autoPlay) {\r\n SuiOscillator.playSelectionNow(this.suggestion, this.score, 1);\r\n }\r\n\r\n const preselected = this.selections[0] ?\r\n SmoSelector.sameNote(this.suggestion.selector, this.selections[0].selector) && this.selections.length === 1 : false;\r\n\r\n if (this.selections.length === 0) {\r\n this.selections.push(this.suggestion);\r\n }\r\n const note = this.selections[0].note as SmoNote;\r\n if (preselected && note.pitches.length > 1) {\r\n this.pitchIndex = (this.pitchIndex + 1) % note.pitches.length;\r\n this.selections[0].selector.pitches = [this.pitchIndex];\r\n } else {\r\n const selection = SmoSelection.noteFromSelector(this.score, this.suggestion.selector);\r\n if (selection) {\r\n selection.box = JSON.parse(JSON.stringify(this.suggestion.box));\r\n selection.scrollBox = JSON.parse(JSON.stringify(this.suggestion.scrollBox));\r\n this.selections = [selection];\r\n }\r\n }\r\n if (preselected && this.modifierSelections.length) {\r\n const mods = this.modifierSelections.filter((mm) => mm.selection && SmoSelector.sameNote(mm.selection.selector, this.selections[0].selector));\r\n if (mods.length) {\r\n const modToAdd = mods[0];\r\n if (!modToAdd) {\r\n console.warn('bad modifier selection in selectSuggestion 2');\r\n }\r\n this.modifierSelections[0] = modToAdd;\r\n this.modifierIndex = mods[0].index;\r\n this._highlightModifier();\r\n return;\r\n }\r\n }\r\n this.score.setActiveStaff(this.selections[0].selector.staff);\r\n this.deferHighlight();\r\n this._createLocalModifiersList();\r\n }\r\n _setModifierAsSuggestion(artifact: ModifierTab): void {\r\n if (!artifact.box) {\r\n return;\r\n }\r\n this.modifierSuggestion = artifact;\r\n this._drawRect(artifact.box, 'suggestion');\r\n }\r\n\r\n _setArtifactAsSuggestion(artifact: SmoSelection) {\r\n let sameSel: SmoSelection | null = null;\r\n let i = 0;\r\n for (i = 0; i < this.selections.length; ++i) {\r\n const ss = this.selections[i];\r\n if (ss && SmoSelector.sameNote(ss.selector, artifact.selector)) {\r\n sameSel = ss;\r\n break;\r\n }\r\n }\r\n if (sameSel || !artifact.box) {\r\n return;\r\n }\r\n this.modifierSuggestion = null;\r\n\r\n this.suggestion = artifact;\r\n this._drawRect(artifact.box, 'suggestion');\r\n }\r\n _highlightModifier() {\r\n let box: SvgBox | null = null;\r\n if (!this.modifierSelections.length) {\r\n return;\r\n }\r\n this.modifierSelections.forEach((artifact) => {\r\n if (box === null) {\r\n box = artifact.modifier.logicalBox ?? null;\r\n } else {\r\n box = SvgHelpers.unionRect(box, SvgHelpers.smoBox(artifact.modifier.logicalBox));\r\n }\r\n });\r\n if (box === null) {\r\n return;\r\n }\r\n this._drawRect(box, 'staffModifier');\r\n }\r\n\r\n _highlightPitchSelection(note: SmoNote, index: number) {\r\n const noteDiv = $(this.renderElement).find('#' + note.renderId);\r\n const heads = noteDiv.find('.vf-notehead');\r\n if (!heads.length) {\r\n return;\r\n }\r\n const headEl = heads[index];\r\n const pageContext = this.renderer.pageMap.getRendererFromModifier(note);\r\n $(pageContext.svg).find('.vf-pitchSelection').remove();\r\n const box = pageContext.offsetBbox(headEl);\r\n this._drawRect(box, 'pitchSelection');\r\n }\r\n\r\n _highlightActiveVoice(selection: SmoSelection) {\r\n let i = 0;\r\n const selector = selection.selector;\r\n for (i = 1; i <= 4; ++i) {\r\n const cl = 'v' + i.toString() + '-active';\r\n $('body').removeClass(cl);\r\n }\r\n const c2 = 'v' + (selector.voice + 1).toString() + '-active';\r\n $('body').addClass(c2);\r\n }\r\n // The user has just switched voices, select the active voice\r\n selectActiveVoice() {\r\n const selection = this.selections[0];\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n selector.voice = selection.measure.activeVoice;\r\n this.selections = [this._getClosestTick(selector)];\r\n this.deferHighlight();\r\n }\r\n\r\n highlightSelection() {\r\n let i = 0;\r\n let prevSel: SmoSelection | null = null;\r\n let curBox: SvgBox = SvgBox.default;\r\n this.idleTimer = Date.now();\r\n const grace = this.getSelectedGraceNotes();\r\n // If this is not a note with grace notes, logically unselect the grace notes\r\n if (grace && grace.length && grace[0].selection && this.selections.length) {\r\n if (!SmoSelector.sameNote(grace[0].selection.selector, this.selections[0].selector)) {\r\n this.clearModifierSelections();\r\n } else {\r\n this._highlightModifier();\r\n return;\r\n }\r\n }\r\n // If there is a race condition with a change, avoid referencing null note\r\n if (!this.selections[0].note) {\r\n return;\r\n }\r\n const note = this.selections[0].note as SmoNote;\r\n if (this.pitchIndex >= 0 && this.selections.length === 1 &&\r\n this.pitchIndex < note.pitches.length) {\r\n this._highlightPitchSelection(note, this.pitchIndex);\r\n this._highlightActiveVoice(this.selections[0]);\r\n return;\r\n }\r\n this.removePitchSelection();\r\n this.pitchIndex = -1;\r\n if (this.selections.length === 1 && note.logicalBox) {\r\n this._drawRect(note.logicalBox, 'selection');\r\n this._highlightActiveVoice(this.selections[0]);\r\n return;\r\n }\r\n const sorted = this.selections.sort((a, b) => SmoSelector.gt(a.selector, b.selector) ? 1 : -1);\r\n prevSel = sorted[0];\r\n // rendered yet?\r\n if (!prevSel || !prevSel.box) {\r\n return;\r\n }\r\n curBox = SvgHelpers.smoBox(prevSel.box);\r\n const boxes: SvgBox[] = [];\r\n for (i = 1; i < sorted.length; ++i) {\r\n const sel = sorted[i];\r\n if (!sel.box || !prevSel.box) {\r\n continue;\r\n }\r\n // const ydiff = Math.abs(prevSel.box.y - sel.box.y);\r\n if (sel.selector.staff === prevSel.selector.staff && sel.measure.svg.lineIndex === prevSel.measure.svg.lineIndex) {\r\n curBox = SvgHelpers.unionRect(curBox, sel.box);\r\n } else if (curBox) {\r\n boxes.push(curBox);\r\n curBox = SvgHelpers.smoBox(sel.box);\r\n }\r\n this._highlightActiveVoice(sel);\r\n prevSel = sel;\r\n }\r\n boxes.push(curBox);\r\n if (this.modifierSelections.length) {\r\n boxes.push(this.modifierSelections[0].box);\r\n }\r\n this._drawRect(boxes, 'selection');\r\n }\r\n /**\r\n * Boxes are divided up into lines/systems already. But we need\r\n * to put the correct box on the correct page.\r\n * @param boxes \r\n */\r\n drawSelectionRects(boxes: SvgBox[]) {\r\n const keys = Object.keys(this.selectionRects);\r\n // erase any old selections\r\n keys.forEach((key) => {\r\n const oon = this.selectionRects[parseInt(key)];\r\n oon.forEach((outline) => {\r\n if (outline.element) {\r\n outline.element.remove();\r\n outline.element = undefined;\r\n \r\n }\r\n })\r\n });\r\n this.selectionRects = {};\r\n // Create an OutlineInfo for each page\r\n const pages: number[] = [];\r\n const stroke: StrokeInfo = (SuiTracker.strokes as any)['selection'];\r\n boxes.forEach((box) => {\r\n let testBox: SvgBox = SvgHelpers.smoBox(box);\r\n let context = this.renderer.pageMap.getRenderer(testBox);\r\n testBox.y -= context.box.y;\r\n if (!this.selectionRects[context.pageNumber]) {\r\n this.selectionRects[context.pageNumber] = [];\r\n pages.push(context.pageNumber);\r\n }\r\n this.selectionRects[context.pageNumber].push({\r\n context: context, box: testBox, classes: '',\r\n stroke, scroll: this.scroller.scrollState,\r\n timeOff: 0\r\n });\r\n });\r\n pages.forEach((pageNo) => {\r\n const outlineInfos = this.selectionRects[pageNo];\r\n outlineInfos.forEach((info) => {\r\n SvgHelpers.outlineRect(info);\r\n });\r\n });\r\n }\r\n _drawRect(pBox: SvgBox | SvgBox[], strokeName: string) { \r\n const stroke: StrokeInfo = (SuiTracker.strokes as any)[strokeName];\r\n const boxes = Array.isArray(pBox) ? pBox : [pBox];\r\n if (strokeName === 'selection') {\r\n this.drawSelectionRects(boxes);\r\n return;\r\n }\r\n boxes.forEach((box) => {\r\n let testBox: SvgBox = SvgHelpers.smoBox(box);\r\n let context = this.renderer.pageMap.getRenderer(testBox);\r\n const timeOff = strokeName === 'suggestion' ? 1000 : 0; \r\n if (context) {\r\n testBox.y -= context.box.y;\r\n if (!this.outlines[strokeName]) {\r\n this.outlines[strokeName] = {\r\n context: context, box: testBox, classes: '',\r\n stroke, scroll: this.scroller.scrollState,\r\n timeOff\r\n };\r\n }\r\n this.outlines[strokeName].box = testBox;\r\n this.outlines[strokeName].context = context;\r\n SvgHelpers.outlineRect(this.outlines[strokeName]);\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoBarline } from '../../smo/data/measureModifiers';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { VexFlow, GlyphInfo, getGlyphWidth } from '../../common/vex';\r\n\r\nexport class vexGlyph {\r\n static width(smoGlyph: GlyphInfo) {\r\n return getGlyphWidth(smoGlyph);\r\n }\r\n static accidental(a: string): GlyphInfo {\r\n return vexGlyph.accidentals[a];\r\n }\r\n static barWidth(b: SmoBarline): number {\r\n const str = SmoBarline.barlineString(b);\r\n const cc = vexGlyph.dimensions[str];\r\n if (typeof(cc) === 'undefined') {\r\n return 0;\r\n }\r\n return cc.width + cc.spacingRight;\r\n }\r\n static accidentalWidth(accidental: string): number {\r\n return vexGlyph.width(vexGlyph.accidentals[accidental]);\r\n }\r\n static get accidentals(): Record {\r\n return {\r\n 'b': vexGlyph.dimensions.flat,\r\n '#': vexGlyph.dimensions.sharp,\r\n 'bb': vexGlyph.dimensions.doubleFlat,\r\n '##': vexGlyph.dimensions.doubleSharp,\r\n 'n': vexGlyph.dimensions.natural\r\n };\r\n }\r\n\r\n static repeatSymbolWidth(): number {\r\n return vexGlyph.width(vexGlyph.dimensions['repeatSymbol']);\r\n }\r\n static get tempo(): GlyphInfo {\r\n return vexGlyph.dimensions.tempo;\r\n }\r\n static keySignatureLength(key: string) {\r\n return SmoMusic.getSharpsInKeySignature(key) * vexGlyph.width(vexGlyph.dimensions.sharp) +\r\n SmoMusic.getFlatsInKeySignature(key) * vexGlyph.width(vexGlyph.dimensions.flat) +\r\n vexGlyph.dimensions.keySignature.spacingRight;\r\n }\r\n static get timeSignature() {\r\n return vexGlyph.dimensions.timeSignature;\r\n }\r\n static get dot() {\r\n return vexGlyph.dimensions.dot;\r\n }\r\n\r\n static get tupletBeam() {\r\n return vexGlyph.dimensions.tupletBeam;\r\n }\r\n static get stem() {\r\n return vexGlyph.dimensions.stem;\r\n }\r\n static get flag() {\r\n return vexGlyph.dimensions.flag;\r\n }\r\n static clef(c: string): GlyphInfo {\r\n const key = c.toLowerCase() + 'Clef';\r\n if (!vexGlyph.dimensions[key]) {\r\n return vexGlyph.dimensions.tenorClef;\r\n }\r\n if (vexGlyph.dimensions[key].vexGlyph) {\r\n const width = vexGlyph.width(vexGlyph.dimensions[key]);\r\n return {\r\n width,\r\n height: 68.32,\r\n yTop: 3,\r\n yBottom: 3,\r\n spacingRight: 10,\r\n vexGlyph: 'gClef'\r\n };\r\n }\r\n return vexGlyph.dimensions[key];\r\n }\r\n static get dimensions(): Record {\r\n return {\r\n tupletBeam: {\r\n width: 5,\r\n height: 6,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n }, repeatSymbol: {\r\n width: 25,\r\n height: 6,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'repeat1Bar'\r\n },\r\n singleBar: {\r\n width: 1,\r\n height: 41,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 1,\r\n vexGlyph: null\r\n },\r\n endBar: {\r\n width: 5.22,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n },\r\n doubleBar: {\r\n width: 3.22,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n endRepeat: {\r\n width: 6,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n startRepeat: {\r\n width: 6,\r\n height: 40.99,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: null\r\n },\r\n noteHead: {\r\n width: 15.3,\r\n height: 10.48,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'noteheadBlack'\r\n },\r\n dot: {\r\n width: 15,\r\n height: 5,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'augmentationDot'\r\n }, // This isn't accurate, but I don't\r\n // want to add extra space just for clef.\r\n trebleClef: {\r\n width: 35,\r\n height: 68.32,\r\n yTop: 3,\r\n yBottom: 3,\r\n spacingRight: 5,\r\n vexGlyph: 'gClef'\r\n }, // This isn't accurate, but I don't\r\n // want to add extra space just for clef.\r\n tab: {\r\n width: 27.3,\r\n height: 39,\r\n yTop: 3,\r\n yBottom: 3,\r\n spacingRight: 5,\r\n vexGlyph: 'tab'\r\n },\r\n bassClef: {\r\n width: 36,\r\n height: 31.88,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 5,\r\n vexGlyph: 'fClef'\r\n },\r\n altoClef: {\r\n width: 31.5,\r\n yTop: 0,\r\n yBottom: 0,\r\n height: 85.5,\r\n spacingRight: 5,\r\n vexGlyph: 'cClef'\r\n },\r\n tenorClef: {\r\n width: 31.5,\r\n yTop: 10,\r\n yBottom: 0,\r\n height: 41,\r\n spacingRight: 5,\r\n vexGlyph: 'cClef'\r\n },\r\n timeSignature: {\r\n width: 22.36,\r\n height: 85,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 11,\r\n vexGlyph: 'timeSig4'\r\n },\r\n tempo: {\r\n width: 10,\r\n height: 37,\r\n yTop: 37,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n },\r\n flat: {\r\n width: 15,\r\n height: 23.55,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalFlat'\r\n },\r\n keySignature: {\r\n width: 0,\r\n height: 85.5,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 10,\r\n vexGlyph: null\r\n },\r\n sharp: {\r\n width: 17,\r\n height: 62,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalSharp',\r\n },\r\n natural: {\r\n width: 15,\r\n height: 53.35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalNatural',\r\n },\r\n doubleSharp: {\r\n height: 10.04,\r\n width: 21.63,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalDoubleSharp'\r\n },\r\n doubleFlat: {\r\n width: 13.79,\r\n height: 49.65,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'accidentalDoubleFlat'\r\n }, stem: {\r\n width: 1,\r\n height: 35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: null\r\n }, flag: {\r\n width: 10,\r\n height: 35,\r\n yTop: 0,\r\n yBottom: 0,\r\n spacingRight: 0,\r\n vexGlyph: 'flag8thUp' // use for width measurements all flags\r\n }\r\n };\r\n }\r\n}\r\n","import { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { SmoBarline, SmoMeasureText, SmoRepeatSymbol, SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SmoTabStave, SmoTie } from '../../smo/data/staffModifiers';\r\nimport { SmoLyric, VexAnnotationParams, SmoTabNote, SmoFretPosition } from '../../smo/data/noteModifiers';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { TabNotePosition, VexFlow } from '../../common/vex';\r\nconst VF = VexFlow;\r\n/**\r\n * convert from Smo library values to Vex values\r\n * @module\r\n * \r\n **/\r\nexport function VexTabNotePositions(stave: SmoTabStave, tabNote: SmoTabNote, smoNote: SmoNote): TabNotePosition[] {\r\n const rv = tabNote.positions.map((pp) => { \r\n return { str: pp.string, fret: pp.fret }\r\n });\r\n return rv;\r\n}\r\n/**\r\n *\r\n *\r\n * @export\r\n * @param {SmoSystemGroup} athis\r\n * @return {*} \r\n */\r\nexport function leftConnectorVx(athis: SmoSystemGroup) {\r\n switch (athis.leftConnector) {\r\n case SmoSystemGroup.connectorTypes.single:\r\n return VF.StaveConnector.type.SINGLE_LEFT;\r\n case SmoSystemGroup.connectorTypes.double:\r\n return VF.StaveConnector.type.DOUBLE_LEFT;\r\n case SmoSystemGroup.connectorTypes.brace:\r\n return VF.StaveConnector.type.BRACE;\r\n case SmoSystemGroup.connectorTypes.bracket:\r\n default:\r\n return VF.StaveConnector.type.BRACKET;\r\n }\r\n}\r\n/**\r\n * convert from a SmoSystemGroup connector to Vex enumeration\r\n * @param athis \r\n * @returns \r\n */\r\nexport function rightConnectorVx(athis: SmoSystemGroup) {\r\n switch (athis.rightConnector) {\r\n case SmoSystemGroup.connectorTypes.single:\r\n return VF.StaveConnector.type.SINGLE_RIGHT;\r\n case SmoSystemGroup.connectorTypes.double:\r\n default:\r\n return VF.StaveConnector.type.DOUBLE_RIGHT;\r\n }\r\n}\r\nexport const vexBarlineType = [VF.Barline.type.SINGLE, VF.Barline.type.DOUBLE, VF.Barline.type.END,\r\n VF.Barline.type.REPEAT_BEGIN, VF.Barline.type.REPEAT_END, VF.Barline.type.NONE];\r\n\r\nexport const vexBarlinePosition = [ VF.StaveModifierPosition.BEGIN, VF.StaveModifierPosition.END ];\r\n\r\nexport function toVexBarlineType(athis: SmoBarline): number {\r\n return vexBarlineType[athis.barline];\r\n}\r\nexport function toVexBarlinePosition(athis: SmoBarline): number {\r\n return vexBarlinePosition[athis.position];\r\n}\r\n\r\nexport const vexSymbol = [VF.Repetition.type.NONE, VF.Repetition.type.CODA_LEFT, VF.Repetition.type.SEGNO_LEFT, VF.Repetition.type.DC,\r\n VF.Repetition.type.DC_AL_CODA, VF.Repetition.type.DC_AL_FINE, VF.Repetition.type.DS,\r\n VF.Repetition.type.DS_AL_CODA, VF.Repetition.type.DS_AL_FINE, VF.Repetition.type.FINE];\r\n\r\nexport function toVexSymbol(athis: SmoRepeatSymbol) {\r\n return vexSymbol[athis.symbol];\r\n}\r\nexport function toVexVolta(volta: SmoVolta, measureNumber: number) {\r\n if (volta.startBar === measureNumber && volta.startBar === volta.endBar) {\r\n return VF.Volta.type.BEGIN_END;\r\n }\r\n if (volta.startBar === measureNumber) {\r\n return VF.Volta.type.BEGIN;\r\n }\r\n if (volta.endBar === measureNumber) {\r\n return VF.Volta.type.END;\r\n }\r\n if (volta.startBar < measureNumber && volta.endBar > measureNumber) {\r\n return VF.Volta.type.MID;\r\n }\r\n return VF.Volta.type.NONE;\r\n}\r\n\r\nexport const vexTextPosition = [VF.Modifier.Position.ABOVE, VF.Modifier.Position.BELOW, VF.Modifier.Position.LEFT, VF.Modifier.Position.RIGHT];\r\nexport const vexTextJustification = [VF.TextJustification.LEFT, VF.TextJustification.RIGHT, VF.TextJustification.CENTER];\r\n\r\nexport function toVexTextJustification(athis: SmoMeasureText) {\r\n return vexTextJustification[athis.justification];\r\n}\r\nexport function toVexTextPosition(athis: SmoMeasureText) {\r\n return vexTextPosition[parseInt(athis.position as any, 10)];\r\n}\r\n\r\nexport function vexOptions(athis: SmoTie) {\r\n const rv: any = {};\r\n rv.direction = athis.invert ? VF.Stem.DOWN : VF.Stem.UP;\r\n SmoTie.vexParameters.forEach((p) => {\r\n rv[p] = (athis as any)[p];\r\n });\r\n return rv;\r\n}\r\nexport function vexAnnotationPosition(chordPos: number) {\r\n if (chordPos === SmoLyric.symbolPosition.NORMAL) {\r\n return VF.ChordSymbol.symbolModifiers.NONE;\r\n } else if (chordPos === SmoLyric.symbolPosition.SUPERSCRIPT) {\r\n return VF.ChordSymbol.symbolModifiers.SUPERSCRIPT;\r\n }\r\n return VF.ChordSymbol.symbolModifiers.SUBSCRIPT;\r\n}\r\n\r\n/**\r\n * Parse the SmoLyric text and convert it to a VEX chord symbol\r\n * @param athis \r\n * @returns \r\n */\r\nexport function getVexChordBlocks(athis: SmoLyric) {\r\n let mod = VF.ChordSymbol.symbolModifiers.NONE;\r\n let isGlyph = false;\r\n const tokens = SmoLyric._tokenizeChordString(athis.text);\r\n const blocks: VexAnnotationParams[] = [];\r\n tokens.forEach((token) => {\r\n if (token === '^') {\r\n mod = (mod === VF.ChordSymbol.symbolModifiers.SUPERSCRIPT) ?\r\n VF.ChordSymbol.symbolModifiers.NONE : VF.ChordSymbol.symbolModifiers.SUPERSCRIPT;\r\n } else if (token === '%') {\r\n mod = (mod === VF.ChordSymbol.symbolModifiers.SUBSCRIPT) ?\r\n VF.ChordSymbol.symbolModifiers.NONE : VF.ChordSymbol.symbolModifiers.SUBSCRIPT;\r\n } else if (token === '@') {\r\n isGlyph = !isGlyph;\r\n } else if (token.length) {\r\n if (isGlyph) {\r\n const glyph = SmoLyric._chordGlyphFromCode(token);\r\n blocks.push({\r\n glyph, symbolModifier: mod\r\n });\r\n } else {\r\n blocks.push({\r\n text: token, symbolModifier: mod\r\n });\r\n }\r\n }\r\n });\r\n return blocks;\r\n}\r\n\r\nexport function toVexStemDirection(note: SmoNote) {\r\n return (note.flagState === SmoNote.flagStates.up ? VF.Stem.UP : VF.Stem.DOWN);\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMeasure, SmoVoice, MeasureTickmaps } from '../../smo/data/measure';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoArticulation, SmoLyric, SmoOrnament } from '../../smo/data/noteModifiers';\r\nimport {VexFlow, StaveNoteStruct, TupletOptions, vexOrnaments, getVexTuplets} from '../../common/vex';\r\nimport { SmoBarline, SmoRehearsalMark } from '../../smo/data/measureModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { getId } from '../../smo/data/common';\r\nimport { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { StaffModifierBase, SmoStaffHairpin, SmoSlur, SmoTie, SmoStaffTextBracket } from '../../smo/data/staffModifiers';\r\nimport { toVexBarlineType, vexBarlineType, vexBarlinePosition, toVexBarlinePosition, leftConnectorVx, rightConnectorVx,\r\n toVexVolta, getVexChordBlocks } from '../../render/vex/smoAdapter';\r\nimport {SmoTuplet} from \"../../smo/data/tuplet\";\r\n\r\n\r\n\r\nconst VF = VexFlow;\r\nexport const fontStacks: Record = {\r\n Bravura: ['\"Bravura\"', '\"Gonville\"', '\"Custom\"'],\r\n Gonville: ['\"Gonville\"', '\"Bravura\"', '\"Custom\"'],\r\n Petaluma: ['\"Petaluma\"', '\"Bravura\"', '\"Gonville\"', '\"Custom\"'],\r\n Leland: ['\"Leland\"', '\"Bravura\"', '\"Gonville\"', '\"Custom\"'] \r\n}\r\ninterface LyricAdjust {\r\n verse: number, lyric: SmoLyric, \r\n}\r\ninterface VexNoteRenderInfo {\r\n smoNote: SmoNote,voiceIx: number, noteIx: number, tickmapObject: MeasureTickmaps, lyricAdj: string[]\r\n}\r\ninterface VexStaveGroupMusic {\r\n formatter: string, measures: SmoMeasure[], voiceStrings: string[], heightOffset: number, \r\n systemGroup?: SmoSystemGroup\r\n}\r\nfunction smoNoteToVexKeys(smoNote: SmoNote) {\r\n const noteHead = smoNote.isRest() ? 'r' : smoNote.noteHead;\r\n const keys = SmoMusic.smoPitchesToVexKeys(smoNote.pitches, 0, noteHead);\r\n return keys;\r\n}\r\nfunction smoNoteToGraceNotes(smoNote: SmoNote, strs: string[]) {\r\n const gar = smoNote.getGraceNotes();\r\n var toBeam = true;\r\n if (gar && gar.length) {\r\n const grGroup: string[] = [];\r\n gar.forEach((g) => {\r\n const grid = g.attrs.id;\r\n const args = JSON.stringify(g.toVexGraceNote());\r\n strs.push(`const ${grid} = new VF.GraceNote(JSON.parse('${args}'))`);\r\n strs.push(`${grid}.setAttribute('id', '${grid}');`);\r\n for (var i = 0; i < g.pitches.length; ++i) {\r\n const pitch = g.pitches[i];\r\n if (!pitch.accidental) {\r\n console.warn('no accidental in grace note');\r\n }\r\n if (pitch.accidental && pitch.accidental !== 'n' || pitch.cautionary) {\r\n const acid = 'acc' + i.toString() + grid;\r\n strs.push(`const ${acid} = new VF.Accidental('${pitch.accidental}');`);\r\n if (pitch.cautionary) {\r\n strs.push(`${acid}.setAsCautionary();`);\r\n }\r\n strs.push(`${grid}.addModifier(${acid}, ${i})`);\r\n }\r\n }\r\n if (g.tickCount() >= 4096) {\r\n toBeam = false;\r\n }\r\n grGroup.push(grid);\r\n });\r\n const ggid = 'ggrp' + smoNote.attrs.id;\r\n const grString = '[' + grGroup.join(',') + ']';\r\n strs.push(`const ${ggid} = new VF.GraceNoteGroup(${grString});`);\r\n if (toBeam) {\r\n strs.push(`${ggid}.beamNotes();`);\r\n }\r\n strs.push(`${smoNote.attrs.id}.addModifier(${ggid}, 0);`);\r\n }\r\n}\r\nfunction smoNoteToStaveNote(smoNote: SmoNote) {\r\n const duration = SmoMusic.ticksToDuration[smoNote.stemTicks];\r\n const sn: StaveNoteStruct = {\r\n clef: smoNote.clef,\r\n duration,\r\n dots: smoNote.dots,\r\n type: smoNote.noteType\r\n };\r\n if (smoNote.flagState !== SmoNote.flagStates.auto) {\r\n sn.stem_direction = smoNote.flagState === SmoNote.flagStates.up ? 1 : -1;\r\n sn.auto_stem = false; \r\n } else {\r\n sn.auto_stem = true;\r\n }\r\n sn.keys = smoNoteToVexKeys(smoNote);\r\n return sn;\r\n}\r\nexport const getVoiceId = (smoMeasure:SmoMeasure, voiceIx: number) => {\r\n return smoMeasure.id + 'v' + voiceIx.toString();\r\n}\r\nfunction lastNoteInSystem(smoScore: SmoScore, selection: SmoSelection) {\r\n let rv = selection;\r\n let next: SmoSelection | null = null;\r\n next = SmoSelection.nextNoteSelection(smoScore, selection.selector.staff,\r\n selection.selector.measure, selection.selector.voice, selection.selector.tick);\r\n while (next) {\r\n if (next.measure.svg.rowInSystem !== selection.measure.svg.rowInSystem) {\r\n return rv;\r\n break;\r\n }\r\n rv = next;\r\n next = SmoSelection.nextNoteSelection(smoScore, next.selector.staff,\r\n next.selector.measure, next.selector.voice, next.selector.tick);\r\n }\r\n return rv;\r\n}\r\nfunction createMeasureModifiers(smoMeasure: SmoMeasure, strs: string[]) {\r\n const sb = smoMeasure.getStartBarline();\r\n const eb = smoMeasure.getEndBarline();\r\n const sym = smoMeasure.getRepeatSymbol();\r\n const vxStave = 'stave' + smoMeasure.id;\r\n if (smoMeasure.measureNumber.systemIndex !== 0 && sb.barline === SmoBarline.barlines.singleBar\r\n && smoMeasure.format.padLeft === 0) {\r\n strs.push(`${vxStave}.setBegBarType(VF.Barline.type.NONE);`);\r\n } else {\r\n strs.push(`${vxStave}.setBegBarType(${toVexBarlineType(sb)});`);\r\n }\r\n if (smoMeasure.svg.multimeasureLength > 0 && !smoMeasure.svg.hideMultimeasure) {\r\n const bl = vexBarlineType[smoMeasure.svg.multimeasureEndBarline];\r\n strs.push(`${vxStave}.setEndBarType(${bl});`);\r\n } else if (eb.barline !== SmoBarline.barlines.singleBar) {\r\n const bl = toVexBarlineType(eb);\r\n strs.push(`${vxStave}.setEndBarType(${bl});`);\r\n }\r\n if (smoMeasure.svg.rowInSystem === 0) {\r\n const rmb = smoMeasure.getRehearsalMark();\r\n const rm = rmb as SmoRehearsalMark;\r\n if (rm) {\r\n strs.push(`${vxStave}.setSection('${rm.symbol}', 0);`);\r\n }\r\n }\r\n const tempo = smoMeasure.getTempo();\r\n if (tempo && smoMeasure.svg.forceTempo) {\r\n const vexTempo = tempo.toVexTempo();\r\n const tempoString = JSON.stringify(vexTempo);\r\n strs.push(`${vxStave}.setTempo(JSON.parse('${tempoString}'), -1 * ${tempo.yOffset});`);\r\n }\r\n}\r\nexport function renderVoltas(smoScore: SmoScore, startMeasure: number, endMeasure: number, strs: string[]) {\r\n const voltas = smoScore.staves[0].getVoltaMap(startMeasure, endMeasure);\r\n for (var i = 0; i < voltas.length; ++i) {\r\n const ending = voltas[i];\r\n for (var j = ending.startBar; j <= ending.endBar; ++j) {\r\n const smoMeasure = smoScore.staves[0].measures[j];\r\n const vtype = toVexVolta(ending, smoMeasure.measureNumber.measureIndex);\r\n const vx = smoMeasure.staffX + ending.xOffsetStart;\r\n const vxStave = 'stave' + smoMeasure.id;\r\n const endingName = ending.attrs.id + smoMeasure.id;\r\n strs.push(`const ${endingName} = new VF.Volta(${vtype}, '${ending.number.toString()}', ${vx}, ${ending.yOffset});`);\r\n strs.push(`${endingName}.setContext(context).draw(${vxStave}, -1 * ${ending.xOffsetEnd});`);\r\n }\r\n }\r\n}\r\nfunction renderModifier(modifier: StaffModifierBase, startNote: SmoNote | null, endNote: SmoNote | null, strs: string[]) {\r\n const modifierName = getId();\r\n const startKey = SmoSelector.getNoteKey(modifier.startSelector);\r\n const endKey = SmoSelector.getNoteKey(modifier.endSelector);\r\n strs.push(`// modifier from ${startKey} to ${endKey}`);\r\n if (modifier.ctor === 'SmoStaffHairpin' && startNote && endNote) {\r\n const hp = modifier as SmoStaffHairpin; \r\n const vxStart = startNote.attrs.id;\r\n const vxEnd = startNote.attrs.id;\r\n const hpParams = { first_note: vxStart, last_note: vxEnd };\r\n strs.push(`const ${modifierName} = new VF.StaveHairpin({ first_note: ${vxStart}, last_note: ${vxEnd},\r\n firstNote: ${vxStart}, lastNote: ${vxEnd} });`);\r\n strs.push(`${modifierName}.setRenderOptions({ height: ${hp.height}, y_shift: ${hp.yOffset}, left_shift_px: ${hp.xOffsetLeft},right_shift_px: ${hp.xOffsetRight} });`);\r\n strs.push(`${modifierName}.setContext(context).setPosition(${hp.position}).draw();`);\r\n } else if (modifier.ctor === 'SmoSlur') {\r\n const slur = modifier as SmoSlur; \r\n const vxStart = startNote?.attrs?.id ?? 'null';\r\n const vxEnd = endNote?.attrs?.id ?? 'null'; \r\n const svgPoint: SVGPoint[] = JSON.parse(JSON.stringify(slur.controlPoints));\r\n let slurX = 0;\r\n if (startNote === null || endNote === null) {\r\n slurX = -5;\r\n svgPoint[0].y = 10;\r\n svgPoint[1].y = 10;\r\n }\r\n if (modifier.startSelector.staff === modifier.endSelector.staff) {\r\n const hpParams = {\r\n thickness: slur.thickness,\r\n xShift: slurX,\r\n yShift: slur.yOffset,\r\n cps: svgPoint,\r\n orientation: slur.orientation,\r\n position: slur.position,\r\n positionEnd: slur.position_end\r\n };\r\n const paramStrings = JSON.stringify(hpParams);\r\n strs.push(`const ${modifierName} = new VF.Curve(${vxStart}, ${vxEnd}, JSON.parse('${paramStrings}'));`);\r\n strs.push(`${modifierName}.setContext(context).draw();`);\r\n }\r\n } else if (modifier.ctor === 'SmoTie') {\r\n const ctie = modifier as SmoTie;\r\n const vxStart = startNote?.attrs?.id ?? 'null';\r\n const vxEnd = endNote?.attrs?.id ?? 'null'; \r\n // TODO: handle case of overlap\r\n if (modifier.startSelector.staff === modifier.endSelector.staff) {\r\n if (ctie.lines.length > 0) {\r\n // Hack: if a chord changed, the ties may no longer be valid. We should check\r\n // this when it changes.\r\n const fromLines = ctie.lines.map((ll) => ll.from);\r\n const toLines = ctie.lines.map((ll) => ll.to);\r\n strs.push(`const ${modifierName} = new VF.StaveTie({ first_note: ${vxStart}, last_note: ${vxEnd}, \r\n firstNote: ${vxStart}, lastNote: ${vxEnd}, first_indices: [${fromLines}], last_indices: [${toLines}]});`);\r\n strs.push(`${modifierName}.setContext(context).draw();`);\r\n }\r\n }\r\n } else if (modifier.ctor === 'SmoStaffTextBracket' && startNote && endNote) {\r\n const ctext = modifier as SmoStaffTextBracket;\r\n const vxStart = startNote.attrs.id;\r\n const vxEnd = endNote.attrs.id;\r\n if (vxStart && vxEnd) {\r\n strs.push(`const ${modifierName} = new VF.TextBracket({ start: ${vxStart}, stop: ${vxEnd}, text: '${ctext.text}', position: ${ctext.position} });`);\r\n strs.push(`${modifierName}.setLine(${ctext.line}).setContext(context).draw();`);\r\n }\r\n }\r\n}\r\nfunction renderModifiers(smoScore: SmoScore, staff: SmoSystemStaff, \r\n startMeasure: number, endMeasure: number, strs: string[]) {\r\n const modifiers = staff.renderableModifiers.filter((mm) => mm.startSelector.measure >= startMeasure && mm.endSelector.measure <= endMeasure);\r\n modifiers.forEach((modifier) => {\r\n const startNote = SmoSelection.noteSelection(smoScore,\r\n modifier.startSelector.staff, modifier.startSelector.measure, modifier.startSelector.voice, modifier.startSelector.tick);\r\n const endNote = SmoSelection.noteSelection(smoScore,\r\n modifier.endSelector.staff, modifier.endSelector.measure, modifier.endSelector.voice, modifier.endSelector.tick);\r\n // TODO: handle case of multiple line slur/tie\r\n if (startNote && startNote.note && endNote && endNote.note) {\r\n if (endNote.measure.svg.lineIndex !== startNote.measure.svg.lineIndex) {\r\n const endFirst = lastNoteInSystem(smoScore, startNote);\r\n if (endFirst && endFirst.note) {\r\n const startLast = SmoSelection.noteSelection(smoScore, endNote.selector.staff,\r\n endNote.selector.measure, 0, 0);\r\n if (startLast && startLast.note) {\r\n renderModifier(modifier, startNote.note, null, strs);\r\n renderModifier(modifier, null, endNote.note, strs);\r\n }\r\n }\r\n } else {\r\n renderModifier(modifier, startNote.note, endNote.note, strs);\r\n }\r\n }\r\n });\r\n}\r\nfunction createStaveNote(renderInfo: VexNoteRenderInfo, key: string, row: number, strs: string[]) {\r\n const { smoNote, voiceIx, noteIx, tickmapObject, lyricAdj } = { ...renderInfo };\r\n const id = smoNote.attrs.id;\r\n const ctorInfo = smoNoteToStaveNote(smoNote);\r\n const ctorString = JSON.stringify(ctorInfo);\r\n if (smoNote.noteType === '/') {\r\n strs.push(`const ${id} = new VF.GlyphNote(new VF.Glyph('repeatBarSlash', 40), { duration: '${ctorInfo.duration}' });`)\r\n } else {\r\n strs.push(`const ${id} = new VF.StaveNote(JSON.parse('${ctorString}'))`);\r\n }\r\n smoNoteToGraceNotes(smoNote, strs);\r\n strs.push(`${id}.setAttribute('id', '${id}');`);\r\n if (smoNote.fillStyle) {\r\n strs.push(`${id}.setStyle({ fillStyle: '${smoNote.fillStyle}' });`);\r\n } else if (voiceIx > 0) {\r\n strs.push(`${id}.setStyle({ fillStyle: \"#115511\" });`);\r\n } else if (smoNote.isHidden()) {\r\n strs.push(`${id}.setStyle({ fillStyle: \"#ffffff00\" });`);\r\n }\r\n if (smoNote.noteType === 'n') {\r\n smoNote.pitches.forEach((pitch, ix) => {\r\n const zz = SmoMusic.accidentalDisplay(pitch, key,\r\n tickmapObject.tickmaps[voiceIx].durationMap[noteIx], tickmapObject.accidentalArray);\r\n if (zz) {\r\n const aname = id + ix.toString() + 'acc';\r\n strs.push(`const ${aname} = new VF.Accidental('${zz.symbol}');`);\r\n if (zz.courtesy) {\r\n strs.push(`${aname}.setAsCautionary();`);\r\n }\r\n strs.push(`${id}.addModifier(${aname}, ${ix});`);\r\n }\r\n }); \r\n }\r\n for (var i = 0; i < smoNote.dots; ++i) {\r\n for (var j = 0; j < smoNote.pitches.length; ++j) {\r\n strs.push(`${id}.addModifier(new VF.Dot(), ${j});`); \r\n }\r\n }\r\n smoNote.articulations.forEach((aa) => {\r\n let smoPosition = aa.position;\r\n if (smoPosition === 'auto') {\r\n smoPosition = SmoMusic.positionFromStaffLine(smoNote);\r\n }\r\n const position: number = SmoArticulation.positionToVex[smoPosition];\r\n const vexArt = SmoArticulation.articulationToVex[aa.articulation];\r\n const sn = getId();\r\n strs.push(`const ${sn} = new VF.Articulation('${vexArt}').setPosition(${position});`);\r\n strs.push(`${id}.addModifier(${sn}, 0);`);\r\n });\r\n smoNote.getJazzOrnaments().forEach((ll) => {\r\n const vexCode = ll.toVex();\r\n strs.push(`const ${ll.attrs.id} = new VF.Ornament('${vexCode}');`)\r\n strs.push(`${id}.addModifier(${ll.attrs.id}, 0);`);\r\n });\r\n smoNote.getOrnaments().forEach((ll) => {\r\n const vexCode = vexOrnaments[ll.ornament];\r\n strs.push(`const ${ll.attrs.id} = new VF.Ornament('${vexCode}');`);\r\n if (ll.offset === SmoOrnament.offsets.after) {\r\n strs.push(`${ll.attrs.id}.setDelayed(true);`);\r\n }\r\n strs.push(`${id}.addModifier(${ll.attrs.id}, 0);`);\r\n });\r\n const lyrics = smoNote.getTrueLyrics();\r\n if (smoNote.noteType !== '/') {\r\n lyrics.forEach((bll) => {\r\n const ll = bll as SmoLyric;\r\n let classString = 'lyric lyric-' + ll.verse;\r\n let text = ll.getText();\r\n if (!ll.skipRender) {\r\n if (!text.length && ll.isHyphenated()) {\r\n text = '-';\r\n }\r\n // no text, no hyphen, don't add it.\r\n if (text.length) {\r\n const sn = ll.attrs.id;\r\n text = text.replace(\"'\",\"\\\\'\");\r\n strs.push(`const ${sn} = new VF.Annotation('${text}');`);\r\n strs.push(`${sn}.setAttribute('id', '${sn}');`);\r\n const weight = ll.fontInfo.weight ?? 'normal';\r\n strs.push(`${sn}.setFont('${ll.fontInfo.family}', ${ll.fontInfo.size}, '${weight}');`)\r\n strs.push(`${sn}.setVerticalJustification(VF.Annotation.VerticalJustify.BOTTOM);`);\r\n strs.push(`${id}.addModifier(${sn});`);\r\n if (ll.adjY > 0) {\r\n const adjy = Math.round(ll.adjY);\r\n lyricAdj.push(`context.svg.getElementById('vf-${sn}').setAttributeNS('', 'transform', 'translate(0 ${adjy})');`);\r\n }\r\n if (ll.isHyphenated()) {\r\n classString += ' lyric-hyphen';\r\n }\r\n strs.push(`${sn}.addClass('${classString}');`);\r\n }\r\n }\r\n });\r\n }\r\n const chords = smoNote.getChords();\r\n chords.forEach((chord) => {\r\n strs.push(`const ${chord.attrs.id} = new VF.ChordSymbol();`);\r\n strs.push(`${chord.attrs.id}.setAttribute('id', '${chord.attrs.id}');`);\r\n const vblocks = getVexChordBlocks(chord);\r\n vblocks.forEach((vblock) => {\r\n const glyphParams = JSON.stringify(vblock);\r\n if (vblock.glyph) {\r\n strs.push(`${chord.attrs.id}.addGlyphOrText('${vblock.glyph}', JSON.parse('${glyphParams}'));`);\r\n } else {\r\n const btext = vblock.text ?? '';\r\n if (btext.trim().length) {\r\n strs.push(`${chord.attrs.id}.addGlyphOrText('${btext}', JSON.parse('${glyphParams}'));`);\r\n }\r\n }\r\n });\r\n strs.push(`${chord.attrs.id}.setFont('${chord.fontInfo.family}', ${chord.fontInfo.size}).setReportWidth(${chord.adjustNoteWidth});`);\r\n strs.push(`${id}.addModifier(${chord.attrs.id}, 0);`);\r\n });\r\n return id;\r\n}\r\nfunction createColumn(groups: Record, strs: string[]) {\r\n const groupKeys = Object.keys(groups);\r\n let maxXAdj = 0;\r\n groupKeys.forEach((groupKey) => {\r\n const music = groups[groupKey];\r\n // Need to create beam groups before formatting\r\n strs.push(`// create beam groups and tuplets for format grp ${groupKey} before formatting`);\r\n music.measures.forEach((smoMeasure) => {\r\n maxXAdj = Math.max(maxXAdj, smoMeasure.svg.adjX);\r\n createBeamGroups(smoMeasure, strs);\r\n createTuplets(smoMeasure, strs);\r\n });\r\n strs.push(' ');\r\n strs.push(`// formatting measures in staff group ${groupKey}`);\r\n // set x offset for alignment before format\r\n music.measures.forEach((smoMeasure) => {\r\n smoMeasure.voices.forEach((vv) => {\r\n vv.notes.forEach((nn) => {\r\n const id = nn.attrs.id;\r\n const offset = maxXAdj - smoMeasure.svg.adjX;\r\n strs.push(`${id}.setXShift(${offset});`);\r\n });\r\n });\r\n });\r\n const joinVoiceStr = '[' + music.voiceStrings.join(',') + ']';\r\n const widthMeasure = music.measures[0];\r\n const staffWidth = Math.round(widthMeasure.staffWidth -\r\n (widthMeasure.svg.maxColumnStartX + widthMeasure.svg.adjRight + widthMeasure.format.padLeft) - 10);\r\n strs.push(`${music.formatter}.format(${joinVoiceStr}, ${staffWidth});`);\r\n music.measures.forEach((smoMeasure) => {\r\n createMeasure(smoMeasure, music.heightOffset, strs);\r\n });\r\n });\r\n}\r\nfunction createBeamGroups(smoMeasure: SmoMeasure, strs: string[]) {\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n const bgs = smoMeasure.beamGroups.filter((bb) => bb.voice === voiceIx);\r\n for (var i = 0; i < bgs.length; ++i) {\r\n const bg = bgs[i];\r\n let keyNoteIx = bg.notes.findIndex((nn) => nn.noteType === 'n');\r\n keyNoteIx = (keyNoteIx >= 0) ? keyNoteIx : 0;\r\n const sdName = 'dir' + bg.attrs.id;\r\n strs.push(`const ${sdName} = ${bg.notes[keyNoteIx].attrs.id}.getStemDirection();`);\r\n const nar: string[] = [];\r\n for (var j = 0; j < bg.notes.length; ++j) {\r\n const note = bg.notes[j];\r\n const vexNote = `${note.attrs.id}`;\r\n if (note.noteType !== '/') {\r\n nar.push(vexNote);\r\n }\r\n if (note.noteType !== 'n') {\r\n continue;\r\n }\r\n strs.push(`${vexNote}.setStemDirection(${sdName});`);\r\n }\r\n const narString = '[' + nar.join(',') + ']';\r\n strs.push(`const ${bg.attrs.id} = new VF.Beam(${narString});`);\r\n }\r\n });\r\n}\r\nfunction createTuplets(smoMeasure: SmoMeasure, strs: string[]) {\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n for (let i = 0; i < smoMeasure.tupletTrees.length; ++i) {\r\n const tupletTree = smoMeasure.tupletTrees[i];\r\n if (tupletTree.voice !== voiceIx) {\r\n continue;\r\n }\r\n const traverseTupletTree = ( parentTuplet: SmoTuplet): void => {\r\n const vexNotes = [];\r\n for (let smoNote of smoMeasure.tupletNotes(parentTuplet)) {\r\n const vexNote = `${smoNote.attrs.id}`;\r\n vexNotes.push(vexNote);\r\n }\r\n const direction = smoMeasure.getStemDirectionForTuplet(parentTuplet) === SmoNote.flagStates.up ?\r\n VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM;\r\n const tpParams: TupletOptions = {\r\n num_notes: parentTuplet.numNotes,\r\n notes_occupied: parentTuplet.notesOccupied,\r\n ratioed: false,\r\n bracketed: true,\r\n location: direction\r\n };\r\n const tpParamString = JSON.stringify(tpParams);\r\n const vexNotesString = '[' + vexNotes.join(',') + ']';\r\n strs.push(`const ${parentTuplet.attrs.id} = new VF.Tuplet(${vexNotesString}, JSON.parse('${tpParamString}'));`);\r\n\r\n for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) {\r\n const tuplet = parentTuplet.childrenTuplets[i];\r\n traverseTupletTree(tuplet);\r\n }\r\n }\r\n traverseTupletTree(tupletTree.tuplet);\r\n }\r\n });\r\n}\r\nfunction createMeasure(smoMeasure: SmoMeasure, heightOffset: number, strs: string[]) {\r\n const ssid = 'stave' + smoMeasure.id;\r\n const staffY = smoMeasure.svg.staffY + heightOffset;\r\n const staffWidth = Math.round(smoMeasure.svg.staffWidth);\r\n strs.push(`const ${ssid} = new VF.Stave(${smoMeasure.svg.staffX}, ${staffY}, ${staffWidth});`);\r\n strs.push(`${ssid}.setAttribute('id', '${ssid}');`);\r\n createMeasureModifiers(smoMeasure, strs);\r\n if (smoMeasure.svg.forceClef) {\r\n strs.push(`${ssid}.addClef('${smoMeasure.clef}');`);\r\n }\r\n if (smoMeasure.svg.forceTimeSignature) {\r\n const ts = smoMeasure.timeSignature;\r\n let tsString = ts.timeSignature;\r\n if (smoMeasure.timeSignature.useSymbol && ts.actualBeats === 4 && ts.beatDuration === 4) {\r\n tsString = 'C';\r\n } else if (smoMeasure.timeSignature.useSymbol && ts.actualBeats === 2 && ts.beatDuration === 4) {\r\n tsString = 'C|';\r\n } else if (smoMeasure.timeSignature.displayString.length) {\r\n tsString = smoMeasure.timeSignature.displayString;\r\n }\r\n strs.push(`${ssid}.addTimeSignature('${tsString}');`);\r\n }\r\n if (smoMeasure.svg.forceKeySignature) {\r\n const key = SmoMusic.vexKeySignatureTranspose(smoMeasure.keySignature, 0);\r\n const ksid = 'key' + smoMeasure.id;\r\n strs.push(`const ${ksid} = new VF.KeySignature('${key}');`);\r\n if (smoMeasure.canceledKeySignature) {\r\n const canceledKey = SmoMusic.vexKeySignatureTranspose(smoMeasure.canceledKeySignature, 0);\r\n strs.push(`${ksid}.cancelKey('${canceledKey}');`);\r\n }\r\n strs.push(`${ksid}.addToStave(${ssid});`);\r\n }\r\n strs.push(`${ssid}.setContext(context);`);\r\n strs.push(`${ssid}.draw();`);\r\n smoMeasure.voices.forEach((voice, voiceIx) => {\r\n const vs = getVoiceId(smoMeasure, voiceIx);\r\n strs.push(`${vs}.draw(context, ${ssid});`);\r\n });\r\n smoMeasure.beamGroups.forEach((bg) => {\r\n strs.push(`${bg.attrs.id}.setContext(context);`);\r\n strs.push(`${bg.attrs.id}.draw();`)\r\n });\r\n smoMeasure.tupletTrees.forEach((tp) => {\r\n const traverseTupletTree = ( parentTuplet: SmoTuplet): void => {\r\n strs.push(`${parentTuplet.attrs.id}.setContext(context).draw();`)\r\n for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) {\r\n const tuplet = parentTuplet.childrenTuplets[i];\r\n traverseTupletTree(tuplet);\r\n }\r\n }\r\n traverseTupletTree(tp.tuplet);\r\n });\r\n}\r\n// ## SmoToVex\r\n// Simple serialize class that produced VEX note and voice objects\r\n// for vex EasyScore (for easier bug reports and test cases)\r\nexport class SmoToVex {\r\n static convert(smoScore: SmoScore, options: any): string {\r\n let div = 'boo';\r\n let page = 0;\r\n options = options ?? {};\r\n if (typeof(options['div']) === 'string') {\r\n div = options.div\r\n }\r\n if (typeof(options['page']) === 'number') {\r\n page = options.page;\r\n }\r\n let startMeasure = -1;\r\n let endMeasure = -1;\r\n const strs: string[] = [];\r\n const pageHeight = smoScore.layoutManager?.getGlobalLayout().pageHeight ?? 1056;\r\n const pageWidth = smoScore.layoutManager?.getGlobalLayout().pageWidth ?? 816;\r\n const pageLength = smoScore.staves[0].measures[smoScore.staves[0].measures.length - 1].svg.pageIndex + 1;\r\n let scoreName = smoScore.scoreInfo.title + ' p ' + (page + 1).toString() + '/' + pageLength.toString();\r\n const scoreSub = smoScore.scoreInfo.subTitle?.length ? `(${smoScore.scoreInfo.subTitle})` : '';\r\n scoreName = `${scoreName} ${scoreSub} by ${smoScore.scoreInfo.composer}`;\r\n strs.push(`// @@ ${scoreName}`);\r\n strs.push('function main() {');\r\n strs.push('// create the div and svg element for the music');\r\n strs.push(`const div = document.getElementById('${div}');`);\r\n strs.push('const VF = Vex.Flow;');\r\n strs.push(`const renderer = new VF.Renderer(div, VF.Renderer.Backends.SVG);`);\r\n const zoomScale = (smoScore.layoutManager?.getZoomScale() ?? 1.0);\r\n const svgScale = (smoScore.layoutManager?.getGlobalLayout().svgScale ?? 1.0);\r\n const width = zoomScale * pageWidth;\r\n const height = zoomScale * pageHeight;\r\n const scale = svgScale * zoomScale;\r\n const heightOffset = -1 * (height * page) / scale;\r\n const vbWidth = Math.round(width / scale);\r\n const vbHeight = Math.round(height / scale);\r\n strs.push('const context = renderer.getContext();');\r\n strs.push('const svg = context.svg');\r\n strs.push(`svg.setAttributeNS('', 'width', '${width}');`);\r\n strs.push(`svg.setAttributeNS('', 'height', '${height}');`);\r\n strs.push(`svg.setAttributeNS('', 'viewBox', '0 0 ${vbWidth} ${vbHeight}');`);\r\n strs.push('//');\r\n strs.push('// create the musical objects');\r\n const font = smoScore.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (font) {\r\n const fs = fontStacks[font.family].join(',');\r\n strs.push(`VF.setMusicFont(${fs});`);\r\n }\r\n const measureCount = smoScore.staves[0].measures.length;\r\n const lyricAdj: string[] = [];\r\n for (var k = 0; k < measureCount; ++k) {\r\n const groupMap: Record = {};\r\n if (smoScore.staves[0].measures[k].svg.pageIndex < page) {\r\n continue;\r\n }\r\n if (smoScore.staves[0].measures[k].svg.pageIndex > page) {\r\n break;\r\n }\r\n startMeasure = startMeasure < 0 ? k : startMeasure;\r\n endMeasure = Math.max(k, endMeasure);\r\n smoScore.staves.forEach((smoStaff, staffIx) => {\r\n const smoMeasure = smoStaff.measures[k];\r\n const selection = SmoSelection.measureSelection(smoScore, smoStaff.staffId, smoMeasure.measureNumber.measureIndex);\r\n if (!selection) {\r\n throw('ouch no selection');\r\n }\r\n const systemGroup = smoScore.getSystemGroupForStaff(selection);\r\n const justifyGroup: string = (systemGroup && smoMeasure.format.autoJustify) ? systemGroup.attrs.id : selection.staff.attrs.id;\r\n const tickmapObject = smoMeasure.createMeasureTickmaps();\r\n const measureIx = smoMeasure.measureNumber.measureIndex;\r\n const voiceStrings: string[] = [];\r\n const fmtid = 'fmt' + smoMeasure.id + measureIx.toString();\r\n strs.push(`const ${fmtid} = new VF.Formatter();`);\r\n if (!groupMap[justifyGroup]) {\r\n groupMap[justifyGroup] = {\r\n formatter: fmtid,\r\n measures: [],\r\n heightOffset,\r\n voiceStrings: [],\r\n systemGroup\r\n }\r\n }\r\n groupMap[justifyGroup].measures.push(smoMeasure);\r\n strs.push('//');\r\n strs.push(`// voices and notes for stave ${smoStaff.staffId} ${smoMeasure.measureNumber.measureIndex}`);\r\n smoMeasure.voices.forEach((smoVoice: SmoVoice, voiceIx: number) => { \r\n const vn = getVoiceId(smoMeasure, voiceIx);\r\n groupMap[justifyGroup].voiceStrings.push(vn);\r\n const vc = vn + 'ar';\r\n const ts = JSON.stringify({\r\n numBeats: smoMeasure.timeSignature.actualBeats,\r\n beatValue: smoMeasure.timeSignature.beatDuration\r\n });\r\n strs.push(`const ${vn} = new VF.Voice(JSON.parse('${ts}')).setMode(VF.Voice.Mode.SOFT);`);\r\n strs.push(`const ${vc} = [];`);\r\n smoVoice.notes.forEach((smoNote: SmoNote, noteIx: number) => {\r\n const renderInfo: VexNoteRenderInfo = { smoNote, voiceIx, noteIx, tickmapObject, lyricAdj };\r\n const noteId = createStaveNote(renderInfo, smoMeasure.keySignature, smoMeasure.svg.rowInSystem, strs);\r\n strs.push(`${vc}.push(${noteId});`);\r\n });\r\n strs.push(`${vn}.addTickables(${vc})`);\r\n voiceStrings.push(vn);\r\n strs.push(`${fmtid}.joinVoices([${vn}]);`);\r\n });\r\n if (smoMeasure.svg.rowInSystem === smoScore.staves.length - 1) {\r\n createColumn(groupMap, strs);\r\n const mapKeys = Object.keys(groupMap);\r\n mapKeys.forEach((mapKey) => {\r\n const tmpGroup = groupMap[mapKey];\r\n if (tmpGroup.systemGroup) {\r\n const systemIndex = smoMeasure.measureNumber.systemIndex;\r\n const startMeasure = 'stave' + smoScore.staves[tmpGroup.systemGroup.startSelector.staff].measures[k].id;\r\n const endMeasure = 'stave' + smoScore.staves[tmpGroup.systemGroup.endSelector.staff].measures[k].id;\r\n const leftConnector = leftConnectorVx(tmpGroup.systemGroup);\r\n const rightConnector = rightConnectorVx(tmpGroup.systemGroup);\r\n const jgname = justifyGroup + startMeasure + staffIx.toString();\r\n if (systemIndex === 0 && smoScore.staves.length > 1) {\r\n strs.push(`const left${jgname} = new VF.StaveConnector(${startMeasure}, ${endMeasure}).setType(${leftConnector});`);\r\n strs.push(`left${jgname}.setContext(context).draw();`);\r\n }\r\n let endStave = false;\r\n if (smoMeasure.measureNumber.systemIndex !== 0) {\r\n if (smoMeasure.measureNumber.systemIndex === smoScore.staves[0].measures.length - 1) {\r\n endStave = true;\r\n } else if (smoScore.staves[0].measures.length > k + 1 &&\r\n smoScore.staves[0].measures[k + 1].measureNumber.systemIndex === 0) {\r\n endStave = true;\r\n }\r\n }\r\n if (endStave) {\r\n strs.push(`const right${jgname} = new VF.StaveConnector(${startMeasure}, ${endMeasure}).setType(${rightConnector});`);\r\n strs.push(`right${jgname}.setContext(context).draw();`);\r\n } \r\n }\r\n });\r\n }\r\n });\r\n }\r\n smoScore.staves.forEach((staff) => {\r\n renderModifiers(smoScore, staff, startMeasure, endMeasure, strs);\r\n });\r\n renderVoltas(smoScore, startMeasure, endMeasure, strs);\r\n if (lyricAdj.length) {\r\n strs.push('// ');\r\n strs.push('// Align lyrics on different measures, once they are rendered.');\r\n }\r\n const render = strs.concat(lyricAdj);\r\n render.push('}');\r\n return render.join(`\\n`);\r\n // console.log(render.join(`\\n`));\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n// ## Description:\r\n// This file calls the vexflow routines that actually render a\r\n// measure of music. If multiple measures are justified in a\r\n// column, the rendering is deferred until all the measures have been\r\n// preformatted.\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { layoutDebug } from '../sui/layoutDebug';\r\nimport { SmoRepeatSymbol, SmoMeasureText, SmoBarline, SmoMeasureModifierBase, SmoRehearsalMark } from '../../smo/data/measureModifiers';\r\nimport { SourceSerifProFont } from '../../styles/font_metrics/ssp-serif-metrics';\r\nimport { SmoOrnament, SmoArticulation, SmoDynamicText, SmoLyric, \r\n SmoArpeggio, SmoNoteModifierBase, VexAnnotationParams, SmoTabNote } from '../../smo/data/noteModifiers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoMeasure, MeasureTickmaps } from '../../smo/data/measure';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { Clef, IsClef } from '../../smo/data/common';\r\nimport { SvgPage } from '../sui/svgPageMap';\r\nimport { SmoTabStave } from '../../smo/data/staffModifiers';\r\nimport { toVexBarlineType, vexBarlineType, vexBarlinePosition, toVexBarlinePosition, toVexSymbol,\r\n toVexTextJustification, toVexTextPosition, getVexChordBlocks, toVexStemDirection,\r\n VexTabNotePositions } from './smoAdapter';\r\nimport { VexFlow, Stave,StemmableNote, Note, Beam, Tuplet, Voice,\r\n Formatter, Accidental, Annotation, StaveNoteStruct, StaveText, StaveModifier,\r\n createStaveText, renderDynamics, applyStemDirection,\r\n getVexNoteParameters, defaultNoteScale, defaultCueScale, getVexTuplets,\r\n createStave, createVoice, getOrnamentGlyph, getSlashGlyph, getRepeatBar, getMultimeasureRest,\r\n createTextNote, TabStave, createTabStave, TabNotePosition, TabNoteStruct,\r\n CreateVexNoteParams, TabNote, PedalMarking\r\n } from '../../common/vex';\r\n\r\nimport { VxMeasureIf, VexNoteModifierIf, VxNote } from './vxNote';\r\nimport { SmoTuplet } from '../../smo/data/tuplet';\r\nimport { vexGlyph } from './glyphDimensions';\r\nconst VF = VexFlow;\r\n\r\ndeclare var $: any;\r\n// const VF = eval('Vex.Flow');\r\n\r\n/**\r\n * This is the interface for VexFlow library that actually does the engraving.\r\n * @category SuiRender\r\n */\r\nexport class VxMeasure implements VxMeasureIf {\r\n context: SvgPage;\r\n printing: boolean;\r\n selection: SmoSelection;\r\n softmax: number;\r\n smoMeasure: SmoMeasure;\r\n smoTabStave?: SmoTabStave;\r\n tabStave?: TabStave;\r\n rendered: boolean = false;\r\n noteToVexMap: Record = {};\r\n beamToVexMap: Record = {};\r\n tupletToVexMap: Record = {};\r\n multimeasureRest: any | null = null;\r\n vexNotes: Note[] = [];\r\n vexBeamGroups: Beam[] = [];\r\n vexTuplets: Tuplet[] = [];\r\n tickmapObject: MeasureTickmaps | null = null;\r\n stave: Stave | null = null; // vex stave\r\n voiceNotes: Note[] = []; // notes for current voice, as rendering\r\n tabNotes: Note[] = [];\r\n voiceAr: Voice[] = [];\r\n tabVoice: Voice | null = null;\r\n formatter: Formatter | null = null;\r\n allCues: boolean = false;\r\n modifiersToBox: SmoNoteModifierBase[] = [];\r\n collisionMap: Record = {};\r\n dbgLeftX: number = 0;\r\n dbgWidth: number = 0;\r\n\r\n constructor(context: SvgPage, selection: SmoSelection, printing: boolean, softmax: number) {\r\n this.context = context;\r\n this.rendered = false;\r\n this.selection = selection;\r\n this.smoMeasure = this.selection.measure;\r\n this.printing = printing;\r\n this.allCues = selection.staff.partInfo.displayCues;\r\n this.tupletToVexMap = {};\r\n this.vexNotes = [];\r\n this.vexBeamGroups = [];\r\n this.vexBeamGroups = [];\r\n this.beamToVexMap = {};\r\n this.softmax = softmax;\r\n this.smoTabStave = selection.staff.getTabStaveForMeasure(selection.selector);\r\n }\r\n\r\n static get fillStyle() {\r\n return '#000';\r\n }\r\n // Treat a rest like a whole rest if there is only a single rest in the measure\r\n // and the measure length is not a pickup\r\n isWholeRest() {\r\n return (this.smoMeasure.voices.length === 1 &&\r\n this.smoMeasure.voices[0].notes.length === 1 &&\r\n this.smoMeasure.voices[0].notes[0].isRest() &&\r\n this.smoMeasure.getMaxTicksVoice() > 4096\r\n );\r\n }\r\n createCollisionTickmap() {\r\n let i = 0;\r\n let j = 0;\r\n if (!this.tickmapObject) {\r\n return;\r\n }\r\n for (i = 0; i < this.smoMeasure.voices.length; ++i) {\r\n const tm = this.tickmapObject.tickmaps[i];\r\n for (j = 0; j < tm.durationMap.length; ++j) {\r\n if (typeof(this.collisionMap[tm.durationMap[j]]) === 'undefined') {\r\n this.collisionMap[tm.durationMap[j]] = [];\r\n }\r\n this.collisionMap[tm.durationMap[j]].push(this.smoMeasure.voices[i].notes[j]);\r\n }\r\n }\r\n }\r\n isCollision(voiceIx: number, tickIx: number): boolean {\r\n let i = 0;\r\n let j = 0;\r\n let k = 0;\r\n let staffLines: number[] = [];\r\n if (!this.tickmapObject) {\r\n return false;\r\n }\r\n const tick = this.tickmapObject.tickmaps[voiceIx].durationMap[tickIx];\r\n // Just one note, no collision\r\n if (this.collisionMap[tick].length < 2) {\r\n return false;\r\n }\r\n for (i = 0; i < this.collisionMap[tick].length; ++i) {\r\n const note = this.collisionMap[tick][i];\r\n for (j = 0; j < note.pitches.length; ++j) {\r\n const clef: Clef = IsClef(note.clef) ? note.clef : 'treble';\r\n const pitch = note.pitches[j];\r\n const curLine = SmoMusic.pitchToStaffLine(clef, pitch);\r\n for (k = 0;k < staffLines.length; ++k) {\r\n if (Math.abs(curLine - staffLines[k]) < 1) {\r\n return true;\r\n }\r\n }\r\n staffLines.push(curLine);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * convert a smoNote into a vxNote so it can be rasterized\r\n * @param smoNote \r\n * @param tickIndex - used to calculate accidental\r\n * @param voiceIx \r\n * @returns \r\n */\r\n createVexNote(smoNote: SmoNote, tickIndex: number, voiceIx: number) {\r\n let vexNote: Note | null = null;\r\n let smoTabNote: SmoTabNote | null = null;\r\n let timestamp = new Date().valueOf();\r\n const stemTicks = SmoMusic.ticksToDuration[smoNote.stemTicks];\r\n let tabNote: StemmableNote | null = null;\r\n const noteHead = smoNote.isRest() ? 'r' : smoNote.noteHead;\r\n const keys = SmoMusic.smoPitchesToVexKeys(smoNote.pitches, 0, noteHead);\r\n const smoNoteParams = {\r\n isTuplet: smoNote.isTuplet,\r\n measureIndex: this.smoMeasure.measureNumber.measureIndex,\r\n clef: smoNote.clef,\r\n stemTicks,\r\n keys,\r\n noteType: smoNote.noteType\r\n };\r\n const { noteParams, duration } = getVexNoteParameters(smoNoteParams);\r\n if (this.tabStave && this.smoTabStave) {\r\n smoTabNote = this.smoTabStave.getTabNoteFromNote(smoNote, this.smoMeasure.transposeIndex);\r\n if (smoTabNote) {\r\n const positions: TabNotePosition[] = VexTabNotePositions(this.smoTabStave, smoTabNote, smoNote);\r\n if (positions.length) {\r\n if (!smoNote.isRest()) {\r\n tabNote = new VF.TabNote({ positions, duration: duration });\r\n if (this.smoTabStave.showStems) {\r\n tabNote.render_options.draw_stem = true;\r\n tabNote.render_options.draw_dots = true;\r\n tabNote.render_options.draw_stem_through_stave = smoTabNote.flagThrough;\r\n }\r\n } else {\r\n tabNote = new VF.StaveNote(noteParams);\r\n }\r\n }\r\n }\r\n }\r\n if (smoNote.noteType === '/') {\r\n // vexNote = new VF.GlyphNote('\\uE504', { duration });\r\n vexNote = getSlashGlyph();\r\n smoNote.renderId = 'vf-' + vexNote.getAttribute('id'); // where does 'vf' come from?\r\n } else {\r\n const smoVexStemParams = {\r\n voiceCount: this.smoMeasure.voices.length,\r\n voiceIx,\r\n isAuto: smoNote.flagState === SmoNote.flagStates.auto,\r\n isUp: smoNote.flagState === SmoNote.flagStates.up\r\n }\r\n applyStemDirection(smoVexStemParams, noteParams);\r\n if (smoTabNote && tabNote) {\r\n tabNote.setStemDirection(noteParams.stem_direction);\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATA, new Date().valueOf() - timestamp);\r\n timestamp = new Date().valueOf();\r\n vexNote = new VF.StaveNote(noteParams);\r\n if (voiceIx > 0 && this.isCollision(voiceIx, tickIndex)) {\r\n vexNote.setXShift(-10);\r\n }\r\n if (this.isWholeRest()) {\r\n noteParams.duration = 'wr';\r\n vexNote = new VF.StaveNote(noteParams);\r\n vexNote.setCenterAlignment(true);\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATB, new Date().valueOf() - timestamp);\r\n timestamp = new Date().valueOf();\r\n if (smoNote.fillStyle && !this.printing) {\r\n vexNote.setStyle({ fillStyle: smoNote.fillStyle });\r\n } else if (voiceIx > 0 && !this.printing) {\r\n vexNote.setStyle({ fillStyle: \"#115511\" });\r\n } else if (smoNote.isHidden() && this.printing) {\r\n vexNote.setStyle({ fillStyle: \"#ffffff00\" });\r\n }\r\n smoNote.renderId = 'vf-' + vexNote.getAttribute('id'); // where does 'vf' come from?\r\n }\r\n const noteData: VexNoteModifierIf = {\r\n smoMeasure: this.smoMeasure,\r\n vxMeasure: this,\r\n smoNote: smoNote,\r\n staveNote: vexNote,\r\n voiceIndex: voiceIx,\r\n tickIndex: tickIndex\r\n }\r\n if (tabNote) {\r\n noteData.tabNote = tabNote;\r\n this.tabNotes.push(tabNote);\r\n }\r\n const modObj = new VxNote(noteData);\r\n modObj.addModifiers();\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.PREFORMATC, new Date().valueOf() - timestamp);\r\n\r\n return modObj;\r\n }\r\n\r\n renderNoteGlyph(smoNote: SmoNote, textObj: SmoDynamicText) {\r\n var x = this.noteToVexMap[smoNote.attrs.id].getAbsoluteX() + textObj.xOffset;\r\n // the -3 is copied from vexflow textDynamics\r\n var y = this.stave!.getYForLine(textObj.yOffsetLine - 3) + textObj.yOffsetPixels;\r\n let maxh = 0;\r\n const minx = x;\r\n var group = this.context.getContext().openGroup();\r\n group.classList.add(textObj.attrs.id + '-' + smoNote.attrs.id);\r\n group.classList.add(textObj.attrs.id);\r\n // const duration = SmoMusic.closestVexDuration(smoNote.tickCount);\r\n for (var i = 0; i < textObj.text.length; i += 1 ) {\r\n const { width , height } = renderDynamics(this.context.getContext(), VF.TextDynamics.GLYPHS[textObj.text[i]].code,\r\n textObj.fontSize, x, y);\r\n /* const { width , height } = renderDynamics(this.context.getContext(), VF.TextDynamics.GLYPHS[textObj.text[i]],\r\n textObj.fontSize, x, y); */\r\n x += width;\r\n maxh = Math.max(height, maxh); \r\n }\r\n textObj.logicalBox = SvgHelpers.boxPoints(minx, y + this.context.box.y, x - minx, maxh);\r\n textObj.element = group;\r\n this.modifiersToBox.push(textObj);\r\n this.context.getContext().closeGroup();\r\n }\r\n\r\n renderDynamics() {\r\n this.smoMeasure.voices.forEach((voice) => {\r\n voice.notes.forEach((smoNote) => {\r\n const mods = smoNote.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoDynamicText'\r\n );\r\n mods.forEach((btm) => {\r\n const tm = btm as SmoDynamicText;\r\n this.renderNoteGlyph(smoNote, tm);\r\n });\r\n });\r\n });\r\n }\r\n createRepeatSymbol() {\r\n this.voiceNotes = [];\r\n // const vexNote = new VF.GlyphNote('\\uE500', { duration: 'w' }, { line: 2 });\r\n const vexNote = getRepeatBar();\r\n vexNote.setCenterAlignment(true);\r\n this.vexNotes.push(vexNote);\r\n this.voiceNotes.push(vexNote);\r\n }\r\n /**\r\n * create an a array of VF.StaveNote objects to render the active voice.\r\n * @param voiceIx \r\n */\r\n createVexNotes(voiceIx: number) {\r\n let i = 0;\r\n this.voiceNotes = [];\r\n const voice = this.smoMeasure.voices[voiceIx];\r\n let clefNoteAdded = false;\r\n\r\n for (i = 0;\r\n i < voice.notes.length; ++i) {\r\n const smoNote = voice.notes[i];\r\n const textNotes = smoNote.getTextOrnaments();\r\n const vexNote = this.createVexNote(smoNote, i, voiceIx);\r\n this.noteToVexMap[smoNote.attrs.id] = vexNote.noteData.staveNote;\r\n this.vexNotes.push(vexNote.noteData.staveNote);\r\n\r\n if (vexNote.noteData.smoNote.clefNote && !clefNoteAdded) {\r\n const cf = new VF.ClefNote(vexNote.noteData.smoNote.clefNote.clef, 'small');\r\n this.voiceNotes.push(cf);\r\n clefNoteAdded = true; // ignore 2nd in a measure\r\n }\r\n this.voiceNotes.push(vexNote.noteData.staveNote);\r\n textNotes.forEach((tn) => {\r\n this.voiceNotes.push(createTextNote(SmoOrnament.textNoteOrnaments[tn.ornament]));\r\n });\r\n if (isNaN(smoNote.ticks.numerator) || isNaN(smoNote.ticks.denominator)\r\n || isNaN(smoNote.ticks.remainder)) {\r\n throw ('vxMeasure: NaN in ticks');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Group the notes for beaming and create Vex beam objects\r\n * @param vix - voice index\r\n * @returns \r\n */\r\n createVexBeamGroups(vix: number) {\r\n let keyNoteIx = -1;\r\n let i = 0;\r\n let j = 0;\r\n let stemDirection = VF.Stem.DOWN;\r\n for (i = 0; i < this.smoMeasure.beamGroups.length; ++i) {\r\n const bg = this.smoMeasure.beamGroups[i];\r\n if (bg.voice !== vix) {\r\n continue;\r\n }\r\n const vexNotes: StemmableNote[] = [];\r\n keyNoteIx = bg.notes.findIndex((nn) => nn.noteType === 'n');\r\n\r\n // Fix stem bug: key off first non-rest note.\r\n keyNoteIx = (keyNoteIx >= 0) ? keyNoteIx : 0;\r\n for (j = 0; j < bg.notes.length; ++j) {\r\n const note = bg.notes[j];\r\n if (note.noteType === '/') {\r\n continue;\r\n }\r\n const vexNote = this.noteToVexMap[note.attrs.id];\r\n // some type of redraw condition?\r\n if (!(vexNote instanceof VF.StaveNote || vexNote instanceof VF.GraceNote)) {\r\n return;\r\n }\r\n if (note.tickCount >= 4096 || vexNote.getIntrinsicTicks() >= 4096) {\r\n console.warn('bad length in beam group');\r\n return;\r\n }\r\n if (keyNoteIx === j) {\r\n stemDirection = note.flagState === SmoNote.flagStates.auto ?\r\n vexNote.getStemDirection() : toVexStemDirection(note);\r\n }\r\n vexNote.setStemDirection(stemDirection);\r\n vexNotes.push(vexNote); \r\n }\r\n const vexBeam = new VF.Beam(vexNotes);\r\n this.beamToVexMap[bg.attrs.id] = vexBeam;\r\n this.vexBeamGroups.push(vexBeam);\r\n }\r\n }\r\n\r\n createVexTuplets(vix: number) {\r\n this.vexTuplets = [];\r\n this.tupletToVexMap = {};\r\n for (let i = 0; i < this.smoMeasure.tupletTrees.length; ++i) {\r\n const tupletTree = this.smoMeasure.tupletTrees[i];\r\n if (tupletTree.voice !== vix) {\r\n continue;\r\n }\r\n const traverseTupletTree = ( parentTuplet: SmoTuplet): void => {\r\n const vexNotes = [];\r\n for (let smoNote of this.smoMeasure.tupletNotes(parentTuplet)) {\r\n vexNotes.push(this.noteToVexMap[smoNote.attrs.id]);\r\n }\r\n const location = this.smoMeasure.getStemDirectionForTuplet(parentTuplet) === SmoNote.flagStates.up ?\r\n VF.Tuplet.LOCATION_TOP : VF.Tuplet.LOCATION_BOTTOM;\r\n const smoTupletParams = {\r\n vexNotes,\r\n numNotes: parentTuplet.numNotes,\r\n notesOccupied: parentTuplet.notesOccupied,\r\n location\r\n }\r\n const vexTuplet = getVexTuplets(smoTupletParams);\r\n\r\n this.tupletToVexMap[parentTuplet.attrs.id] = vexTuplet;\r\n this.vexTuplets.push(vexTuplet);\r\n for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) {\r\n const tuplet = parentTuplet.childrenTuplets[i];\r\n traverseTupletTree(tuplet);\r\n }\r\n }\r\n traverseTupletTree(tupletTree.tuplet);\r\n }\r\n }\r\n\r\n /**\r\n * create the modifiers for the stave itself, bar lines etc.\r\n */\r\n createMeasureModifiers() {\r\n const sb = this.smoMeasure.getStartBarline();\r\n const eb = this.smoMeasure.getEndBarline();\r\n const sym = this.smoMeasure.getRepeatSymbol();\r\n if (!this.stave) {\r\n return;\r\n }\r\n\r\n // don't create a begin bar for any but the 1st measure.\r\n if (this.smoMeasure.measureNumber.systemIndex !== 0 && sb.barline === SmoBarline.barlines.singleBar\r\n && this.smoMeasure.format.padLeft === 0) {\r\n this.stave.setBegBarType(VF.Barline.type.NONE);\r\n } else {\r\n this.stave.setBegBarType(toVexBarlineType(sb));\r\n }\r\n if (this.smoMeasure.svg.multimeasureLength > 0 && !this.smoMeasure.svg.hideMultimeasure) {\r\n this.stave.setEndBarType(vexBarlineType[this.smoMeasure.svg.multimeasureEndBarline]);\r\n } else if (eb.barline !== SmoBarline.barlines.singleBar) {\r\n this.stave.setEndBarType(toVexBarlineType(eb));\r\n }\r\n if (sym && sym.symbol !== SmoRepeatSymbol.symbols.None) {\r\n const rep = new VF.Repetition(toVexSymbol(sym), sym.xOffset + this.smoMeasure.staffX, sym.yOffset);\r\n this.stave.getModifiers().push(rep);\r\n }\r\n const tms = this.smoMeasure.getMeasureText();\r\n // TODO: set font\r\n tms.forEach((tmb: SmoMeasureModifierBase) => {\r\n const tm = tmb as SmoMeasureText;\r\n const offset = tm.position === SmoMeasureText.positions.left ? this.smoMeasure.format.padLeft : 0;\r\n const staveText = createStaveText(tm.text, toVexTextPosition(tm), \r\n {\r\n shiftX: tm.adjustX + offset, shiftY: tm.adjustY, justification: toVexTextJustification(tm)\r\n }\r\n );\r\n this.stave?.addModifier(staveText);\r\n\r\n // hack - we can't create staveText directly so this is the only way I could set the font\r\n const ar = this.stave!.getModifiers();\r\n const vm = ar[ar.length - 1];\r\n vm.setFont(tm.fontInfo);\r\n });\r\n if (this.smoMeasure.svg.rowInSystem === 0) {\r\n const rmb = this.smoMeasure.getRehearsalMark();\r\n const rm = rmb as SmoRehearsalMark;\r\n if (rm) {\r\n this.stave.setSection(rm.symbol, 0);\r\n }\r\n }\r\n\r\n const tempo = this.smoMeasure.getTempo();\r\n if (tempo && this.smoMeasure.svg.forceTempo) {\r\n this.stave.setTempo(tempo.toVexTempo(), -1 * tempo.yOffset);\r\n const vexTempo = this.stave.getModifiers().find((mod: StaveModifier) => mod.getAttribute('type') === 'StaveTempo');\r\n if (vexTempo) {\r\n vexTempo.setFont({ family: SourceSerifProFont.fontFamily, size: 13, weight: 'bold' });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Create all Vex notes and modifiers. We defer the format and rendering so\r\n * we can align across multiple staves\r\n */\r\n preFormat() {\r\n var j = 0;\r\n if (this.smoMeasure.svg.element !== null) {\r\n this.smoMeasure.svg.element.remove();\r\n this.smoMeasure.svg.element = null;\r\n if (this.smoMeasure.svg.tabElement) {\r\n this.smoMeasure.svg.tabElement.remove();\r\n this.smoMeasure.svg.tabElement = undefined;\r\n }\r\n }\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n // Note: need to do this to get it into VEX KS format\r\n const staffX = this.smoMeasure.staffX + this.smoMeasure.format.padLeft;\r\n const staffY = this.smoMeasure.staffY - this.context.box.y;\r\n const key = SmoMusic.vexKeySignatureTranspose(this.smoMeasure.keySignature, 0);\r\n const canceledKey = SmoMusic.vexKeySignatureTranspose(this.smoMeasure.canceledKeySignature, 0);\r\n const smoVexStaveParams = {\r\n x: staffX,\r\n y: staffY,\r\n padLeft: this.smoMeasure.format.padLeft,\r\n id: this.smoMeasure.id,\r\n staffX: this.smoMeasure.staffX,\r\n staffY: this.smoMeasure.staffY,\r\n staffWidth: this.smoMeasure.staffWidth,\r\n forceClef: this.smoMeasure.svg.forceClef,\r\n clef: this.smoMeasure.clef,\r\n forceKey: this.smoMeasure.svg.forceKeySignature,\r\n key,\r\n canceledKey,\r\n startX: this.smoMeasure.svg.maxColumnStartX,\r\n adjX: this.smoMeasure.svg.adjX,\r\n context: this.context.getContext()\r\n }\r\n this.stave = createStave(smoVexStaveParams);\r\n if (this.smoMeasure.svg.forceTimeSignature) {\r\n const ts = this.smoMeasure.timeSignature;\r\n let tsString = ts.timeSignature;\r\n if (this.smoMeasure.timeSignature.useSymbol && ts.actualBeats === 4 && ts.beatDuration === 4) {\r\n tsString = 'C';\r\n } else if (this.smoMeasure.timeSignature.useSymbol && ts.actualBeats === 2 && ts.beatDuration === 4) {\r\n tsString = 'C|';\r\n } else if (this.smoMeasure.timeSignature.displayString.length) {\r\n tsString = this.smoMeasure.timeSignature.displayString;\r\n }\r\n this.stave.addTimeSignature(tsString);\r\n }\r\n // Connect it to the rendering context and draw!\r\n this.stave.setContext(this.context.getContext());\r\n if (this.smoTabStave && this.smoMeasure.svg.tabStaveBox?.width) {\r\n const box = this.smoMeasure.svg.tabStaveBox;\r\n let tabWidth = 0;\r\n box.y -= this.context.box.y;\r\n box.x = staffX - this.context.box.x;\r\n box.width = this.smoMeasure.staffWidth;\r\n this.tabStave = createTabStave(box, this.smoTabStave.spacing, this.smoTabStave.numLines);\r\n if (this.smoMeasure.svg.forceClef) {\r\n this.tabStave.addTabGlyph();\r\n tabWidth = vexGlyph.dimensions['tab'].width;\r\n }\r\n this.tabStave.setNoteStartX(this.tabStave.getNoteStartX() + this.smoMeasure.svg.adjX - tabWidth);\r\n this.tabStave.setContext(this.context.getContext());\r\n }\r\n\r\n this.createMeasureModifiers();\r\n\r\n this.tickmapObject = this.smoMeasure.createMeasureTickmaps();\r\n this.createCollisionTickmap();\r\n\r\n this.voiceAr = [];\r\n this.vexNotes = [];\r\n this.noteToVexMap = {};\r\n\r\n // If there are multiple voices, add them all to the formatter at the same time so they don't collide\r\n for (j = 0; j < this.smoMeasure.voices.length; ++j) {\r\n const smoVexVoiceParams = {\r\n actualBeats: this.smoMeasure.timeSignature.actualBeats,\r\n beatDuration: this.smoMeasure.timeSignature.beatDuration,\r\n notes: this.vexNotes\r\n }\r\n if (!this.smoMeasure.svg.multimeasureLength && !this.smoMeasure.repeatSymbol) {\r\n this.createVexNotes(j);\r\n smoVexVoiceParams.notes = this.voiceNotes;\r\n this.createVexTuplets(j);\r\n this.createVexBeamGroups(j);\r\n\r\n // Create a voice in 4/4 and add above notes\r\n const voice = createVoice(smoVexVoiceParams);\r\n this.voiceAr.push(voice);\r\n }\r\n if (this.smoMeasure.repeatSymbol) {\r\n this.createRepeatSymbol();\r\n // Create a voice in 4/4 and add above notes\r\n const voice = createVoice(smoVexVoiceParams);\r\n this.voiceAr.push(voice);\r\n }\r\n }\r\n // Need to format for x position, then set y position before drawing dynamics.\r\n this.formatter = new VF.Formatter({ softmaxFactor: this.softmax, globalSoftmax: false });\r\n this.formatter.joinVoices(this.voiceAr);\r\n if (this.tabStave) {\r\n this.tabVoice = createVoice({\r\n actualBeats: this.smoMeasure.timeSignature.actualBeats,\r\n beatDuration: this.smoMeasure.timeSignature.beatDuration,\r\n notes: this.tabNotes\r\n });\r\n this.formatter.joinVoices([this.tabVoice]);\r\n }\r\n }\r\n /**\r\n * Create the Vex formatter that calculates the X and Y positions of the notes. A formatter\r\n * may actually span multiple staves for justified staves. The notes are drawn in their\r\n * individual vxMeasure objects but formatting is done once for all justified staves\r\n * @param voices Voice objects from VexFlow\r\n * @returns \r\n */\r\n format(voices: Voice[]) {\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n\r\n if (this.smoMeasure.svg.multimeasureLength > 0) {\r\n this.multimeasureRest = getMultimeasureRest(this.smoMeasure.svg.multimeasureLength);\r\n this.multimeasureRest.setContext(this.context.getContext());\r\n this.multimeasureRest.setStave(this.stave);\r\n return;\r\n }\r\n if (!this.formatter) {\r\n return;\r\n }\r\n const timestamp = new Date().valueOf();\r\n const staffWidth = this.smoMeasure.staffWidth -\r\n (this.smoMeasure.svg.maxColumnStartX + this.smoMeasure.svg.adjRight + this.smoMeasure.format.padLeft) - 10;\r\n this.dbgLeftX = this.smoMeasure.staffX + this.smoMeasure.format.padLeft + this.smoMeasure.svg.adjX;\r\n this.dbgWidth = staffWidth;\r\n this.formatter.format(voices, staffWidth);\r\n if (this.tabVoice && this.tabNotes.length) {\r\n this.formatter.format([this.tabVoice], staffWidth);\r\n }\r\n layoutDebug.setTimestamp(layoutDebug.codeRegions.FORMAT, new Date().valueOf() - timestamp);\r\n }\r\n /**\r\n * render is called after format. Actually draw the things.\r\n */\r\n render() {\r\n if (this.smoMeasure.svg.hideEmptyMeasure) {\r\n return;\r\n }\r\n\r\n var group = this.context.getContext().openGroup() as SVGSVGElement;\r\n var mmClass = this.smoMeasure.getClassId();\r\n var j = 0;\r\n try {\r\n // bound each measure in its own SVG group for easy deletion and mapping to screen coordinate\r\n group.classList.add(this.smoMeasure.id);\r\n group.classList.add(mmClass);\r\n group.id = this.smoMeasure.id;\r\n this.stave!.draw();\r\n this.smoMeasure.svg.element = group;\r\n\r\n for (j = 0; j < this.voiceAr.length; ++j) {\r\n this.voiceAr[j].draw(this.context.getContext(), this.stave!);\r\n }\r\n this.vexBeamGroups.forEach((b) => {\r\n b.setContext(this.context.getContext()).draw();\r\n });\r\n\r\n this.vexTuplets.forEach((tuplet) => {\r\n tuplet.setContext(this.context.getContext()).draw();\r\n });\r\n if (this.multimeasureRest) {\r\n this.multimeasureRest.draw();\r\n }\r\n // this._updateLyricDomSelectors();\r\n this.renderDynamics();\r\n // this.smoMeasure.adjX = this.stave.start_x - (this.smoMeasure.staffX);\r\n\r\n this.context.getContext().closeGroup();\r\n if (this.tabStave) {\r\n const tabStaveId = `${this.smoMeasure.id}-tab`;\r\n const tabGroup = this.context.getContext().openGroup() as SVGSVGElement;\r\n tabGroup.classList.add(tabStaveId);\r\n this.tabStave.draw();\r\n this.tabVoice?.draw(this.context.getContext(), this.tabStave);\r\n this.context.getContext().closeGroup();\r\n this.smoMeasure.svg.tabElement = tabGroup;\r\n }\r\n // layoutDebug.setTimestamp(layoutDebug.codeRegions.RENDER, new Date().valueOf() - timestamp);\r\n\r\n this.rendered = true;\r\n if (layoutDebug.mask & layoutDebug.values['adjust']) {\r\n SvgHelpers.debugBoxNoText(this.context.getContext().svg,\r\n SvgHelpers.boxPoints(this.dbgLeftX, \r\n this.smoMeasure.svg.staffY, this.dbgWidth, 40), 'render-x-dbg', 0);\r\n }\r\n } catch (exc) {\r\n console.warn('unable to render measure ' + this.smoMeasure.measureNumber.measureIndex);\r\n this.context.getContext().closeGroup();\r\n }\r\n }\r\n}\r\n","\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { layoutDebug } from '../sui/layoutDebug';\r\nimport { SmoRepeatSymbol, SmoMeasureText, SmoBarline, SmoMeasureModifierBase, SmoRehearsalMark, SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\nimport { SourceSerifProFont } from '../../styles/font_metrics/ssp-serif-metrics';\r\nimport { SmoOrnament, SmoArticulation, SmoDynamicText, SmoLyric, \r\n SmoArpeggio, SmoNoteModifierBase, VexAnnotationParams, SmoTabNote } from '../../smo/data/noteModifiers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SmoMeasure, MeasureTickmaps } from '../../smo/data/measure';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { Clef, IsClef } from '../../smo/data/common';\r\nimport { SvgPage } from '../sui/svgPageMap';\r\nimport { toVexBarlineType, vexBarlineType, vexBarlinePosition, toVexBarlinePosition, toVexSymbol,\r\n toVexTextJustification, toVexTextPosition, getVexChordBlocks, toVexStemDirection } from './smoAdapter';\r\nimport { VexFlow, Stave,StemmableNote, Note, Beam, Tuplet, Voice,\r\n Formatter, Accidental, Annotation, StaveNoteStruct, StaveText, StaveModifier, \r\n createStaveText, renderDynamics, applyStemDirection,\r\n getVexNoteParameters, defaultNoteScale, defaultCueScale, getVexTuplets,\r\n createStave, createVoice, getOrnamentGlyph, getSlashGlyph, getRepeatBar, getMultimeasureRest,\r\n addChordGlyph, StaveNote, PedalMarking,\r\n TabNote} from '../../common/vex';\r\n\r\nconst VF = VexFlow;\r\n\r\nexport interface VxMeasureIf {\r\n isWholeRest(): boolean;\r\n noteToVexMap: Record;\r\n smoMeasure: SmoMeasure;\r\n tickmapObject: MeasureTickmaps | null\r\n}\r\n\r\nexport interface VexNoteModifierIf {\r\n smoMeasure: SmoMeasure,\r\n vxMeasure: VxMeasureIf,\r\n smoNote: SmoNote,\r\n staveNote: Note,\r\n voiceIndex: number,\r\n tickIndex: number,\r\n tabNote?: StemmableNote | TabNote,\r\n}\r\n\r\nexport class VxNote {\r\n noteData: VexNoteModifierIf;\r\n constructor(noteData: VexNoteModifierIf) {\r\n this.noteData = noteData;\r\n }\r\n createMicrotones(smoNote: SmoNote, vexNote: Note) {\r\n const tones = smoNote.getMicrotones();\r\n tones.forEach((tone) => {\r\n const acc: Accidental = new VF.Accidental(tone.toVex);\r\n vexNote.addModifier(acc, tone.pitchIndex);\r\n });\r\n }\r\n createDots() {\r\n for (var i = 0; i < this.noteData.smoNote.dots; ++i) {\r\n for (var j = 0; j < this.noteData.smoNote.pitches.length; ++j) {\r\n if (!this.noteData.vxMeasure.isWholeRest()) {\r\n this.noteData.staveNote.addModifier(new VF.Dot(), j);\r\n if (this.noteData.tabNote) {\r\n const tabDot = new VF.Dot();\r\n if (this.noteData.tabNote.getCategory() === VF.TabNote.CATEGORY && j === 0) {\r\n tabDot.setDotShiftY(this.noteData.tabNote.glyphProps.dot_shiftY);\r\n }\r\n this.noteData.tabNote.addModifier(tabDot, 0);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Create accidentals based on the active key and previous accidentals in this voice\r\n * @param smoNote \r\n * @param vexNote \r\n * @param tickIndex \r\n * @param voiceIx \r\n * @returns \r\n */\r\n createAccidentals() {\r\n let i = 0;\r\n if (this.noteData.smoNote.noteType === '/') {\r\n return;\r\n }\r\n if (this.noteData.smoNote.noteType !== 'n') {\r\n this.createDots();\r\n return;\r\n }\r\n this.noteData.smoNote.accidentalsRendered = [];\r\n for (i = 0; i < this.noteData.smoNote.pitches.length && this.noteData.vxMeasure.tickmapObject !== null; ++i) {\r\n const pitch = this.noteData.smoNote.pitches[i];\r\n const zz = SmoMusic.accidentalDisplay(pitch, this.noteData.smoMeasure.keySignature,\r\n this.noteData.vxMeasure.tickmapObject.tickmaps[this.noteData.voiceIndex].durationMap[this.noteData.tickIndex], \r\n this.noteData.vxMeasure.tickmapObject.accidentalArray);\r\n if (zz) {\r\n const acc = new VF.Accidental(zz.symbol);\r\n if (zz.courtesy) {\r\n acc.setAsCautionary();\r\n }\r\n this.noteData.smoNote.accidentalsRendered.push(pitch.accidental);\r\n this.noteData.staveNote.addModifier(acc, i);\r\n } else {\r\n this.noteData.smoNote.accidentalsRendered.push('');\r\n }\r\n }\r\n this.createDots();\r\n this.createMicrotones(this.noteData.smoNote, this.noteData.staveNote);\r\n if (this.noteData.smoNote.arpeggio) {\r\n this.noteData.staveNote.addModifier(new VF.Stroke(this.noteData.smoNote.arpeggio.typeCode));\r\n }\r\n }\r\n createJazzOrnaments() {\r\n const smoNote = this.noteData.smoNote;\r\n const vexNote = this.noteData.staveNote;\r\n const o = smoNote.getJazzOrnaments();\r\n o.forEach((ll) => {\r\n const mod = new VF.Ornament(ll.toVex());\r\n vexNote.addModifier(mod, 0);\r\n });\r\n }\r\n createOrnaments() {\r\n const o = this.noteData.smoNote.getOrnaments();\r\n o.forEach((ll) => {\r\n if (!SmoOrnament.textNoteOrnaments[ll.ornament]) {\r\n const ornamentCode = getOrnamentGlyph(ll.ornament);\r\n const mod = new VF.Ornament(ornamentCode);\r\n if (ll.offset === SmoOrnament.offsets.after) {\r\n mod.setDelayed(true);\r\n }\r\n this.noteData.staveNote.addModifier(mod, 0);\r\n }\r\n });\r\n }\r\n addLyricAnnotationToNote(vexNote: Note, lyric: SmoLyric) {\r\n let classString = 'lyric lyric-' + lyric.verse;\r\n let text = lyric.getText();\r\n if (lyric.skipRender) {\r\n return;\r\n }\r\n if (!text.length && lyric.isHyphenated()) {\r\n text = '-';\r\n }\r\n // no text, no hyphen, don't add it.\r\n if (!text.length) {\r\n return;\r\n }\r\n const vexL: Annotation = new VF.Annotation(text); // .setReportWidth(lyric.adjustNoteWidth);\r\n vexL.setAttribute('id', lyric.attrs.id); //\r\n\r\n // If we adjusted this note for the lyric, adjust the lyric as well.\r\n vexL.setFont(lyric.fontInfo.family, lyric.fontInfo.size, lyric.fontInfo.weight);\r\n vexL.setVerticalJustification(VF.Annotation.VerticalJustify.BOTTOM);\r\n vexNote.addModifier(vexL);\r\n if (lyric.isHyphenated()) {\r\n classString += ' lyric-hyphen';\r\n }\r\n vexL.addClass(classString);\r\n }\r\n addChordChangeToNote(vexNote: Note, lyric: SmoLyric) {\r\n const cs = new VF.ChordSymbol();\r\n cs.setAttribute('id', lyric.attrs.id);\r\n const blocks = getVexChordBlocks(lyric);\r\n blocks.forEach((block) => {\r\n if (block.glyph) {\r\n // Vex 5 broke this, does not distinguish between glyph and text\r\n // the reverse is for vex4 which expects the non-mangled identifier here,\r\n // e.g. 'diminished' and not 'csymDiminished'\r\n addChordGlyph(cs, block.glyph);\r\n } else {\r\n cs.addGlyphOrText(block.text ?? '', block);\r\n }\r\n });\r\n cs.setFont(lyric.fontInfo.family, lyric.fontInfo.size).setReportWidth(lyric.adjustNoteWidth);\r\n vexNote.addModifier(cs, 0);\r\n const classString = 'chord chord-' + lyric.verse;\r\n cs.addClass(classString);\r\n }\r\n createLyric() {\r\n const lyrics = this.noteData.smoNote.getTrueLyrics();\r\n if (this.noteData.smoNote.noteType !== '/') {\r\n lyrics.forEach((bll) => {\r\n const ll = bll as SmoLyric;\r\n this.addLyricAnnotationToNote(this.noteData.staveNote, ll);\r\n });\r\n }\r\n const chords = this.noteData.smoNote.getChords();\r\n chords.forEach((chord) => {\r\n this.addChordChangeToNote(this.noteData.staveNote, chord);\r\n });\r\n }\r\n createGraceNotes() {\r\n const smoNote = this.noteData.smoNote;\r\n const vexNote = this.noteData.staveNote;\r\n let i = 0;\r\n const gar = smoNote.getGraceNotes();\r\n var toBeam = true;\r\n if (gar && gar.length) {\r\n const group: any[] = [];\r\n gar.forEach((g) => {\r\n const gr = new VF.GraceNote(g.toVexGraceNote());\r\n gr.setAttribute('id', g.attrs.id);\r\n for (i = 0; i < g.pitches.length; ++i) {\r\n const pitch = g.pitches[i];\r\n if (!pitch.accidental) {\r\n console.warn('no accidental in grace note');\r\n }\r\n if (pitch.accidental && pitch.accidental !== 'n' || pitch.cautionary) {\r\n const accidental = new VF.Accidental(pitch.accidental);\r\n if (pitch.cautionary) {\r\n accidental.setAsCautionary();\r\n }\r\n gr.addModifier(accidental, i);\r\n }\r\n }\r\n if (g.tickCount() >= 4096) {\r\n toBeam = false;\r\n }\r\n gr.addClass('grace-note'); // note: this doesn't work :(\r\n\r\n g.renderId = gr.getAttribute('id');\r\n group.push(gr);\r\n });\r\n const grace: any = new VF.GraceNoteGroup(group);\r\n if (toBeam) {\r\n grace.beamNotes();\r\n }\r\n vexNote.addModifier(grace, 0);\r\n }\r\n }\r\n addArticulations() {\r\n const smoNote = this.noteData.smoNote;\r\n smoNote.articulations.forEach((art) => {\r\n if (smoNote.noteType === 'n') {\r\n const vx = this.noteData.staveNote;\r\n let smoPosition = art.position;\r\n if (art.position === SmoArticulation.positions.auto) {\r\n smoPosition = SmoMusic.positionFromStaffLine(smoNote);\r\n }\r\n const position = SmoArticulation.positionToVex[smoPosition];\r\n const vexArt = SmoArticulation.articulationToVex[art.articulation];\r\n const vxArt = new VF.Articulation(vexArt).setPosition(position);\r\n vx.addModifier(vxArt, this.noteData.voiceIndex);\r\n }\r\n });\r\n }\r\n\r\n addModifiers() {\r\n this.createAccidentals();\r\n this.createLyric();\r\n this.createOrnaments();\r\n this.createJazzOrnaments();\r\n this.createGraceNotes();\r\n this.addArticulations();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { VxMeasure } from './vxMeasure';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { SvgHelpers } from '../sui/svgHelpers';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, StaffModifierBase, SmoTie, SmoStaffTextBracket, SmoPedalMarking } from '../../smo/data/staffModifiers';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { SmoMusic } from '../../smo/data/music';\r\nimport { leftConnectorVx, rightConnectorVx } from './smoAdapter';\r\nimport { SmoMeasure, SmoVoice } from '../../smo/data/measure';\r\nimport { SvgBox, Pitch, Clef } from '../../smo/data/common';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\nimport { SmoScoreText } from '../../smo/data/scoreText'\r\nimport { SvgPage } from '../sui/svgPageMap';\r\nimport { SuiScroller } from '../sui/scroller';\r\nimport { VexFlow, Voice, Note, createHairpin, createSlur, createTie, PedalMarking, StaveNote,\r\n Beam, Stem\r\n } from '../../common/vex';\r\nimport { toVexVolta, vexOptions } from './smoAdapter';\r\nconst VF = VexFlow;\r\n\r\nexport interface VoltaInfo {\r\n smoMeasure: SmoMeasure,\r\n ending: SmoVolta\r\n}\r\nexport interface SuiSystemGroup {\r\n firstMeasure: VxMeasure,\r\n voices: Voice[]\r\n}\r\n/**\r\n * Create a system of staves and draw music on it. This calls the Vex measure\r\n * rendering methods, and also draws all the score and system level stuff like slurs, \r\n * text, aligns the lyrics.\r\n * */\r\nexport class VxSystem {\r\n context: SvgPage;\r\n leftConnector: any[] = [null, null];\r\n score: SmoScore;\r\n vxMeasures: VxMeasure[] = [];\r\n smoMeasures: SmoMeasure[] = [];\r\n lineIndex: number;\r\n maxStaffIndex: number;\r\n maxSystemIndex: number;\r\n minMeasureIndex: number = -1;\r\n maxMeasureIndex: number = 0;\r\n width: number;\r\n staves: SmoSystemStaff[] = [];\r\n box: SvgBox = SvgBox.default;\r\n currentY: number;\r\n topY: number;\r\n clefWidth: number;\r\n ys: number[] = [];\r\n measures: VxMeasure[] = [];\r\n modifiers: any[] = [];\r\n constructor(context: SvgPage, topY: number, lineIndex: number, score: SmoScore) {\r\n this.context = context;\r\n this.lineIndex = lineIndex;\r\n this.score = score;\r\n this.maxStaffIndex = -1;\r\n this.maxSystemIndex = -1;\r\n this.width = -1;\r\n this.staves = [];\r\n this.currentY = 0;\r\n this.topY = topY;\r\n this.clefWidth = 70;\r\n this.ys = [];\r\n }\r\n\r\n getVxMeasure(smoMeasure: SmoMeasure) {\r\n let i = 0;\r\n for (i = 0; i < this.vxMeasures.length; ++i) {\r\n const vm = this.vxMeasures[i];\r\n if (vm.smoMeasure.id === smoMeasure.id) {\r\n return vm;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getVxNote(smoNote: SmoNote): Note | null {\r\n let i = 0;\r\n if (!smoNote) {\r\n return null;\r\n }\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const mm = this.measures[i];\r\n if (mm.noteToVexMap[smoNote.attrs.id]) {\r\n return mm.noteToVexMap[smoNote.attrs.id];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _updateChordOffsets(note: SmoNote) {\r\n var i = 0;\r\n for (i = 0; i < 3; ++i) {\r\n const chords = note.getLyricForVerse(i, SmoLyric.parsers.chord);\r\n chords.forEach((bchord) => {\r\n const chord = bchord as SmoLyric;\r\n const dom = this.context.svg.getElementById('vf-' + chord.attrs.id);\r\n if (dom) {\r\n dom.setAttributeNS('', 'transform', 'translate(' + chord.translateX + ' ' + (-1 * chord.translateY) + ')');\r\n }\r\n });\r\n }\r\n }\r\n _lowestYLowestVerse(lyrics: SmoLyric[], vxMeasures: VxMeasure[]) {\r\n // Move each verse down, according to the lowest lyric on that line/verse,\r\n // and the accumulation of the verses above it\r\n let lowestY = 0;\r\n for (var lowVerse = 0; lowVerse < 4; ++lowVerse) {\r\n let maxVerseHeight = 0;\r\n const verseLyrics = lyrics.filter((ll) => ll.verse === lowVerse);\r\n if (lowVerse === 0) {\r\n // first verse, go through list twice. first find lowest points\r\n verseLyrics.forEach((lyric: SmoLyric) => {\r\n if (lyric.logicalBox) {\r\n // 'lowest' Y on screen is Y with largest value...\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n lowestY = Math.max(ly + lyric.musicYOffset, lowestY);\r\n }\r\n });\r\n // second offset all to that point\r\n verseLyrics.forEach((lyric: SmoLyric) => {\r\n if (lyric.logicalBox) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const offset = Math.max(0, lowestY - ly);\r\n lyric.adjY = offset + lyric.translateY;\r\n }\r\n });\r\n } else {\r\n // subsequent verses, first find the tallest lyric\r\n verseLyrics.forEach((lyric: SmoLyric)=> {\r\n if (lyric.logicalBox) {\r\n maxVerseHeight = Math.max(lyric.logicalBox.height, maxVerseHeight);\r\n }\r\n });\r\n // adjust lowestY to be the verse height below the previous verse\r\n lowestY = lowestY + maxVerseHeight * 1.1; // 1.1 magic number?\r\n // and offset these lyrics\r\n verseLyrics.forEach((lyric: SmoLyric)=> {\r\n if (lyric.logicalBox) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const offset = Math.max(0, lowestY - ly);\r\n lyric.adjY = offset + lyric.translateY;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n // ### updateLyricOffsets\r\n // Adjust the y position for all lyrics in the line so they are even.\r\n // Also replace '-' with a longer dash do indicate 'until the next measure'\r\n updateLyricOffsets() {\r\n let i = 0;\r\n for (i = 0; i < this.score.staves.length; ++i) {\r\n const tmpI = i;\r\n const lyricsDash: SmoLyric[] = [];\r\n const lyricHyphens: SmoLyric[] = [];\r\n const lyricVerseMap: Record = {};\r\n const lyrics: SmoLyric[] = [];\r\n // is this necessary? They should all be from the current line\r\n const vxMeasures = this.vxMeasures.filter((vx) =>\r\n vx.smoMeasure.measureNumber.staffId === tmpI\r\n );\r\n\r\n // All the lyrics on this line\r\n // The vertical bounds on each line\r\n vxMeasures.forEach((mm) => {\r\n var smoMeasure = mm.smoMeasure;\r\n\r\n // Get lyrics from any voice.\r\n smoMeasure.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n this._updateChordOffsets(note);\r\n note.getTrueLyrics().forEach((ll: SmoLyric) => {\r\n const hasLyric = ll.getText().length > 0 || ll.isHyphenated();\r\n if (hasLyric && ll.logicalBox && !lyricVerseMap[ll.verse]) {\r\n lyricVerseMap[ll.verse] = [];\r\n }else if (hasLyric && !ll.logicalBox) {\r\n console.warn(\r\n `unrendered lyric for note ${note.attrs.id} measure ${smoMeasure.measureNumber.staffId}-${smoMeasure.measureNumber.measureIndex}`);\r\n }\r\n if (hasLyric && ll.logicalBox) {\r\n lyricVerseMap[ll.verse].push(ll);\r\n lyrics.push(ll);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n // calculate y offset so the lyrics all line up\r\n this._lowestYLowestVerse(lyrics, vxMeasures);\r\n const vkey: string[] = Object.keys(lyricVerseMap).sort((a, b) => parseInt(a, 10) - parseInt(b, 10));\r\n vkey.forEach((sverse) => {\r\n const verse = parseInt(sverse, 10);\r\n let hyphenLyric: SmoLyric | null = null;\r\n const lastVerse = lyricVerseMap[verse][lyricVerseMap[verse].length - 1].attrs.id;\r\n lyricVerseMap[verse].forEach((ll: SmoLyric) => {\r\n if (hyphenLyric !== null && hyphenLyric.logicalBox !== null && ll.logicalBox !== null) {\r\n const x = ll.logicalBox.x - (ll.logicalBox.x -\r\n (hyphenLyric.logicalBox.x + hyphenLyric.logicalBox.width)) / 2;\r\n ll.hyphenX = x;\r\n lyricHyphens.push(ll);\r\n }\r\n if (ll.isHyphenated() && ll.logicalBox !== null) {\r\n if (ll.attrs.id === lastVerse) {\r\n // Last word on the system, place the hyphen after the word\r\n const fontSize = SmoScoreText.fontPointSize(ll.fontInfo.size);\r\n ll.hyphenX = ll.logicalBox.x + ll.logicalBox.width + fontSize / 2;\r\n lyricHyphens.push(ll);\r\n } else if (ll.getText().length) {\r\n // place the hyphen 1/2 between next word and this one.\r\n hyphenLyric = ll;\r\n }\r\n } else {\r\n hyphenLyric = null;\r\n }\r\n });\r\n });\r\n lyrics.forEach((lyric) => {\r\n const dom = this.context.svg.getElementById('vf-' + lyric.attrs.id) as SVGSVGElement;\r\n if (dom) {\r\n dom.setAttributeNS('', 'transform', 'translate(' + lyric.adjX + ' ' + lyric.adjY + ')');\r\n // Keep track of lyrics that are 'dash'\r\n if (lyric.isDash()) {\r\n lyricsDash.push(lyric);\r\n }\r\n }\r\n });\r\n lyricHyphens.forEach((lyric) => {\r\n const parent = this.context.svg.getElementById('vf-' + lyric.attrs.id);\r\n if (parent && lyric.logicalBox !== null) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const text = document.createElementNS(SvgHelpers.namespace, 'text');\r\n text.textContent = '-';\r\n const fontSize = SmoScoreText.fontPointSize(lyric.fontInfo.size);\r\n text.setAttributeNS('', 'x', (lyric.hyphenX - fontSize / 3).toString());\r\n text.setAttributeNS('', 'y', (ly + (lyric.logicalBox.height * 2) / 3).toString());\r\n text.setAttributeNS('', 'font-size', '' + fontSize + 'pt');\r\n parent.appendChild(text);\r\n }\r\n });\r\n lyricsDash.forEach((lyric) => {\r\n const parent = this.context.svg.getElementById('vf-' + lyric.attrs.id);\r\n if (parent && lyric.logicalBox !== null) {\r\n const ly = lyric.logicalBox.y - this.context.box.y;\r\n const line = document.createElementNS(SvgHelpers.namespace, 'line');\r\n const ymax = Math.round(ly + lyric.logicalBox.height / 2);\r\n const offset = Math.round(lyric.logicalBox.width / 2);\r\n line.setAttributeNS('', 'x1', (lyric.logicalBox.x - offset).toString());\r\n line.setAttributeNS('', 'y1', ymax.toString());\r\n line.setAttributeNS('', 'x2', (lyric.logicalBox.x + lyric.logicalBox.width + offset).toString());\r\n line.setAttributeNS('', 'y2', ymax.toString());\r\n line.setAttributeNS('', 'stroke-width', '1');\r\n line.setAttributeNS('', 'fill', 'none');\r\n line.setAttributeNS('', 'stroke', '#999999');\r\n parent.appendChild(line);\r\n const texts = parent.getElementsByTagName('text');\r\n // hide hyphen and replace with dash\r\n if (texts && texts.length) {\r\n const text = texts[0];\r\n text.setAttributeNS('', 'fill', '#fff');\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // ### renderModifier\r\n // render a line-type modifier that is associated with a staff (e.g. slur)\r\n renderModifier(scroller: SuiScroller, modifier: StaffModifierBase,\r\n vxStart: Note | null, vxEnd: Note | null, smoStart: SmoSelection, smoEnd: SmoSelection) {\r\n const setSameIfNull = (a: any, b: any) => {\r\n if (typeof (a) === 'undefined' || a === null) {\r\n return b;\r\n }\r\n return a;\r\n };\r\n if (smoStart && smoStart.note && smoStart.note.noteType === '/') {\r\n return;\r\n } if (smoEnd && smoEnd.note && smoEnd.note.noteType === '/') {\r\n return;\r\n }\r\n // if (modifier.ctor === 'SmoPedalMarking' && (vxStart === null || vxEnd === null)) {\r\n // return;\r\n // }\r\n let slurOffset = 0;\r\n\r\n // if it is split between lines, render one artifact for each line, with a common class for\r\n // both if it is removed.\r\n if (vxStart) {\r\n const toRemove = this.context.svg.getElementById('vf-' + modifier.attrs.id);\r\n if (toRemove) {\r\n toRemove.remove();\r\n }\r\n }\r\n const artifactId = modifier.attrs.id + '-' + this.lineIndex;\r\n const group = this.context.getContext().openGroup('slur', artifactId);\r\n group.classList.add(modifier.attrs.id);\r\n const measureMod = 'mod-' + smoStart.selector.staff + '-' + smoStart.selector.measure;\r\n const staffMod = 'mod-' + smoStart.selector.staff;\r\n group.classList.add(measureMod);\r\n group.classList.add(staffMod);\r\n if (modifier.ctor === 'SmoStaffHairpin') {\r\n const hp = modifier as SmoStaffHairpin;\r\n if (!vxStart && !vxEnd) {\r\n this.context.getContext().closeGroup();\r\n }\r\n vxStart = setSameIfNull(vxStart, vxEnd);\r\n vxEnd = setSameIfNull(vxEnd, vxStart);\r\n const smoVexHairpinParams = {\r\n vxStart,\r\n vxEnd,\r\n hairpinType: hp.hairpinType,\r\n height: hp.height,\r\n yOffset: hp.yOffset,\r\n leftShiftPx: hp.xOffsetLeft,\r\n rightShiftPx: hp.xOffsetRight\r\n };\r\n const hairpin = createHairpin(smoVexHairpinParams);\r\n hairpin.setContext(this.context.getContext()).setPosition(hp.position).draw();\r\n } else if (modifier.ctor === 'SmoSlur') {\r\n const startNote: SmoNote = smoStart!.note as SmoNote;\r\n const slur = modifier as SmoSlur;\r\n let startPosition = slur.position;\r\n let endPosition = slur.position_end;\r\n let openingDirection = 'up';\r\n let yOffset = slur.yOffset;\r\n let slurX = slur.xOffset;\r\n const svgPoint: SVGPoint[] = JSON.parse(JSON.stringify(slur.controlPoints));\r\n const lyric = startNote.longestLyric() as SmoLyric;\r\n // Find direction for slur based on beam/stem direction\r\n // Note: vex slur orientation follows beam direction, not slur direction. Smo\r\n // orientation follows slur direction.\r\n if (vxStart !== null && vxEnd !== null) {\r\n if (slur.position === SmoSlur.positions.AUTO\r\n || slur.position_end === SmoSlur.positions.AUTO \r\n || slur.orientation === SmoSlur.orientations.AUTO) {\r\n startPosition = SmoSlur.positions.HEAD;\r\n endPosition = SmoSlur.positions.HEAD;\r\n if (vxStart.hasStem()) {\r\n if (vxStart.getStemDirection() === VF.Stem.UP) {\r\n openingDirection = 'up';\r\n } else {\r\n openingDirection = 'down';\r\n }\r\n if (vxEnd.hasStem() && vxEnd.getStemDirection() !== vxStart.getStemDirection()) {\r\n endPosition = SmoSlur.positions.TOP;\r\n }\r\n } else {\r\n openingDirection = slur.orientation === SmoSlur.orientations.UP ? 'down' : 'up';\r\n startPosition = slur.position;\r\n endPosition = slur.position_end;\r\n }\r\n } else {\r\n openingDirection = slur.orientation === SmoSlur.orientations.UP ? 'down' : 'up';\r\n startPosition = slur.position;\r\n endPosition = slur.position_end;\r\n } \r\n } else if (vxStart !== null && vxEnd === null) {\r\n slurX = 10;\r\n slurOffset = -5;\r\n if (slur.orientation === SmoSlur.orientations.AUTO && vxStart.hasStem()) {\r\n openingDirection = vxStart.getStemDirection() === VF.Stem.UP ? 'up' : 'down';\r\n } else {\r\n openingDirection = slur.orientation === SmoSlur.orientations.UP ? 'down' : 'up';\r\n }\r\n startPosition = SmoSlur.positions.HEAD;\r\n endPosition = SmoSlur.positions.HEAD;\r\n } else if (vxEnd !== null && vxStart === null) {\r\n slurX = 10;\r\n slurOffset = 5;\r\n if (slur.orientation === SmoSlur.orientations.AUTO && vxEnd.hasStem()) {\r\n openingDirection = vxEnd.getStemDirection() === VF.Stem.UP ? 'up' : 'down';\r\n } else {\r\n openingDirection = slur.orientation === SmoSlur.orientations.UP ? 'down' : 'up';\r\n }\r\n startPosition = SmoSlur.positions.HEAD;\r\n endPosition = SmoSlur.positions.HEAD;\r\n }\r\n // yoffset is always in the direction of the curve, not SVG. Make sure the curve clears the yoffset\r\n // TODO: I think we should adjust this line vs. space\r\n if (openingDirection === 'up') {\r\n yOffset += 15;\r\n } else {\r\n yOffset += 10;\r\n }\r\n if (lyric && lyric.getText()) {\r\n // If there is a lyric, the bounding box of the start note is stretched to the right.\r\n // slide the slur left, and also make it a bit wider.\r\n const xtranslate = (-1 * lyric.getText().length * 6);\r\n slurX += (xtranslate / 2) - SmoSlur.defaults.xOffset;\r\n }\r\n if (SmoSelector.lt(smoEnd.selector, slur.endSelector)) {\r\n slurX += 15;\r\n }\r\n const smoVexSlurParams = {\r\n vxStart, vxEnd,\r\n thickness: slur.thickness,\r\n xShift: slurX,\r\n yShift: yOffset,\r\n openingDirection,\r\n cps: svgPoint,\r\n position: startPosition,\r\n positionEnd: endPosition\r\n };\r\n const curve = createSlur(smoVexSlurParams);\r\n curve.setContext(this.context.getContext()).draw();\r\n } else if (modifier.ctor === 'SmoPedalMarking') {\r\n const pedalMarking = modifier as SmoPedalMarking;\r\n const pedalAr: StaveNote[] = [];\r\n if (vxStart !== null) {\r\n pedalAr.push(vxStart as StaveNote);\r\n }\r\n if (SmoSelector.gt(smoEnd.selector, smoStart.selector) && vxEnd !== null) {\r\n // Add releases for the pedal marking\r\n pedalMarking.releases.forEach((selector: SmoSelector) => {\r\n if (SmoSelector.gt(selector, smoStart.selector) && SmoSelector.lt(selector, smoEnd.selector)\r\n && vxStart !== null) {\r\n const note = SmoSelection.noteSelection(this.score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n if (note !== null && note.note !== null) {\r\n const vexNote = this.getVxNote(note.note);\r\n if (vexNote) {\r\n // incidate release and depress\r\n pedalAr.push(vexNote as StaveNote);\r\n pedalAr.push(vexNote as StaveNote);\r\n }\r\n }\r\n }\r\n });\r\n pedalAr.push(vxEnd as StaveNote);\r\n if (vxStart === null) {\r\n pedalAr.push(vxEnd as StaveNote);\r\n }\r\n }\r\n const vexPedal = new VF.PedalMarking(pedalAr);\r\n if (pedalMarking.releaseText.length > 0 || pedalMarking.depressText.length > 0) {\r\n vexPedal.setCustomText(pedalMarking.depressText, pedalMarking.releaseText);\r\n }\r\n if (!pedalMarking.startMark && pedalMarking.depressText.length < 1) {\r\n vexPedal.setCustomText(' ', pedalMarking.releaseText);\r\n }\r\n if (pedalMarking.bracket) {\r\n if (pedalMarking.startMark || pedalMarking.releaseMark) {\r\n vexPedal.setType(VF.PedalMarking.type.MIXED);\r\n } else {\r\n vexPedal.setType(VF.PedalMarking.type.BRACKET);\r\n }\r\n } else {\r\n vexPedal.setType(VF.PedalMarking.type.TEXT);\r\n }\r\n if (SmoSelector.gt(smoStart.selector, modifier.startSelector) && (pedalMarking.startMark)) {\r\n // If this is the completion of a pedal marking from a previous staff, don't print the depress\r\n // pedal again\r\n vexPedal.setType(VF.PedalMarking.type.MIXED);\r\n vexPedal.setCustomText(' ', pedalMarking.depressText);\r\n }\r\n if (SmoSelector.lt(smoEnd.selector, modifier.endSelector) && pedalMarking.releaseMark) {\r\n vexPedal.setType(VF.PedalMarking.type.MIXED);\r\n vexPedal.setCustomText(pedalMarking.depressText, ' ');\r\n }\r\n vexPedal.setContext(this.context.getContext());\r\n vexPedal.draw();\r\n }\r\n else if (modifier.ctor === 'SmoTie') {\r\n const ctie = modifier as SmoTie;\r\n const startNote: SmoNote = smoStart!.note as SmoNote;\r\n const endNote: SmoNote = smoEnd!.note as SmoNote;\r\n ctie.checkLines(startNote, endNote);\r\n if (ctie.lines.length > 0) {\r\n const fromLines = ctie.lines.map((ll) => ll.from);\r\n const toLines = ctie.lines.map((ll) => ll.to);\r\n const smoVexTieParams = {\r\n fromLines,\r\n toLines,\r\n firstNote: vxStart,\r\n lastNote: vxEnd,\r\n vexOptions: vexOptions(ctie)\r\n }\r\n const tie = createTie(smoVexTieParams);\r\n tie.setContext(this.context.getContext()).draw();\r\n }\r\n } else if (modifier.ctor === 'SmoStaffTextBracket') {\r\n if (vxStart && !vxEnd) {\r\n vxEnd = vxStart;\r\n } else if (vxEnd && !vxStart) {\r\n vxStart = vxEnd;\r\n }\r\n if (vxStart && vxEnd) {\r\n const smoBracket = (modifier as SmoStaffTextBracket);\r\n const bracket = new VF.TextBracket({\r\n start: vxStart, stop: vxEnd, text: smoBracket.text, superscript: smoBracket.superscript, position: smoBracket.position\r\n });\r\n bracket.setLine(smoBracket.line).setContext(this.context.getContext()).draw();\r\n }\r\n }\r\n\r\n this.context.getContext().closeGroup();\r\n if (slurOffset) {\r\n const slurBox = this.context.svg.getElementById('vf-' + artifactId) as SVGSVGElement;\r\n if (slurBox) {\r\n SvgHelpers.translateElement(slurBox, slurOffset, 0);\r\n }\r\n }\r\n modifier.element = group;\r\n }\r\n\r\n renderEndings(scroller: SuiScroller) {\r\n let j = 0;\r\n let i = 0;\r\n if (this.staves.length < 1) {\r\n return;\r\n }\r\n const voltas = this.staves[0].getVoltaMap(this.minMeasureIndex, this.maxMeasureIndex);\r\n voltas.forEach((ending) => {\r\n ending.elements.forEach((element: SVGSVGElement) => {\r\n element.remove();\r\n });\r\n ending.elements = [];\r\n });\r\n for (j = 0; j < this.smoMeasures.length; ++j) {\r\n let pushed = false;\r\n const smoMeasure = this.smoMeasures[j];\r\n // Only draw volta on top staff of system\r\n if (smoMeasure.svg.rowInSystem > 0) {\r\n continue;\r\n }\r\n const vxMeasure = this.getVxMeasure(smoMeasure);\r\n const voAr: VoltaInfo[] = [];\r\n for (i = 0; i < voltas.length && vxMeasure !== null; ++i) {\r\n const ending = voltas[i];\r\n const mix = smoMeasure.measureNumber.measureIndex;\r\n if ((ending.startBar <= mix) && (ending.endBar >= mix) && vxMeasure.stave !== null) {\r\n const group = this.context.getContext().openGroup(null, ending.attrs.id);\r\n group.classList.add(ending.attrs.id);\r\n group.classList.add(ending.endingId);\r\n ending.elements.push(group);\r\n const vtype = toVexVolta(ending, smoMeasure.measureNumber.measureIndex);\r\n const vxVolta = new VF.Volta(vtype, ending.number.toString(), smoMeasure.staffX + ending.xOffsetStart, ending.yOffset);\r\n vxVolta.setContext(this.context.getContext()).draw(vxMeasure.stave, -1 * ending.xOffsetEnd);\r\n this.context.getContext().closeGroup();\r\n const height = parseInt(vxVolta.getFontSize(), 10) * 2;\r\n const width = smoMeasure.staffWidth;\r\n const y = smoMeasure.svg.logicalBox.y - (height + ending.yOffset);\r\n ending.logicalBox = { x: smoMeasure.svg.staffX, y, width, height };\r\n if (!pushed) {\r\n voAr.push({ smoMeasure, ending });\r\n pushed = true;\r\n }\r\n vxMeasure.stave.getModifiers().push(vxVolta);\r\n }\r\n }\r\n // Adjust real height of measure to match volta height\r\n for (i = 0; i < voAr.length; ++i) {\r\n const mm = voAr[i].smoMeasure;\r\n const ending = voAr[i].ending;\r\n if (ending.logicalBox !== null) {\r\n const delta = mm.svg.logicalBox.y - ending.logicalBox.y;\r\n if (delta > 0) {\r\n mm.setBox(SvgHelpers.boxPoints(\r\n mm.svg.logicalBox.x, mm.svg.logicalBox.y - delta, mm.svg.logicalBox.width, mm.svg.logicalBox.height + delta),\r\n 'vxSystem adjust for volta');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n getMeasureByIndex(measureIndex: number, staffId: number) {\r\n let i = 0;\r\n for (i = 0; i < this.smoMeasures.length; ++i) {\r\n const mm = this.smoMeasures[i];\r\n if (measureIndex === mm.measureNumber.measureIndex && staffId === mm.measureNumber.staffId) {\r\n return mm;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n // ## renderMeasure\r\n // ## Description:\r\n // Create the graphical (VX) notes and render them on svg. Also render the tuplets and beam\r\n // groups\r\n renderMeasure(smoMeasure: SmoMeasure, printing: boolean) {\r\n if (smoMeasure.svg.hideMultimeasure) {\r\n return;\r\n }\r\n const measureIndex = smoMeasure.measureNumber.measureIndex;\r\n if (this.minMeasureIndex < 0 || this.minMeasureIndex > measureIndex) {\r\n this.minMeasureIndex = measureIndex;\r\n }\r\n if (this.maxMeasureIndex < measureIndex) {\r\n this.maxMeasureIndex = measureIndex;\r\n }\r\n let brackets = false;\r\n const staff = this.score.staves[smoMeasure.measureNumber.staffId];\r\n const staffId = staff.staffId;\r\n const systemIndex = smoMeasure.measureNumber.systemIndex;\r\n const selection = SmoSelection.measureSelection(this.score, staff.staffId, smoMeasure.measureNumber.measureIndex);\r\n this.smoMeasures.push(smoMeasure);\r\n if (this.staves.length <= staffId) {\r\n this.staves.push(staff);\r\n }\r\n if (selection === null) {\r\n return;\r\n }\r\n let softmax = selection.measure.format.proportionality;\r\n if (softmax === SmoMeasureFormat.defaultProportionality) {\r\n softmax = this.score.layoutManager?.getGlobalLayout().proportionality ?? 0;\r\n }\r\n const vxMeasure: VxMeasure = new VxMeasure(this.context, selection, printing, softmax);\r\n\r\n // create the vex notes, beam groups etc. for the measure\r\n vxMeasure.preFormat();\r\n this.vxMeasures.push(vxMeasure);\r\n\r\n const lastStaff = (staffId === this.score.staves.length - 1);\r\n const smoGroupMap: Record = {};\r\n const adjXMap: Record = {};\r\n const vxMeasures = this.vxMeasures.filter((mm) => !mm.smoMeasure.svg.hideEmptyMeasure);\r\n // If this is the last staff in the column, render the column with justification\r\n if (lastStaff) {\r\n vxMeasures.forEach((mm) => {\r\n if (typeof(adjXMap[mm.smoMeasure.measureNumber.systemIndex]) === 'undefined') {\r\n adjXMap[mm.smoMeasure.measureNumber.systemIndex] = mm.smoMeasure.svg.adjX;\r\n }\r\n adjXMap[mm.smoMeasure.measureNumber.systemIndex] = Math.max(adjXMap[mm.smoMeasure.measureNumber.systemIndex], mm.smoMeasure.svg.adjX);\r\n });\r\n vxMeasures.forEach((vv: VxMeasure) => {\r\n if (!vv.rendered && !vv.smoMeasure.svg.hideEmptyMeasure && vv.stave) {\r\n vv.stave.setNoteStartX(vv.stave.getNoteStartX() + adjXMap[vv.smoMeasure.measureNumber.systemIndex] - vv.smoMeasure.svg.adjX);\r\n const systemGroup = this.score.getSystemGroupForStaff(vv.selection);\r\n const justifyGroup: string = (systemGroup && vv.smoMeasure.format.autoJustify) ? systemGroup.attrs.id : vv.selection.staff.attrs.id;\r\n if (!smoGroupMap[justifyGroup]) {\r\n smoGroupMap[justifyGroup] = { firstMeasure: vv, voices: [] };\r\n }\r\n smoGroupMap[justifyGroup].voices =\r\n smoGroupMap[justifyGroup].voices.concat(vv.voiceAr);\r\n if (vv.tabVoice) {\r\n smoGroupMap[justifyGroup].voices.concat(vv.tabVoice);\r\n }\r\n }\r\n });\r\n }\r\n const keys = Object.keys(smoGroupMap);\r\n keys.forEach((key) => {\r\n smoGroupMap[key].firstMeasure.format(smoGroupMap[key].voices);\r\n });\r\n if (lastStaff) {\r\n vxMeasures.forEach((vv) => {\r\n if (!vv.rendered) {\r\n vv.render();\r\n }\r\n });\r\n }\r\n // Keep track of the y coordinate for the nth staff\r\n const renderedConnection: Record = {};\r\n\r\n if (systemIndex === 0 && lastStaff) {\r\n if (staff.bracketMap[this.lineIndex]) {\r\n staff.bracketMap[this.lineIndex].forEach((element) => {\r\n element.remove();\r\n });\r\n }\r\n staff.bracketMap[this.lineIndex] = [];\r\n const group = this.context.getContext().openGroup();\r\n group.classList.add('lineBracket-' + this.lineIndex);\r\n group.classList.add('lineBracket');\r\n staff.bracketMap[this.lineIndex].push(group);\r\n vxMeasures.forEach((vv) => {\r\n const systemGroup = this.score.getSystemGroupForStaff(vv.selection);\r\n if (systemGroup && !renderedConnection[systemGroup.attrs.id] && \r\n !vv.smoMeasure.svg.hideEmptyMeasure) {\r\n renderedConnection[systemGroup.attrs.id] = 1;\r\n const startSel = this.vxMeasures[systemGroup.startSelector.staff];\r\n const endSel = this.vxMeasures[systemGroup.endSelector.staff];\r\n if (startSel && startSel.rendered && \r\n endSel && endSel.rendered) {\r\n const c1 = new VF.StaveConnector(startSel.stave!, endSel.stave!)\r\n .setType(leftConnectorVx(systemGroup));\r\n c1.setContext(this.context.getContext()).draw();\r\n brackets = true;\r\n }\r\n }\r\n });\r\n if (!brackets && vxMeasures.length > 1) {\r\n const c2 = new VF.StaveConnector(vxMeasures[0].stave!, vxMeasures[vxMeasures.length - 1].stave!);\r\n c2.setType(VF.StaveConnector.type.SINGLE_RIGHT);\r\n c2.setContext(this.context.getContext()).draw();\r\n }\r\n // draw outer brace on parts with multiple staves (e.g. keyboards)\r\n vxMeasures.forEach((vv) => {\r\n if (vv.selection.staff.partInfo.stavesAfter > 0) {\r\n if (this.vxMeasures.length > vv.selection.selector.staff + 1) {\r\n const endSel = this.vxMeasures[vv.selection.selector.staff + 1];\r\n const startSel = vv;\r\n if (startSel && startSel.rendered && \r\n endSel && endSel.rendered) {\r\n const c1 = new VF.StaveConnector(startSel.stave!, endSel.stave!)\r\n .setType(VF.StaveConnector.type.BRACE);\r\n c1.setContext(this.context.getContext()).draw(); \r\n }\r\n }\r\n };\r\n });\r\n this.context.getContext().closeGroup();\r\n } else if (lastStaff && smoMeasure.measureNumber.measureIndex + 1 < staff.measures.length) {\r\n if (staff.measures[smoMeasure.measureNumber.measureIndex + 1].measureNumber.systemIndex === 0) {\r\n const endMeasure = vxMeasure;\r\n const startMeasure = vxMeasures.find((vv) => vv.selection.selector.staff === 0 &&\r\n vv.selection.selector.measure === vxMeasure.selection.selector.measure && \r\n vv.smoMeasure.svg.hideEmptyMeasure === false);\r\n if (endMeasure && endMeasure.stave && startMeasure && startMeasure.stave) {\r\n const group = this.context.getContext().openGroup();\r\n group.classList.add('endBracket-' + this.lineIndex);\r\n group.classList.add('endBracket');\r\n staff.bracketMap[this.lineIndex].push(group);\r\n const c2 = new VF.StaveConnector(startMeasure.stave, endMeasure.stave)\r\n .setType(VF.StaveConnector.type.SINGLE_RIGHT);\r\n c2.setContext(this.context.getContext()).draw();\r\n this.context.getContext().closeGroup();\r\n }\r\n }\r\n }\r\n // keep track of left-hand side for system connectors\r\n if (systemIndex === 0) {\r\n if (staffId === 0) {\r\n this.leftConnector[0] = vxMeasure.stave;\r\n } else if (staffId > this.maxStaffIndex) {\r\n this.maxStaffIndex = staffId;\r\n this.leftConnector[1] = vxMeasure.stave;\r\n }\r\n } else if (smoMeasure.measureNumber.systemIndex > this.maxSystemIndex) {\r\n this.maxSystemIndex = smoMeasure.measureNumber.systemIndex;\r\n }\r\n this.measures.push(vxMeasure);\r\n }\r\n}\r\n","/**\r\n * definitions shared by all SMO types\r\n * @module /smo/data/common\r\n */\r\n/**\r\n * Same as attrs object in Vex objects.\r\n * @param id - unique identifier, can be used in DOM elements\r\n * @param type - a little bit redundate with `ctor` in `SmoObjectParams`\r\n */\r\nexport interface SmoAttrs {\r\n id: string,\r\n type: string\r\n}\r\nexport const smoXmlNs = 'https://aarondavidnewman.github.io/Smoosic';\r\n\r\n// export abstract class SmoXmlSerializable {\r\n// abstract serializeXml(namespace: string, parentElement: Element, tagName: string): Element\r\n// }\r\nexport interface SmoXmlSerializable {\r\n serializeXml: (namespace: string, parentElement: Element, tag: string) => Element;\r\n ctor: string\r\n}\r\nexport function createXmlAttributes(element: Element, obj: any) {\r\n Object.keys(obj).forEach((key) => {\r\n const attr = element.ownerDocument.createAttribute(key);\r\n attr.value = obj[key];\r\n element.setAttributeNode(attr);\r\n });\r\n}\r\nexport function createXmlAttribute(element: Element, name: string, value: any) {\r\n const obj: any = {};\r\n obj[name] = value;\r\n createXmlAttributes(element, obj);\r\n}\r\n\r\nvar nextId = 32768;\r\nexport const getId = () => `smo` + (nextId++).toString();\r\n/**\r\n * All note, measure, staff, and score objects have\r\n * a serialize method and are deserializable with constructor `ctor`\r\n */\r\nexport interface SmoObjectParams {\r\n ctor: string,\r\n attrs?: SmoAttrs\r\n}\r\n\r\n/**\r\n * Note duration. The same abstraction used by vex, except here denominator is\r\n * always 1. remainder is used to reconstruct non-tuplets from tuplets.\r\n * @param numerator - duration, 4096 is 1/4 note\r\n * @param denominator - always 1 for SMO objects\r\n * @param remainder - used for tuplets whose duration doesn't divide evenly\r\n */\r\nexport interface Ticks {\r\n numerator: number,\r\n denominator: number,\r\n remainder: number\r\n}\r\n\r\n/**\r\n * constraint for SmoPitch.letter value, in lower case\r\n */\r\nexport type PitchLetter = 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g';\r\n\r\nexport function IsPitchLetter(letter: PitchLetter | string): letter is PitchLetter {\r\n return letter.length === 1 && letter[0] >= 'a' && letter[0] <= 'g';\r\n}\r\n\r\n/**\r\n * PitchKey is a SmoPitch, without the octave\r\n * @param letter - letter note\r\n * @param accidental - an accidental or microtone\r\n */\r\nexport interface PitchKey {\r\n letter: PitchLetter,\r\n accidental: string\r\n}\r\n/**\r\n * Represents a single pitch in Smo object model.\r\n * @param letter - letter note\r\n * @param accidental - an accidental or microtone\r\n * @param octave - standard octave\r\n * @param cautionary? - can be used for courtesy accidental\r\n */\r\nexport interface Pitch {\r\n letter: PitchLetter,\r\n accidental: string,\r\n octave: number,\r\n cautionary?: boolean,\r\n forced?: boolean,\r\n role?: string\r\n}\r\n\r\n/**\r\n * A tuple indicating measure location in the score:\r\n * @param measureIndex - the actual offset from the first measure\r\n * @param localIndex - the index as shown to the user, considers renumbering\r\n * @param sytemIndex - which bar (column) of a system this measure is\r\n * @param staffId - which staff (row) of a system this measure is\r\n */\r\nexport interface MeasureNumber {\r\n measureIndex: number,\r\n localIndex: number,\r\n systemIndex: number,\r\n staffId: number\r\n}\r\n/**\r\n * musical artifacts can contain temporary svg information for\r\n * mapping the UI.\r\n */\r\nexport class SvgPoint {\r\n x: number;\r\n y: number;\r\n static get default() {\r\n return { x: 0, y: 0 };\r\n }\r\n constructor() {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n}\r\n/**\r\n * musical artifacts can contain temporary svg information for\r\n * mapping the UI.\r\n */\r\n export class SvgBox {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n static get default(): SvgBox {\r\n return { x: 0, y: 0, width: -1, height: -1 };\r\n }\r\n constructor() {\r\n this.x = 0;\r\n this.y = 0;\r\n this.width = -1;\r\n this.height = -1;\r\n }\r\n}\r\n/**\r\n * kind of a pointless class...\r\n */\r\nexport interface SvgDimensions {\r\n width: number,\r\n height: number\r\n}\r\n/**\r\n * A `Transposable` is an abstraction of a note.\r\n * Can be passed into methods that transform pitches for both\r\n * grace notes and normal notes.\r\n * @param pitches - SMO pitch type\r\n * @param noteType - same convention as VexFlow, 'n' for note, 'r' for rest\r\n * @param renderId - ID for the containing SVG group, used to map UI elements\r\n * @param renderedBox - bounding box in client coordinates\r\n * @param logicalBox - bounding box in SVG coordinates\r\n */\r\nexport interface Transposable {\r\n pitches: Pitch[],\r\n noteType: string,\r\n renderId: string | null,\r\n logicalBox: SvgBox | null\r\n}\r\n\r\n\r\n/**\r\n * All note, measure etc. modifiers have these attributes. The SVG info\r\n * is for the tracker to track the artifacts in the UI (mouse events, etc)\r\n * @param ctor - constructor name for deserialize\r\n * @param logicalBox - bounding box in SVG coordinates\r\n * @param attr - unique ID, simlar to vex object attrs field\r\n */\r\nexport interface SmoModifierBase {\r\n ctor: string,\r\n logicalBox: SvgBox | null,\r\n attrs: SmoAttrs,\r\n serialize: () => any;\r\n}\r\n\r\nexport function serializeXmlModifierArray(object: SmoXmlSerializable[], namespace: string, parentElement: Element, tag: string) {\r\n if (object.length === 0) {\r\n return parentElement;\r\n }\r\n const arEl = parentElement.ownerDocument.createElementNS(namespace, `${tag}-array`);\r\n parentElement.appendChild(arEl);\r\n createXmlAttribute(arEl, 'container', 'array');\r\n createXmlAttribute(arEl, 'name', `${tag}`);\r\n for (var j = 0; j < object.length; ++j) {\r\n const instEl = parentElement.ownerDocument.createElementNS(namespace, `${tag}-instance`);\r\n arEl.appendChild(instEl);\r\n object[j].serializeXml(namespace, instEl, object[j].ctor);\r\n }\r\n return arEl;\r\n}\r\n\r\n/**\r\n * Renderable is just a thing that has a bounding box\r\n */\r\nexport interface Renderable {\r\n logicalBox: SvgBox | null | undefined\r\n}\r\n/**\r\n * Restriction from string to supported clefs\r\n */\r\nexport type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n | 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n\r\nexport var Clefs: Clef[] = ['treble' , 'bass' , 'tenor' , 'alto' , 'soprano' , 'percussion'\r\n, 'mezzo-soprano' , 'baritone-c' , 'baritone-f' , 'subbass' , 'french'];\r\n\r\nexport function IsClef(clef: Clef | string): clef is Clef {\r\n return Clefs.findIndex((x) => clef === x) >= 0;\r\n}\r\n\r\n/**\r\n * Most event handling in SMO is an 'any' from jquery, but\r\n * key events are sometimes narrowed to the common browser key event\r\n */\r\nexport interface KeyEvent {\r\n type: string,\r\n shiftKey: boolean,\r\n ctrlKey: boolean,\r\n altKey: boolean,\r\n key: string,\r\n keyCode: number | string,\r\n code: string,\r\n event: string | null\r\n}\r\nexport function defaultKeyEvent(): KeyEvent {\r\n const rv = {\r\n type: 'keydown', shiftKey: false, ctrlKey: false, altKey: false, key: '',\r\n keyCode: '', code: '', event: null\r\n };\r\n return JSON.parse(JSON.stringify(rv));\r\n}\r\nexport function keyEventMatch(ev1: KeyEvent, ev2: KeyEvent): boolean {\r\n return ev1.event === ev2.event && ev1.key === ev2.key &&\r\n ev1.ctrlKey === ev2.ctrlKey &&\r\n ev1.altKey === ev2.altKey && ev1.shiftKey === ev2.shiftKey\r\n}\r\n\r\nexport interface TickAccidental {\r\n duration: number,\r\n pitch: Pitch\r\n}\r\n\r\n/**\r\n * Used to create {@link MeasureTickmaps}\r\n */\r\nexport interface AccidentalArray {\r\n duration: string | number,\r\n pitches: Record\r\n}\r\n\r\nexport interface AccidentalDisplay {\r\n symbol: string,\r\n courtesy: boolean,\r\n forced: boolean\r\n}\r\nexport const reverseStaticMaps: Record> = {};\r\n\r\nexport function reverseStaticMap(name: string, o: Record) {\r\n if (!reverseStaticMaps[name]) {\r\n const rmap: Record = {};\r\n const keys = Object.keys(o); \r\n keys.forEach((key) => {\r\n const val = o[key];\r\n rmap[val] = key;\r\n });\r\n reverseStaticMaps[name] = rmap;\r\n }\r\n return reverseStaticMaps[name];\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Contains definition and supporting classes for {@link SmoMeasure}.\r\n * Most of the engraving is done at the measure level. Measure contains multiple (at least 1)\r\n * voices, which in turn contain notes. Each measure also contains formatting information. This\r\n * is mostly serialized outside of measure (in score), since columns and often an entire region\r\n * share measure formatting. Measures also contain modifiers like barlines. Tuplets and beam groups\r\n * are contained at the measure level.\r\n * @module /smo/data/measure\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMusic } from './music';\r\nimport {\r\n SmoBarline, SmoMeasureModifierBase, SmoRepeatSymbol, SmoTempoText, SmoMeasureFormat,\r\n SmoVolta, SmoRehearsalMarkParams, SmoRehearsalMark, SmoTempoTextParams, TimeSignature,\r\n TimeSignatureParametersSer, SmoMeasureFormatParamsSer, SmoTempoTextParamsSer\r\n} from './measureModifiers';\r\nimport { SmoNote, NoteType, SmoNoteParamsSer } from './note';\r\nimport { SmoTuplet, SmoTupletParamsSer, SmoTupletParams, SmoTupletTreeParamsSer, SmoTupletTree } from './tuplet';\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { TickMap } from '../xform/tickMap';\r\nimport { MeasureNumber, SvgBox, SmoAttrs, Pitch, PitchLetter, Clef, \r\n TickAccidental, AccidentalArray, getId } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\nimport { SmoTabStave } from './staffModifiers';\r\nimport { SmoFretPosition } from './noteModifiers';\r\n/**\r\n * Voice is just a container for {@link SmoNote}\r\n */\r\nexport interface SmoVoice {\r\n notes: SmoNote[]\r\n}\r\n\r\nexport interface SmoVoiceSer {\r\n notes: SmoNoteParamsSer[]\r\n}\r\n/**\r\n * TickMappable breaks up a circular dependency on modifiers\r\n * like @SmoDuration\r\n */\r\nexport interface TickMappable {\r\n voices: SmoVoice[],\r\n keySignature: string\r\n}\r\n\r\nexport interface MeasureTick {\r\n voiceIndex: number,\r\n tickIndex: number\r\n}\r\n\r\n/**\r\n * Break up a circlar dependency with {@link SmoBeamGroup}\r\n */\r\nexport interface ISmoBeamGroup {\r\n notes: SmoNote[],\r\n voice: number,\r\n attrs: SmoAttrs\r\n}\r\n/**\r\n * geometry information about the current measure for rendering and\r\n * score layout.\r\n * @internal\r\n */\r\nexport interface MeasureSvg {\r\n staffWidth: number,\r\n unjustifiedWidth: number,\r\n adjX: number, // The start point of the music in the stave (after time sig, etc)\r\n maxColumnStartX: number,\r\n staffX: number, // The left-most x position of the staff\r\n staffY: number,\r\n logicalBox: SvgBox,\r\n yTop: number,\r\n adjRight: number,\r\n history: string[],\r\n lineIndex: number,\r\n pageIndex: number,\r\n rowInSystem: number,\r\n forceClef: boolean,\r\n forceKeySignature: boolean,\r\n forceTimeSignature: boolean,\r\n forceTempo: boolean,\r\n hideEmptyMeasure: boolean,\r\n hideMultimeasure: boolean,\r\n multimeasureLength: number,\r\n multimeasureEndBarline: number,\r\n element: SVGSVGElement | null,\r\n tabStaveBox?: SvgBox,\r\n tabElement?: SVGSVGElement\r\n}\r\n\r\n/**\r\n * Interface for a {@link TickMap} for each voice\r\n * for formatting\r\n */\r\nexport interface MeasureTickmaps {\r\n tickmaps: TickMap[],\r\n accidentalMap: Record>,\r\n accidentalArray: AccidentalArray[]\r\n}\r\n/**\r\n * Column-mapped modifiers, managed by the {@link SmoScore}\r\n */\r\nexport interface ColumnMappedParams {\r\n // ['timeSignature', 'keySignature', 'tempo']\r\n timeSignature: any,\r\n keySignature: string,\r\n tempo: any\r\n}\r\n// @internal\r\nexport type SmoMeasureNumberParam = 'transposeIndex' | 'activeVoice' | 'lines' | 'repeatCount';\r\n// @internal\r\nexport const SmoMeasureNumberParams: SmoMeasureNumberParam[] = ['transposeIndex', 'activeVoice', 'lines', 'repeatCount'];\r\n// @internal\r\nexport type SmoMeasureStringParam = 'keySignature';\r\n// @internal\r\nexport const SmoMeasureStringParams: SmoMeasureStringParam[] = ['keySignature'];\r\n/**\r\n * constructor parameters for a {@link SmoMeasure}. Usually you will call\r\n * {@link SmoMeasure.defaults}, and modify the parameters you need to change.\r\n *\r\n * @param timeSignature\r\n * @param keySignature\r\n * @param tuplets\r\n * @param transposeIndex calculated from {@link SmoPartInfo} for non-concert-key instruments\r\n * @param lines number of lines in the stave\r\n * @param staffY Y coordinate (UL corner) of the measure stave\r\n * @param measureNumber combination configured/calculated measure number\r\n * @param clef\r\n * @param voices\r\n * @param activeVoice the active voice in the editor\r\n * @param tempo\r\n * @param format measure format, is managed by the score\r\n * @param modifiers All measure modifiers that5 aren't format, timeSignature or tempo\r\n * @category SmoParameters\r\n */\r\nexport interface SmoMeasureParams {\r\n timeSignature: TimeSignature,\r\n keySignature: string,\r\n tupletTrees: SmoTupletTree[],\r\n transposeIndex: number,\r\n lines: number,\r\n // bars: [1, 1], // follows enumeration in VF.Barline\r\n measureNumber: MeasureNumber,\r\n clef: Clef,\r\n voices: SmoVoice[],\r\n activeVoice: number,\r\n tempo: SmoTempoText,\r\n format: SmoMeasureFormat | null,\r\n modifiers: SmoMeasureModifierBase[],\r\n repeatSymbol: boolean,\r\n repeatCount: number\r\n}\r\n\r\n/**\r\n * The serializeable bits of SmoMeasure. Some parameters are \r\n * mapped by the stave if the don't change every measure, e.g.\r\n * time signature.\r\n * @category serialization\r\n */\r\nexport interface SmoMeasureParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string,\r\n /**\r\n * a list of tuplets (serialized)\r\n */\r\n tupletTrees: SmoTupletTreeParamsSer[],\r\n /**\r\n * transpose the notes up/down. TODO: this should not be serialized\r\n * as its part of the instrument parameters\r\n */\r\n transposeIndex: number,\r\n /**\r\n * lines in the staff (e.g. percussion)\r\n */\r\n lines: number,\r\n /**\r\n * measure number, absolute and relative/remapped\r\n */\r\n measureNumber: MeasureNumber,\r\n /**\r\n * start clef\r\n */\r\n clef: Clef,\r\n /**\r\n * voices contain notes\r\n */\r\n voices: SmoVoiceSer[],\r\n /**\r\n * all other modifiers (barlines, etc)\r\n */\r\n modifiers: SmoMeasureModifierBase[],\r\n // the next 3 are not serialized as part of the measure in most cases, since they are\r\n // mapped to specific measures in the score/system\r\n /**\r\n * key signature\r\n */\r\n keySignature?: string,\r\n /**\r\n * time signature serialization\r\n */\r\n timeSignature?: TimeSignatureParametersSer,\r\n /**\r\n * tempo at this point\r\n */\r\n tempo: SmoTempoTextParamsSer\r\n\r\n}\r\n\r\n/**\r\n * Only arrays and measure numbers are serilialized with default values.\r\n * @param params - result of serialization\r\n * @returns \r\n */\r\nfunction isSmoMeasureParamsSer(params: Partial):params is SmoMeasureParamsSer {\r\n if (!Array.isArray(params.voices) || \r\n !Array.isArray(params.tupletTrees) || !Array.isArray(params.modifiers) ||\r\n typeof(params?.measureNumber?.measureIndex) !== 'number') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Data for a measure of music. Many rules of musical engraving are\r\n * enforced at a measure level: the duration of notes, accidentals, etc.\r\n * \r\n * Measures contain {@link SmoNote}, {@link SmoTuplet}, and {@link SmoBeamGroup}\r\n * Measures are contained in {@link SmoSystemStaff}\r\n * @category SmoObject\r\n */\r\nexport class SmoMeasure implements SmoMeasureParams, TickMappable {\r\n static get timeSignatureDefault(): TimeSignature {\r\n return new TimeSignature(TimeSignature.defaults);\r\n }\r\n static defaultDupleDuration: number = 4096;\r\n static defaultTripleDuration: number = 2048 * 3;\r\n // @internal\r\n static readonly _defaults: SmoMeasureParams = {\r\n timeSignature: SmoMeasure.timeSignatureDefault,\r\n keySignature: 'C',\r\n tupletTrees: [],\r\n transposeIndex: 0,\r\n modifiers: [],\r\n // bars: [1, 1], // follows enumeration in VF.Barline\r\n measureNumber: {\r\n localIndex: 0,\r\n systemIndex: 0,\r\n measureIndex: 0,\r\n staffId: 0\r\n },\r\n clef: 'treble',\r\n lines: 5,\r\n voices: [],\r\n format: new SmoMeasureFormat(SmoMeasureFormat.defaults),\r\n activeVoice: 0,\r\n tempo: new SmoTempoText(SmoTempoText.defaults),\r\n repeatSymbol: false,\r\n repeatCount: 0 \r\n }\r\n\r\n /**\r\n * Default constructor parameters. Defaults are always copied so the\r\n * caller can modify them to create a new measure.\r\n * @returns constructor params for a new measure\r\n */\r\n static get defaults(): SmoMeasureParams {\r\n const proto: any = JSON.parse(JSON.stringify(SmoMeasure._defaults));\r\n proto.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n proto.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n proto.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.start,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n proto.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n return proto;\r\n }\r\n // @ignore\r\n static convertLegacyTimeSignature(ts: string) {\r\n const rv = new TimeSignature(TimeSignature.defaults);\r\n rv.timeSignature = ts;\r\n return rv;\r\n }\r\n timeSignature: TimeSignature = SmoMeasure.timeSignatureDefault;\r\n /**\r\n * Overrides display of actual time signature, in the case of\r\n * pick-up notes where the actual and displayed durations are different\r\n */\r\n keySignature: string = '';\r\n canceledKeySignature: string = '';\r\n tupletTrees: SmoTupletTree[] = [];\r\n repeatSymbol: boolean = false;\r\n repeatCount: number = 0;\r\n ctor: string='SmoMeasure';\r\n /**\r\n * Adjust for non-concert pitch intstruments\r\n */\r\n transposeIndex: number = 0;\r\n modifiers: SmoMeasureModifierBase[] = [];\r\n /**\r\n * Row, column, and custom numbering information about this measure.\r\n */\r\n measureNumber: MeasureNumber = {\r\n localIndex: 0,\r\n systemIndex: 0,\r\n measureIndex: 0,\r\n staffId: 0\r\n };\r\n clef: Clef = 'treble';\r\n voices: SmoVoice[] = [];\r\n /**\r\n * the active voice in the editor, if there are multiple voices\r\n * */\r\n activeVoice: number = 0;\r\n tempo: SmoTempoText;\r\n beamGroups: ISmoBeamGroup[] = [];\r\n lines: number = 5;\r\n /**\r\n * Runtime information about rendering\r\n */\r\n svg: MeasureSvg;\r\n /**\r\n * Measure-specific formatting parameters.\r\n */\r\n format: SmoMeasureFormat;\r\n /**\r\n * Information for identifying this object\r\n */\r\n id: string;\r\n\r\n /**\r\n * Fill in components. We assume the modifiers are already constructed,\r\n * e.g. by deserialize or the calling function.\r\n * @param params\r\n */\r\n constructor(params: SmoMeasureParams) {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n this.svg = {\r\n staffWidth: 0,\r\n unjustifiedWidth: 0,\r\n staffX: 0,\r\n staffY: 0,\r\n logicalBox: {\r\n x: 0, y: 0, width: 0, height: 0\r\n },\r\n yTop: 0,\r\n adjX: 0,\r\n maxColumnStartX: 0,\r\n adjRight: 0,\r\n history: [],\r\n lineIndex: 0,\r\n pageIndex: 0,\r\n rowInSystem: 0,\r\n forceClef: false,\r\n forceKeySignature: false,\r\n forceTimeSignature: false,\r\n forceTempo: false,\r\n hideEmptyMeasure: false,\r\n hideMultimeasure: false,\r\n multimeasureLength: 0,\r\n multimeasureEndBarline: SmoBarline.barlines['singleBar'],\r\n element: null\r\n };\r\n\r\n const defaults = SmoMeasure.defaults;\r\n SmoMeasureNumberParams.forEach((param) => {\r\n if (typeof (params[param]) !== 'undefined') {\r\n this[param] = params[param];\r\n }\r\n });\r\n SmoMeasureStringParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defaults[param];\r\n });\r\n this.clef = params.clef;\r\n this.repeatSymbol = params.repeatSymbol;\r\n this.measureNumber = JSON.parse(JSON.stringify(params.measureNumber));\r\n if (params.tempo) {\r\n this.tempo = new SmoTempoText(params.tempo);\r\n }\r\n // Handle legacy time signature format\r\n if (params.timeSignature) {\r\n const tsAny = params.timeSignature as any;\r\n if (typeof (tsAny) === 'string') {\r\n this.timeSignature = SmoMeasure.convertLegacyTimeSignature(tsAny);\r\n } else {\r\n this.timeSignature = TimeSignature.createFromPartial(tsAny);\r\n }\r\n }\r\n this.voices = params.voices ? params.voices : [];\r\n this.tupletTrees = params.tupletTrees ? params.tupletTrees : [];\r\n this.modifiers = params.modifiers ? params.modifiers : defaults.modifiers;\r\n this.setDefaultBarlines();\r\n this.keySignature = SmoMusic.vexKeySigWithOffset(this.keySignature, this.transposeIndex);\r\n\r\n if (!(params.format)) {\r\n this.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n this.format.measureIndex = this.measureNumber.measureIndex;\r\n } else {\r\n this.format = new SmoMeasureFormat(params.format);\r\n }\r\n this.id = getId().toString();\r\n this.updateClefChangeNotes();\r\n }\r\n\r\n // @internal\r\n // used for serialization\r\n static get defaultAttributes() {\r\n return [\r\n 'keySignature', \r\n 'measureNumber',\r\n 'activeVoice', 'clef', 'transposeIndex',\r\n 'format', 'rightMargin', 'lines', 'repeatSymbol', 'repeatCount'\r\n ];\r\n }\r\n\r\n // @internal\r\n // used for serialization\r\n static get formattingOptions() {\r\n return ['customStretch', 'customProportion', 'autoJustify', 'systemBreak',\r\n 'pageBreak', 'padLeft'];\r\n }\r\n // @internal\r\n // used for serialization\r\n static get columnMappedAttributes() {\r\n return ['timeSignature', 'keySignature', 'tempo'];\r\n }\r\n static get serializableAttributes() {\r\n const rv: any = [];\r\n SmoMeasure.defaultAttributes.forEach((attr) => {\r\n if (SmoMeasure.columnMappedAttributes.indexOf(attr) < 0 && attr !== 'format') {\r\n rv.push(attr);\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n // Return true if the time signatures are the same, for display purposes (e.g. if a time sig change\r\n // is required)\r\n */\r\n static timeSigEqual(o1: TimeSignature, o2: TimeSignature) {\r\n return o1.timeSignature === o2.timeSignature && o1.useSymbol === o2.useSymbol;\r\n }\r\n /**\r\n * If there is a clef change mid-measure, update the actual clefs of the notes\r\n * so they display correctly.\r\n */\r\n updateClefChangeNotes() {\r\n let changed = false;\r\n let curTick = 0;\r\n let clefChange = this.clef;\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n curTick = 0;\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const smoNote = voice.notes[j];\r\n smoNote.clef = this.clef;\r\n if (smoNote.clefNote && smoNote.clefNote.clef !== this.clef) {\r\n clefChange = smoNote.clefNote.clef;\r\n curTick += smoNote.tickCount;\r\n changed = true;\r\n break;\r\n }\r\n curTick += smoNote.tickCount;\r\n }\r\n if (changed) {\r\n break;\r\n }\r\n }\r\n if (!changed) {\r\n return;\r\n }\r\n // clefChangeTick is where the change goes. We only support\r\n // one per measure, others are ignored.\r\n const clefChangeTick = curTick;\r\n\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n curTick = 0;\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const smoNote = voice.notes[j];\r\n const noteTicks = smoNote.tickCount;\r\n if (curTick + noteTicks >= clefChangeTick) {\r\n smoNote.clef = clefChange;\r\n }\r\n // Remove any redundant clef changes later in the measure\r\n if (curTick + noteTicks > clefChangeTick) {\r\n if (smoNote.clefNote && smoNote.clefNote.clef === clefChange) {\r\n smoNote.clefNote = null;\r\n }\r\n }\r\n curTick += noteTicks;\r\n }\r\n }\r\n }\r\n /**\r\n * @internal\r\n * @returns column mapped parameters, serialized. caller will\r\n * decide if the parameters need to be persisted\r\n */\r\n serializeColumnMapped(): ColumnMappedParams {\r\n //\r\n return {\r\n timeSignature: this.timeSignature.serialize(),\r\n keySignature: this.keySignature,\r\n tempo: this.tempo.serialize()\r\n };\r\n }\r\n getColumnMapped(): ColumnMappedParams {\r\n return {\r\n timeSignature: this.timeSignature,\r\n keySignature: this.keySignature,\r\n tempo: this.tempo\r\n };\r\n }\r\n\r\n /**\r\n * Convert this measure object to a JSON object, recursively serializing all the notes,\r\n * note modifiers, etc.\r\n */\r\n serialize(): SmoMeasureParamsSer {\r\n const params: Partial = { \"ctor\": \"SmoMeasure\" };\r\n let ser = true;\r\n smoSerialize.serializedMergeNonDefault(SmoMeasure.defaults, SmoMeasure.serializableAttributes, this, params);\r\n // Don't serialize default things\r\n const fmt = this.format.serialize();\r\n // measure number can't be defaulted b/c tempos etc. can map to default measure\r\n params.measureNumber = JSON.parse(JSON.stringify(this.measureNumber));\r\n params.tupletTrees = [];\r\n params.voices = [];\r\n params.modifiers = [];\r\n\r\n this.tupletTrees.forEach((tupletTree) => {\r\n params.tupletTrees!.push(tupletTree.serialize());\r\n });\r\n\r\n this.voices.forEach((voice) => {\r\n const obj: any = {\r\n\r\n notes: []\r\n };\r\n voice.notes.forEach((note) => {\r\n obj.notes.push(note.serialize());\r\n });\r\n params.voices!.push(obj);\r\n });\r\n\r\n this.modifiers.forEach((modifier) => {\r\n ser = true;\r\n /* don't serialize default modifiers */\r\n if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === SmoBarline.positions.start &&\r\n (modifier as SmoBarline).barline === SmoBarline.barlines.singleBar) {\r\n ser = false;\r\n } else if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === SmoBarline.positions.end\r\n && (modifier as SmoBarline).barline === SmoBarline.barlines.singleBar) {\r\n ser = false;\r\n } else if (modifier.ctor === 'SmoTempoText') {\r\n // we don't save tempo text as a modifier anymore\r\n ser = false;\r\n } else if ((modifier as SmoRepeatSymbol).ctor === 'SmoRepeatSymbol' && (modifier as SmoRepeatSymbol).position === SmoRepeatSymbol.positions.start\r\n && (modifier as SmoRepeatSymbol).symbol === SmoRepeatSymbol.symbols.None) {\r\n ser = false;\r\n }\r\n if (ser) {\r\n params.modifiers!.push(modifier.serialize());\r\n }\r\n });\r\n // ['timeSignature', 'keySignature', 'tempo']\r\n if (!isSmoMeasureParamsSer(params)) {\r\n throw 'invalid measure';\r\n }\r\n return params;\r\n }\r\n /**\r\n * restore a serialized measure object. Usually called as part of deserializing a score,\r\n * but can also be used to restore a measure due to an undo operation. Recursively\r\n * deserialize all the notes and modifiers to construct a new measure.\r\n * @param jsonObj the serialized SmoMeasure\r\n * @returns\r\n */\r\n static deserialize(jsonObj: SmoMeasureParamsSer): SmoMeasure {\r\n let j = 0;\r\n let i = 0;\r\n const voices: SmoVoice[] = [];\r\n for (j = 0; j < jsonObj.voices.length; ++j) {\r\n const voice = jsonObj.voices[j];\r\n const notes: SmoNote[] = [];\r\n voices.push({\r\n notes\r\n });\r\n for (i = 0; i < voice.notes.length; ++i) {\r\n const noteParams = voice.notes[i];\r\n const smoNote = SmoNote.deserialize(noteParams);\r\n notes.push(smoNote);\r\n }\r\n }\r\n\r\n const modifiers: SmoMeasureModifierBase[] = [];\r\n jsonObj.modifiers.forEach((modParams: any) => {\r\n const modifier: SmoMeasureModifierBase = SmoMeasureModifierBase.deserialize(modParams);\r\n modifiers.push(modifier);\r\n });\r\n const params: SmoMeasureParams = SmoMeasure.defaults;\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, jsonObj, params);\r\n\r\n // explode column-mapped\r\n if (jsonObj.tempo) {\r\n params.tempo = SmoTempoText.deserialize(jsonObj.tempo);\r\n } else {\r\n params.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n\r\n // timeSignatureString is now part of timeSignature. upconvert old scores\r\n let timeSignatureString = '';\r\n const jsonLegacy = (jsonObj as any);\r\n if (typeof(jsonLegacy.timeSignatureString) === 'string' && jsonLegacy.timeSignatureString.length > 0) {\r\n timeSignatureString = jsonLegacy.timeSignatureString;\r\n }\r\n if (jsonObj.timeSignature) {\r\n if (timeSignatureString.length) {\r\n jsonObj.timeSignature.displayString = timeSignatureString; \r\n }\r\n params.timeSignature = TimeSignature.deserialize(jsonObj.timeSignature);\r\n } else {\r\n const tparams = TimeSignature.defaults;\r\n if (timeSignatureString.length) {\r\n tparams.displayString = timeSignatureString;\r\n }\r\n params.timeSignature = new TimeSignature(tparams);\r\n }\r\n params.keySignature = jsonObj.keySignature ?? 'C';\r\n params.voices = voices;\r\n\r\n if ((jsonObj as any).tupletTrees !== undefined) {\r\n for (j = 0; j < jsonObj.tupletTrees.length; ++j) {\r\n const tupletTreeJson = jsonObj.tupletTrees[j];\r\n const tupletTree = SmoTupletTree.deserialize(tupletTreeJson);\r\n params.tupletTrees.push(tupletTree);\r\n }\r\n }\r\n //deserialization of a legacy tuplets\r\n //legacy schema had measure.tuplets, it is measure.tupletTrees now\r\n if ((jsonObj as any).tuplets !== undefined) {\r\n for (j = 0; j < (jsonObj as any).tuplets.length; ++j) {\r\n const tupJson = (jsonObj as any).tuplets[j];\r\n\r\n // Legacy schema had attrs.id, now it is just id\r\n if ((tupJson as any).attrs && (tupJson as any).attrs.id) {\r\n tupJson.id = (tupJson as any).attrs.id;\r\n }\r\n\r\n const tupletNotes: SmoNote[] = [];\r\n let startIndex: number | null = null;\r\n params.voices.forEach((voice) => {\r\n voice.notes.forEach((note, index) => {\r\n if (note.isTuplet && note.tupletId === tupJson.attrs.id) {\r\n tupletNotes.push(note);\r\n //we cannot trust startIndex coming from legacy json\r\n //we need to count index of the first note in the tuplet\r\n if (startIndex === null) {\r\n startIndex = index;\r\n }\r\n }\r\n });\r\n });\r\n\r\n // Bug fix: A tuplet with no notes may be been overwritten\r\n // in a copy/paste operation\r\n if (tupletNotes.length > 0) {\r\n tupJson.notes = tupletNotes;\r\n tupJson.startIndex = startIndex;\r\n tupJson.endIndex = tupJson.startIndex + tupletNotes.length - 1;\r\n }\r\n\r\n const tuplet: SmoTuplet = SmoTuplet.deserialize(tupJson);\r\n const tupletTree: SmoTupletTree = new SmoTupletTree({tuplet: tuplet});\r\n params.tupletTrees.push(tupletTree);\r\n }\r\n }\r\n if (params.tupletTrees.length) {\r\n SmoTupletTree.syncTupletIds(params.tupletTrees, voices)\r\n }\r\n\r\n params.modifiers = modifiers;\r\n const measure = new SmoMeasure(params);\r\n // Handle migration for measure-mapped parameters\r\n measure.modifiers.forEach((mod) => {\r\n if (mod.ctor === 'SmoTempoText') {\r\n measure.tempo = (mod as SmoTempoText);\r\n }\r\n });\r\n if (!measure.tempo) {\r\n measure.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n\r\n\r\n\r\n return measure;\r\n }\r\n\r\n static clone(measure: SmoMeasure): SmoMeasure {\r\n return SmoMeasure.deserialize(measure.serialize());\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the default pitch\r\n * for a clef (appears on 3rd line)\r\n */\r\n static get defaultPitchForClef(): Record {\r\n return {\r\n 'treble': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'bass': {\r\n letter: 'd',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'tenor': {\r\n letter: 'a',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'alto': {\r\n letter: 'c',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'soprano': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'percussion': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'mezzo-soprano': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 4\r\n },\r\n 'baritone-c': {\r\n letter: 'b',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'baritone-f': {\r\n letter: 'e',\r\n accidental: 'n',\r\n octave: 3\r\n },\r\n 'subbass': {\r\n letter: 'd',\r\n accidental: '',\r\n octave: 2\r\n },\r\n 'french': {\r\n letter: 'b',\r\n accidental: '',\r\n octave: 4\r\n } // no idea\r\n };\r\n }\r\n static _emptyMeasureNoteType: NoteType = 'r';\r\n static set emptyMeasureNoteType(tt: NoteType) {\r\n SmoMeasure._emptyMeasureNoteType = tt;\r\n }\r\n static get emptyMeasureNoteType(): NoteType {\r\n return SmoMeasure._emptyMeasureNoteType;\r\n }\r\n static timeSignatureNotes(timeSignature: TimeSignature, clef: Clef) {\r\n const pitch = SmoMeasure.defaultPitchForClef[clef];\r\n const maxTicks = SmoMusic.timeSignatureToTicks(timeSignature.timeSignature);\r\n const noteTick = 8192 / (timeSignature.beatDuration / 2);\r\n let ticks = 0;\r\n const pnotes: SmoNote[] = [];\r\n while (ticks < maxTicks) {\r\n const nextNote = SmoNote.defaults;\r\n nextNote.pitches = [JSON.parse(JSON.stringify(pitch))];\r\n nextNote.noteType = 'r';\r\n nextNote.clef = clef;\r\n nextNote.ticks.numerator = noteTick;\r\n nextNote.stemTicks = noteTick;\r\n pnotes.push(new SmoNote(nextNote));\r\n ticks += noteTick;\r\n }\r\n if (timeSignature.beatDuration === 8 && (timeSignature.actualBeats % 3 === 0 || timeSignature.actualBeats % 2 !== 0)) {\r\n let ix = 0;\r\n pnotes.forEach((pnote) => {\r\n if ((ix + 1) % 3 === 0) {\r\n pnote.endBeam = true;\r\n }\r\n pnote.beamBeats = 2048 * 3;\r\n ix += 1;\r\n });\r\n }\r\n return pnotes;\r\n }\r\n /**\r\n * Get a measure full of default notes for a given timeSignature/clef.\r\n * returns 8th notes for triple-time meters, etc.\r\n * @param params \r\n * @returns \r\n */\r\n static getDefaultNotes(params: SmoMeasureParams): SmoNote[] {\r\n return SmoMeasure.timeSignatureNotes(new TimeSignature(params.timeSignature), params.clef);\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the defaults from the\r\n * parameters that are passed in, which could be another measure in the score.\r\n * This version returns params with no notes, for callers that want to use their own notes.\r\n * If you want the default notes, see {@link getDefaultMeasureWithNotes}\r\n * \r\n * @param params\r\n * @returns \r\n */\r\n static getDefaultMeasure(params: SmoMeasureParams): SmoMeasure {\r\n const obj: any = {};\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, SmoMeasure.defaults, obj);\r\n smoSerialize.serializedMerge(SmoMeasure.defaultAttributes, params, obj);\r\n // Don't copy column-formatting options to new measure in new column\r\n smoSerialize.serializedMerge(SmoMeasure.formattingOptions, SmoMeasure.defaults, obj);\r\n obj.timeSignature = new TimeSignature(params.timeSignature);\r\n // The measure expects to get concert KS in constructor and adjust for instrument. So do the\r\n // opposite.\r\n obj.keySignature = SmoMusic.vexKeySigWithOffset(obj.keySignature, -1 * obj.transposeIndex);\r\n // Don't redisplay tempo for a new measure\r\n const rv = new SmoMeasure(obj);\r\n if (rv.tempo && rv.tempo.display) {\r\n rv.tempo.display = false;\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * When creating a new measure, the 'default' settings can vary depending on\r\n * what comes before/after the measure. This determines the defaults from the\r\n * parameters that are passed in, which could be another measure in the score.\r\n * \r\n * @param params \r\n * @returns \r\n */\r\n static getDefaultMeasureWithNotes(params: SmoMeasureParams): SmoMeasure {\r\n var measure = SmoMeasure.getDefaultMeasure(params);\r\n measure.voices.push({\r\n notes: SmoMeasure.getDefaultNotes(params)\r\n });\r\n // fix a bug.\r\n // new measures only have 1 voice, make sure active voice is 0\r\n measure.activeVoice = 0;\r\n return measure;\r\n }\r\n /**\r\n * used by xml export \r\n * @internal\r\n * @param val \r\n */\r\n getForceSystemBreak() {\r\n return this.format.systemBreak;\r\n }\r\n // @internal\r\n setDefaultBarlines() {\r\n if (!this.getStartBarline()) {\r\n this.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.start,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n if (!this.getEndBarline()) {\r\n this.modifiers.push(new SmoBarline({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n }\r\n\r\n get containsSound(): boolean {\r\n let i = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n let j = 0;\r\n const voice = this.voices[i];\r\n for (j = 0; j < this.voices.length; ++j) {\r\n if (voice.notes[j].noteType === 'n') {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * The rendered width of the measure, or estimate of same\r\n */\r\n get staffWidth() {\r\n return this.svg.staffWidth;\r\n }\r\n\r\n /**\r\n * set the rendered width of the measure, or estimate of same\r\n */\r\n setWidth(width: number, description: string) {\r\n if (layoutDebug.flagSet(layoutDebug.values.measureHistory)) {\r\n this.svg.history.push('setWidth ' + this.staffWidth + '=> ' + width + ' ' + description);\r\n }\r\n if (isNaN(width)) {\r\n throw ('NAN in setWidth');\r\n }\r\n this.svg.staffWidth = width;\r\n }\r\n\r\n /**\r\n * Get rendered or estimated start x\r\n */\r\n get staffX(): number {\r\n return this.svg.staffX;\r\n }\r\n\r\n /**\r\n * Set rendered or estimated start x\r\n */\r\n setX(x: number, description: string) {\r\n if (isNaN(x)) {\r\n throw ('NAN in setX');\r\n }\r\n layoutDebug.measureHistory(this, 'staffX', x, description);\r\n this.svg.staffX = Math.round(x);\r\n }\r\n /**\r\n * A time signature has possibly changed. add/remove notes to\r\n * match the new length\r\n */\r\n alignNotesWithTimeSignature() {\r\n const tsTicks = SmoMusic.timeSignatureToTicks(this.timeSignature.timeSignature);\r\n if (tsTicks === this.getMaxTicksVoice()) {\r\n return;\r\n }\r\n const replaceNoteWithDuration = (target: number, ar: SmoNote[], note: SmoNote) => {\r\n const fitNote = new SmoNote(SmoNote.defaults);\r\n const duration = SmoMusic.closestDurationTickLtEq(target);\r\n if (duration > 128) {\r\n fitNote.ticks = { numerator: duration, denominator: 1, remainder: 0 };\r\n fitNote.stemTicks = duration;\r\n fitNote.pitches = note.pitches;\r\n fitNote.noteType = note.noteType;\r\n fitNote.clef = note.clef;\r\n ar.push(fitNote);\r\n }\r\n }\r\n const voices: SmoVoice[] = [];\r\n const tuplets: SmoTuplet[] = [];\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n const newNotes: SmoNote[] = [];\r\n let voiceTicks = 0;\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const note = voice.notes[j];\r\n // if a tuplet, make sure the whole tuplet fits.\r\n if (note.isTuplet) {\r\n const tupletTree = SmoTupletTree.getTupletTreeForNoteIndex(this.tupletTrees, i, j);\r\n if (tupletTree) {\r\n // remaining notes of an approved tuplet, just add them\r\n if (tupletTree.startIndex !== j) {\r\n newNotes.push(note);\r\n continue;\r\n }\r\n else if (tupletTree.totalTicks + voiceTicks <= tsTicks) {\r\n // first note of the tuplet, it fits, add it\r\n voiceTicks += tupletTree.totalTicks;\r\n newNotes.push(note);\r\n } else {\r\n // tuplet will not fit. Replace tuplet with a note as close to remainder as possible and add it\r\n // remove tuplet\r\n note.tupletId = null\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n SmoTupletTree.removeTupletForNoteIndex(this, i, j);\r\n break;\r\n }\r\n } else { // missing tuplet, now what?\r\n console.warn('missing tuplet info');\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n }\r\n } else {\r\n if (note.tickCount + voiceTicks <= tsTicks) {\r\n newNotes.push(note);\r\n voiceTicks += note.tickCount;\r\n } else {\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, note);\r\n voiceTicks = tsTicks;\r\n break;\r\n }\r\n }\r\n }\r\n if (tsTicks - voiceTicks > 128) {\r\n const np = SmoNote.defaults;\r\n np.clef = this.clef;\r\n const nnote = new SmoNote(np);\r\n replaceNoteWithDuration(tsTicks - voiceTicks, newNotes, nnote);\r\n }\r\n voices.push({ notes: newNotes });\r\n }\r\n this.voices = voices;\r\n }\r\n get measureNumberDbg(): string {\r\n return `${this.measureNumber.measureIndex}/${this.measureNumber.systemIndex}/${this.measureNumber.staffId}`;\r\n }\r\n /**\r\n * Get rendered or estimated start y\r\n */\r\n get staffY(): number {\r\n return this.svg.staffY;\r\n }\r\n\r\n /**\r\n * Set rendered or estimated start y\r\n */\r\n setY(y: number, description: string) {\r\n if (isNaN(y)) {\r\n throw ('NAN in setY');\r\n }\r\n layoutDebug.measureHistory(this, 'staffY', y, description);\r\n this.svg.staffY = Math.round(y);\r\n }\r\n\r\n /**\r\n * Return actual or estimated highest point in score\r\n */\r\n get yTop(): number {\r\n return this.svg.yTop;\r\n }\r\n /**\r\n * return the lowest y (highest value) in this measure svg\r\n *\r\n * @readonly\r\n */\r\n get lowestY(): number {\r\n if (this.svg.tabStaveBox) {\r\n return this.svg.tabStaveBox.y + this.svg.tabStaveBox.height;\r\n } else {\r\n return this.svg.logicalBox.y + this.svg.logicalBox.height;\r\n }\r\n }\r\n /**\r\n * adjust the y for the render boxes to account for the page and margins\r\n */\r\n adjustY(yOffset: number) {\r\n this.svg.logicalBox.y += yOffset;\r\n if (this.svg.tabStaveBox) {\r\n this.svg.tabStaveBox.y += yOffset;\r\n }\r\n }\r\n /**\r\n * WHen setting an instrument, offset the pitches to match the instrument key\r\n * @param offset \r\n * @param newClef \r\n */\r\n transposeToOffset(offset: number, targetKey: string, newClef?: Clef) {\r\n const diff = offset - this.transposeIndex;\r\n newClef = newClef ?? this.clef;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n const pitches: number[] = [...Array(note.pitches.length).keys()];\r\n // when the note is a rest, preserve the rest but match the new clef.\r\n if (newClef !== this.clef && note.noteType === 'r') {\r\n // @ts-ignore\r\n const defp = JSON.parse(JSON.stringify(SmoMeasure.defaultPitchForClef[newClef]));\r\n note.pitches = [defp];\r\n } else {\r\n note.transpose(pitches, diff, this.keySignature, targetKey);\r\n note.getGraceNotes().forEach((gn) => {\r\n const gpitch: number[] = [...Array(gn.pitches.length).keys()];\r\n const xpose = SmoNote.transpose(gn, gpitch, diff, this.keySignature, targetKey);\r\n gn.pitches = xpose.pitches;\r\n });\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * Return actual or estimated highest point in score\r\n */\r\n setYTop(y: number, description: string) {\r\n layoutDebug.measureHistory(this, 'yTop', y, description);\r\n this.svg.yTop = y;\r\n }\r\n\r\n /**\r\n * Return actual or estimated bounding box\r\n */\r\n setBox(box: SvgBox, description: string) {\r\n layoutDebug.measureHistory(this, 'logicalBox', box, description);\r\n this.svg.logicalBox = SvgHelpers.smoBox(box);\r\n }\r\n /**\r\n * @returns the DOM identifier for this measure when rendered\r\n */\r\n getClassId() {\r\n return 'mm-' + this.measureNumber.staffId + '-' + this.measureNumber.measureIndex;\r\n }\r\n /**\r\n * \r\n * @param id \r\n * @returns \r\n */\r\n getRenderedNote(id: string) {\r\n let j = 0;\r\n let i = 0;\r\n for (j = 0; j < this.voices.length; ++j) {\r\n const voice = this.voices[j];\r\n for (i = 0; i < voice.notes.length; ++i) {\r\n const note = voice.notes[i];\r\n if (note.renderId === id) {\r\n return {\r\n smoNote: note,\r\n voice: j,\r\n tick: i\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getNotes() {\r\n return this.voices[this.activeVoice].notes;\r\n }\r\n\r\n getActiveVoice() {\r\n return this.activeVoice;\r\n }\r\n\r\n setActiveVoice(vix: number) {\r\n if (vix >= 0 && vix < this.voices.length) {\r\n this.activeVoice = vix;\r\n }\r\n }\r\n\r\n tickmapForVoice(voiceIx: number) {\r\n return new TickMap(this, voiceIx);\r\n }\r\n\r\n // ### createMeasureTickmaps\r\n // A tickmap is a map of notes to ticks for the measure. It is speciifc per-voice\r\n // since each voice may have different numbers of ticks. The accidental map is\r\n // overall since accidentals in one voice apply to accidentals in the other\r\n // voices. So we return the tickmaps and the overall accidental map.\r\n createMeasureTickmaps(): MeasureTickmaps {\r\n let i = 0;\r\n const tickmapArray: TickMap[] = [];\r\n const accidentalMap: Record> =\r\n {} as Record>;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n tickmapArray.push(this.tickmapForVoice(i));\r\n }\r\n\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const tickmap: TickMap = tickmapArray[i];\r\n const durationKeys: string[] = Object.keys((tickmap.durationAccidentalMap));\r\n\r\n durationKeys.forEach((durationKey: string) => {\r\n if (!accidentalMap[durationKey]) {\r\n accidentalMap[durationKey] = tickmap.durationAccidentalMap[durationKey];\r\n } else {\r\n const amap = accidentalMap[durationKey];\r\n const tickable: Record = tickmap.durationAccidentalMap[durationKey];\r\n const letterKeys: PitchLetter[] = Object.keys(tickable) as Array;\r\n letterKeys.forEach((pitchKey) => {\r\n if (!amap[pitchKey]) {\r\n amap[pitchKey] = tickmap.durationAccidentalMap[durationKey][pitchKey];\r\n }\r\n });\r\n }\r\n });\r\n }\r\n // duration: duration, pitches: Record\r\n const accidentalArray: AccidentalArray[] = [];\r\n Object.keys(accidentalMap).forEach((durationKey) => {\r\n accidentalArray.push({ duration: durationKey, pitches: accidentalMap[durationKey] });\r\n });\r\n return {\r\n tickmaps: tickmapArray,\r\n accidentalMap,\r\n accidentalArray\r\n };\r\n }\r\n // ### createRestNoteWithDuration\r\n // pad some duration of music with rests.\r\n static createRestNoteWithDuration(duration: number, clef: Clef): SmoNote {\r\n const pitch: Pitch = JSON.parse(JSON.stringify(\r\n SmoMeasure.defaultPitchForClef[clef]));\r\n const note = new SmoNote(SmoNote.defaults);\r\n note.pitches = [pitch];\r\n note.noteType = 'r';\r\n note.hidden = true;\r\n note.ticks = { numerator: duration, denominator: 1, remainder: 0 };\r\n return note;\r\n }\r\n\r\n /**\r\n * Count the number of ticks in each voice and return max\r\n * @returns \r\n */\r\n getMaxTicksVoice() {\r\n let i = 0;\r\n let max = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const voiceTicks = this.getTicksFromVoice(i);\r\n max = Math.max(voiceTicks, max);\r\n }\r\n return max;\r\n }\r\n\r\n /**\r\n * Count the number of ticks in a specific voice\r\n * @param voiceIndex \r\n * @returns \r\n */\r\n getTicksFromVoice(voiceIndex: number): number {\r\n let ticks = 0;\r\n this.voices[voiceIndex].notes.forEach((note) => {\r\n ticks += note.tickCount;\r\n });\r\n return ticks;\r\n }\r\n\r\n /**\r\n * Count all the ticks up to the provided tickIndex\r\n * @param voiceIndex\r\n * @param tickIndex\r\n */\r\n getNotePositionInTicks(voiceIndex: number, tickIndex: number): number {\r\n let rv = 0;\r\n for (let i = 0; i < tickIndex; i++) {\r\n const note = this.voices[voiceIndex].notes[i];\r\n rv += note.tickCount;\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * Count all the ticks up to the provided tickIndex\r\n * @param voiceIndex\r\n * @param tickIndex\r\n */\r\n getTickCountForNote(voiceIndex: number, note: SmoNote): number {\r\n let rv = 0;\r\n for (let i = 0; i < this.voices[voiceIndex].notes.length; i++) {\r\n const currentNote = this.voices[voiceIndex].notes[i];\r\n rv += note.tickCount;\r\n }\r\n return rv;\r\n }\r\n\r\n getClosestIndexFromTickCount(voiceIndex: number, tickCount: number): number {\r\n let i = 0;\r\n let rv = 0;\r\n for (i = 0; i < this.voices[voiceIndex].notes.length; ++i) {\r\n const note = this.voices[voiceIndex].notes[i];\r\n if (note.tickCount + rv >= tickCount) {\r\n return i;\r\n }\r\n rv += note.tickCount;\r\n }\r\n return i;\r\n }\r\n\r\n isPickup(): boolean {\r\n const ticks = this.getTicksFromVoice(0);\r\n const goal = SmoMusic.timeSignatureToTicks(this.timeSignature.timeSignature);\r\n return (ticks < goal);\r\n }\r\n\r\n clearBeamGroups() {\r\n this.beamGroups = [];\r\n }\r\n\r\n // ### updateLyricFont\r\n // Update the lyric font, which is the same for all lyrics.\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setLyricFont(fontInfo);\r\n });\r\n });\r\n }\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n });\r\n }\r\n\r\n // ### updateLyricFont\r\n // Update the lyric font, which is the same for all lyrics.\r\n setChordFont(fontInfo: FontInfo) {\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.setChordFont(fontInfo);\r\n });\r\n });\r\n }\r\n\r\n tupletNotes(smoTuplet: SmoTuplet): SmoNote[] {\r\n let tupletNotes: SmoNote[] = [];\r\n for (let i = smoTuplet.startIndex; i <= smoTuplet.endIndex; i++) {\r\n const note = this.voices[smoTuplet.voice].notes[i];\r\n tupletNotes.push(note);\r\n }\r\n return tupletNotes;\r\n }\r\n\r\n getStemDirectionForTuplet(smoTuplet: SmoTuplet) {\r\n let note: SmoNote | null = null;\r\n for (let currentNote of this.tupletNotes(smoTuplet)) {\r\n if (currentNote.noteType === 'n') {\r\n note = currentNote;\r\n break;\r\n }\r\n }\r\n\r\n if (!note) {\r\n return SmoNote.flagStates.down;\r\n }\r\n if (note.flagState !== SmoNote.flagStates.auto) {\r\n return note.flagState;\r\n }\r\n return SmoMusic.pitchToLedgerLine(this.clef, note.pitches[0])\r\n >= 2 ? SmoNote.flagStates.up : SmoNote.flagStates.down;\r\n }\r\n getNoteById(id: string): SmoNote | null {\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const note = voice.notes[j];\r\n if (note.attrs.id === id) {\r\n return note;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n setClef(clef: Clef) {\r\n const oldClef = this.clef;\r\n this.clef = clef;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.clef = clef;\r\n });\r\n });\r\n }\r\n /**\r\n * Get the clef that this measure ends with.\r\n * @returns \r\n */\r\n getLastClef() {\r\n for (var i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n const note = voice.notes[j];\r\n if (note.clefNote && note.clefNote.clef !== this.clef) {\r\n return note.clefNote.clef;\r\n }\r\n }\r\n }\r\n return this.clef;\r\n }\r\n isRest() {\r\n let i = 0;\r\n for (i = 0; i < this.voices.length; ++i) {\r\n const voice = this.voices[i];\r\n for (var j = 0; j < voice.notes.length; ++j) {\r\n if (!voice.notes[j].isRest()) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n // ### populateVoice\r\n // Create a new voice in this measure, and populate it with the default note\r\n // for this measure/key/clef\r\n populateVoice(index: number) {\r\n if (index !== this.voices.length) {\r\n return;\r\n }\r\n this.voices.push({ notes: SmoMeasure.getDefaultNotes(this) });\r\n this.activeVoice = index;\r\n }\r\n private _removeSingletonModifier(name: string) {\r\n const ar = this.modifiers.filter(obj => obj.attrs.type !== name);\r\n this.modifiers = ar;\r\n }\r\n\r\n addRehearsalMark(parameters: SmoRehearsalMarkParams) {\r\n this._removeSingletonModifier('SmoRehearsalMark');\r\n this.modifiers.push(new SmoRehearsalMark(parameters));\r\n }\r\n removeRehearsalMark() {\r\n this._removeSingletonModifier('SmoRehearsalMark');\r\n }\r\n getRehearsalMark(): SmoMeasureModifierBase | undefined {\r\n return this.modifiers.find(obj => obj.attrs.type === 'SmoRehearsalMark');\r\n }\r\n getModifiersByType(type: string) {\r\n return this.modifiers.filter((mm) => type === mm.attrs.type);\r\n }\r\n\r\n setTempo(params: SmoTempoTextParams) {\r\n this.tempo = new SmoTempoText(params);\r\n }\r\n /**\r\n * Set measure tempo to the default {@link SmoTempoText}\r\n */\r\n resetTempo() {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n getTempo() {\r\n if (typeof (this.tempo) === 'undefined') {\r\n this.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n return this.tempo;\r\n }\r\n /**\r\n * Measure text is deprecated, and may not be supported in the future.\r\n * Better to use SmoTextGroup and attach to the measure.\r\n * @param mod \r\n * @returns \r\n */\r\n addMeasureText(mod: SmoMeasureModifierBase) {\r\n var exist = this.modifiers.filter((mm) =>\r\n mm.attrs.id === mod.attrs.id\r\n );\r\n if (exist.length) {\r\n return;\r\n }\r\n this.modifiers.push(mod);\r\n }\r\n\r\n getMeasureText() {\r\n return this.modifiers.filter(obj => obj.ctor === 'SmoMeasureText');\r\n }\r\n\r\n removeMeasureText(id: string) {\r\n var ar = this.modifiers.filter(obj => obj.attrs.id !== id);\r\n this.modifiers = ar;\r\n }\r\n\r\n setRepeatSymbol(rs: SmoRepeatSymbol) {\r\n const ar: SmoMeasureModifierBase[] = [];\r\n let toAdd = true;\r\n const exSymbol = this.getRepeatSymbol();\r\n if (exSymbol && exSymbol.symbol === rs.symbol) {\r\n toAdd = false;\r\n }\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoRepeatSymbol') {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n if (toAdd) {\r\n ar.push(rs);\r\n }\r\n }\r\n getRepeatSymbol(): SmoRepeatSymbol | null {\r\n const rv = this.modifiers.filter(obj => obj.ctor === 'SmoRepeatSymbol');\r\n if (rv.length > 0) {\r\n return rv[0] as SmoRepeatSymbol;\r\n }\r\n return null;\r\n }\r\n clearRepeatSymbols() {\r\n const ar: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoRepeatSymbol') {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n }\r\n\r\n setBarline(barline: SmoBarline) {\r\n var ar: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoBarline') {\r\n const o = modifier as SmoBarline;\r\n if (o.position !== barline.position) {\r\n ar.push(o);\r\n }\r\n } else {\r\n ar.push(modifier);\r\n }\r\n });\r\n this.modifiers = ar;\r\n ar.push(barline);\r\n }\r\n\r\n private _getBarline(pos: number): SmoBarline {\r\n let rv = null;\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoBarline' && (modifier as SmoBarline).position === pos) {\r\n rv = modifier;\r\n }\r\n });\r\n if (rv === null) {\r\n return new SmoBarline(SmoBarline.defaults);\r\n }\r\n return rv;\r\n }\r\n\r\n getEndBarline(): SmoBarline { \r\n return this._getBarline(SmoBarline.positions.end);\r\n }\r\n getStartBarline(): SmoBarline {\r\n return this._getBarline(SmoBarline.positions.start);\r\n }\r\n\r\n addNthEnding(ending: SmoVolta) {\r\n const mods = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor !== 'SmoVolta' || (modifier as SmoVolta).startBar !== ending.startBar ||\r\n (modifier as SmoVolta).endBar !== ending.endBar) {\r\n mods.push(modifier);\r\n }\r\n });\r\n mods.push(ending);\r\n this.modifiers = mods;\r\n }\r\n\r\n removeNthEnding(ending: SmoVolta) {\r\n const mods: SmoMeasureModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.ctor === 'SmoVolta') {\r\n const volta = modifier as SmoVolta;\r\n if (ending.startSelector === null || ending.endSelector === null || volta.startSelector === null || volta.endSelector === null) {\r\n return;\r\n }\r\n if (!SmoSelector.sameMeasure(ending.startSelector, volta.startSelector) || !SmoSelector.sameMeasure(ending.endSelector, volta.endSelector)\r\n && ending.number !== volta.number) {\r\n mods.push(modifier);\r\n }\r\n } else {\r\n mods.push(modifier);\r\n }\r\n });\r\n this.modifiers = mods;\r\n }\r\n\r\n getNthEndings(): SmoVolta[] {\r\n const rv: SmoVolta[] = [];\r\n this.modifiers.forEach((modifier: SmoMeasureModifierBase) => {\r\n if (modifier.ctor === 'SmoVolta') {\r\n rv.push(modifier as SmoVolta);\r\n }\r\n });\r\n return rv;\r\n }\r\n setKeySignature(sig: string) {\r\n this.keySignature = sig;\r\n this.voices.forEach((voice) => {\r\n voice.notes.forEach((note) => {\r\n note.keySignature = sig;\r\n });\r\n });\r\n }\r\n setMeasureNumber(num: MeasureNumber) {\r\n this.measureNumber = num;\r\n }\r\n getBeamGroupForNote(note: SmoNote) {\r\n let i = 0;\r\n let j = 0;\r\n for (i = 0; i < this.beamGroups.length; ++i) {\r\n const bg = this.beamGroups[i];\r\n for (j = 0; j < bg.notes.length; ++j) {\r\n if (bg.notes[j].attrs.id === note.attrs.id) {\r\n return bg;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * @module /smo/data/measureModifiers\r\n * **/\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMusic } from './music';\r\nimport { SmoAttrs, MeasureNumber, SmoObjectParams, SvgBox, SmoModifierBase, getId } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\n\r\n/**\r\n * Measure modifiers are attached to the measure itself. Each instance has a\r\n * `serialize()` method and a `ctor` attribute for deserialization.\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoMeasureModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n logicalBox: SvgBox | null = null;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n static deserialize(jsonObj: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n abstract serialize(): any;\r\n}\r\n\r\nexport type SmoMeasureFormatNumberAttributes = 'customStretch' | 'proportionality' | 'padLeft' | 'measureIndex';\r\nexport const SmoMeasureFormatNumberKeys: SmoMeasureFormatNumberAttributes[] =\r\n ['customStretch', 'proportionality', 'padLeft', 'measureIndex'];\r\nexport type SmoMeasueFormatBooleanAttributes = 'autoJustify' | 'systemBreak' | 'skipMeasureCount' | 'pageBreak' | 'padAllInSystem' | 'restBreak' | 'forceRest';\r\nexport const SmoMeasureFormatBooleanKeys: SmoMeasueFormatBooleanAttributes[] = ['autoJustify','skipMeasureCount', 'systemBreak', 'pageBreak', 'padAllInSystem', 'restBreak', 'forceRest'];\r\n/**\r\n * Constructor parameter for measure formatting object\r\n */\r\nexport interface SmoMeasureFormatParams {\r\n /**\r\n * additional pixels to a measure (plus or minus)\r\n */\r\n customStretch: number | null,\r\n /**\r\n * softmax factor, controls how tightly rhythms are formatted\r\n */\r\n proportionality: number | null,\r\n /**\r\n * break justification for this column\r\n */\r\n autoJustify: boolean | null,\r\n /**\r\n * create a new system before this measure\r\n */\r\n systemBreak: boolean | null,\r\n /**\r\n * create a new system before this page\r\n */\r\n pageBreak: boolean | null,\r\n /**\r\n * force a break in multi-measure rest\r\n */\r\n restBreak: boolean | null,\r\n /**\r\n * treat this measure like a whole rest\r\n */\r\n forceRest: boolean | null,\r\n /**\r\n * if score is grouping measures per system, skip this measure in the count\r\n * (used for short measures, or pickups)\r\n */\r\n skipMeasureCount: boolean | null,\r\n /**\r\n * pad left, e.g. for the first stave in a system\r\n */\r\n padLeft: number | null,\r\n /**\r\n * if padding left, pad all the measures in the column\r\n */\r\n padAllInSystem: boolean | null,\r\n /**\r\n * renumber measures\r\n */\r\n measureIndex: number | null,\r\n}\r\n/**\r\n * Serialization for measure formatting customization, like system break\r\n * @category serialization\r\n */\r\nexport interface SmoMeasureFormatParamsSer extends SmoMeasureFormatParams{\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string\r\n }\r\n function isSmoMeasureParamsSer(params: Partial):params is SmoMeasureFormatParamsSer {\r\n return typeof(params.ctor) === 'string';\r\n }\r\n/**\r\n * ISmoMeasureFormatMgr is the DI interface to the\r\n * format manager. Measure formats are often the same to multiple measures\r\n * so we don't serialize each one - instead we map them with this interface\r\n */\r\nexport interface ISmoMeasureFormatMgr {\r\n format: SmoMeasureFormatParams,\r\n measureNumber: MeasureNumber\r\n}\r\n/**\r\n * Measure format holds parameters about the automatic formatting of the measure itself, such as the witch and\r\n * how the durations are proportioned. Note that measure formatting is also controlled by the justification\r\n * between voices and staves. For instance, 2 measures in different staves will have to have the same width\r\n * @category SmoModifier\r\n */\r\nexport class SmoMeasureFormat extends SmoMeasureModifierBase implements SmoMeasureFormatParams {\r\n static get attributes() {\r\n return ['customStretch', 'proportionality', 'autoJustify', 'systemBreak', 'pageBreak', \r\n 'padLeft', 'measureIndex', 'padAllInSystem', 'skipMeasureCount', 'restBreak', 'forceRest'];\r\n }\r\n static get formatAttributes() {\r\n return ['customStretch', 'skipMeasureCount', 'proportionality', 'autoJustify', 'systemBreak', 'pageBreak', 'padLeft'];\r\n }\r\n static get defaultProportionality() {\r\n return 0;\r\n }\r\n static get legacyProportionality() {\r\n return 0;\r\n }\r\n static fromLegacyMeasure(measure: any) {\r\n const o: any = {};\r\n SmoMeasureFormat.formatAttributes.forEach((attr: string | number) => {\r\n if (typeof (measure[attr]) !== 'undefined') {\r\n o[attr] = measure[attr];\r\n } else {\r\n const rhs = (SmoMeasureFormat.defaults as any)[attr];\r\n o[attr] = rhs;\r\n }\r\n o.measureIndex = measure.measureNumber.measureIndex;\r\n });\r\n return new SmoMeasureFormat(o);\r\n }\r\n static get defaults(): SmoMeasureFormatParams {\r\n return JSON.parse(JSON.stringify({\r\n customStretch: 0,\r\n proportionality: SmoMeasureFormat.defaultProportionality,\r\n systemBreak: false,\r\n pageBreak: false,\r\n restBreak: false,\r\n forceRest: false,\r\n padLeft: 0,\r\n padAllInSystem: true,\r\n skipMeasureCount: false,\r\n autoJustify: true,\r\n measureIndex: 0,\r\n }));\r\n }\r\n customStretch: number = SmoMeasureFormat.defaultProportionality;\r\n proportionality: number = 0;\r\n systemBreak: boolean = false;\r\n pageBreak: boolean = false;\r\n restBreak: boolean = false;\r\n skipMeasureCount: boolean = false;\r\n forceRest: boolean = false;\r\n padLeft: number = 0;\r\n padAllInSystem: boolean = true;\r\n autoJustify: boolean = true;\r\n measureIndex: number = 0;\r\n eq(o: SmoMeasureFormatParams) {\r\n let rv = true;\r\n SmoMeasureFormatBooleanKeys.forEach((attr) => {\r\n if (o[attr] !== this[attr]) {\r\n rv = false;\r\n }\r\n });\r\n SmoMeasureFormatNumberKeys.forEach((attr) => {\r\n if (o[attr] !== this[attr] && attr !== 'measureIndex') {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n get isDefault() {\r\n return this.eq(SmoMeasureFormat.defaults);\r\n }\r\n constructor(parameters: SmoMeasureFormatParams) {\r\n super('SmoMeasureFormat');\r\n const def = SmoMeasureFormat.defaults;\r\n SmoMeasureFormatNumberKeys.forEach((param) => {\r\n this[param] = parameters[param] ? parameters[param] : (def as any)[param];\r\n });\r\n SmoMeasureFormatBooleanKeys.forEach((param) => {\r\n this[param] = parameters[param] ? parameters[param] : (def as any)[param];\r\n });\r\n }\r\n formatMeasure(mm: ISmoMeasureFormatMgr) {\r\n mm.format = new SmoMeasureFormat(this);\r\n mm.format.measureIndex = mm.measureNumber.measureIndex;\r\n }\r\n serialize(): SmoMeasureFormatParamsSer {\r\n const params: Partial = { ctor: 'SmoMeasureFormat' };\r\n smoSerialize.serializedMergeNonDefault(SmoMeasureFormat.defaults, SmoMeasureFormat.attributes, this, params);\r\n if (!isSmoMeasureParamsSer(params)) {\r\n throw('bad type SmoMeasureFormatParamsSer');\r\n }\r\n return params;\r\n }\r\n}\r\n/**\r\n * Used to create a {@link SmoBarline}\r\n */\r\nexport interface SmoBarlineParams {\r\n position: number | null,\r\n barline: number | null\r\n}\r\n\r\nexport interface SmoBarlineParamsSer extends SmoBarlineParams {\r\n ctor: string,\r\n position: number | null,\r\n barline: number | null\r\n}\r\n/**\r\n * Barline is just that, there is a start and end in each measure, which defaults to 'single'.\r\n * @category SmoModifier\r\n */\r\nexport class SmoBarline extends SmoMeasureModifierBase {\r\n static readonly positions: Record = {\r\n start: 0,\r\n end: 1\r\n };\r\n\r\n static readonly barlines: Record = {\r\n singleBar: 0,\r\n doubleBar: 1,\r\n endBar: 2,\r\n startRepeat: 3,\r\n endRepeat: 4,\r\n noBar: 5\r\n }\r\n\r\n static get _barlineToString() {\r\n return ['singleBar', 'doubleBar', 'endBar', 'startRepeat', 'endRepeat', 'noBar'];\r\n }\r\n static barlineString(inst: SmoBarline) {\r\n return SmoBarline._barlineToString[inst.barline];\r\n }\r\n\r\n static get defaults(): SmoBarlineParams {\r\n return JSON.parse(JSON.stringify({\r\n position: SmoBarline.positions.end,\r\n barline: SmoBarline.barlines.singleBar\r\n }));\r\n }\r\n\r\n static get attributes() {\r\n return ['position', 'barline'];\r\n }\r\n serialize(): SmoBarlineParamsSer {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoBarline.defaults, SmoBarline.attributes, this, params);\r\n params.ctor = 'SmoBarline';\r\n return params;\r\n }\r\n constructor(parameters: SmoBarlineParams | null) {\r\n super('SmoBarline');\r\n let ops = parameters as any;\r\n if (typeof (parameters) === 'undefined' || parameters === null) {\r\n ops = {};\r\n }\r\n smoSerialize.serializedMerge(SmoBarline.attributes, SmoBarline.defaults, this);\r\n smoSerialize.serializedMerge(SmoBarline.attributes, ops, this);\r\n }\r\n barline: number = SmoBarline.barlines.singleBar;\r\n position: number = SmoBarline.positions.start;\r\n}\r\n\r\n/**\r\n * Constructor for SmoRepeatSymbol\r\n */\r\nexport interface SmoRepeatSymbolParams {\r\n /**\r\n * The symbol enumeration\r\n */\r\n symbol: number,\r\n /**\r\n * x offset for DC, sign etc.\r\n */\r\n xOffset: number,\r\n /**\r\n * y offset for DC, sign etc.\r\n */\r\n yOffset: number,\r\n /**\r\n * position, above or below\r\n */\r\n position: number\r\n}\r\n\r\n/**\r\n * @category serialization\r\n */\r\nexport interface SmoRepeatSymbolParamsSer extends SmoRepeatSymbolParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string\r\n}\r\nfunction isSmoRepeatSymbolParamsSer(params: Partial):params is SmoRepeatSymbolParamsSer {\r\n return typeof(params.ctor) === 'string' && params.ctor === 'SmoRepeatSymbol';\r\n }\r\n/**\r\n * Repeat symbols like DC, Fine etc. Note: voltas are their own thing,\r\n * and repeats are types of barlines.\r\n * @category SmoModifier\r\n */\r\nexport class SmoRepeatSymbol extends SmoMeasureModifierBase {\r\n static readonly symbols: Record = {\r\n None: 0,\r\n Coda: 1,\r\n Segno: 2,\r\n Dc: 3,\r\n ToCoda: 10,\r\n DcAlCoda: 4,\r\n DcAlFine: 5,\r\n Ds: 6,\r\n DsAlCoda: 7,\r\n DsAlFine: 8,\r\n Fine: 9\r\n }\r\n static readonly _repeatSymbolStrings = ['None', 'Coda', 'Segno', 'Dc', 'ToCoda', 'DcAlCode', 'DcAlFine',\r\n 'Ds', 'DsAlCoda', 'DsAlFine', 'Fine'\r\n ];\r\n static repeatSymbolString(symbol: SmoRepeatSymbol): string {\r\n return SmoRepeatSymbol._repeatSymbolStrings[symbol.symbol];\r\n }\r\n static readonly defaultXOffset: number[] = [0, 0, 0, -20, -60, -60, -50, -60, -50, -40]\r\n \r\n static readonly positions: Record = {\r\n start: 0,\r\n end: 1\r\n }\r\n static get defaults(): SmoRepeatSymbolParams {\r\n return JSON.parse(JSON.stringify({\r\n symbol: SmoRepeatSymbol.symbols.Coda,\r\n xOffset: 0,\r\n yOffset: 30,\r\n position: SmoRepeatSymbol.positions.end\r\n }));\r\n }\r\n static get attributes() {\r\n return ['symbol', 'xOffset', 'yOffset', 'position'];\r\n }\r\n symbol: number = SmoRepeatSymbol.symbols.Coda;\r\n xOffset: number = 0;\r\n yOffset: number = 30;\r\n position: number = SmoRepeatSymbol.positions.end;\r\n\r\n serialize(): SmoRepeatSymbolParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoRepeatSymbol.defaults, SmoRepeatSymbol.attributes, this, params);\r\n params.ctor = 'SmoRepeatSymbol';\r\n if (!isSmoRepeatSymbolParamsSer(params)) {\r\n throw 'bad type SmoRepeatSymbolParamsSer';\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoRepeatSymbolParams) {\r\n super('SmoRepeatSymbol');\r\n if (!parameters.symbol) {\r\n parameters.symbol = SmoRepeatSymbol.symbols.Coda;\r\n }\r\n smoSerialize.serializedMerge(SmoRepeatSymbol.attributes, SmoRepeatSymbol.defaults, this);\r\n this.xOffset = SmoRepeatSymbol.defaultXOffset[parameters.symbol];\r\n smoSerialize.serializedMerge(SmoRepeatSymbol.attributes, parameters, this);\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link SmoVolta} (2nd ending)\r\n * @category SmoParameters\r\n */\r\nexport interface SmoVoltaParams {\r\n /**\r\n * start bar of ending\r\n */\r\n startBar: number,\r\n /**\r\n * end bar (how long it stretches)\r\n */\r\n endBar: number,\r\n /**\r\n * xoffset for start, for collisions\r\n */\r\n xOffsetStart: number,\r\n /**\r\n * xoffset for end, for collisions\r\n */\r\n xOffsetEnd: number,\r\n /**\r\n * yOffset, for collisions\r\n */\r\n yOffset: number,\r\n /**\r\n * 2nd ending, 3rd etc.\r\n */\r\n number: number\r\n}\r\n/**\r\n * serializable bits of volta/endings\r\n * @category serialization\r\n */\r\nexport interface SmoVoltaParamsSer extends SmoVoltaParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Voltas (2nd endings) behave more like staff modifiers, but they are associated with the measure\r\n * since each measure has it's own rules for displaying part of the volta.\r\n * @category SmoModifier\r\n */\r\nexport class SmoVolta extends SmoMeasureModifierBase {\r\n startBar: number = 1;\r\n endBar: number = 1;\r\n xOffsetStart: number = 0;\r\n xOffsetEnd: number = 0;\r\n yOffset: number = 20;\r\n number: number = 1;\r\n endingId: string | null = null;\r\n startSelector: SmoSelector | null = null;\r\n endSelector: SmoSelector | null = null;\r\n elements: SVGSVGElement[] = [];\r\n constructor(parameters: SmoVoltaParams) {\r\n super('SmoVolta');\r\n smoSerialize.serializedMerge(SmoVolta.attributes, SmoVolta.defaults, this);\r\n smoSerialize.serializedMerge(SmoVolta.attributes, parameters, this);\r\n }\r\n get id() {\r\n return this.attrs.id;\r\n }\r\n get type() {\r\n return this.attrs.type;\r\n }\r\n static get attributes() {\r\n return ['startBar', 'endBar', 'endingId', 'startSelector', 'endSelector', 'xOffsetStart', 'xOffsetEnd', 'yOffset', 'number'];\r\n }\r\n static get editableAttributes() {\r\n return ['xOffsetStart', 'xOffsetEnd', 'yOffset', 'number'];\r\n }\r\n\r\n serialize(): SmoVoltaParamsSer {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoVolta.defaults, SmoVolta.attributes, this, params);\r\n params.ctor = 'SmoVolta';\r\n return params;\r\n }\r\n static get defaults(): SmoVoltaParams {\r\n return JSON.parse(JSON.stringify({\r\n startBar: 1,\r\n endBar: 1,\r\n xOffsetStart: 0,\r\n xOffsetEnd: 0,\r\n yOffset: 20,\r\n number: 1\r\n }));\r\n }\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoMeasureText}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoMeasureTextParams {\r\n position: number,\r\n fontInfo: FontInfo,\r\n text: string,\r\n adjustX: number,\r\n adjustY: number,\r\n justification: number\r\n}\r\n/**\r\n * Serialized fields of SmoMeasureTextParams\r\n */\r\nexport interface SmoMeasureTextParamsSer extends SmoMeasureTextParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string\r\n}\r\n/**\r\n * Measure text is just that. Now that score text can be associated with musical elements, this\r\n * class has falled into disrepair. It may be used for part notations in the score later.\r\n * @category SmoModifier\r\n */\r\nexport class SmoMeasureText extends SmoMeasureModifierBase {\r\n static readonly positions: Record = {\r\n above: 0, below: 1, left: 2, right: 3, none: 4\r\n }\r\n\r\n static readonly justifications: Record = {\r\n left: 0, right: 1, center: 2\r\n }\r\n\r\n static readonly _positionToString: string[] = ['above', 'below', 'left', 'right']\r\n\r\n static get attributes() {\r\n return ['position', 'fontInfo', 'text', 'adjustX', 'adjustY', 'justification'];\r\n }\r\n\r\n static readonly defaults: SmoMeasureTextParams = {\r\n position: SmoMeasureText.positions.above,\r\n fontInfo: {\r\n size: 9,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n text: 'Smo',\r\n adjustX: 0,\r\n adjustY: 0,\r\n justification: SmoMeasureText.justifications.center\r\n }\r\n justification: number = SmoMeasureText.justifications.center;\r\n position: number = SmoMeasureText.positions.above;\r\n text: string = '';\r\n adjustX: number = 0;\r\n adjustY: number = 0;\r\n fontInfo: FontInfo = {\r\n size: 9,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n serialize(): SmoMeasureTextParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoMeasureText.defaults, SmoMeasureText.attributes, this, params);\r\n params.ctor = 'SmoMeasureText';\r\n return params as SmoMeasureTextParamsSer; // trivial class, no 'is'\r\n }\r\n constructor(parameters: SmoMeasureTextParams | null) {\r\n super('SmoMeasureText');\r\n let pobj = parameters as any;\r\n if (pobj === null) {\r\n pobj = SmoMeasureText.defaults;\r\n }\r\n smoSerialize.serializedMerge(SmoMeasureText.attributes, SmoMeasureText.defaults, this);\r\n smoSerialize.serializedMerge(SmoMeasureText.attributes, pobj, this);\r\n\r\n // right-justify left text and left-justify right text by default\r\n if (!pobj.justification) {\r\n // eslint-disable-next-line\r\n this.justification = (this.position === SmoMeasureText.positions.left) ? SmoMeasureText.justifications.right :\r\n (this.position === SmoMeasureText.positions.right ? SmoMeasureText.justifications.left : this.justification);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Used to construct {@link SmoRehearsalMark}\r\n * @category SmoParams\r\n * */\r\nexport interface SmoRehearsalMarkParams {\r\n /**\r\n * cardinal position\r\n */\r\n position: number,\r\n /**\r\n * Symbol. by default, letters that auto-increment\r\n */\r\n symbol: string,\r\n /**\r\n * future, define how increment works\r\n */\r\n cardinality: string,\r\n /**\r\n * disable to make your own symbols for each new one.\r\n */\r\n increment: boolean\r\n}\r\n\r\n/**\r\n * Serialized fields for rehearsal mark\r\n * @category serialization\r\n */\r\nexport interface SmoRehearsalMarkParamsSer extends SmoRehearsalMarkParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Rehearsal marks are some type of auto-incrementing markers on a measure index.\r\n * @category SmoModifier\r\n */\r\nexport class SmoRehearsalMark extends SmoMeasureModifierBase {\r\n static readonly cardinalities: Record = {\r\n capitals: 'capitals', lowerCase: 'lowerCase', numbers: 'numbers'\r\n }\r\n static readonly positions: Record = {\r\n above: 0, below: 1, left: 2, right: 3\r\n }\r\n\r\n static get _positionToString(): string[] {\r\n return ['above', 'below', 'left', 'right'];\r\n }\r\n\r\n // TODO: positions don't work.\r\n static get defaults(): SmoRehearsalMarkParams {\r\n return JSON.parse(JSON.stringify({\r\n position: SmoRehearsalMark.positions.above,\r\n cardinality: SmoRehearsalMark.cardinalities.capitals,\r\n symbol: 'A',\r\n increment: true\r\n }));\r\n }\r\n static get attributes() {\r\n return ['cardinality', 'symbol', 'position', 'increment'];\r\n }\r\n position: number = SmoRehearsalMark.positions.above;\r\n cardinality: string = SmoRehearsalMark.cardinalities.capitals;\r\n symbol: string = 'A';\r\n increment: boolean = true;\r\n\r\n getIncrement() {\r\n if (this.cardinality !== 'number') {\r\n const code = this.symbol.charCodeAt(0) + 1;\r\n const symbol = String.fromCharCode(code);\r\n return symbol;\r\n } else {\r\n return (parseInt(this.symbol, 10) + 1).toString();\r\n }\r\n }\r\n getInitial() {\r\n // eslint-disable-next-line\r\n return this.cardinality === SmoRehearsalMark.cardinalities.capitals ? 'A' :\r\n (this.cardinality === SmoRehearsalMark.cardinalities.lowerCase ? 'a' : '1');\r\n }\r\n serialize(): SmoRehearsalMarkParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoRehearsalMark.defaults, SmoRehearsalMark.attributes, this, params);\r\n params.ctor = 'SmoRehearsalMark';\r\n return params as SmoRehearsalMarkParamsSer;\r\n }\r\n constructor(parameters: SmoRehearsalMarkParams) {\r\n super('SmoRehearsalMark');\r\n let pobj = parameters;\r\n if (typeof (pobj) === 'undefined' || pobj === null) {\r\n pobj = SmoRehearsalMark.defaults;\r\n }\r\n smoSerialize.serializedMerge(SmoRehearsalMark.attributes, SmoRehearsalMark.defaults, this);\r\n smoSerialize.serializedMerge(SmoRehearsalMark.attributes, pobj, this);\r\n if (!pobj.symbol) {\r\n this.symbol = this.getInitial();\r\n }\r\n }\r\n}\r\n\r\nexport type SmoTempoNumberAttribute = 'bpm' | 'beatDuration' | 'yOffset';\r\nexport type SmoTempoStringAttribute = 'tempoMode' | 'tempoText' | 'customText';\r\nexport type SmoTempoBooleanAttribute = 'display';\r\n\r\nexport type SmoTempoMode = 'duration' | 'text' | 'custom';\r\n/**\r\n * constructor parameters for {@link SmoTempoText}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTempoTextParams {\r\n /**\r\n * text (e.g. Allegro) or bpm\r\n */\r\n tempoMode: string,\r\n /**\r\n * playback bpm\r\n */\r\n bpm: number,\r\n /**\r\n * note type for a metronome beat\r\n */\r\n beatDuration: number,\r\n /**\r\n * if text mode, the text\r\n */\r\n tempoText: string,\r\n /**\r\n * move the text to keep it from colliding with other things\r\n */\r\n yOffset: number,\r\n /**\r\n * indicate if we are displaying, false if only affects playback\r\n */\r\n display: boolean,\r\n /**\r\n * text taht is not a standards notation\r\n */\r\n customText: string\r\n}\r\n/**\r\n * serialized tempo parameters\r\n * @category serialization\r\n */\r\nexport interface SmoTempoTextParamsSer extends SmoTempoTextParams {\r\n ctor: string;\r\n}\r\nexport interface VexTempoTextParams {\r\n duration?: string, dots?: number, bpm?: number, name?: string \r\n}\r\n\r\n/**\r\n * Information about both playback tempo and how the tempo is notated.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTempoText extends SmoMeasureModifierBase implements SmoTempoTextParams {\r\n static get tempoModes(): Record {\r\n return {\r\n durationMode: 'duration',\r\n textMode: 'text',\r\n customMode: 'custom'\r\n };\r\n }\r\n static get tempoTexts(): Record {\r\n return {\r\n larghissimo: 'Larghissimo',\r\n grave: 'Grave',\r\n lento: 'Lento',\r\n largo: 'Largo',\r\n larghetto: 'Larghetto',\r\n adagio: 'Adagio',\r\n adagietto: 'Adagietto',\r\n andante_moderato: 'Andante moderato',\r\n andante: 'Andante',\r\n andantino: 'Andantino',\r\n moderator: 'Moderato',\r\n allegretto: 'Allegretto',\r\n allegro: 'Allegro',\r\n vivace: 'Vivace',\r\n presto: 'Presto',\r\n prestissimo: 'Prestissimo'\r\n };\r\n }\r\n\r\n /**\r\n * create defaults for tempo initialization\r\n */\r\n static get defaults(): SmoTempoTextParams {\r\n return JSON.parse(JSON.stringify({\r\n tempoMode: SmoTempoText.tempoModes.durationMode,\r\n bpm: 120,\r\n beatDuration: 4096,\r\n tempoText: SmoTempoText.tempoTexts.allegro,\r\n yOffset: 0,\r\n display: false,\r\n customText: ''\r\n }));\r\n }\r\n static get attributes() {\r\n return ['tempoMode', 'bpm', 'display', 'beatDuration', 'tempoText', 'yOffset', 'customText'];\r\n }\r\n tempoMode: SmoTempoMode = SmoTempoText.tempoModes.durationMode\r\n bpm: number = 120;\r\n beatDuration: number = 4096;\r\n tempoText: string = 'Allegro';\r\n yOffset: number = 0;\r\n display: boolean = false;\r\n customText: string = '';\r\n\r\n _toVexTextTempo(): VexTempoTextParams {\r\n return { name: this.tempoText };\r\n }\r\n\r\n /**\r\n * Return equality wrt the tempo marking, e.g. 2 allegro in textMode will be equal but\r\n * an allegro and duration 120bpm will not.\r\n * @param t1 \r\n * @param t2 \r\n * @returns \r\n */\r\n static eq(t1: SmoTempoText, t2: SmoTempoText) {\r\n if (t1.tempoMode !== t2.tempoMode) {\r\n return false;\r\n }\r\n if (t1.tempoMode === SmoTempoText.tempoModes.durationMode) {\r\n return t1.bpm === t2.bpm && t1.beatDuration === t2.beatDuration;\r\n }\r\n if (t1.tempoMode === SmoTempoText.tempoModes.textMode) {\r\n return t1.tempoText === t2.tempoText;\r\n } else {\r\n return t1.bpm === t2.bpm && t1.beatDuration === t2.beatDuration &&\r\n t1.tempoText === t2.tempoText;\r\n }\r\n }\r\n\r\n static get bpmFromText(): Record {\r\n const rv: any = {};\r\n rv[SmoTempoText.tempoTexts.larghissimo] = 24;\r\n rv[SmoTempoText.tempoTexts.grave] = 40;\r\n rv[SmoTempoText.tempoTexts.lento] = 45;\r\n rv[SmoTempoText.tempoTexts.largo] = 40;\r\n rv[SmoTempoText.tempoTexts.larghetto] = 60;\r\n rv[SmoTempoText.tempoTexts.adagio] = 72;\r\n rv[SmoTempoText.tempoTexts.adagietto] = 72;\r\n rv[SmoTempoText.tempoTexts.andante_moderato] = 72;\r\n rv[SmoTempoText.tempoTexts.andante] = 84;\r\n rv[SmoTempoText.tempoTexts.andantino] = 92;\r\n rv[SmoTempoText.tempoTexts.moderator] = 96;\r\n rv[SmoTempoText.tempoTexts.allegretto] = 96;\r\n rv[SmoTempoText.tempoTexts.allegro] = 120;\r\n rv[SmoTempoText.tempoTexts.vivace] = 144;\r\n rv[SmoTempoText.tempoTexts.presto] = 168;\r\n rv[SmoTempoText.tempoTexts.prestissimo] = 240;\r\n\r\n return rv as Record;\r\n }\r\n\r\n _toVexDurationTempo(): VexTempoTextParams {\r\n var vd = SmoMusic.ticksToDuration[this.beatDuration];\r\n var dots = (vd.match(/d/g) || []).length;\r\n vd = vd.replace(/d/g, '');\r\n const rv: any = { duration: vd, dots, bpm: this.bpm };\r\n if (this.customText.length) {\r\n rv.name = this.customText;\r\n }\r\n return rv;\r\n }\r\n toVexTempo(): VexTempoTextParams {\r\n if (this.tempoMode === SmoTempoText.tempoModes.durationMode ||\r\n this.tempoMode === SmoTempoText.tempoModes.customMode) {\r\n return this._toVexDurationTempo();\r\n }\r\n return this._toVexTextTempo();\r\n }\r\n serialize(): SmoTempoTextParamsSer {\r\n var params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoTempoText.defaults, SmoTempoText.attributes, this, params);\r\n params.ctor = 'SmoTempoText';\r\n return params as SmoTempoTextParamsSer;\r\n }\r\n constructor(parameters: SmoTempoTextParams | null) {\r\n super('SmoTempoText');\r\n let pobj: any = parameters;\r\n if (typeof (pobj) === 'undefined' || pobj === null) {\r\n pobj = {};\r\n }\r\n smoSerialize.serializedMerge(SmoTempoText.attributes, SmoTempoText.defaults, this);\r\n smoSerialize.serializedMerge(SmoTempoText.attributes, pobj, this);\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for a time signature\r\n * @category SmoParameters\r\n */\r\nexport interface TimeSignatureParameters {\r\n /**\r\n * numerator\r\n */\r\n actualBeats: number,\r\n /**\r\n * denominator, always power of 2\r\n */\r\n beatDuration: number,\r\n /**\r\n * indicates cut time/common time\r\n */\r\n useSymbol: boolean,\r\n /**\r\n * display, else just affects measure lengths.\r\n */\r\n display: boolean,\r\n /**\r\n * for pickups, display the non-pickup value\r\n */\r\n displayString: string\r\n}\r\n\r\n/**\r\n * serialized time signature\r\n * @category serialization\r\n */\r\nexport interface TimeSignatureParametersSer extends TimeSignatureParameters {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n/**\r\n * Time signatures contain duration information for a measure, and information\r\n * about the display of the time signature.\r\n * @category SmoModifier\r\n */\r\nexport class TimeSignature extends SmoMeasureModifierBase {\r\n static get defaults(): TimeSignatureParameters {\r\n return {\r\n actualBeats: 4,\r\n beatDuration: 4,\r\n useSymbol: false,\r\n display: true,\r\n displayString: ''\r\n };\r\n }\r\n static equal(ts1: TimeSignature, ts2: TimeSignature): boolean {\r\n return (ts1.actualBeats === ts2.actualBeats && ts1.beatDuration === ts2.beatDuration);\r\n }\r\n static createFromPartial(value: Partial) {\r\n const params = TimeSignature.defaults;\r\n smoSerialize.serializedMerge(TimeSignature.parameters, value, params);\r\n return new TimeSignature(params);\r\n }\r\n // timeSignature: string = '4/4';\r\n actualBeats: number = 4;\r\n beatDuration: number = 4;\r\n useSymbol: boolean = false;\r\n display: boolean = true;\r\n displayString: string = '';\r\n get timeSignature() {\r\n return this.actualBeats.toString() + '/' + this.beatDuration.toString();\r\n }\r\n static get parameters() {\r\n return ['actualBeats', 'beatDuration', 'useSymbol', 'display', 'displayString'];\r\n }\r\n static get boolParameters() {\r\n return [];\r\n }\r\n set timeSignature(value: string) {\r\n const ar = value.split('/');\r\n this.actualBeats = parseInt(ar[0], 10);\r\n this.beatDuration = parseInt(ar[1], 10);\r\n }\r\n serialize(): TimeSignatureParametersSer {\r\n const rv: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(TimeSignature.defaults, TimeSignature.parameters, this, rv);\r\n rv.ctor = 'TimeSignature';\r\n return rv as TimeSignatureParametersSer;\r\n }\r\n constructor(params: TimeSignatureParameters) {\r\n super('TimeSignature');\r\n this.actualBeats = params.actualBeats;\r\n this.beatDuration = params.beatDuration;\r\n this.useSymbol = params.useSymbol;\r\n this.display = params.display;\r\n this.displayString = params.displayString;\r\n }\r\n}\r\n\r\n","/**\r\n * shared music theory and audio frequency routines, helper functions etc.\r\n * @module /smo/data/music\r\n */\r\n\r\n// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoNote } from './note';\r\nimport { Pitch, PitchKey, Clef, PitchLetter, TickAccidental, \r\n AccidentalArray, AccidentalDisplay } from './common';\r\nimport { SmoMicrotone } from './noteModifiers';\r\nimport { VexFlow, pitchToLedgerLine, vexCanonicalNotes } from '../../common/vex';\r\n\r\n/**\r\n * Used for xml clef conversion\r\n */\r\nexport interface ClefSign {\r\n sign: string,\r\n line?: number,\r\n octave?: number\r\n}\r\n\r\n/**\r\n * calculate the pitch frequency, just temperment a=440, etc.\r\n * @category SmoUtilities\r\n */\r\nexport class SmoAudioPitch {\r\n // ### _frequencies\r\n // Compute the equal-temperment frequencies of the notes.\r\n static _computeFrequencies() {\r\n const map: Record = {};\r\n let lix = 0;\r\n const octaves = [1, 2, 3, 4, 5, 6, 7];\r\n const letters = ['cn', 'c#', 'dn', 'd#', 'en', 'fn', 'f#', 'gn', 'g#', 'an', 'a#', 'bn'];\r\n\r\n const just = Math.pow(2, (1.0 / 12));\r\n const baseFrequency = (440 / 16) * Math.pow(just, 3);\r\n\r\n octaves.forEach((octave) => {\r\n const base = baseFrequency * Math.pow(2, octave - 1);\r\n lix = 0;\r\n letters.forEach((letter) => {\r\n const freq = base * Math.pow(just, lix);\r\n var enharmonics = SmoMusic.getEnharmonics(letter);\r\n enharmonics.forEach((en) => {\r\n // Adjust for B4 higher than C4\r\n const adjOctave = (letter[0] === 'b' && en[0] === 'c') ?\r\n octave + 1 : octave;\r\n map[en + adjOctave.toString()] = freq;\r\n });\r\n lix += 1;\r\n });\r\n });\r\n\r\n return map;\r\n }\r\n static frequencies: Record | null = null;\r\n\r\n static get pitchFrequencyMap() {\r\n if (!SmoAudioPitch.frequencies) {\r\n SmoAudioPitch.frequencies = SmoAudioPitch._computeFrequencies();\r\n }\r\n\r\n return SmoAudioPitch.frequencies;\r\n }\r\n\r\n static _rawPitchToFrequency(smoPitch: Pitch, offset: number): number {\r\n const npitch = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(smoPitch) + offset);\r\n const vx = npitch.letter.toLowerCase() + npitch.accidental + npitch.octave.toString();\r\n return SmoAudioPitch.pitchFrequencyMap[vx];\r\n }\r\n /**\r\n * \r\n * @param smoPitch - pitch from the SMO object\r\n * @param offset - transpose 1/2 steps, 0 means no transpose\r\n * @param tone - optional transpose microtone\r\n * @returns \r\n */\r\n static smoPitchToFrequency(smoPitch: Pitch, offset: number, tone: SmoMicrotone | null) {\r\n let pitchInt = 0;\r\n let rv = SmoAudioPitch._rawPitchToFrequency(smoPitch, offset);\r\n if (tone) {\r\n const coeff = tone.toPitchCoeff;\r\n pitchInt = SmoMusic.smoPitchToInt(smoPitch);\r\n pitchInt += (coeff > 0) ? 1 : -1;\r\n const otherSmo = SmoMusic.smoIntToPitch(pitchInt);\r\n const otherPitch = SmoAudioPitch._rawPitchToFrequency(otherSmo, offset);\r\n rv += Math.abs(rv - otherPitch) * coeff;\r\n }\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * interface for valid non-tuplet duration value (all the\r\n * base note lengths + dots)\r\n */\r\nexport interface SimpleDuration {\r\n index: number, \r\n ticks: number,\r\n baseTicks: number,\r\n dots: number\r\n}\r\n/**\r\n * description of a scale entry, from vex theory routines\r\n */\r\nexport interface VexNoteValue {\r\n root_index: number,\r\n int_val: number\r\n};\r\n/**\r\n * Describe the music theory role of an accidental vs. the key signature. \r\n * Used to determine default enharmonic spelling.\r\n * @category SmoUtilities\r\n */\r\nexport interface KeySignatureRole {\r\n letter: PitchLetter,\r\n accidental: string,\r\n role: string\r\n};\r\n\r\n/**\r\n * Helper functions that build on the VX music theory routines, and other\r\n * utilities I wish were in VF.Music but aren't\r\n * ## Note on pitch and duration format\r\n * We use some VEX music theory routines and frequently need to convert\r\n * formats from SMO format. We also use the same 'ticks' abstraction for\r\n * durations.\r\n * \r\n * `Smo` uses pitch JSON:\r\n * ```javascript\r\n * {note:'c',accidental:'#',octave:4}\r\n * ```\r\n * \r\n * `Vex` usually uses a canonical string:\r\n * \r\n * `'c#/4'`\r\n * \r\n * Depending on the operation, the octave might be omitted\r\n * \r\n * `Smo` uses a JSON for duration always:\r\n * ```javascript\r\n * {numerator:4096,denominator:1,remainder:0}\r\n * ```\r\n * `Vex` uses a letter duration (`'4'` or `'q'`for 1/4 note) and `'d'` for dot.\r\n * \r\n * I try to indicate whether I am using vex or smo notation in the function name.\r\n * Duration methods start around line 1100\r\n * @category SmoUtilities\r\n */\r\nexport class SmoMusic {\r\n /**\r\n * Ported from vex, used to convert pitches to numerical values\r\n * */\r\n static get noteValues(): Record {\r\n return {\r\n c: { root_index: 0, int_val: 0 },\r\n cn: { root_index: 0, int_val: 0 },\r\n 'c#': { root_index: 0, int_val: 1 },\r\n 'c##': { root_index: 0, int_val: 2 },\r\n cb: { root_index: 0, int_val: 11 },\r\n cbb: { root_index: 0, int_val: 10 },\r\n d: { root_index: 1, int_val: 2 },\r\n dn: { root_index: 1, int_val: 2 },\r\n 'd#': { root_index: 1, int_val: 3 },\r\n 'd##': { root_index: 1, int_val: 4 },\r\n db: { root_index: 1, int_val: 1 },\r\n dbb: { root_index: 1, int_val: 0 },\r\n e: { root_index: 2, int_val: 4 },\r\n en: { root_index: 2, int_val: 4 },\r\n 'e#': { root_index: 2, int_val: 5 },\r\n 'e##': { root_index: 2, int_val: 6 },\r\n eb: { root_index: 2, int_val: 3 },\r\n ebb: { root_index: 2, int_val: 2 },\r\n f: { root_index: 3, int_val: 5 },\r\n fn: { root_index: 3, int_val: 5 },\r\n 'f#': { root_index: 3, int_val: 6 },\r\n 'f##': { root_index: 3, int_val: 7 },\r\n fb: { root_index: 3, int_val: 4 },\r\n fbb: { root_index: 3, int_val: 3 },\r\n g: { root_index: 4, int_val: 7 },\r\n gn: { root_index: 4, int_val: 7 },\r\n 'g#': { root_index: 4, int_val: 8 },\r\n 'g##': { root_index: 4, int_val: 9 },\r\n gb: { root_index: 4, int_val: 6 },\r\n gbb: { root_index: 4, int_val: 5 },\r\n a: { root_index: 5, int_val: 9 },\r\n an: { root_index: 5, int_val: 9 },\r\n 'a#': { root_index: 5, int_val: 10 },\r\n 'a##': { root_index: 5, int_val: 11 },\r\n ab: { root_index: 5, int_val: 8 },\r\n abb: { root_index: 5, int_val: 7 },\r\n b: { root_index: 6, int_val: 11 },\r\n bn: { root_index: 6, int_val: 11 },\r\n 'b#': { root_index: 6, int_val: 0 },\r\n 'b##': { root_index: 6, int_val: 1 },\r\n bb: { root_index: 6, int_val: 10 },\r\n bbb: { root_index: 6, int_val: 9 },\r\n };\r\n }\r\n static accidentalDisplay(pitch: Pitch, keySignature: string, duration: number, accArray: AccidentalArray[]):\r\n AccidentalDisplay | null {\r\n const keyAccidental = SmoMusic.getAccidentalForKeySignature(pitch, keySignature);\r\n const pitchOctave = pitch.letter + '-' + pitch.octave;\r\n const accidentals = accArray.filter((ar) =>\r\n (ar.duration as number) < duration && ar.pitches[pitchOctave]);\r\n const acLen = accidentals.length;\r\n const declared = acLen > 0 ?\r\n accidentals[acLen - 1].pitches[pitchOctave].pitch.accidental : keyAccidental;\r\n if ((declared !== pitch.accidental\r\n || pitch.cautionary)) { \r\n const rv: AccidentalDisplay = {\r\n symbol: pitch.accidental,\r\n courtesy: pitch.cautionary ?? false,\r\n forced: pitch.forced ?? false\r\n }\r\n return rv;\r\n }\r\n return null;\r\n }\r\n /**\r\n * return Vex canonical note enharmonic - e.g. Bb to A#\r\n * */\r\n static vexToCannonical(vexKey: string): string {\r\n vexKey = SmoMusic.stripVexOctave(vexKey);\r\n return vexCanonicalNotes()[SmoMusic.noteValues[vexKey].int_val];\r\n }\r\n\r\n /**\r\n * A note array (sans octave) in key-signature order\r\n */\r\n static get circleOfFifths(): PitchKey[] {\r\n return [{\r\n letter: 'c',\r\n accidental: 'n'\r\n }, {\r\n letter: 'g',\r\n accidental: 'n'\r\n }, {\r\n letter: 'd',\r\n accidental: 'n'\r\n }, {\r\n letter: 'a',\r\n accidental: 'n'\r\n }, {\r\n letter: 'e',\r\n accidental: 'n'\r\n }, {\r\n letter: 'b',\r\n accidental: 'n'\r\n }, {\r\n letter: 'f',\r\n accidental: '#'\r\n }, {\r\n letter: 'c',\r\n accidental: '#'\r\n }, {\r\n letter: 'a',\r\n accidental: 'b'\r\n }, {\r\n letter: 'e',\r\n accidental: 'b'\r\n }, {\r\n letter: 'b',\r\n accidental: 'b'\r\n }, {\r\n letter: 'f',\r\n accidental: 'n'\r\n }\r\n ];\r\n }\r\n /**\r\n * Return the number of lines above first ledger line below the staff.\r\n * e.g. middle c in treble clef returns 0. Top line f in treble returns 5.\r\n * @param clef\r\n * @param pitch\r\n * @returns number where 0 is the first ledger line below\r\n */\r\n static pitchToStaffLine(clef: string, smoPitch: Pitch): number {\r\n const octave = smoPitch.octave * 7 - 4 * 7;\r\n const keyTable = smoPitch.letter + smoPitch.accidental;\r\n let line = (SmoMusic.noteValues[keyTable].root_index + octave) / 2;\r\n line += SmoMusic.clefLedgerShift[clef]\r\n return line;\r\n }\r\n /**\r\n * return above if the first pitch is above line 3, else below\r\n * @param note \r\n * @returns \r\n */\r\n static positionFromStaffLine(note: SmoNote) {\r\n const line = SmoMusic.pitchToLedgerLine(note.clef as Clef, note.pitches[0]);\r\n if (line >= 3) {\r\n return 'above';\r\n } else {\r\n return 'below';\r\n }\r\n }\r\n /**\r\n * gives the index into circle-of-fifths array for a pitch, considering enharmonics.\r\n * */\r\n static circleOfFifthsIndex(smoPitch: Pitch) {\r\n const en1 = SmoMusic.vexToSmoKey(SmoMusic.getEnharmonic(SmoMusic.pitchToVexKey(smoPitch)));\r\n const en2 = SmoMusic.vexToSmoKey(SmoMusic.getEnharmonic(SmoMusic.getEnharmonic(SmoMusic.pitchToVexKey(smoPitch))));\r\n const ix = SmoMusic.circleOfFifths.findIndex((el) =>\r\n (el.letter === smoPitch.letter && el.accidental === smoPitch.accidental) ||\r\n (el.letter === en1.letter && el.accidental === en1.accidental) ||\r\n (el.letter === en2.letter && el.accidental === en2.accidental)\r\n );\r\n return ix;\r\n }\r\n\r\n /**\r\n * Get pitch to the right in circle of fifths\r\n * */\r\n static addSharp(smoPitch: Pitch): Pitch {\r\n const rv: PitchKey = SmoMusic.circleOfFifths[\r\n (SmoMusic.circleOfFifthsIndex(smoPitch) + 1) % SmoMusic.circleOfFifths.length];\r\n return { letter: rv.letter, accidental: rv.accidental, octave: smoPitch.octave };\r\n }\r\n\r\n /**\r\n * Get pitch to the left in circle of fifths\r\n */\r\n static addFlat(smoPitch: Pitch): Pitch {\r\n const rv: PitchKey = SmoMusic.circleOfFifths[\r\n ((SmoMusic.circleOfFifths.length - 1) + SmoMusic.circleOfFifthsIndex(smoPitch)) % SmoMusic.circleOfFifths.length];\r\n return { letter: rv.letter, accidental: rv.accidental, octave: smoPitch.octave };\r\n }\r\n\r\n /**\r\n * Add @param {number} - sharps\r\n */\r\n static addSharps(smoPitch: Pitch, distance: number): Pitch {\r\n let i = 0;\r\n let rv: Pitch = {} as Pitch;\r\n if (distance === 0) {\r\n return JSON.parse(JSON.stringify(smoPitch));\r\n }\r\n rv = SmoMusic.addSharp(smoPitch);\r\n for (i = 1; i < distance; ++i) {\r\n rv = SmoMusic.addSharp(rv);\r\n }\r\n const octaveAdj = SmoMusic.letterPitchIndex[smoPitch.letter] > SmoMusic.letterPitchIndex[rv.letter] ? 1 : 0;\r\n rv.octave += octaveAdj;\r\n return rv;\r\n }\r\n\r\n /**\r\n * Add *distance* sharps/flats to given key\r\n */\r\n static addFlats(smoPitch: Pitch, distance: number): Pitch {\r\n let i = 0;\r\n let rv: Pitch = {} as Pitch;\r\n if (distance === 0) {\r\n return JSON.parse(JSON.stringify(smoPitch));\r\n }\r\n rv = SmoMusic.addFlat(smoPitch);\r\n for (i = 1; i < distance; ++i) {\r\n rv = SmoMusic.addFlat(rv);\r\n }\r\n const octaveAdj = SmoMusic.letterPitchIndex[smoPitch.letter] > SmoMusic.letterPitchIndex[rv.letter] ? 1 : 0;\r\n rv.octave += octaveAdj;\r\n return rv;\r\n }\r\n\r\n /**\r\n * Convert array of smo pitches to vex keys, with adjustment for transpose and notehead\r\n * @param pitchAr\r\n * @param keyOffset\r\n * @param noteHead\r\n * @returns {string[]} - array of vex keyx\r\n */\r\n static smoPitchesToVexKeys(pitchAr: Pitch[], keyOffset: number, noteHead: string | null): string[] {\r\n const noopFunc = keyOffset > 0 ? 'addSharps' : 'addFlats';\r\n\r\n const rv: string[] = [];\r\n pitchAr.forEach((pitch) => {\r\n rv.push(SmoMusic.pitchToVexKey(SmoMusic[noopFunc](pitch, keyOffset), noteHead));\r\n });\r\n return rv;\r\n }\r\n\r\n static get scaleIntervals(): Record {\r\n return {\r\n up: [2, 2, 1, 2, 2, 2, 1],\r\n down: [1, 2, 2, 2, 1, 2, 2]\r\n };\r\n }\r\n\r\n /**\r\n * return true if the pitches match, except for octave.\r\n * `{ letter: 'a', accidental: '#'}, { letter: 'a', accidental: '#'}` returns true\r\n * `{ letter: 'a', accidental: '#'}, { letter: 'b', accidental: 'b'}` returns false\r\n * */\r\n static smoScalePitchMatch(p1: Pitch, p2: Pitch): boolean {\r\n const pp1 = JSON.parse(JSON.stringify(p1));\r\n const pp2 = JSON.parse(JSON.stringify(p2));\r\n pp1.octave = 0;\r\n pp2.octave = 0;\r\n\r\n return SmoMusic.smoPitchToInt(pp1) === SmoMusic.smoPitchToInt(pp2);\r\n }\r\n\r\n /**\r\n * Return the number of ledger lines, or 0 if none. positive if\r\n * below the staff, negative if above\r\n * @param clef\r\n * @param pitch\r\n * @returns number where 0 is the top staff line\r\n */\r\n static pitchToLedgerLine(clef: Clef, pitch: Pitch): number {\r\n // return the distance from the top ledger line, as 0.5 per line/space\r\n const line = SmoMusic.pitchToStaffLine(clef, pitch);\r\n if (line > 5) {\r\n return -1 * (line - 5);\r\n }\r\n if (line <= 0) {\r\n return -1 * (line - 1);\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * return flag state (up === 1 or down === 2) based on pitch and clef if auto\r\n * */\r\n static flagStateFromNote(clef: Clef, note: SmoNote) {\r\n let fs = note.flagState;\r\n if (fs === SmoNote.flagStates.auto) {\r\n fs = SmoMusic.pitchToStaffLine(clef, note.pitches[0])\r\n >= 3 ? SmoNote.flagStates.down : SmoNote.flagStates.up;\r\n }\r\n return fs;\r\n }\r\n\r\n /**\r\n * an array of clefs and the xml information they map to\r\n */\r\n static clefSigns: Record = {\r\n 'treble': { sign: 'G', line: 2 },\r\n 'bass': { sign: 'F', line: 4 },\r\n 'tenor': { sign: 'C', line: 4 },\r\n 'alto': { sign: 'C', line: 3 },\r\n 'soprano': { sign: 'C', line: 1 },\r\n 'percussion': { sign: 'percussion' },\r\n 'mezzo-soprano': { sign: 'C', line: 2 },\r\n 'baritone-c': { sign: 'C', line: 5 },\r\n 'baritone-f': { sign: 'F', line: 3 },\r\n 'subbass': { sign: 'F', line: 3, octave: -1 },\r\n 'french': { sign: 'G', line: 1 },\r\n 'vocal-tenor': { sign: 'G', line: 2, octave: -1 }\r\n }\r\n \r\n /**\r\n * an array of clefs and the xml information they map to\r\n */\r\n static clefLedgerShift: Record = {\r\n 'treble': 0,\r\n 'bass': 6,\r\n 'tenor': 4,\r\n 'alto': 3,\r\n 'soprano': 1,\r\n 'percussion': 0,\r\n 'mezzo-soprano': 2,\r\n 'baritone-c': 5,\r\n 'baritone-f': 5,\r\n 'subbass': 7,\r\n 'french': -1\r\n }\r\n static scaleTones: string[] = ['tonic', '2', '3', '4', '5', '6', '7'];\r\n static getScaleTonesForKey(keySignature: string): Record {\r\n const key = SmoMusic.enharmonicRoles[keySignature];\r\n const rv: Record = {};\r\n key.forEach((role) => {\r\n if (SmoMusic.scaleTones.indexOf(role.role) >= 0) {\r\n rv[role.letter] = role.letter + role.accidental;\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * The purpose of this table is to keep consistent enharmonic spelling when transposing \r\n * instruments in different keys. It is not theoritically complete, e.g.\r\n * there is no reason to distinguish between #5 used as a leading tone for vi- or\r\n * as an augmented chord, the spelling is the same. It does not show a preference\r\n * for notes that don't have an obvious purpose in the key, e.g. it does not try to compute the\r\n * equivalent to 'e#' in the key of 'c'. The computation of the 'intended key area' is\r\n * beyond the scope of a music program to interpret.\r\n */\r\n static get enharmonicRoles(): Record {\r\n const tbl: Record =\r\n { 'c' : [\r\n { letter: 'c', accidental: 'n', role: 'tonic' },\r\n { letter: 'c', accidental: '#', role: '7/2' },\r\n { letter: 'd', accidental: 'b', role: 'b9' },\r\n { letter: 'd', accidental: 'n', role: '2' },\r\n { letter: 'd', accidental: '#', role: '7/3'},\r\n { letter: 'e', accidental: 'b', role: 'b3'},\r\n { letter: 'e', accidental: 'n', role: '3'},\r\n { letter: 'f', accidental: 'n', role: '4'},\r\n { letter: 'f', accidental: '#', role: '#11'},\r\n { letter: 'g', accidental: 'b', role: 'b5'},\r\n { letter: 'g', accidental: 'n', role: '5'},\r\n { letter: 'g', accidental: '#', role: '7/6'},\r\n { letter: 'a', accidental: 'b', role: 'b6'},\r\n { letter: 'a', accidental: 'n', role: '6'},\r\n { letter: 'a', accidental: '#', role: '7/7'},\r\n { letter: 'b', accidental: 'b', role: 'b7'},\r\n { letter: 'b', accidental: 'n', role: '7'}\r\n ], 'c#': [\r\n { letter: 'c', accidental: '#', role: 'tonic' },\r\n { letter: 'c', accidental: '##', role: '7/2' },\r\n { letter: 'd', accidental: 'n', role: 'b9' },\r\n { letter: 'd', accidental: '#', role: '2' },\r\n { letter: 'd', accidental: '##', role: '#2'},\r\n { letter: 'f', accidental: 'b', role: 'b3'},\r\n { letter: 'e', accidental: '#', role: '3'},\r\n { letter: 'f', accidental: '#', role: '4'},\r\n { letter: 'f', accidental: '##', role: '#11'},\r\n { letter: 'g', accidental: 'n', role: 'b5'},\r\n { letter: 'g', accidental: '#', role: '5'},\r\n { letter: 'g', accidental: '##', role: '7/6'},\r\n { letter: 'a', accidental: 'n', role: 'b6'},\r\n { letter: 'a', accidental: '#', role: '6'},\r\n { letter: 'a', accidental: '##', role: '7/7'},\r\n { letter: 'b', accidental: 'n', role: 'b7'},\r\n { letter: 'b', accidental: '#', role: '7'}\r\n ], 'db': [\r\n { letter: 'd', accidental: 'b', role: 'tonic' },\r\n { letter: 'd', accidental: 'n', role: '7/2' },\r\n { letter: 'e', accidental: 'bb', role: 'b9' },\r\n { letter: 'e', accidental: 'b', role: '2' },\r\n { letter: 'e', accidental: 'n', role: '7/3'},\r\n { letter: 'f', accidental: 'b', role: 'b3'},\r\n { letter: 'f', accidental: 'n', role: '3'},\r\n { letter: 'g', accidental: 'b', role: '4'},\r\n { letter: 'g', accidental: 'n', role: '#11'},\r\n { letter: 'a', accidental: 'bb', role: 'b5'},\r\n { letter: 'a', accidental: 'b', role: '5'},\r\n { letter: 'a', accidental: 'n', role: '7/6'},\r\n { letter: 'b', accidental: 'bb', role: 'b6'},\r\n { letter: 'b', accidental: 'b', role: '6'},\r\n { letter: 'b', accidental: 'n', role: '7/7'},\r\n { letter: 'c', accidental: 'b', role: 'b7'},\r\n { letter: 'c', accidental: 'n', role: '7'}\r\n ], 'd': [\r\n { letter: 'd', accidental: 'n', role: 'tonic' },\r\n { letter: 'd', accidental: '#', role: '7/2' },\r\n { letter: 'e', accidental: 'b', role: 'b9' },\r\n { letter: 'e', accidental: 'n', role: '2' },\r\n { letter: 'e', accidental: '#', role: '7/3'},\r\n { letter: 'f', accidental: 'n', role: 'b3'},\r\n { letter: 'f', accidental: '#', role: '3'},\r\n { letter: 'g', accidental: 'n', role: '4'},\r\n { letter: 'g', accidental: '#', role: '#11'},\r\n { letter: 'a', accidental: 'b', role: 'b5'},\r\n { letter: 'a', accidental: 'n', role: '5'},\r\n { letter: 'a', accidental: '#', role: '7/6'},\r\n { letter: 'b', accidental: 'b', role: 'b6'},\r\n { letter: 'b', accidental: 'n', role: '6'},\r\n { letter: 'b', accidental: '#', role: '7/7'},\r\n { letter: 'c', accidental: 'n', role: 'b7'},\r\n { letter: 'c', accidental: '#', role: '7'}\r\n ], 'eb': [\r\n { letter: 'e', accidental: 'b', role: 'tonic' },\r\n { letter: 'e', accidental: 'n', role: '7/2' },\r\n { letter: 'f', accidental: 'b', role: 'b9' },\r\n { letter: 'f', accidental: 'n', role: '2' },\r\n { letter: 'f', accidental: '#', role: '7/3'},\r\n { letter: 'g', accidental: 'b', role: 'b3'},\r\n { letter: 'g', accidental: 'n', role: '3'},\r\n { letter: 'a', accidental: 'b', role: '4'},\r\n { letter: 'a', accidental: 'n', role: '#11'},\r\n { letter: 'b', accidental: 'bb', role: 'b5'},\r\n { letter: 'b', accidental: 'b', role: '5'},\r\n { letter: 'b', accidental: 'n', role: '7/6'},\r\n { letter: 'c', accidental: 'b', role: '6'},\r\n { letter: 'c', accidental: 'n', role: '6'},\r\n { letter: 'c', accidental: '#', role: '7/7'},\r\n { letter: 'd', accidental: 'b', role: 'b7'},\r\n { letter: 'd', accidental: 'n', role: '7'}\r\n ], 'e': [\r\n { letter: 'e', accidental: 'n', role: 'tonic' },\r\n { letter: 'e', accidental: '#', role: '7/2' },\r\n { letter: 'f', accidental: 'n', role: 'b9' },\r\n { letter: 'f', accidental: '#', role: '2' },\r\n { letter: 'f', accidental: '##', role: '7/3'},\r\n { letter: 'g', accidental: 'n', role: 'b3'},\r\n { letter: 'g', accidental: '#', role: '3'},\r\n { letter: 'a', accidental: 'n', role: '4'},\r\n { letter: 'a', accidental: '#', role: '#11'},\r\n { letter: 'b', accidental: 'b', role: 'b5'},\r\n { letter: 'b', accidental: 'n', role: '5'},\r\n { letter: 'b', accidental: '#', role: '7/6'},\r\n { letter: 'c', accidental: 'n', role: 'b6'},\r\n { letter: 'c', accidental: '#', role: '6'},\r\n { letter: 'c', accidental: '##', role: '7/7'},\r\n { letter: 'd', accidental: 'n', role: 'b7'},\r\n { letter: 'd', accidental: '#', role: '7'}\r\n ], 'f': [\r\n { letter: 'f', accidental: 'n', role: 'tonic' },\r\n { letter: 'f', accidental: '#', role: '7/2' },\r\n { letter: 'g', accidental: 'b', role: 'b9' },\r\n { letter: 'g', accidental: 'n', role: '2' },\r\n { letter: 'g', accidental: '#', role: '7/3'},\r\n { letter: 'a', accidental: 'b', role: 'b3'},\r\n { letter: 'a', accidental: 'n', role: '3'},\r\n { letter: 'b', accidental: 'b', role: '4'},\r\n { letter: 'b', accidental: 'n', role: '#11'},\r\n { letter: 'c', accidental: 'b', role: 'b5'},\r\n { letter: 'c', accidental: 'n', role: '5'},\r\n { letter: 'c', accidental: '#', role: '7/6'},\r\n { letter: 'd', accidental: 'b', role: 'b6'},\r\n { letter: 'd', accidental: 'n', role: '6'},\r\n { letter: 'd', accidental: '#', role: '7/7'},\r\n { letter: 'e', accidental: 'b', role: 'b7'},\r\n { letter: 'e', accidental: 'n', role: '7'}\r\n ], 'f#': [\r\n { letter: 'f', accidental: '#', role: 'tonic' },\r\n { letter: 'f', accidental: '##', role: '7/2' },\r\n { letter: 'g', accidental: 'n', role: 'b9' },\r\n { letter: 'g', accidental: '#', role: '2' },\r\n { letter: 'g', accidental: '##', role: '#2'},\r\n { letter: 'a', accidental: 'n', role: 'b3'},\r\n { letter: 'a', accidental: '#', role: '3'},\r\n { letter: 'b', accidental: 'n', role: '4'},\r\n { letter: 'b', accidental: '#', role: '#11'},\r\n { letter: 'c', accidental: 'n', role: 'b5'},\r\n { letter: 'c', accidental: '#', role: '5'},\r\n { letter: 'c', accidental: '##', role: '7/6'},\r\n { letter: 'd', accidental: 'n', role: 'b6'},\r\n { letter: 'd', accidental: '#', role: '6'},\r\n { letter: 'd', accidental: '##', role: '7/7'},\r\n { letter: 'e', accidental: 'n', role: 'b7'},\r\n { letter: 'e', accidental: '#', role: '7'}\r\n ], 'gb': [\r\n { letter: 'g', accidental: 'b', role: 'tonic' },\r\n { letter: 'g', accidental: 'n', role: '7/2' },\r\n { letter: 'a', accidental: 'bb', role: 'b9' },\r\n { letter: 'a', accidental: 'b', role: '2' },\r\n { letter: 'a', accidental: 'n', role: '7/3'},\r\n { letter: 'a', accidental: 'bb', role: 'b3'},\r\n { letter: 'b', accidental: 'b', role: '3'},\r\n { letter: 'c', accidental: 'b', role: '4'},\r\n { letter: 'c', accidental: 'n', role: '#11'},\r\n { letter: 'd', accidental: 'bb', role: 'b5'},\r\n { letter: 'd', accidental: 'b', role: '5'},\r\n { letter: 'd', accidental: 'n', role: '7/6'},\r\n { letter: 'e', accidental: 'bb', role: 'b6'},\r\n { letter: 'e', accidental: 'b', role: '6'},\r\n { letter: 'e', accidental: 'n', role: '7/7'},\r\n { letter: 'f', accidental: 'b', role: 'b7'},\r\n { letter: 'f', accidental: 'n', role: '7'}\r\n ], 'g': [\r\n { letter: 'g', accidental: 'n', role: 'tonic' },\r\n { letter: 'g', accidental: '#', role: '7/2' },\r\n { letter: 'g', accidental: 'b', role: 'b9' },\r\n { letter: 'a', accidental: 'n', role: '2' },\r\n { letter: 'a', accidental: '#', role: '7/3'},\r\n { letter: 'b', accidental: 'b', role: 'b3'},\r\n { letter: 'b', accidental: 'n', role: '3'},\r\n { letter: 'c', accidental: 'n', role: '4'},\r\n { letter: 'c', accidental: '#', role: '#11'},\r\n { letter: 'd', accidental: 'b', role: 'b5'},\r\n { letter: 'd', accidental: 'n', role: '5'},\r\n { letter: 'd', accidental: '#', role: '7/6'},\r\n { letter: 'e', accidental: 'b', role: 'b6'},\r\n { letter: 'e', accidental: 'n', role: '6'},\r\n { letter: 'e', accidental: '#', role: '7/7'},\r\n { letter: 'f', accidental: 'n', role: 'b7'},\r\n { letter: 'f', accidental: '#', role: '7'}\r\n ],'ab': [\r\n { letter: 'a', accidental: 'b', role: 'tonic' },\r\n { letter: 'a', accidental: 'n', role: '7/2' },\r\n { letter: 'b', accidental: 'bb', role: 'b9' },\r\n { letter: 'b', accidental: 'b', role: '2' },\r\n { letter: 'b', accidental: 'n', role: '7/3' },\r\n { letter: 'b', accidental: 'bb', role: 'b3' },\r\n { letter: 'c', accidental: 'n', role: '3' },\r\n { letter: 'd', accidental: 'b', role: '4' },\r\n { letter: 'd', accidental: 'n', role: '#11' },\r\n { letter: 'e', accidental: 'bb', role: 'b5' },\r\n { letter: 'e', accidental: 'b', role: '5' },\r\n { letter: 'e', accidental: 'n', role: '7/6' },\r\n { letter: 'f', accidental: 'b', role: 'b6' },\r\n { letter: 'f', accidental: 'n', role: '6' },\r\n { letter: 'f', accidental: '#', role: '7/7' },\r\n { letter: 'g', accidental: 'b', role: 'b7' },\r\n { letter: 'g', accidental: 'n', role: '7' }\r\n ], 'a': [\r\n { letter: 'a', accidental: 'n', role: 'tonic' },\r\n { letter: 'a', accidental: '#', role: '7/2' },\r\n { letter: 'b', accidental: 'b', role: 'b9' },\r\n { letter: 'b', accidental: 'n', role: '2' },\r\n { letter: 'b', accidental: '#', role: '7/3'},\r\n { letter: 'c', accidental: 'n', role: 'b3'},\r\n { letter: 'c', accidental: '#', role: '3'},\r\n { letter: 'd', accidental: 'n', role: '4'},\r\n { letter: 'd', accidental: '#', role: '#11'},\r\n { letter: 'e', accidental: 'b', role: 'b5'},\r\n { letter: 'e', accidental: 'n', role: '5'},\r\n { letter: 'e', accidental: '#', role: '7/6'},\r\n { letter: 'f', accidental: 'n', role: 'b6'},\r\n { letter: 'f', accidental: '#', role: '6'},\r\n { letter: 'f', accidental: '##', role: '7/7'},\r\n { letter: 'g', accidental: 'n', role: 'b7'},\r\n { letter: 'g', accidental: '#', role: '7'}\r\n ], 'bb': [\r\n { letter: 'b', accidental: 'b', role: 'tonic' },\r\n { letter: 'b', accidental: 'n', role: '7/2' },\r\n { letter: 'c', accidental: 'b', role: 'b9' },\r\n { letter: 'c', accidental: 'n', role: '2' },\r\n { letter: 'c', accidental: '#', role: '7/3'},\r\n { letter: 'd', accidental: 'b', role: 'b3'},\r\n { letter: 'd', accidental: 'n', role: '3'},\r\n { letter: 'e', accidental: 'b', role: '4'},\r\n { letter: 'e', accidental: 'n', role: '#11'},\r\n { letter: 'f', accidental: 'b', role: 'b5'},\r\n { letter: 'f', accidental: 'n', role: '5'},\r\n { letter: 'f', accidental: '#', role: '7/6'},\r\n { letter: 'g', accidental: 'b', role: 'b6'},\r\n { letter: 'g', accidental: 'n', role: '6'},\r\n { letter: 'g', accidental: '#', role: '7/7'},\r\n { letter: 'a', accidental: 'b', role: 'b7'},\r\n { letter: 'a', accidental: 'n', role: '7'}\r\n ], 'b': [\r\n { letter: 'b', accidental: 'n', role: 'tonic' },\r\n { letter: 'b', accidental: '#', role: '7/2' },\r\n { letter: 'c', accidental: 'n', role: 'b9' },\r\n { letter: 'c', accidental: '#', role: '2' },\r\n { letter: 'c', accidental: '##', role: '7/3'},\r\n { letter: 'd', accidental: 'n', role: 'b3'},\r\n { letter: 'd', accidental: '#', role: '3'},\r\n { letter: 'e', accidental: 'n', role: '4'},\r\n { letter: 'e', accidental: '#', role: '#11'},\r\n { letter: 'f', accidental: 'n', role: 'b5'},\r\n { letter: 'f', accidental: '#', role: '5'},\r\n { letter: 'f', accidental: '##', role: '7/6'},\r\n { letter: 'g', accidental: 'n', role: 'b6'},\r\n { letter: 'g', accidental: '#', role: '6'},\r\n { letter: 'g', accidental: '##', role: '7/7'},\r\n { letter: 'a', accidental: 'n', role: 'b7'},\r\n { letter: 'a', accidental: '#', role: '7'}\r\n ]};\r\n return tbl;\r\n }\r\n /**\r\n * Find the harmonic role for the given pitch\r\n * @param smoPitch \r\n * @param keySignature \r\n * @returns \r\n */\r\n static findRoleOfPitch(smoPitch: Pitch, keySignature: string) {\r\n const keyRoles = SmoMusic.enharmonicRoles[keySignature];\r\n if (!keyRoles) {\r\n return '';\r\n }\r\n const keyRole = keyRoles.find((x) => x.letter === smoPitch.letter.toLocaleLowerCase() && x.accidental === smoPitch.accidental.toLowerCase());\r\n if (!keyRole) {\r\n return '';\r\n }\r\n return keyRole.role;\r\n }\r\n /**\r\n * Given a harmonic role, find the pitch that matches it. If there is no one, just\r\n * return the raw transposition\r\n * @param role \r\n * @param keySignature \r\n * @param transposedPitch \r\n * @returns \r\n */\r\n static findPitchForRole(role: string, keySignature: string, transposedPitch: Pitch): Pitch {\r\n const keyRoles = SmoMusic.enharmonicRoles[keySignature];\r\n if (!keyRoles) {\r\n return JSON.parse(JSON.stringify(transposedPitch));\r\n }\r\n const keyRole = keyRoles.find((x) => x.role === role);\r\n if (!keyRole) {\r\n return JSON.parse(JSON.stringify(transposedPitch));\r\n }\r\n let octave = transposedPitch.octave;\r\n if ((transposedPitch.letter === 'a' || transposedPitch.letter === 'b') && keyRole.letter === 'c') {\r\n octave += 1;\r\n }\r\n return { letter: keyRole.letter, accidental: keyRole.accidental, octave };\r\n }\r\n static rawTranspose(pitch: Pitch, offset: number) {\r\n return SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(pitch) + offset);\r\n }\r\n static transposePitchForKey(pitch: Pitch, originalKey: string, destinationKey: string, offset: number): Pitch {\r\n const transposedPitch = SmoMusic.getEnharmonicInKey(SmoMusic.rawTranspose(pitch, offset), destinationKey);\r\n const role = SmoMusic.findRoleOfPitch(pitch, originalKey);\r\n if (role.length) {\r\n return SmoMusic.findPitchForRole(role, destinationKey, transposedPitch);\r\n }\r\n return transposedPitch;\r\n }\r\n\r\n /**\r\n * convert from SMO to VEX format so we can use the VexFlow tables and methods\r\n * example:\r\n * `{letter,octave,accidental}` object to vexKey string `'f#'`\r\n * */\r\n static _pitchToVexKey(smoPitch: Pitch): string {\r\n // Convert to vex keys, where f# is a string like 'f#'.\r\n let vexKey = smoPitch.letter.toLowerCase();\r\n if (smoPitch.accidental.length === 0) {\r\n vexKey = vexKey + 'n';\r\n } else {\r\n vexKey = vexKey + smoPitch.accidental;\r\n }\r\n if (smoPitch.octave) {\r\n vexKey = vexKey + '/' + smoPitch.octave;\r\n }\r\n return vexKey;\r\n }\r\n\r\n /**\r\n * convert smo pitch to easy score (vex) format. Mostly used\r\n * for debugging and generating Vex test cases\r\n * @param smoPitch\r\n * @returns - a string that can be converted to a VEX routine, with some difficulty\r\n */\r\n static pitchToEasyScore(smoPitch: Pitch): string {\r\n let vexKey = smoPitch.letter.toLowerCase();\r\n vexKey = vexKey + smoPitch.accidental;\r\n return vexKey + smoPitch.octave;\r\n }\r\n /**\r\n * convert a pitch to a format expected by the MIDI writer\r\n * @param smoPitch pitch to convert\r\n * @returns pitch in MIDI string format.\r\n */\r\n static smoPitchToMidiString(smoPitch: Pitch): string {\r\n const midiPitch = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(smoPitch));\r\n let rv = midiPitch.letter.toUpperCase();\r\n if (midiPitch.accidental !== 'n') {\r\n rv += midiPitch.accidental;\r\n }\r\n rv += midiPitch.octave;\r\n return rv;\r\n }\r\n static smoPitchesToMidiStrings(smoPitches: Pitch[]): string[] {\r\n const rv: string[] = [];\r\n smoPitches.forEach((pitch) => {\r\n rv.push(SmoMusic.smoPitchToMidiString(pitch));\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * filled in from the midi routines borrowed from \r\n * // https://github.com/grimmdude/MidiWriterJS\r\n * @param midiPitch pitch from MIDIwrite\r\n * @returns SMO pitch\r\n */\r\n static midiPitchToSmoPitch(midiPitch: string): Pitch {\r\n const smoPitch: Pitch = {} as Pitch;\r\n smoPitch.letter = midiPitch[0].toLowerCase() as PitchLetter;\r\n if (isNaN(parseInt(midiPitch[1], 10))) {\r\n smoPitch.accidental = midiPitch[1];\r\n smoPitch.octave = parseInt(midiPitch[2], 10);\r\n } else {\r\n smoPitch.accidental = 'n';\r\n smoPitch.octave = parseInt(midiPitch[1], 10);\r\n }\r\n return smoPitch;\r\n }\r\n static midiPitchToMidiNumber(midiPitch: string): number {\r\n return SmoMusic.smoPitchToInt(SmoMusic.midiPitchToSmoPitch(midiPitch)) + 12;\r\n }\r\n\r\n static pitchToVexKey(smoPitch: Pitch, head: string | null = null): string {\r\n if (!head) {\r\n return SmoMusic._pitchToVexKey(smoPitch);\r\n }\r\n return SmoMusic._pitchToVexKey(smoPitch) + '/' + head;\r\n }\r\n\r\n /**\r\n * Turns vex pitch string into smo pitch, e.g.\r\n * `cn/4 => {'c','n',4}`\r\n * @param vexPitch\r\n * @returns SmoPitch\r\n * */\r\n static vexToSmoPitch(vexPitch: string): Pitch {\r\n let octave = 0;\r\n const po = vexPitch.split('/');\r\n const rv = SmoMusic.vexToSmoKey(po[0]);\r\n if (po.length > 1) {\r\n octave = parseInt(po[1], 10);\r\n octave = isNaN(octave) ? 4 : octave;\r\n } else {\r\n octave = 4;\r\n }\r\n (rv as Pitch).octave = octave;\r\n return rv as Pitch;\r\n }\r\n\r\n /**\r\n * Convert to smo pitch, without octave\r\n * ``['f#'] => [{letter:'f',accidental:'#'}]``\r\n * */\r\n static vexToSmoKey(vexPitch: string): PitchKey {\r\n const accidental = vexPitch.length < 2 ? 'n' : vexPitch.substring(1, vexPitch.length);\r\n const pp = vexPitch.split('/')[0];\r\n return {\r\n letter: pp[0].toLowerCase() as PitchLetter,\r\n accidental\r\n };\r\n }\r\n\r\n // {letter:'f',accidental:'#'} => [f#/\r\n static smoPitchesToVex(pitchAr: Pitch[]): string[] {\r\n var rv: string[] = [];\r\n pitchAr.forEach((p) => {\r\n rv.push(SmoMusic.pitchToVexKey(p));\r\n });\r\n return rv;\r\n }\r\n\r\n /**\r\n * @param vexKey - pitch in vex format\r\n * @returns pitch in vex format, sans octave\r\n */\r\n static stripVexOctave(vexKey: string): string {\r\n if (vexKey.indexOf('/') > 0) {\r\n vexKey = vexKey.substring(0, vexKey.indexOf('/'));\r\n }\r\n return vexKey;\r\n }\r\n /**\r\n * compare pitches for frequency match\r\n */\r\n static pitchArraysMatch(ar1: Pitch[], ar2: Pitch[]): boolean {\r\n let matches = 0;\r\n const ir1 = SmoMusic.smoPitchesToIntArray(ar1);\r\n const ir2 = SmoMusic.smoPitchesToIntArray(ar2);\r\n if (ir1.length !== ir2.length) {\r\n return false;\r\n }\r\n ir1.forEach((num) => {\r\n if (ir2.indexOf(num) >= 0) {\r\n matches += 1;\r\n }\r\n });\r\n return matches === ir1.length;\r\n }\r\n /**\r\n * convert pitches to integer pitch representations\r\n * by calling smoPitchToInt\r\n * @param pitches Smo pitches\r\n * @returns \r\n */\r\n static smoPitchesToIntArray(pitches: Pitch[]): number[] {\r\n const rv: number[] = [];\r\n pitches.forEach((pitch) => {\r\n rv.push(SmoMusic.smoPitchToInt(pitch));\r\n });\r\n return rv.sort();\r\n }\r\n\r\n /**\r\n * convert a pitch to an integer value, used for transpositions, intervals, etc.\r\n * @param pitch \r\n * @returns \r\n */\r\n static smoPitchToInt(pitch: Pitch): number {\r\n if (typeof (pitch.octave) === 'undefined') {\r\n pitch.octave = 0;\r\n }\r\n const intVal = SmoMusic.noteValues[\r\n SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(pitch))].int_val;\r\n const octave = (pitch.letter === 'c' && pitch.accidental === 'b' && pitch.octave > 0) ?\r\n pitch.octave - 1 : pitch.octave;\r\n return octave * 12 + intVal;\r\n }\r\n\r\n /**\r\n * Convert a number to a SMO pitch\r\n * @param intValue - number of 1/2 steps from `c0`\r\n * @returns \r\n */\r\n static smoIntToPitch(intValue: number): Pitch {\r\n let octave = 0;\r\n let accidental = '';\r\n let noteKey: PitchLetter | null = null;\r\n const letterInt = intValue >= 0 ? intValue % 12 :\r\n 12 - (Math.abs(intValue) % 12);\r\n noteKey = (Object.keys(SmoMusic.noteValues).find((key) =>\r\n SmoMusic.noteValues[key].int_val === letterInt && key.length === 1\r\n )) as PitchLetter | null;\r\n if (!noteKey) {\r\n noteKey = (Object.keys(SmoMusic.noteValues).find((key) =>\r\n SmoMusic.noteValues[key].int_val === letterInt && key.length === 2\r\n )) as PitchLetter;\r\n }\r\n octave = Math.floor(intValue / 12);\r\n octave = octave >= 0 ? octave : 0;\r\n accidental = noteKey.substring(1, noteKey.length);\r\n // eslint-disable-next-line\r\n accidental = accidental ? accidental : 'n';\r\n return {\r\n letter: noteKey[0] as PitchLetter,\r\n accidental,\r\n octave\r\n };\r\n }\r\n static pitchKeyToPitch(pk: PitchKey): Pitch {\r\n return { letter: pk.letter, accidental: pk.accidental, octave: 1 };\r\n }\r\n\r\n /**\r\n * Consider instrument transpose when setting key -\r\n * e.g. Eb for Bb instruments is F. Note: return value is not\r\n * a valid VEX key signature. Use vexKeySignatureTranspose for that.\r\n */\r\n static vexKeySigWithOffset(vexKey: string, offset: number): string {\r\n const pk: PitchKey = SmoMusic.vexToSmoKey(vexKey);\r\n const pi: number = SmoMusic.smoPitchToInt(SmoMusic.pitchKeyToPitch(pk)) + offset;\r\n let newKey: string = SmoMusic.toValidKeySignature(SmoMusic.pitchToVexKey(SmoMusic.smoIntToPitch(pi)));\r\n // handle equivalent ks\r\n if (newKey === 'c#' && vexKey.indexOf('b') >= 0) {\r\n newKey = 'db';\r\n }\r\n return newKey;\r\n }\r\n static _enharmonics: Record | null = null;\r\n /**\r\n * return a map of enharmonics for choosing or cycling. notes are in vexKey form.\r\n */\r\n static get enharmonics(): Record {\r\n let i = 0;\r\n if (SmoMusic._enharmonics !== null) {\r\n return SmoMusic._enharmonics;\r\n }\r\n const rv: Record = {};\r\n const keys = Object.keys(SmoMusic.noteValues);\r\n for (i = 0; i < keys.length; ++i) {\r\n const key = keys[i];\r\n const int_val: number = SmoMusic.noteValues[key].int_val;\r\n if (typeof (rv[int_val.toString()]) === 'undefined') {\r\n rv[int_val.toString()] = [];\r\n }\r\n // only consider natural note 1 time. It is in the list twice for some reason.\r\n if (key.indexOf('n') === -1) {\r\n rv[int_val.toString()].push(key);\r\n }\r\n }\r\n SmoMusic._enharmonics = rv;\r\n return rv;\r\n }\r\n /**\r\n * Get enharmonic equivalent of given notes for cycle/choose\r\n * @param vexKey\r\n * @returns\r\n */\r\n static getEnharmonics(vexKey: string): string[] {\r\n const proto = SmoMusic.stripVexOctave(vexKey);\r\n const rv: string[] = [];\r\n let ne = SmoMusic.getEnharmonic(vexKey);\r\n rv.push(proto);\r\n while (ne[0] !== proto[0]) {\r\n rv.push(ne);\r\n ne = SmoMusic.getEnharmonic(ne);\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * return the next note from the cycle in `getEnharmonics`\r\n */\r\n static getEnharmonic(vexKey: string): string {\r\n vexKey = SmoMusic.stripVexOctave(vexKey);\r\n const intVal = SmoMusic.noteValues[vexKey.toLowerCase()].int_val;\r\n const ar = SmoMusic.enharmonics[intVal.toString()];\r\n const len = ar.length;\r\n // 'n' for natural in key but not in value\r\n vexKey = vexKey.length > 1 && vexKey[1] === 'n' ? vexKey[0] : vexKey;\r\n const ix = ar.indexOf(vexKey);\r\n vexKey = ar[(ix + 1) % len];\r\n return vexKey;\r\n }\r\n\r\n /**\r\n * Return a pitch a diatonic step away from SmoPitch in vexKey\r\n * @param smoPitch\r\n * @param vexKey\r\n * @param direction\r\n * @returns\r\n */\r\n static closestTonic(smoPitch: Pitch, vexKey: string, direction: number): Pitch {\r\n direction = Math.sign(direction) < 0 ? -1 : 1;\r\n const tonic = SmoMusic.vexToSmoKey(vexKey);\r\n const rv = SmoMusic.pitchKeyToPitch(tonic);\r\n rv.octave = smoPitch.octave;\r\n const iix = SmoMusic.smoPitchToInt(smoPitch);\r\n const smint = SmoMusic.smoPitchToInt(rv);\r\n if (Math.sign(smint - iix) !== direction) {\r\n rv.octave += direction;\r\n }\r\n return rv;\r\n }\r\n\r\n // ### toValidKeySignature\r\n // When transposing, make sure key signature is valid, e.g. g# should be\r\n // Ab\r\n static toValidKeySignature(vexKey: string): string {\r\n let strlen = 0;\r\n const map: Record = { 'a#': 'bb', 'g#': 'ab', 'cb': 'b', 'd#': 'eb' };\r\n strlen = (vexKey.length > 2 ? 2 : vexKey.length);\r\n // Vex doesn't like 'n' in key signatures.\r\n if (strlen === 2 && vexKey[1].toLowerCase() === 'n') {\r\n strlen = 1;\r\n }\r\n const rv = vexKey.substr(0, strlen);\r\n if (map[rv.toLowerCase()]) {\r\n return map[rv.toLowerCase()];\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * When transposing, get the enharmonic that most closely fits the key\r\n * `getEnharmonicInKey` returns an alternate to the given pitch, or the same pitch.\r\n * `getKeyFriendlyEnharmonic` return a pitch for a given key, given the letter name only\r\n * @param smoPitch\r\n * @param keySignature\r\n * @returns\r\n */\r\n static getEnharmonicInKey(smoPitch: Pitch, keySignature: string): Pitch {\r\n let match = false;\r\n let rv = '';\r\n if (typeof (smoPitch.octave) === 'undefined') {\r\n smoPitch.octave = 1;\r\n }\r\n const sharpKey = keySignature.indexOf('#') >= 0;\r\n const flatKey = keySignature.indexOf('b') >= 0;\r\n const ar = SmoMusic.getEnharmonics(SmoMusic.pitchToVexKey(smoPitch));\r\n rv = SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(smoPitch));\r\n const scaleMap: Record = SmoMusic.getScaleTonesForKey(keySignature);\r\n // new VF.Music().createScaleMap(keySignature);\r\n ar.forEach((vexKey) => {\r\n if (vexKey.length === 1) {\r\n vexKey += 'n';\r\n }\r\n if (vexKey === scaleMap[vexKey[0]]) {\r\n rv = vexKey;\r\n match = true;\r\n } else if (!match) {\r\n // In the absence of a match of a key tone, we bias towards more\r\n // 'common', like Bb is more common than A#, esp. as a chord. This maybe\r\n // just be my horn player bias towards flat keys\r\n if (vexKey === 'a#' && !sharpKey) {\r\n rv = 'bb';\r\n } else if (vexKey === 'g#' && !sharpKey) {\r\n rv = 'ab';\r\n } else if (vexKey === 'c#' && !sharpKey) {\r\n rv = 'db';\r\n } else if (vexKey === 'd#' && !sharpKey) {\r\n rv = 'eb';\r\n } else if (vexKey === 'f#' && flatKey) {\r\n rv = 'gb';\r\n }\r\n }\r\n });\r\n const smoRv: Pitch = SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(rv));\r\n smoRv.octave = smoPitch.octave;\r\n const rvi = SmoMusic.smoPitchToInt(smoRv);\r\n const ori = SmoMusic.smoPitchToInt(smoPitch);\r\n // handle the case of c0 < b0, pitch-wise\r\n smoRv.octave += Math.sign(ori - rvi);\r\n return smoRv;\r\n }\r\n /**\r\n * fix the enharmonic to match the key, if possible\r\n * @example\r\n * `getKeyFriendlyEnharmonic('b','eb'); => returns 'bb'\r\n * return vex string\r\n * `getEnharmonicInKey` returns an alternate to the given pitch, or the same pitch.\r\n * `getKeyFriendlyEnharmonic` return a pitch for a given key, given the letter name only\r\n */\r\n static getKeyFriendlyEnharmonic(letter: string, keySignature: string): string {\r\n let rv: string = letter;\r\n let i = 0;\r\n const scale: string[] = Object.values(SmoMusic.getScaleTonesForKey(keySignature));\r\n let prop: string = SmoMusic.getEnharmonic(letter.toLowerCase());\r\n while (prop.toLowerCase() !== letter.toLowerCase()) {\r\n for (i = 0; i < scale.length; ++i) {\r\n const skey: string = scale[i];\r\n if ((skey[0] === prop && skey[1] === 'n') ||\r\n (skey.toLowerCase() === prop.toLowerCase())) {\r\n rv = skey;\r\n break;\r\n }\r\n }\r\n prop = (prop[1] === 'n' ? prop[0] : prop);\r\n prop = SmoMusic.getEnharmonic(prop);\r\n }\r\n return rv;\r\n }\r\n /**\r\n // given a letter pitch (a,b,c etc.), and a key signature, return the actual note\r\n // that you get without accidentals\r\n // `SmoMusic.getKeySignatureKey('F','G'); // returns f#`\r\n * @param letter\r\n * @param keySignature\r\n * @returns\r\n */\r\n static getKeySignatureKey(letter: PitchLetter, keySignature: string): string {\r\n const scaleMap = SmoMusic.getScaleTonesForKey(keySignature);\r\n return scaleMap[letter];\r\n }\r\n\r\n static getAccidentalForKeySignature(smoPitch: Pitch, keySignature: string): string {\r\n const vexKey = SmoMusic.getKeySignatureKey(smoPitch.letter, keySignature);\r\n return vexKey.length === 1 ? 'n' : vexKey.substr(1, vexKey.length - 1);\r\n }\r\n\r\n // ### isPitchInKeySignature\r\n // Return true if the pitch is not an accidental in the give key, e.g.\r\n // f# in 'g' or c in 'Bb'\r\n static isPitchInKeySignature(smoPitch: Pitch, keySignature: string): boolean {\r\n const vexKey = SmoMusic.getKeySignatureKey(smoPitch.letter, keySignature);\r\n return (vexKey.length === 1 && smoPitch.accidental === 'n' ||\r\n (vexKey[1] === smoPitch.accidental));\r\n }\r\n\r\n // ### getIntervalInKey\r\n // give a pitch and a key signature, return another pitch at the given\r\n // diatonic interval. Similar to getKeyOffset but diatonic.\r\n static getIntervalInKey(pitch: Pitch, keySignature: string, interval: number): Pitch {\r\n let scaleIx = 0;\r\n let diatonicIx = 0;\r\n if (interval === 0) {\r\n return JSON.parse(JSON.stringify(pitch));\r\n }\r\n\r\n const delta = interval > 0 ? 1 : -1;\r\n const inv = -1 * delta;\r\n const tonic = SmoMusic.closestTonic(pitch, keySignature, inv);\r\n const intervals = delta > 0 ? SmoMusic.scaleIntervals.up : SmoMusic.scaleIntervals.down;\r\n const pitchInt = SmoMusic.smoPitchToInt(pitch);\r\n let nkey = tonic;\r\n let nkeyInt = SmoMusic.smoPitchToInt(nkey);\r\n while (Math.sign(nkeyInt - pitchInt) !== delta && Math.sign(nkeyInt - pitchInt) !== 0) {\r\n nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(nkey) + delta * intervals[scaleIx]);\r\n scaleIx = (scaleIx + 1) % 7;\r\n nkeyInt = SmoMusic.smoPitchToInt(nkey);\r\n }\r\n while (diatonicIx !== interval) {\r\n nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(nkey) + delta * intervals[scaleIx]);\r\n scaleIx = (scaleIx + 1) % 7;\r\n diatonicIx += delta;\r\n }\r\n return SmoMusic.getEnharmonicInKey(nkey, keySignature);\r\n }\r\n\r\n static getLetterNotePitch(prevPitch: Pitch, letter: PitchLetter, key: string): Pitch {\r\n const pitch: Pitch = JSON.parse(JSON.stringify(prevPitch));\r\n pitch.letter = letter;\r\n\r\n // Make the key 'a' make 'Ab' in the key of Eb, for instance\r\n const vexKsKey = SmoMusic.getKeySignatureKey(letter, key);\r\n if (vexKsKey.length > 1) {\r\n pitch.accidental = vexKsKey[1];\r\n } else {\r\n pitch.accidental = 'n';\r\n }\r\n\r\n // make the octave of the new note as close to previous (or next) note as possible.\r\n const upv = ['bc', 'ac', 'bd', 'da', 'be', 'gc'];\r\n const downv = ['cb', 'ca', 'db', 'da', 'eb', 'cg'];\r\n const delta = prevPitch.letter + pitch.letter;\r\n if (upv.indexOf(delta) >= 0) {\r\n pitch.octave += 1;\r\n }\r\n if (downv.indexOf(delta) >= 0) {\r\n pitch.octave -= 1;\r\n }\r\n return pitch;\r\n }\r\n\r\n /**\r\n * return the key signature, transposed a number of 1/2 steps in Vex key format\r\n * @param key start key\r\n * @param transposeIndex number of 1/2 steps\r\n * @returns {string} - vex key\r\n */\r\n static vexKeySignatureTranspose(key: string, transposeIndex: number): string {\r\n let rv = key;\r\n if (key.length < 1) {\r\n return key;\r\n }\r\n rv = this.vexKeySigWithOffset(key, transposeIndex);\r\n if (rv.length === 1) {\r\n return rv[0].toUpperCase();\r\n }\r\n return rv[0].toUpperCase() + rv.substring(1);\r\n /* const pitch: Pitch = SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(key));\r\n key = SmoMusic.smoPitchesToVexKeys([pitch], transposeIndex, null)[0];\r\n key = SmoMusic.stripVexOctave(key);\r\n key = key[0].toUpperCase() + key.substring(1, key.length);\r\n if (key.length > 1 && key[1] === 'n') {\r\n key = key[0];\r\n }\r\n return key; */\r\n }\r\n static get frequencyMap() {\r\n return SmoAudioPitch.pitchFrequencyMap;\r\n }\r\n\r\n // ### get letterPitchIndex\r\n // Used to adjust octave when transposing.\r\n // Pitches are measured from c, so that b0 is higher than c0, c1 is 1 note higher etc.\r\n static get letterPitchIndex(): Record {\r\n return {\r\n 'c': 0,\r\n 'd': 1,\r\n 'e': 2,\r\n 'f': 3,\r\n 'g': 4,\r\n 'a': 5,\r\n 'b': 6\r\n };\r\n }\r\n\r\n /**\r\n * Indicate if a change from letter note 'one' to 'two' needs us to adjust the\r\n * octave due to the `SmoMusic.letterPitchIndex` (b0 is higher than c0)\r\n * */\r\n static letterChangedOctave(one: PitchLetter, two: PitchLetter): number {\r\n const p1 = SmoMusic.letterPitchIndex[one];\r\n const p2 = SmoMusic.letterPitchIndex[two];\r\n if (p1 < p2 && p2 - p1 > 2) {\r\n return -1;\r\n }\r\n if (p1 > p2 && p1 - p2 > 2) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Transpose a `Pitch` `offset` 1/2 steps\r\n * @param pitch\r\n * @param offset\r\n * @returns\r\n */\r\n static getKeyOffset(pitch: Pitch, offset: number): Pitch {\r\n const canon = vexCanonicalNotes();\r\n // Convert to vex keys, where f# is a string like 'f#'.\r\n let vexKey = SmoMusic.pitchToVexKey(pitch);\r\n vexKey = SmoMusic.vexToCannonical(vexKey);\r\n const rootIndex = canon.indexOf(vexKey);\r\n let octave = pitch.octave;\r\n if (Math.abs(offset) >= 12) {\r\n const octaveOffset = Math.sign(offset) * Math.floor(Math.abs(offset) / 12);\r\n octave += octaveOffset;\r\n offset = offset - (12 * octaveOffset);\r\n if (offset < 0) {\r\n offset = 12 + offset;\r\n }\r\n }\r\n if (rootIndex + offset >= canon.length) {\r\n octave += 1;\r\n }\r\n if (rootIndex + offset < 0) {\r\n octave -= 1;\r\n }\r\n const rv = JSON.parse(JSON.stringify(pitch));\r\n const index = (rootIndex + canon.length + offset) % canon.length;\r\n vexKey = canon[index];\r\n if (vexKey.length > 1) {\r\n rv.accidental = vexKey.substring(1);\r\n vexKey = vexKey[0];\r\n } else {\r\n rv.accidental = '';\r\n }\r\n rv.letter = vexKey;\r\n rv.octave = octave;\r\n return rv;\r\n }\r\n\r\n // ### keySignatureLength\r\n // return the number of sharp/flat in a key signature for sizing guess.\r\n static get keySignatureLength(): Record {\r\n return {\r\n 'C': 0,\r\n 'B': 5,\r\n 'A': 3,\r\n 'F#': 6,\r\n 'Bb': 2,\r\n 'Ab': 4,\r\n 'Gg': 6,\r\n 'G': 1,\r\n 'F': 1,\r\n 'Eb': 3,\r\n 'Db': 5,\r\n 'Cb': 7,\r\n 'C#': 7,\r\n 'E': 4,\r\n 'D': 2\r\n };\r\n }\r\n\r\n static getSharpsInKeySignature(key: string): number {\r\n const sharpKeys = ['G', 'D', 'A', 'E', 'B', 'F#', 'C#'];\r\n if (sharpKeys.indexOf(key.toUpperCase()) < 0) {\r\n return 0;\r\n }\r\n return SmoMusic.keySignatureLength[key.toUpperCase()];\r\n }\r\n\r\n static getFlatsInKeySignature(key: string): number {\r\n const flatKeys = ['F', 'Bb', 'Eb', 'Ab', 'Db', 'Gb', 'Cb'];\r\n let caseKey = key[0].toUpperCase();\r\n if (key.length > 0) {\r\n caseKey += key.substr(1, key.length);\r\n }\r\n if (flatKeys.indexOf(caseKey) < 0) {\r\n return 0;\r\n }\r\n return SmoMusic.keySignatureLength[caseKey];\r\n }\r\n static midiKeyToVexKey(midiKey: number): string {\r\n const sharpKeys = ['G', 'D', 'A', 'E', 'B', 'F#', 'C#'];\r\n const flatKeys = ['F', 'Bb', 'Eb', 'Ab', 'Db', 'Gb', 'Cb'];\r\n if (midiKey === 0) {\r\n return 'C';\r\n }\r\n const flat = midiKey < 0;\r\n let ix = Math.abs(midiKey) - 1;\r\n if (ix > 6) {\r\n return 'C';\r\n }\r\n if (flat) {\r\n return flatKeys[ix];\r\n } else {\r\n return sharpKeys[ix];\r\n }\r\n }\r\n static highestDuration = 32768;\r\n static lowestDuration = 32768 / 256;\r\n static durationsDescending = [\r\n SmoMusic.highestDuration, // breve?\r\n SmoMusic.highestDuration / 2, // whole\r\n SmoMusic.highestDuration / 4, // 1/2\r\n SmoMusic.highestDuration / 8, // 1/4 \r\n SmoMusic.highestDuration / 16, // 8th\r\n SmoMusic.highestDuration / 32, // 16th\r\n SmoMusic.highestDuration / 64, // 32nd\r\n SmoMusic.highestDuration / 128, // 64th\r\n SmoMusic.highestDuration / 256 // 128th\r\n ];\r\n static durationsAscending = [\r\n SmoMusic.highestDuration / 256, // 128th\r\n SmoMusic.highestDuration / 128, // 64th\r\n SmoMusic.highestDuration / 64, // 32nd \r\n SmoMusic.highestDuration / 32, // 16th\r\n SmoMusic.highestDuration / 16, // 8th\r\n SmoMusic.highestDuration / 8, // 1/4\r\n SmoMusic.highestDuration / 4, // 1/2 \r\n SmoMusic.highestDuration / 2, // whole\r\n SmoMusic.highestDuration / 1 // breve\r\n ];\r\n static ticksFromSmoDuration(duration: SimpleDuration): number {\r\n let rv = duration.baseTicks;\r\n let dotValue = duration.baseTicks / 2;\r\n for (var i = 0; i < duration.dots && i < 4; ++i) {\r\n rv += dotValue;\r\n dotValue = dotValue / 2; \r\n }\r\n return rv;\r\n }\r\n static _validDurations: Record | null = null;\r\n static _validDurationKeys: number[] = [];\r\n static get validDurations():Record {\r\n const computeDots = (tt: number, dots: number) => {\r\n let dottedValue = tt;\r\n let dotValue = tt / 2;\r\n let minDot = 0;\r\n for (var xxx = 0; xxx < dots; ++xxx) {\r\n dottedValue += dotValue;\r\n minDot = dotValue;\r\n dotValue = dotValue / 2;\r\n }\r\n return { dottedValue, minDot };\r\n }\r\n if (SmoMusic._validDurations === null) {\r\n SmoMusic._validDurations = {};\r\n let index = 0;\r\n for (var i = 0; i < SmoMusic.durationsDescending.length; ++i) {\r\n const baseTicks = SmoMusic.durationsDescending[i];\r\n for (var j = 3; j >= 1; --j) {\r\n const { dottedValue, minDot } = computeDots(baseTicks, j);\r\n if (dottedValue < SmoMusic.highestDuration && minDot > SmoMusic.lowestDuration) {\r\n SmoMusic._validDurations[dottedValue] = {\r\n index: SmoMusic._validDurationKeys.length,\r\n ticks: dottedValue,\r\n baseTicks,\r\n dots: j\r\n }\r\n SmoMusic._validDurationKeys.push(dottedValue);\r\n }\r\n }\r\n SmoMusic._validDurations[baseTicks] = {\r\n index: SmoMusic._validDurationKeys.length,\r\n ticks: baseTicks,\r\n baseTicks,\r\n dots: 0\r\n };\r\n SmoMusic._validDurationKeys.push(baseTicks);\r\n }\r\n }\r\n return SmoMusic._validDurations;\r\n }\r\n /**\r\n * Get the closest duration from ticks\r\n * @param ticks \r\n * @returns \r\n */\r\n static closestSmoDurationFromTicks(ticks: number): SimpleDuration | null {\r\n if (SmoMusic.validDurations[ticks]) {\r\n return SmoMusic.validDurations[ticks];\r\n }\r\n for (var i = 0; i < SmoMusic._validDurationKeys.length; ++i) {\r\n if (SmoMusic._validDurationKeys[i] < ticks) {\r\n return SmoMusic.validDurations[SmoMusic._validDurationKeys[i]];\r\n }\r\n }\r\n return null;\r\n }\r\n static _ticksToDuration: Record = {};\r\n\r\n // ### ticksToDuration\r\n // Frequently we double/halve a note duration, and we want to find the vex tick duration that goes with that.\r\n static get ticksToDuration(): Record {\r\n let i = 0;\r\n const durations = ['1/2', '1', '2', '4', '8', '16', '32', '64', '128', '256'];\r\n const _ticksToDurationsF = () => {\r\n for (i = 0; i <= SmoMusic.durationsDescending.length - 1; ++i) {\r\n let j = 0;\r\n let dots = '';\r\n let ticks = 0;\r\n\r\n // We support up to 4 'dots'\r\n for (j = 0; j <= 4 && j + i < SmoMusic.durationsDescending.length; ++j) {\r\n ticks += SmoMusic.durationsDescending[i + j];\r\n SmoMusic._ticksToDuration[ticks.toString()] = durations[i] + dots;\r\n dots += 'd';\r\n }\r\n }\r\n };\r\n if (Object.keys(SmoMusic._ticksToDuration).length < 1) {\r\n _ticksToDurationsF();\r\n }\r\n return SmoMusic._ticksToDuration;\r\n } \r\n // static closestSmoDuration(ticks: number): SmoDuration {\r\n // if ()\r\n // }\r\n static timeSignatureToTicks(timeSignature: string): number {\r\n const nd = timeSignature.split('/');\r\n const num = parseInt(nd[0], 10);\r\n const den = parseInt(nd[1], 10);\r\n const base = 2048 * (8 / den);\r\n return base * num;\r\n }\r\n static smoTicksToVexDots(ticks: number) {\r\n const vd = SmoMusic.ticksToDuration[ticks];\r\n if (!vd) {\r\n return 0;\r\n }\r\n const dots = (vd.match(/d/g) || []).length;\r\n return dots;\r\n }\r\n static midiTicksForQuantizeTo(ticks: number) {\r\n const oneDot = ticks * 2;\r\n const twoDots = ticks * 4;\r\n const threeDots = ticks * 8;\r\n const dCount = (str: string) => {\r\n const re = /d/g\r\n return ((str || '').match(re) || []).length\r\n }\r\n return Object.keys(SmoMusic.ticksToDuration).filter((key) => {\r\n const keyInt = parseInt(key, 10);\r\n if (keyInt < ticks) {\r\n return false;\r\n }\r\n const dots = dCount(SmoMusic.ticksToDuration[key]);\r\n if (dots > 0 && keyInt < oneDot) {\r\n return false;\r\n }\r\n if (dots > 1 && keyInt < twoDots) {\r\n return false;\r\n }\r\n if (dots > 2 && keyInt < threeDots) {\r\n return false;\r\n }\r\n if (dots > 3) {\r\n return false;\r\n }\r\n return true;\r\n })\r\n .map((key) => parseInt(key, 10));\r\n // return Object.keys(SmoMusic.ticksToDuration).map((key) => parseInt(key, 10)); \r\n }\r\n static get midiTicksForQuantizeMap(): Record {\r\n return {\r\n 512: SmoMusic.midiTicksForQuantizeTo(1024),\r\n 1024: SmoMusic.midiTicksForQuantizeTo(1024),\r\n 2048: SmoMusic.midiTicksForQuantizeTo(2048)\r\n };\r\n }\r\n static midiTicksForQuantize(ticks: number) {\r\n return SmoMusic.midiTicksForQuantizeMap[ticks];\r\n }\r\n static binarySearch(target: number, ix: number, partition: number, input: number[]) {\r\n const test = input[ix];\r\n const cost = Math.abs(target - test);\r\n if (cost < 1) {\r\n return ({ cost, result: test, newIx: ix, oldIx: ix, partition: 0, input })\r\n }\r\n partition = Math.round(partition / 2) + 1;\r\n const step = Math.round(partition / 2);\r\n if (input[ix] > target) {\r\n return ({ cost, result: input[ix], newIx: ix - step, partition, input });\r\n } else {\r\n return ({ cost, result: input[ix], newIx: ix + step, partition, input });\r\n }\r\n }\r\n static midiTickSearch(target: number, quantize: number) {\r\n const tickSet = SmoMusic.midiTicksForQuantize(quantize);\r\n let partition = Math.round(tickSet.length / 2);\r\n let ix = partition;\r\n let best = { cost: Math.abs(tickSet[ix] - target), result: tickSet[ix], ix };\r\n let result = SmoMusic.binarySearch(target, ix, partition, tickSet);\r\n while (best.cost > 1) {\r\n if (best.cost > result.cost) {\r\n best.cost = result.cost;\r\n best.result = result.result;\r\n best.ix = ix;\r\n }\r\n ix = result.newIx;\r\n if (result.partition <= 3) {\r\n break;\r\n }\r\n result = SmoMusic.binarySearch(target, result.newIx, result.partition, tickSet);\r\n }\r\n if (result.cost > 1 && result.partition > 0) {\r\n let i = 0;\r\n const ix = best.ix;\r\n const step = best.result > target ? -1 : 1;\r\n for (i = 0; i < (result.partition + 2) && (i * step) + ix < tickSet.length && (i * step) + ix >= 0; ++i) {\r\n const newIx = (i * step) + ix;\r\n const cost = Math.abs(target - tickSet[newIx]);\r\n if (best.cost > cost) {\r\n best.cost = cost;\r\n best.ix = (i * step) + ix;\r\n best.result = tickSet[(i * step) + ix];\r\n }\r\n }\r\n }\r\n return { cost: best.cost, result: best.result };\r\n }\r\n // ## closestVexDuration\r\n // ## Description:\r\n // return the closest vex duration >= to the actual number of ticks. Used in beaming\r\n // triplets which have fewer ticks then their stem would normally indicate.\r\n static closestVexDuration(ticks: number): string {\r\n let stemTicks = SmoMusic.highestDuration;\r\n\r\n // The stem value is the type on the non-tuplet note, e.g. 1/8 note\r\n // for a triplet.\r\n while (ticks <= stemTicks) {\r\n stemTicks = stemTicks / 2;\r\n }\r\n stemTicks = stemTicks * 2;\r\n return SmoMusic.ticksToDuration[stemTicks];\r\n }\r\n\r\n // ## closestBeamDuration\r\n // ## Description:\r\n // return the closest smo duration >= to the actual number of ticks. Used in beaming\r\n // triplets which have fewer ticks then their stem would normally indicate.\r\n static closestBeamDuration(ticks: number): SimpleDuration {\r\n let stemTicks = SmoMusic.highestDuration;\r\n\r\n // The stem value is the type on the non-tuplet note, e.g. 1/8 note\r\n // for a triplet.\r\n while (ticks <= stemTicks) {\r\n stemTicks = stemTicks / 2;\r\n }\r\n stemTicks = stemTicks * 2;\r\n return SmoMusic.validDurations[stemTicks];\r\n }\r\n\r\n\r\n\r\n // ### closestDurationTickLtEq\r\n // Price is right style, closest tick value without going over. Used to pad\r\n // rests when reading musicXML.\r\n static closestDurationTickLtEq(ticks: number): number {\r\n const sorted = Object.keys(SmoMusic.ticksToDuration)\r\n .map((key) => parseInt(key, 10))\r\n .filter((key) => key <= ticks);\r\n return sorted[sorted.length - 1];\r\n }\r\n /**\r\n * Return array of valid note-lengths from an odd number of ticks,\r\n * so we can come as close as possible to representing the ticks with notes\r\n * @param ticks\r\n * @returns\r\n */\r\n static splitIntoValidDurations(ticks: number): number[] {\r\n const rv = [];\r\n let closest = 0;\r\n while (ticks > 128) {\r\n closest = SmoMusic.closestDurationTickLtEq(ticks);\r\n ticks -= closest;\r\n rv.push(closest);\r\n }\r\n return rv;\r\n }\r\n // ### vexStemType\r\n // return the vex stem type (no dots)\r\n static vexStemType(ticks: number): string {\r\n const str = SmoMusic.ticksToDuration[SmoMusic.splitIntoValidDurations(ticks)[0]];\r\n if (str.indexOf('d') >= 0) {\r\n return str.substr(0, str.indexOf('d'));\r\n }\r\n return str;\r\n }\r\n\r\n // ### Description:\r\n // Get ticks for this note with an added dot. Return\r\n // identity if that is not a supported value.\r\n static getNextDottedLevel(ticks: number): number {\r\n const ticksOrNull = SmoMusic.closestSmoDurationFromTicks(ticks);\r\n if (ticksOrNull && ticksOrNull.index > 0) {\r\n const newDuration = SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index - 1]];\r\n if (newDuration.baseTicks === ticksOrNull.baseTicks) {\r\n return newDuration.ticks;\r\n }\r\n }\r\n return ticks;\r\n }\r\n\r\n // ### Description:\r\n // Get ticks for this note with one fewer dot. Return\r\n // identity if that is not a supported value.\r\n static getPreviousDottedLevel(ticks: number): number {\r\n const ticksOrNull = SmoMusic.closestSmoDurationFromTicks(ticks);\r\n if (ticksOrNull && ticksOrNull.index < SmoMusic._validDurationKeys.length + 1) {\r\n const newDuration = SmoMusic.validDurations[SmoMusic._validDurationKeys[ticksOrNull.index + 1]];\r\n if (newDuration.baseTicks === ticksOrNull.baseTicks) {\r\n return newDuration.ticks;\r\n }\r\n }\r\n return ticks;\r\n }\r\n\r\n /**\r\n * break the duration up into an array of durations, to split a long\r\n * note up between bars when pasting.\r\n * @param duration\r\n * @returns\r\n */\r\n static gcdMap(duration: number): number[] {\r\n let k = 0;\r\n const keys = Object.keys(SmoMusic.ticksToDuration).map((x) => parseInt(x, 10));\r\n const dar = [];\r\n const gcd = (td: number) => {\r\n let rv = keys[0];\r\n for (k = 1; k < keys.length; ++k) {\r\n if (td % keys[k] === 0) {\r\n rv = keys[k];\r\n }\r\n }\r\n return rv;\r\n };\r\n while (duration > 0 && !SmoMusic.ticksToDuration[duration]) {\r\n const div = gcd(duration);\r\n duration = duration - div;\r\n dar.push(div);\r\n }\r\n if (duration > 0) {\r\n dar.push(duration);\r\n }\r\n return dar.sort((a, b) => a > b ? -1 : 1);\r\n }\r\n\r\n static notesFromLetters(startPitch: Pitch, clef: Clef, keySignature: string, duration: number, letters: string): SmoNote[] {\r\n const rv: SmoNote[] = [];\r\n let curPitch = startPitch;\r\n letters.split('').forEach((letter) => {\r\n curPitch = SmoMusic.getLetterNotePitch(curPitch, letter as PitchLetter, keySignature);\r\n const defs = SmoNote.defaults;\r\n defs.ticks = { numerator: duration, denominator: 1, remainder: 0 };\r\n defs.pitches = [curPitch];\r\n defs.clef = clef;\r\n rv.push(new SmoNote(defs));\r\n });\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoNote}. Notes have pitches and a duration, and other\r\n * modifiers that can affect display or playback.\r\n * @module /smo/data/note\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoNoteModifierBase, SmoArticulation, SmoLyric, SmoGraceNote, SmoMicrotone, SmoOrnament, SmoDynamicText, \r\n SmoArpeggio, SmoArticulationParametersSer, GraceNoteParamsSer, SmoOrnamentParamsSer, SmoMicrotoneParamsSer,\r\n SmoClefChangeParamsSer, SmoClefChange, SmoLyricParamsSer, SmoDynamicTextSer, SmoTabNote,\r\n SmoTabNoteParamsSer,\r\n SmoTabNoteParams,\r\n SmoFretPosition} from './noteModifiers';\r\nimport { SmoMusic } from './music';\r\nimport { Ticks, Pitch, SmoAttrs, Transposable, PitchLetter, SvgBox, getId,\r\n createXmlAttribute, serializeXmlModifierArray} from './common';\r\nimport { FontInfo, vexCanonicalNotes } from '../../common/vex';\r\nimport { SmoTupletParamsSer } from './tuplet';\r\n\r\nexport interface TupletInfo {\r\n id: string;\r\n}\r\n// @internal\r\nexport type NoteType = 'n' | 'r' | '/';\r\n// @internal\r\nexport type NoteStringParam = 'noteHead' | 'clef';\r\n// @internal\r\nexport const NoteStringParams: NoteStringParam[] = ['noteHead', 'clef'];\r\n// @internal\r\nexport type NoteNumberParam = 'beamBeats' | 'flagState';\r\n// @internal\r\nexport const NoteNumberParams: NoteNumberParam[] = ['beamBeats', 'flagState'];\r\n// @internal\r\nexport type NoteBooleanParam = 'hidden' | 'endBeam' | 'isCue';\r\n// @internal\r\nexport const NoteBooleanParams: NoteBooleanParam[] = ['hidden', 'endBeam', 'isCue'];\r\n/**\r\n * Constructor parameters for a note. Usually you will call\r\n * {@link SmoNote.defaults}, and modify the parameters you need to change.\r\n * @param noteType\r\n * @param noteHead is non-empty, a Vex notehead code TODO make a record<>\r\n * @param clef determines how the pitch is placed on the staff\r\n * @param textModifiers are lyrics, chords, dynamics\r\n * @param articulations\r\n * @param graceNotes\r\n * @param ornaments\r\n * @param tones\r\n * @param tuplet tuplet info, if the note is part of a tuplet\r\n * @param endBeam true if this is the last note in a beam\r\n * @param fillStyle for special effects, for instance to highlight active voice\r\n * @param hidden indicates the note (usually a rest) is invisible (transparent)\r\n * @param beamBeats how many ticks to use before beaming a group\r\n * @param flagState up down auto\r\n * @param ticks duration\r\n * @param stemTicks visible duration (todo update this comment)\r\n * @param pitches SmoPitch array\r\n * @param isCue tiny notes\r\n * @category SmoParameters\r\n */\r\nexport interface SmoNoteParams {\r\n /** note, rest, slash */\r\n noteType: NoteType,\r\n /**\r\n * custom note head, defaults to black or open (based on duration)\r\n */\r\n noteHead: string,\r\n /**\r\n * clef of this note, determines leger lines and sound\r\n */\r\n clef: string,\r\n /**\r\n * lyrics, annotations\r\n */\r\n textModifiers: SmoNoteModifierBase[],\r\n /**\r\n * articulations attached to the note\r\n */\r\n articulations: SmoArticulation[],\r\n /**\r\n * grace notes before the note\r\n */\r\n graceNotes: SmoGraceNote[],\r\n /**\r\n * ornaments attached to the note\r\n */\r\n ornaments: SmoOrnament[],\r\n /**\r\n * microtones attached to the note\r\n */\r\n tones: SmoMicrotone[],\r\n /**\r\n * arpeggio on the note\r\n */\r\n arpeggio?: SmoArpeggio,\r\n /**\r\n * if this note is part of a tuplet\r\n */\r\n tupletId: string | null,\r\n /*\r\n * If a custom tab note is assigned to this note\r\n */\r\n tabNote?: SmoTabNote,\r\n /**\r\n * does this note force the end of a beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * fill, for the pretty\r\n */\r\n fillStyle: string | null,\r\n /**\r\n * indicates 'hidden' note. Useful for padding beginning/end of partial measures\r\n */\r\n hidden: boolean,\r\n /**\r\n * how many notes to beam before creating a new beam group\r\n */\r\n beamBeats: number,\r\n /**\r\n * up, down, auto\r\n */\r\n flagState: number,\r\n /**\r\n * note duration\r\n */\r\n ticks: Ticks,\r\n /**\r\n * visible duration\r\n */\r\n stemTicks: number,\r\n /**\r\n * pitch for leger lines and sounds\r\n */\r\n pitches: Pitch[],\r\n /**\r\n * draw cue sized\r\n */\r\n isCue: boolean,\r\n /**\r\n * indicates this note goes with a clef change\r\n */\r\n clefNote: SmoClefChangeParamsSer\r\n}\r\n\r\nexport type SmoNoteTextModifierSer = SmoLyricParamsSer | SmoDynamicTextSer;\r\n/**\r\n * The serializable bits of a Note. Notes will always \r\n * have a type, and if a sounded note, can contain pitches. It will always\r\n * contains ticks.\r\n * @category serialization\r\n */\r\nexport interface SmoNoteParamsSer {\r\n /** constructor */\r\n ctor: string;\r\n /** attributes for identity */\r\n attrs: SmoAttrs;\r\n /** note, rest, slash */\r\n noteType: NoteType,\r\n /**\r\n * custom note head, defaults to black or open (based on duration)\r\n */\r\n noteHead: string,\r\n /**\r\n * clef of this note, determines leger lines and sound\r\n */\r\n clef: string,\r\n /**\r\n * lyrics, annotations\r\n */\r\n textModifiers: SmoNoteTextModifierSer[],\r\n /**\r\n * articulations attached to the note\r\n */\r\n articulations: SmoArticulationParametersSer,\r\n /**\r\n * grace notes before the note\r\n */\r\n graceNotes: GraceNoteParamsSer[],\r\n /**\r\n * ornaments attached to the note\r\n */\r\n ornaments: SmoOrnamentParamsSer[],\r\n /**\r\n * microtones attached to the note\r\n */\r\n tones: SmoMicrotoneParamsSer[],\r\n /**\r\n * arpeggio on the note\r\n */\r\n arpeggio?: SmoArticulationParametersSer,\r\n /**\r\n * if this note is part of a tuplet\r\n */\r\n tupletId?: string,\r\n /**\r\n * If a custom tab note is here, keep track of it\r\n */\r\n tabNote?: SmoTabNoteParamsSer,\r\n /**\r\n * does this note force the end of a beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * fill, for the pretty\r\n */\r\n fillStyle: string | null,\r\n /**\r\n * indicates 'hidden' note. Useful for padding beginning/end of partial measures\r\n */\r\n hidden: boolean,\r\n /**\r\n * how many notes to beam before creating a new beam group\r\n */\r\n beamBeats: number,\r\n /**\r\n * up, down, auto\r\n */\r\n flagState: number,\r\n /**\r\n * note duration\r\n */\r\n ticks: Ticks,\r\n /**\r\n * visible duration (todo: update this comment)\r\n */\r\n stemTicks: number,\r\n /**\r\n * pitch for leger lines and sounds\r\n */\r\n pitches: Pitch[],\r\n /**\r\n * draw cue sized\r\n */\r\n isCue: boolean,\r\n /**\r\n * indicates this note goes with a clef change\r\n */\r\n clefNote? : SmoClefChangeParamsSer\r\n}\r\nfunction isSmoNoteParamsSer(params: Partial): params is SmoNoteParamsSer {\r\n if (params.ctor && params.ctor === 'SmoNote') {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexport function isSmoNote(transposable: Transposable): transposable is SmoNote {\r\n if (Array.isArray((transposable as any).graceNotes)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * SmoNote contains the pitch and duration of a note or chord.\r\n * It can also contain arrays of modifiers like lyrics, articulations etc.\r\n * Also information about the beaming, flag etc.\r\n * @category SmoObject\r\n * */\r\nexport class SmoNote implements Transposable {\r\n constructor(params: SmoNoteParams) {\r\n const defs = SmoNote.defaults;\r\n NoteStringParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n this.tupletId = params.tupletId;\r\n this.noteType = params.noteType ? params.noteType : defs.noteType;\r\n NoteNumberParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n NoteBooleanParams.forEach((param) => {\r\n this[param] = params[param] ? params[param] : defs[param];\r\n });\r\n if (params.clefNote) {\r\n this.clefNote = new SmoClefChange(params.clefNote);\r\n }\r\n if (params.tabNote) {\r\n this.tabNote = new SmoTabNote(params.tabNote);\r\n }\r\n const pitches = params.pitches ? params.pitches : defs.pitches;\r\n const ticks = params.ticks ? params.ticks : defs.ticks;\r\n this.ticks = JSON.parse(JSON.stringify(ticks));\r\n this.stemTicks = params.stemTicks ? params.stemTicks : defs.stemTicks;\r\n this.pitches = JSON.parse(JSON.stringify(pitches));\r\n this.clef = params.clef ? params.clef : defs.clef;\r\n this.fillStyle = params.fillStyle ? params.fillStyle : '';\r\n // legacy tuplet, now we just need the tuplet id\r\n if ((params as any).tuplet) {\r\n this.tupletId = (params as any).tuplet.id;\r\n }\r\n\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoNote'\r\n }; // else inherit\r\n }\r\n static get flagStates() {\r\n return { auto: 0, up: 1, down: 2 };\r\n }\r\n // Note type and ID\r\n attrs: SmoAttrs;\r\n flagState: number = SmoNote.flagStates.auto;\r\n textModifiers: SmoNoteModifierBase[] = [];\r\n articulations: SmoArticulation[] = [];\r\n ornaments: SmoOrnament[] = [];\r\n pitches: Pitch[] = [];\r\n noteHead: string = '';\r\n arpeggio?: SmoArpeggio;\r\n tabNote?: SmoTabNote;\r\n clef: string = 'treble';\r\n clefNote: SmoClefChange | null = null;\r\n graceNotes: SmoGraceNote[] = [];\r\n noteType: NoteType = 'n';\r\n fillStyle: string = '';\r\n hidden: boolean = false;\r\n tupletId: string | null = null;\r\n tones: SmoMicrotone[] = [];\r\n endBeam: boolean = false;\r\n ticks: Ticks = { numerator: 4096, denominator: 1, remainder: 0 };\r\n stemTicks: number = 4096;\r\n beamBeats: number = 4096;\r\n beam_group: SmoAttrs | null = null;\r\n renderId: string | null = null;\r\n keySignature: string = 'c';\r\n logicalBox: SvgBox | null = null;\r\n isCue: boolean = false;\r\n hasTabNote: boolean = true;\r\n accidentalsRendered: string[] = [];// set by renderer if accidental is to display\r\n /**\r\n * used in serialization\r\n * @internal\r\n */\r\n static get parameterArray() {\r\n return ['ticks', 'pitches', 'noteType', 'tuplet', 'clef', 'isCue', 'stemTicks',\r\n 'endBeam', 'beamBeats', 'flagState', 'noteHead', 'fillStyle', 'hidden', 'arpeggio', 'clefNote',\r\n 'tupletId'];\r\n }\r\n /**\r\n * Default constructor parameters. We always return a copy so the caller can modify it\r\n */\r\n static get defaults(): SmoNoteParams {\r\n return JSON.parse(JSON.stringify({\r\n noteType: 'n',\r\n noteHead: 'n',\r\n clef: 'treble',\r\n textModifiers: [],\r\n articulations: [],\r\n graceNotes: [],\r\n ornaments: [],\r\n tones: [],\r\n endBeam: false,\r\n fillStyle: '',\r\n hidden: false,\r\n beamBeats: 4096,\r\n isCue: false,\r\n flagState: SmoNote.flagStates.auto,\r\n ticks: {\r\n numerator: 4096,\r\n denominator: 1,\r\n remainder: 0\r\n },\r\n stemTicks: 4096,\r\n pitches: [{\r\n letter: 'b',\r\n octave: 4,\r\n accidental: 'n'\r\n }],\r\n }));\r\n }\r\n /**\r\n * Up, down auto (tri-state)\r\n */\r\n toggleFlagState() {\r\n this.flagState = (this.flagState + 1) % 3;\r\n }\r\n\r\n //todo: double check this\r\n get dots() {\r\n const vexDuration = SmoMusic.closestSmoDurationFromTicks(this.stemTicks);\r\n if (!vexDuration) {\r\n return 0;\r\n }\r\n return vexDuration.dots;\r\n }\r\n\r\n private _addModifier(dynamic: SmoDynamicText, toAdd: boolean) {\r\n var tms = [];\r\n this.textModifiers.forEach((tm) => {\r\n if (tm.attrs.type !== dynamic.attrs.type) {\r\n tms.push(tm);\r\n }\r\n });\r\n if (toAdd) {\r\n tms.push(dynamic);\r\n }\r\n this.textModifiers = tms;\r\n }\r\n\r\n setArticulation(articulation: SmoArticulation, set: boolean) {\r\n var tms = [];\r\n this.articulations.forEach((tm) => {\r\n if (tm.articulation !== articulation.articulation) {\r\n tms.push(tm);\r\n }\r\n });\r\n if (set) {\r\n tms.push(articulation);\r\n }\r\n this.articulations = tms;\r\n }\r\n getArticulations() {\r\n return this.articulations;\r\n }\r\n getArticulation(stringCode: string) {\r\n return this.articulations.find((aa) => aa.articulation === stringCode);\r\n }\r\n getOrnament(stringCode: string) {\r\n return this.ornaments.find((aa) => aa.ornament === stringCode);\r\n }\r\n\r\n /**\r\n * Add a new dynamic to thisnote\r\n * @param dynamic\r\n */\r\n addDynamic(dynamic: SmoDynamicText) {\r\n this._addModifier(dynamic, true);\r\n }\r\n /**\r\n * Remove the dynamic from this note.\r\n * @param dynamic \r\n */\r\n removeDynamic(dynamic: SmoDynamicText) {\r\n this._addModifier(dynamic, false);\r\n }\r\n /**\r\n * Get all note modifiers of a type, either a lyric or a dynamic\r\n * @param type ctor\r\n * @returns \r\n */\r\n getModifiers(type: string) {\r\n var ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === type\r\n );\r\n return ms;\r\n }\r\n setArpeggio(arp: SmoArpeggio) {\r\n this.arpeggio = arp;\r\n }\r\n /**\r\n * \r\n * @returns the longest lyric, used for formatting\r\n */\r\n longestLyric(): SmoLyric | null {\r\n const tms: SmoNoteModifierBase[] = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.lyric\r\n );\r\n if (!tms.length) {\r\n return null;\r\n }\r\n return tms.reduce((m1, m2) =>\r\n (m1 as SmoLyric).getText().length > (m2 as SmoLyric).getText().length ? m1 : m2\r\n ) as SmoLyric;\r\n }\r\n /** Add a lyric to this note, replacing another in the same verse */\r\n addLyric(lyric: SmoLyric) {\r\n const tms = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type !== 'SmoLyric' || (mod as SmoLyric).parser !== lyric.parser ||\r\n (mod as SmoLyric).verse !== lyric.verse\r\n );\r\n tms.push(lyric);\r\n this.textModifiers = tms;\r\n }\r\n\r\n /**\r\n * @returns array of lyrics that are lyrics\r\n */\r\n getTrueLyrics(): SmoLyric[] {\r\n const ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.lyric);\r\n ms.sort((a, b) => (a as SmoLyric).verse - (b as SmoLyric).verse);\r\n return (ms as SmoLyric[]);\r\n }\r\n /**\r\n * \r\n * @returns array of SmoLyric whose parsers are chord\r\n */\r\n getChords(): SmoLyric[] {\r\n const ms = this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === SmoLyric.parsers.chord\r\n );\r\n return ms as SmoLyric[];\r\n }\r\n /**\r\n * \r\n * @param lyric lyric to remove, find the best match if there are multiples\r\n */\r\n removeLyric(lyric: SmoLyric) {\r\n const tms = this.textModifiers.filter((mod: SmoNoteModifierBase) =>\r\n mod.attrs.type !== 'SmoLyric' || (mod as SmoLyric).verse !== lyric.verse || (mod as SmoLyric).parser !== lyric.parser\r\n );\r\n this.textModifiers = tms;\r\n }\r\n /**\r\n * \r\n * @param verse \r\n * @param parser \r\n * @returns \r\n */\r\n getLyricForVerse(verse: number, parser: number) {\r\n return this.textModifiers.filter((mod) =>\r\n mod.attrs.type === 'SmoLyric' && (mod as SmoLyric).parser === parser && (mod as SmoLyric).verse === verse\r\n );\r\n }\r\n\r\n /**\r\n * \r\n * @param fontInfo\r\n */\r\n setLyricFont(fontInfo: FontInfo) {\r\n const lyrics = this.getTrueLyrics();\r\n\r\n lyrics.forEach((lyric) => {\r\n lyric.fontInfo = JSON.parse(JSON.stringify(fontInfo));\r\n });\r\n }\r\n\r\n /**\r\n * @param adjustNoteWidth if true, vex will consider the lyric width when formatting the measure\r\n */\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n const lyrics = this.getTrueLyrics();\r\n lyrics.forEach((lyric) => {\r\n lyric.adjustNoteWidth = adjustNoteWidth;\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n const chords = this.getChords();\r\n chords.forEach((chord) => {\r\n chord.adjustNoteWidth = adjustNoteWidth;\r\n });\r\n }\r\n\r\n setChordFont(fontInfo: FontInfo) {\r\n const chords = this.getChords();\r\n chords.forEach((chord) => {\r\n chord.fontInfo = JSON.parse(JSON.stringify(fontInfo));\r\n });\r\n }\r\n\r\n getOrnaments() {\r\n return this.ornaments.filter((oo) => oo.isJazz() === false\r\n && typeof(SmoOrnament.textNoteOrnaments[oo.ornament]) !== 'string');\r\n }\r\n\r\n getJazzOrnaments() {\r\n return this.ornaments.filter((oo) => oo.isJazz());\r\n }\r\n getTextOrnaments() {\r\n return this.ornaments.filter((oo) => typeof(SmoOrnament.textNoteOrnaments[oo.ornament]) === 'string');\r\n }\r\n\r\n /**\r\n * Toggle the ornament up/down/off\r\n * @param ornament\r\n */\r\n toggleOrnament(ornament: SmoOrnament) {\r\n const aix = this.ornaments.filter((a) =>\r\n a.attrs.type === 'SmoOrnament' && a.ornament === ornament.ornament\r\n );\r\n if (!aix.length) {\r\n this.ornaments.push(ornament);\r\n } else {\r\n this.ornaments = [];\r\n }\r\n }\r\n setOrnament(ornament: SmoOrnament, set: boolean) {\r\n const aix = this.ornaments.filter((a) =>\r\n a.ornament !== ornament.ornament\r\n );\r\n this.ornaments = aix;\r\n if (set) {\r\n this.ornaments.push(ornament);\r\n }\r\n }\r\n setTabNote(params: SmoTabNoteParams) {\r\n this.tabNote = new SmoTabNote(params);\r\n this.tabNote.isAssigned = true;\r\n }\r\n clearTabNote() {\r\n this.tabNote = undefined;\r\n }\r\n /**\r\n * Toggle the ornament up/down/off\r\n * @param articulation\r\n */\r\n toggleArticulation(articulation: SmoArticulation) {\r\n var aix = this.articulations.findIndex((a) =>\r\n a.articulation === articulation.articulation\r\n );\r\n if (aix >= 0) {\r\n const cur = this.articulations[aix];\r\n if (cur.position === SmoArticulation.positions.above) {\r\n cur.position = SmoArticulation.positions.below;\r\n return;\r\n } else {\r\n this.setArticulation(articulation, false);\r\n return;\r\n }\r\n }\r\n this.setArticulation(articulation, true);\r\n }\r\n \r\n /**\r\n * Sort pitches in pitch order, Vex likes to receive pitches in order\r\n * @param note \r\n */\r\n static sortPitches(note: Transposable) {\r\n const canon = vexCanonicalNotes();\r\n const keyIndex = ((pitch: Pitch) =>\r\n canon.indexOf(pitch.letter) + pitch.octave * 12\r\n );\r\n note.pitches.sort((a, b) => keyIndex(a) - keyIndex(b));\r\n }\r\n setNoteHead(noteHead: string) {\r\n if (this.noteHead === noteHead) {\r\n this.noteHead = '';\r\n } else {\r\n this.noteHead = noteHead;\r\n }\r\n }\r\n /**\r\n * \r\n * @param graceNote\r\n * @param offset the index from the first grace note\r\n */\r\n addGraceNote(graceNote: SmoGraceNote, offset: number) {\r\n if (typeof(offset) === 'undefined') {\r\n offset = 0;\r\n }\r\n graceNote.clef = this.clef;\r\n this.graceNotes.push(graceNote);\r\n }\r\n removeGraceNote(offset: number) {\r\n if (offset >= this.graceNotes.length) {\r\n return;\r\n }\r\n this.graceNotes.splice(offset, 1);\r\n }\r\n getGraceNotes() {\r\n return this.graceNotes;\r\n }\r\n /**\r\n * Add another pitch to this note at `offset` 1/2 steps\r\n * @param note\r\n * @param offset\r\n */\r\n static addPitchOffset(note: Transposable, offset: number): void {\r\n if (note.pitches.length === 0) {\r\n return;\r\n }\r\n note.noteType = 'n';\r\n const pitch = note.pitches[0];\r\n note.pitches.push(SmoMusic.getKeyOffset(pitch, offset));\r\n SmoNote.sortPitches(note);\r\n }\r\n /**\r\n * Add another pitch to this note at `offset` 1/2 steps\r\n * @param offset\r\n * @returns \r\n */\r\n addPitchOffset(offset: number) {\r\n if (this.pitches.length === 0) {\r\n return;\r\n }\r\n this.noteType = 'n';\r\n const pitch = this.pitches[0];\r\n this.pitches.push(SmoMusic.getKeyOffset(pitch, offset));\r\n SmoNote.sortPitches(this);\r\n }\r\n toggleRest() {\r\n this.noteType = (this.noteType === 'r' ? 'n' : 'r');\r\n }\r\n toggleSlash() {\r\n this.noteType = (this.noteType === '/' ? 'n' : '/');\r\n }\r\n makeSlash() {\r\n this.noteType = '/';\r\n }\r\n makeRest() {\r\n this.noteType = 'r';\r\n }\r\n isRest() {\r\n return this.noteType === 'r';\r\n }\r\n isSlash() {\r\n return this.noteType === '/';\r\n }\r\n isHidden() {\r\n return this.hidden;\r\n }\r\n\r\n makeNote() {\r\n this.noteType = 'n';\r\n // clear fill style if we were hiding rests\r\n this.fillStyle = '';\r\n this.hidden = false;\r\n }\r\n /**\r\n * set note opacity on/off\r\n * @param val\r\n */\r\n makeHidden(val: boolean) {\r\n this.hidden = val;\r\n this.fillStyle = val ? '#aaaaaa7f' : '';\r\n }\r\n\r\n /**\r\n * Return true if this note is part of a tuplet\r\n */\r\n get isTuplet(): boolean {\r\n return typeof(this.tupletId) !== 'undefined' && this.tupletId !== null && this.tupletId.length > 0;\r\n }\r\n\r\n /**\r\n * we only support a single microtone, not sure if vex supports multiple\r\n * @param tone \r\n */\r\n addMicrotone(tone: SmoMicrotone) {\r\n const ar = this.tones.filter((tn: SmoMicrotone) => tn.pitchIndex !== tone.pitchIndex);\r\n ar.push(tone);\r\n this.tones = ar;\r\n }\r\n removeMicrotone() {\r\n this.tones = [];\r\n }\r\n getMicrotone(toneIndex: number) {\r\n return this.tones.find((tn) => tn.pitchIndex === toneIndex);\r\n }\r\n\r\n getMicrotones() {\r\n return this.tones;\r\n }\r\n /**\r\n * cycle through the list of enharmonics for this note.\r\n * @param pitch\r\n * @returns \r\n */\r\n static toggleEnharmonic(pitch: Pitch) {\r\n const lastLetter = pitch.letter;\r\n let vexPitch = SmoMusic.stripVexOctave(SmoMusic.pitchToVexKey(pitch));\r\n vexPitch = SmoMusic.getEnharmonic(vexPitch);\r\n\r\n pitch.letter = vexPitch[0] as PitchLetter;\r\n pitch.accidental = vexPitch.length > 1 ?\r\n vexPitch.substring(1, vexPitch.length) : 'n';\r\n pitch.octave += SmoMusic.letterChangedOctave(lastLetter, pitch.letter);\r\n return pitch;\r\n }\r\n /**\r\n * transpose a note or grace note to a key-friendly enharmonic\r\n * @param pitchArray\r\n * @param offset\r\n * @param originalKey - keySignature from original note\r\n * @param destinationKey - keySignature we are transposing into\r\n * @returns \r\n */\r\n transpose(pitchArray: number[], offset: number, originalKey: string, destinationKey: string): Transposable {\r\n return SmoNote.transpose(this, pitchArray, offset, originalKey, destinationKey);\r\n }\r\n /**\r\n * used to add chord and pitch by piano widget\r\n * @param pitch\r\n */\r\n toggleAddPitch(pitch: Pitch) {\r\n const pitches: Pitch[] = [];\r\n let exists = false;\r\n this.pitches.forEach((o) => {\r\n if (o.letter !== pitch.letter ||\r\n o.octave !== pitch.octave ||\r\n o.accidental !== pitch.accidental) {\r\n pitches.push(o);\r\n } else {\r\n exists = true;\r\n }\r\n });\r\n this.pitches = pitches;\r\n if (!exists) {\r\n this.pitches.push(JSON.parse(JSON.stringify(pitch)));\r\n this.noteType = 'n';\r\n }\r\n SmoNote.sortPitches(this);\r\n }\r\n /**\r\n * @param note note to transpose\r\n * @param pitchArray an array of indices (not pitches) that indicate which pitches get altered if a chord\r\n * @param offset in 1/2 step\r\n * @param originalKey original key for enharmonic-friendly key\r\n * @param destinationKey destination key signature\r\n * @returns \r\n */\r\n static transpose(note: Transposable, pitchArray: number[], offset: number, originalKey: string, destinationKey: string): Transposable {\r\n let index: number = 0;\r\n let j: number = 0;\r\n if (offset === 0 && originalKey === destinationKey) {\r\n return note;\r\n }\r\n // If no specific pitch, use all the pitches\r\n if (pitchArray.length === 0) {\r\n pitchArray = Array.from(note.pitches.keys());\r\n }\r\n for (j = 0; j < pitchArray.length; ++j) {\r\n index = pitchArray[j];\r\n if (index + 1 > note.pitches.length) {\r\n SmoNote.addPitchOffset(note, offset);\r\n } else {\r\n const original = JSON.parse(JSON.stringify(note.pitches[index]));\r\n const pitch = SmoMusic.transposePitchForKey(original, originalKey, destinationKey, offset);\r\n note.pitches[index] = pitch;\r\n }\r\n }\r\n // If the fret position can be adjusted on the current string, keep the tab note. Else\r\n // delete the tab note, and auto-generate it to display default\r\n if (isSmoNote(note)) {\r\n const sn: SmoNote = note;\r\n if (sn.tabNote && sn.tabNote.positions.length > 0) {\r\n const frets: SmoFretPosition[] = [];\r\n sn.tabNote.positions.forEach((pos) => {\r\n if (pos.fret + offset > 0) {\r\n frets.push({ string: pos.string, fret: pos.fret + offset});\r\n }\r\n });\r\n if (frets.length) {\r\n sn.tabNote.positions = frets;\r\n } else {\r\n sn.tabNote = undefined;\r\n }\r\n }\r\n }\r\n SmoNote.sortPitches(note);\r\n return note;\r\n }\r\n get tickCount() {\r\n return this.ticks.numerator / this.ticks.denominator + this.ticks.remainder;\r\n }\r\n\r\n /**\r\n * Copy the note, give it unique id\r\n * @param note\r\n * @returns \r\n */\r\n static clone(note: SmoNote) {\r\n var rv = SmoNote.deserialize(note.serialize());\r\n\r\n // make sure id is unique\r\n rv.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoNote'\r\n };\r\n return rv;\r\n }\r\n\r\n /**\r\n * @param note\r\n * @param ticks\r\n * @returns A note identical to `note` but with different duration\r\n */\r\n static cloneWithDuration(note: SmoNote, ticks: Ticks | number, stemTicks: number | null = null) {\r\n if (typeof(ticks) === 'number') {\r\n ticks = { numerator: ticks, denominator: 1, remainder: 0 };\r\n }\r\n const rv = SmoNote.clone(note);\r\n rv.ticks = ticks;\r\n\r\n if (stemTicks === null) {\r\n rv.stemTicks = ticks.numerator + ticks.remainder;\r\n } else {\r\n rv.stemTicks = stemTicks;\r\n }\r\n\r\n return rv;\r\n }\r\n static serializeModifier(modifiers: SmoNoteModifierBase[]) : object[] {\r\n const rv: object[] = [];\r\n modifiers.forEach((modifier: SmoNoteModifierBase) => {\r\n rv.push(modifier.serialize());\r\n });\r\n return rv;\r\n }\r\n\r\n private _serializeModifiers(params: any) {\r\n params.textModifiers = SmoNote.serializeModifier(this.textModifiers);\r\n params.graceNotes = SmoNote.serializeModifier(this.graceNotes);\r\n params.articulations = SmoNote.serializeModifier(this.articulations);\r\n params.ornaments = SmoNote.serializeModifier(this.ornaments);\r\n params.tones = SmoNote.serializeModifier(this.tones);\r\n if (this.arpeggio) {\r\n params.arpeggio = this.arpeggio.serialize();\r\n }\r\n }\r\n /**\r\n * @returns a JSON object that can be used to create this note\r\n */\r\n serialize(): SmoNoteParamsSer {\r\n var params: Partial = { ctor: 'SmoNote' };\r\n smoSerialize.serializedMergeNonDefault(SmoNote.defaults, SmoNote.parameterArray, this, params);\r\n if (this.tabNote) {\r\n params.tabNote = this.tabNote.serialize();\r\n }\r\n if (this.clefNote) {\r\n params.clefNote = this.clefNote.serialize();\r\n }\r\n if (params.ticks) {\r\n params.ticks = JSON.parse(JSON.stringify(params.ticks));\r\n }\r\n this._serializeModifiers(params);\r\n if (!isSmoNoteParamsSer(params)) {\r\n throw 'bad note ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n /**\r\n * restore note modifiers and create a SmoNote object\r\n * @param jsonObj\r\n * @returns \r\n */\r\n static deserialize(jsonObj: any) {\r\n //legacy note\r\n if (jsonObj.ticks && jsonObj.stemTicks === undefined) {\r\n if (jsonObj.tupletId || jsonObj.tuplet) {\r\n jsonObj['stemTicks'] = SmoMusic.closestBeamDuration(jsonObj.ticks.numerator / jsonObj.ticks.denominator + jsonObj.ticks.remainder)!.ticks;\r\n } else {\r\n jsonObj['stemTicks'] = SmoMusic.closestSmoDurationFromTicks(jsonObj.ticks.numerator / jsonObj.ticks.denominator + jsonObj.ticks.remainder)!.ticks;\r\n }\r\n }\r\n var note = new SmoNote(jsonObj);\r\n if (jsonObj.textModifiers) {\r\n jsonObj.textModifiers.forEach((mod: any) => {\r\n note.textModifiers.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.graceNotes) {\r\n jsonObj.graceNotes.forEach((mod: any) => {\r\n note.graceNotes.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.ornaments) {\r\n jsonObj.ornaments.forEach((mod: any) => {\r\n note.ornaments.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.articulations) {\r\n jsonObj.articulations.forEach((mod: any) => {\r\n note.articulations.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.tones) {\r\n jsonObj.tones.forEach((mod: any) => {\r\n note.tones.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n // Due to a bug, text modifiers were serialized into noteModifiers array\r\n if (jsonObj.noteModifiers) {\r\n jsonObj.noteModifiers.forEach((mod: any) => {\r\n note.textModifiers.push(SmoNoteModifierBase.deserialize(mod));\r\n });\r\n }\r\n if (jsonObj.arpeggio) {\r\n note.arpeggio = SmoNoteModifierBase.deserialize(jsonObj.arpeggio);\r\n }\r\n if (jsonObj.clefNote) {\r\n note.clefNote = SmoNoteModifierBase.deserialize(jsonObj.clefNote);\r\n }\r\n return note;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * A note modifier is anything that is mapped to the note, but not part of the\r\n * pitch itself. This includes grace notes, and note-text like lyrics.\r\n * @module /smo/data/noteModifiers\r\n */\r\nimport { SmoAttrs, Ticks, Pitch, getId, SmoObjectParams, Transposable, SvgBox, SmoModifierBase, \r\n Clef, IsClef } from './common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMusic } from './music';\r\nimport { defaultNoteScale, FontInfo, getChordSymbolGlyphFromCode } from '../../common/vex';\r\n// const Smo = eval('globalThis.Smo');\r\n\r\n/**\r\n * A note modifier is anything that is mapped to the note, but not part of the\r\n * pitch itself. This includes grace notes, and note-text like lyrics.\r\n * All note modifiers have a serialize method and a 'ctor' parameter or deserialization\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoNoteModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n logicalBox: SvgBox | null = null;\r\n element: SVGSVGElement | null = null;\r\n constructor(ctor: string) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n this.ctor = ctor;\r\n }\r\n static deserialize(jsonObj: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n // Handle backwards-compatibility thing\r\n if (jsonObj.ctor === 'SmoMicrotone' && typeof ((jsonObj as any).pitch) === 'number') {\r\n (jsonObj as any).pitchIndex = (jsonObj as any).pitch;\r\n }\r\n if (jsonObj.ctor === 'SmoLyric') {\r\n if (typeof((jsonObj as any)._text) === 'string') {\r\n (jsonObj as any).text = (jsonObj as any)._text;\r\n }\r\n }\r\n if (typeof (ctor) === 'undefined') {\r\n console.log('ouch bad ctor for ' + jsonObj.ctor);\r\n }\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n abstract serialize(): any;\r\n}\r\n\r\n\r\nexport function isClefChangeParamsSer(params: Partial): params is SmoClefChangeParamsSer {\r\n if (typeof(params.clef) === 'string' && params.ctor === 'SmoClefChange') {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexport interface SmoClefChangeParams {\r\n clef: string\r\n}\r\n\r\nexport interface SmoClefChangeParamsSer extends SmoClefChangeParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs;\r\n}\r\n\r\nexport class SmoClefChange extends SmoNoteModifierBase {\r\n clef: Clef;\r\n static get defaults() {\r\n const rv: SmoClefChangeParamsSer = JSON.parse(JSON.stringify({\r\n clef: 'treble',\r\n ctor: 'SmoClefChange',\r\n attrs: {\r\n id: getId(),\r\n type: 'SmoClefChange'\r\n }\r\n }));\r\n return rv;\r\n }\r\n constructor(clefParams: SmoClefChangeParams) {\r\n super('SmoClefChange');\r\n const clef = clefParams.clef;\r\n if (!IsClef(clef)) {\r\n this.clef = 'treble';\r\n } else {\r\n this.clef = clef as Clef;\r\n }\r\n }\r\n serialize(): SmoClefChangeParamsSer {\r\n const params: Partial = { ctor: 'SmoClefChange' };\r\n params.clef = this.clef;\r\n if (!isClefChangeParamsSer(params)) {\r\n throw('corrupt clef change');\r\n }\r\n return params;\r\n }\r\n}\r\n/**\r\n * used to construct {@link SmoGraceNote}\r\n * beam group.\r\n * @category SmoParameters\r\n */\r\nexport interface GraceNoteParams extends SmoModifierBase {\r\n /**\r\n * up, down, or auto\r\n */\r\n flagState: number,\r\n /**\r\n * same as for {@link SmoNote}\r\n */\r\n noteType: string,\r\n /**\r\n * same as for {@link SmoNote}\r\n */\r\n beamBeats: number,\r\n /**\r\n * same as for {@link SmoNote}. Indicates break in beam group\r\n */\r\n endBeam: boolean,\r\n /**\r\n * should be same as note?\r\n */\r\n clef: string,\r\n /**\r\n * there's probably a name for this...\r\n */\r\n slash: boolean,\r\n /**\r\n * only used for beaming\r\n */\r\n ticks: Ticks,\r\n /**\r\n * Pitch, same as for {@link SmoNote}\r\n */\r\n pitches: Pitch[],\r\n}\r\n\r\n/**\r\n * serialized grace note\r\n * @category serialization\r\n */\r\nexport interface GraceNoteParamsSer extends GraceNoteParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs;\r\n}\r\n\r\nfunction isGraceNoteParamsSer(params: Partial): params is GraceNoteParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoGraceNote') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A grace notes has many of the things an 'actual' note can have, but it doesn't take up\r\n * time against the time signature\r\n * @category SmoModifier\r\n */\r\nexport class SmoGraceNote extends SmoNoteModifierBase implements Transposable {\r\n static get flagStates() {\r\n return { auto: 0, up: 1, down: 2 };\r\n }\r\n static get defaults(): GraceNoteParams {\r\n return JSON.parse(JSON.stringify({\r\n flagState: SmoGraceNote.flagStates.auto,\r\n noteType: 'n',\r\n beamBeats: 4096,\r\n endBeam: false,\r\n clef: 'treble',\r\n slash: false,\r\n ticks: {\r\n numerator: 4096,\r\n denominator: 1,\r\n remainder: 0\r\n },\r\n pitches: [{\r\n letter: 'b',\r\n octave: 4,\r\n accidental: ''\r\n }]\r\n }));\r\n }\r\n // TODO: Matches SmoNote - move to SmoMusic?\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoGraceNote.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n ticks: Ticks = SmoGraceNote.defaults.ticks;\r\n pitches: Pitch[] = [];\r\n slash: boolean = false;\r\n clef: string = 'treble';\r\n noteType: string = 'n';\r\n renderId: string | null = null;\r\n hasTabNote: boolean = false;\r\n\r\n tickCount() {\r\n return this.ticks.numerator / this.ticks.denominator + this.ticks.remainder;\r\n }\r\n\r\n toVexGraceNote() {\r\n const p = SmoMusic.smoPitchesToVex(this.pitches);\r\n const rv = { duration: SmoMusic.closestVexDuration(this.tickCount()), keys: p, slash: this.slash };\r\n return rv;\r\n }\r\n\r\n serialize(): GraceNoteParamsSer {\r\n const params: Partial = { ctor: 'SmoGraceNote' };\r\n smoSerialize.serializedMergeNonDefault(SmoGraceNote.defaults,\r\n SmoGraceNote.parameterArray, this, params);\r\n if (!isGraceNoteParamsSer(params)) {\r\n throw 'bad grace note ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: Partial) {\r\n super('SmoGraceNote');\r\n smoSerialize.serializedMerge(SmoGraceNote.parameterArray, SmoGraceNote.defaults, this);\r\n smoSerialize.serializedMerge(SmoGraceNote.parameterArray, parameters, this);\r\n }\r\n}\r\nexport type SmoArpeggioType = 'directionless' | 'rasquedo_up' | 'rasquedo_down' \r\n | 'roll_up' | 'roll_down' | 'brush_up' | 'brush_down' | 'none';\r\nexport const SmoArpeggioTypes = ['directionless', 'rasquedo_up', 'rasquedo_down',\r\n 'roll_up', 'roll_down', 'brush_up', 'brush_down', 'none'];\r\n\r\n /**\r\n * @category SmoParameters\r\n */\r\nexport interface SmoArpeggioParams {\r\n type: SmoArpeggioType\r\n}\r\n/**\r\n * @category serialization\r\n */\r\nexport interface SmoArpeggioParamsSer {\r\n ctor: string;\r\n /**\r\n * stringified arpeggion enumeration\r\n */\r\n type: string;\r\n}\r\nfunction isSmoArpeggionParamsSer(params: Partial): params is SmoArpeggioParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoArpeggio') {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport function isArpeggioType(tp: SmoArpeggioType | string): tp is SmoArpeggioType {\r\n return SmoArpeggioTypes.indexOf(tp) >= 0;\r\n}\r\n/**\r\n * A 'splatter' symbol next to a chord.\r\n */\r\nexport class SmoArpeggio extends SmoNoteModifierBase {\r\n static _types: Record = {};\r\n static get types() {\r\n if (typeof(SmoArpeggio._types['directionless']) === 'undefined') {\r\n SmoArpeggio._types['directionless'] = 7;\r\n SmoArpeggio._types['rasquedo_up'] = 6;\r\n SmoArpeggio._types['rasquedo_down'] = 5;\r\n SmoArpeggio._types['roll_up'] = 4;\r\n SmoArpeggio._types['roll_down'] = 3;\r\n SmoArpeggio._types['brush_up'] = 2;\r\n SmoArpeggio._types['brush_down'] = 1;\r\n SmoArpeggio._types['none'] = 0;\r\n }\r\n return SmoArpeggio._types;\r\n } \r\n typeCode: number;\r\n constructor(params: SmoArpeggioParams) {\r\n super('SmoArpeggio');\r\n this.typeCode = SmoArpeggio.types[params.type];\r\n }\r\n get typeString(): SmoArpeggioType {\r\n const str = SmoArpeggioTypes.find((x) => SmoArpeggio.types[x] === this.typeCode);\r\n const type = str ? str : 'none';\r\n return type as SmoArpeggioType;\r\n }\r\n serialize(): SmoArpeggioParamsSer {\r\n const rv: Partial = { ctor: 'SmoArpeggio' }\r\n const str = SmoArpeggioTypes.find((x) => SmoArpeggio.types[x] === this.typeCode);\r\n rv.type = str ? str : 'none';\r\n if (!isSmoArpeggionParamsSer(rv)) {\r\n throw 'bad arpeggio ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoMicrotone}\r\n * @category SmoParams\r\n */\r\nexport interface SmoMicrotoneParams extends SmoObjectParams {\r\n /**\r\n * indicates which modifier to alter the tone (e.g. 1/4 sharp)\r\n */\r\n tone: string,\r\n /**\r\n * the index of the pitch to alter\r\n */\r\n pitch: number\r\n}\r\n/**\r\n * serialized microtones.\r\n * @category serialization\r\n */\r\nexport interface SmoMicrotoneParamsSer extends SmoMicrotoneParams {\r\n ctor: string,\r\n attrs: SmoAttrs\r\n}\r\nfunction isSmoMicrotoneParamsSer(params: Partial): params is SmoMicrotoneParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoMicrotone') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Microtones are treated similarly to ornaments. There are not\r\n * rules for persisting throughout a measure, cancel etc.\r\n * @category SmoModifier\r\n*/\r\nexport class SmoMicrotone extends SmoNoteModifierBase {\r\n tone: string;\r\n pitchIndex: number = 0;\r\n\r\n // This is how VexFlow notates them\r\n static readonly smoToVex: Record = {\r\n flat75sz: 'db',\r\n flat25sz: 'd',\r\n flat25ar: 'bs',\r\n flat125ar: 'afhf',\r\n sharp75: '++',\r\n sharp125: 'ashs',\r\n sharp25: '+',\r\n sori: 'o',\r\n koron: 'k'\r\n }\r\n\r\n // The audio frequency offsets\r\n static readonly pitchCoeff: Record = {\r\n flat75sz: -1.5,\r\n flat25sz: -0.5,\r\n flat25ar: -0.5,\r\n flat125ar: -2.5,\r\n sharp75: 1.5,\r\n sharp125: 2.5,\r\n sharp25: 0.5,\r\n sori: 0.5,\r\n koron: -0.5\r\n }\r\n\r\n get toPitchCoeff(): number {\r\n return SmoMicrotone.pitchCoeff[this.tone];\r\n }\r\n\r\n get toVex(): string {\r\n return SmoMicrotone.smoToVex[this.tone];\r\n }\r\n static readonly defaults: SmoMicrotoneParams = {\r\n ctor: 'SmoMicrotone',\r\n tone: 'flat25sz',\r\n pitch: 0\r\n }\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoMicrotone.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n serialize(): SmoMicrotoneParamsSer {\r\n const params: Partial = { ctor: 'SmoMicrotone' };\r\n smoSerialize.serializedMergeNonDefault(SmoMicrotone.defaults,\r\n SmoMicrotone.parameterArray, this, params);\r\n if (!isSmoMicrotoneParamsSer(params)) {\r\n throw 'bad microtone ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoMicrotoneParams) {\r\n super(parameters.ctor);\r\n this.pitchIndex = parameters.pitch;\r\n this.tone = parameters.tone;\r\n }\r\n}\r\n\r\n/**\r\n * Constructor for {@link SmoOrnament}\r\n * @category SmoParams\r\n */\r\nexport interface SmoOrnamentParams {\r\n /**\r\n * postition, above or below\r\n */\r\n position?: string,\r\n /**\r\n * horizontal offset from note head\r\n */ \r\n offset?: string,\r\n /**\r\n * accidental above/below\r\n */\r\n accidentalAbove?: string,\r\n accidentalBelow?: string,\r\n /**\r\n * code for the ornament\r\n */\r\n ornament: string,\r\n}\r\n/**\r\n * serializable ornament\r\n * @category serialization\r\n */\r\nexport interface SmoOrnamentParamsSer extends SmoOrnamentParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoOrnamentParamsSer(params: Partial): params is SmoOrnamentParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoOrnament') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Ornaments map to vex ornaments. articulations vs. ornaments\r\n * is kind of arbitrary\r\n * @category SmoModifier\r\n */\r\nexport class SmoOrnament extends SmoNoteModifierBase { \r\n static readonly ornaments: Record = {\r\n mordent: 'mordent',\r\n mordent_inverted: 'mordent_inverted',\r\n turn: 'turn',\r\n turn_inverted: 'turn_inverted',\r\n trill: 'tr',\r\n upprall: 'upprall',\r\n prallup: 'prallup',\r\n pralldown: 'pralldown',\r\n upmordent: 'upmordent',\r\n downmordent: 'downmordent',\r\n caesura: 'caesura',\r\n lineprall: 'lineprall',\r\n prallprall: 'prallprall',\r\n scoop: 'scoop',\r\n fall: 'fall',\r\n fallLong: 'fallLong',\r\n breath: 'breath',\r\n doit: 'doit',\r\n doitLong: 'doitLong',\r\n flip: 'flip',\r\n smear: 'smear',\r\n bend: 'bend',\r\n plungerClosed: 'plungerClosed',\r\n plungerOpen: 'plungerOpen'\r\n }\r\n\r\n static readonly xmlOrnaments: Record = {\r\n mordent: 'mordent',\r\n mordent_inverted: 'inverted-mordent',\r\n turn: 'turn',\r\n turn_inverted: 'inverted-turn',\r\n upmordent: 'mordent',\r\n downmordent: 'mordent',\r\n lineprall: 'schleifer',\r\n prallprall: 'schleifer',\r\n prallup: 'schleifer',\r\n tr: 'trill-mark'\r\n }\r\n static readonly textNoteOrnaments: Record = {\r\n breath: 'breath',\r\n caesura: 'caesura_straight'\r\n }\r\n // jazz ornaments in vex are articulations in music xml\r\n static readonly xmlJazz: Record = {\r\n doit: 'doit',\r\n scoop: 'scoop',\r\n dropLong: 'falloff',\r\n drop: 'plop'\r\n }\r\n static get jazzOrnaments(): string[] {\r\n return ['scoop', 'fallLong', 'doit', 'doitLong', 'flip', 'smear', 'scoop', 'plungerOpen', 'plungerClosed', 'bend'];\r\n }\r\n static get legacyJazz(): Record {\r\n return {'SCOOP': SmoOrnament.ornaments.scoop ,\r\n 'FALL_SHORT': SmoOrnament.ornaments.fall,\r\n 'FALL_LONG': SmoOrnament.ornaments.fallLong,\r\n 'DOIT': SmoOrnament.ornaments.doit,\r\n 'LIFT': SmoOrnament.ornaments.lift,\r\n 'FLIP': SmoOrnament.ornaments.flip,\r\n 'SMEAR': SmoOrnament.ornaments.smear\r\n };\r\n }\r\n toVex() {\r\n return SmoOrnament.ornaments[this.ornament];\r\n }\r\n isJazz() {\r\n return SmoOrnament.jazzOrnaments.indexOf(this.ornament) >= 0;\r\n }\r\n position: string = SmoOrnament.positions.above;\r\n offset: string = 'on';\r\n ornament: string = SmoOrnament.ornaments.mordent;\r\n\r\n static get parameterArray() {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoOrnament.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n\r\n static get positions() {\r\n return {\r\n above: 'above',\r\n below: 'below',\r\n auto: 'auto'\r\n };\r\n }\r\n static get offsets() {\r\n return {\r\n on: 'on',\r\n after: 'after'\r\n };\r\n } \r\n static get defaults(): SmoOrnamentParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoOrnament',\r\n ornament: SmoOrnament.ornaments.mordent,\r\n position: SmoOrnament.positions.auto,\r\n offset: SmoOrnament.offsets.on\r\n }));\r\n }\r\n serialize(): SmoOrnamentParamsSer {\r\n var params: Partial = { ctor: 'SmoOrnament' };\r\n smoSerialize.serializedMergeNonDefault(SmoOrnament.defaults,\r\n SmoOrnament.parameterArray, this, params);\r\n if (!isSmoOrnamentParamsSer(params)) {\r\n throw 'bad ornament ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoOrnamentParams) {\r\n super('SmoOrnament');\r\n smoSerialize.serializedMerge(SmoOrnament.parameterArray, SmoOrnament.defaults, this);\r\n smoSerialize.serializedMerge(SmoOrnament.parameterArray, parameters, this);\r\n // handle some legacy changes\r\n if (typeof(SmoOrnament.legacyJazz[this.ornament]) === 'string') {\r\n this.ornament = SmoOrnament.legacyJazz[this.ornament];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Constructor parameters for {@link SmoArticulation}\r\n * @category SmoParams\r\n */\r\nexport interface SmoArticulationParameters {\r\n /**\r\n * position, above or below\r\n */\r\n position?: string,\r\n /**\r\n * x offset\r\n */\r\n offset?: number,\r\n /**\r\n * articulation code\r\n */\r\n articulation: string\r\n}\r\n/**\r\n * \r\n */\r\nexport interface SmoArticulationParametersSer extends SmoArticulationParameters {\r\n ctor: string;\r\n}\r\nfunction isSmoArticulationParametersSer(params: Partial): params is SmoArticulationParametersSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoArticulation') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Articulations map to notes, can be placed above/below\r\n * @category SmoModifier\r\n */\r\nexport class SmoArticulation extends SmoNoteModifierBase {\r\n static get articulations(): Record {\r\n return {\r\n accent: 'accent',\r\n staccato: 'staccato',\r\n marcato: 'marcato',\r\n tenuto: 'tenuto',\r\n upStroke: 'upStroke',\r\n downStroke: 'downStroke',\r\n pizzicato: 'pizzicato',\r\n bowUp: 'bowUp',\r\n bowDown: 'bowDown',\r\n fermata: 'fermata'\r\n };\r\n }\r\n static readonly xmlArticulations: Record = {\r\n accent: 'accent',\r\n staccato: 'staccato',\r\n tenuto: 'tenuto',\r\n marcato: 'strong-accent'\r\n }\r\n static get positions() {\r\n return {\r\n above: 'above',\r\n below: 'below',\r\n auto: 'auto'\r\n };\r\n }\r\n static get articulationToVex(): Record {\r\n return {\r\n accent: 'a>',\r\n staccato: 'a.',\r\n marcato: 'a^',\r\n tenuto: 'a-',\r\n upStroke: 'a|',\r\n downStroke: 'am',\r\n pizzicato: 'ao',\r\n fermata: 'a@a'\r\n };\r\n }\r\n\r\n static get vexToArticulation(): Record {\r\n return {\r\n 'a>': 'accent',\r\n 'a.': 'staccato',\r\n 'a^': 'marcato',\r\n 'a-': 'tenuto',\r\n 'a|': 'upStroke',\r\n 'am': 'downStroke',\r\n 'ao': 'pizzicato',\r\n 'a@a': 'fermata'\r\n };\r\n }\r\n static get parameterArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoArticulation.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n\r\n static get positionToVex(): Record {\r\n return {\r\n 'above': 3,\r\n 'below': 4\r\n };\r\n }\r\n static get defaults(): SmoArticulationParameters {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoArticulation',\r\n position: SmoArticulation.positions.above,\r\n articulation: SmoArticulation.articulations.accent\r\n }));\r\n }\r\n position: string = SmoOrnament.positions.above;\r\n offset: number = 0;\r\n articulation: string = SmoArticulation.articulations.accent;\r\n adjX: number = 0;\r\n\r\n serialize(): SmoArticulationParametersSer {\r\n var params: Partial = { ctor: 'SmoArticulation'};\r\n smoSerialize.serializedMergeNonDefault(SmoArticulation.defaults,\r\n SmoArticulation.parameterArray, this, params);\r\n if (!isSmoArticulationParametersSer(params)) {\r\n throw 'bad articulation ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(parameters: SmoArticulationParameters) {\r\n super('SmoArticulation');\r\n smoSerialize.serializedMerge(SmoArticulation.parameterArray, SmoArticulation.defaults, this);\r\n smoSerialize.serializedMerge(SmoArticulation.parameterArray, parameters, this);\r\n // this.selector = parameters.selector;\r\n }\r\n}\r\n\r\nexport interface VexAnnotationParams {\r\n glyph?: string,\r\n symbolModifier?: number,\r\n text?: string\r\n}\r\n\r\n/**\r\n * The persist-y parts of {@link SmoLyricParams}. We don't persist the selector\r\n * since that can change based on the position of the parent note\r\n * @category serialization\r\n */\r\nexport interface SmoLyricParamsSer extends SmoObjectParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string,\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs,\r\n /**\r\n * the lyric font\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * classes for styling\r\n */\r\n classes: string,\r\n /**\r\n * which verse the lyric goes with\r\n */\r\n verse: number,\r\n /**\r\n * lyrics are used for chord changes or annotations, parser is different for each\r\n */\r\n parser: number,\r\n /**\r\n * indicates we should format for the width of the lyric\r\n */\r\n adjustNoteWidthLyric: boolean,\r\n /**\r\n * indicates we should format for the width of the chord\r\n */\r\n adjustNoteWidthChord: boolean,\r\n /**\r\n * fill color for text\r\n */\r\n fill: string,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateX: number,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateY: number,\r\n /**\r\n * the actual text\r\n */\r\n text: string | null\r\n}\r\n\r\nfunction isSmoLyricPersist(params: Partial): params is SmoLyricParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoLyric') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Used to construct a {@link SmoLyric} for both chords and lyrics\r\n * @category SmoParameters\r\n */\r\nexport interface SmoLyricParams {\r\n /**\r\n * the lyric font\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * classes for styling\r\n */\r\n classes: string,\r\n /**\r\n * which verse the lyric goes with\r\n */\r\n verse: number,\r\n /**\r\n * lyrics are used for chord changes or annotations, parser is different for each\r\n */\r\n parser: number,\r\n /**\r\n * indicates we should format for the width of the lyric\r\n */\r\n adjustNoteWidthLyric: boolean,\r\n /**\r\n * indicates we should format for the width of the chord\r\n */\r\n adjustNoteWidthChord: boolean,\r\n /**\r\n * fill color for text\r\n */\r\n fill: string,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateX: number,\r\n /**\r\n * translate to align lyrics. Possibly this should not be serialized\r\n */\r\n translateY: number,\r\n /**\r\n * the actual text\r\n */\r\n text: string | null\r\n}\r\n\r\n/**\r\n * SmoLyric covers both chords and lyrics. The parser tells you which\r\n * one you get.\r\n * @category SmoModifier\r\n */\r\nexport class SmoLyric extends SmoNoteModifierBase {\r\n static readonly parsers: Record = {\r\n lyric: 0, anaylysis: 1, chord: 2\r\n }\r\n static get defaults(): SmoLyricParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoLyric',\r\n text: '\\xa0',\r\n endChar: '',\r\n verse: 0,\r\n fontInfo: {\r\n size: 12,\r\n family: 'times',\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n fill: 'black',\r\n classes: 'score-text',\r\n translateX: 0,\r\n translateY: 0,\r\n adjustNoteWidthLyric: true,\r\n adjustNoteWidthChord: false,\r\n parser: SmoLyric.parsers.lyric\r\n }));\r\n }\r\n static get symbolPosition() {\r\n return {\r\n SUPERSCRIPT: 1,\r\n SUBSCRIPT: 2,\r\n NORMAL: 3\r\n };\r\n }\r\n static get persistArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoLyric.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n static get parameterArray(): string[] {\r\n const rv = SmoLyric.persistArray;\r\n rv.push('selector', 'text');\r\n return rv;\r\n }\r\n\r\n ctor: string = 'SmoLyric';\r\n text: string = '';\r\n fontInfo: FontInfo = {\r\n size: 12,\r\n family: 'Merriweather',\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n parser: number = SmoLyric.parsers.lyric;\r\n selector: string | null = null; // used by UI\r\n adjustNoteWidthLyric: boolean = true;\r\n adjustNoteWidthChord: boolean = false;\r\n verse: number = 0;\r\n skipRender: boolean = false;\r\n fill: string = '';\r\n translateX: number = 0;\r\n translateY: number = 0;\r\n classes: string = '';\r\n // used by the renderer to calculate offsets for aligning lyrics\r\n adjX: number = 0;\r\n adjY: number = 0;\r\n // used by the renderer to calculate the y offset for music that goes below the staff\r\n musicYOffset: number = 0;\r\n hyphenX: number = 0;\r\n deleted: boolean = false;\r\n\r\n serialize(): SmoLyricParamsSer {\r\n var params: Partial = { ctor: 'SmoLyric' };\r\n smoSerialize.serializedMergeNonDefault(SmoLyric.defaults,\r\n SmoLyric.persistArray, this, params);\r\n if (!isSmoLyricPersist(params)) {\r\n throw 'bad lyric ' + JSON.stringify('params');\r\n }\r\n return params;\r\n }\r\n // For lyrics, we default to adjust note width on lyric size. For chords, this is almost never what\r\n // you want, so it is off by default.\r\n get adjustNoteWidth() {\r\n return (this.parser === SmoLyric.parsers.lyric) ? this.adjustNoteWidthLyric : this.adjustNoteWidthChord;\r\n }\r\n set adjustNoteWidth(val) {\r\n if (this.parser === SmoLyric.parsers.lyric) {\r\n this.adjustNoteWidthLyric = val;\r\n } else {\r\n this.adjustNoteWidthChord = val;\r\n }\r\n }\r\n\r\n // ### getClassSelector\r\n // returns a selector used to find this text block within a note.\r\n getClassSelector(): string {\r\n var parser = (this.parser === SmoLyric.parsers.lyric ? 'lyric' : 'chord');\r\n return 'g.' + parser + '-' + this.verse;\r\n }\r\n\r\n setText(text: string) {\r\n // For chords, trim all whitespace\r\n if (this.parser !== SmoLyric.parsers.lyric) {\r\n if (text.trim().length) {\r\n text.replace(/\\s/g, '');\r\n }\r\n }\r\n this.text = text;\r\n }\r\n\r\n isHyphenated() {\r\n const text = this.text.trim();\r\n return this.parser === SmoLyric.parsers.lyric &&\r\n text.length &&\r\n text[text.length - 1] === '-';\r\n }\r\n\r\n getText() {\r\n const text = this.text.trim();\r\n if (this.isHyphenated()) {\r\n return smoSerialize.tryParseUnicode(text.substr(0, text.length - 1)).trim();\r\n }\r\n return smoSerialize.tryParseUnicode(text);\r\n }\r\n\r\n isDash() {\r\n return this.getText().length === 0 && this.isHyphenated();\r\n }\r\n\r\n static _chordGlyphFromCode(code: string) {\r\n return getChordSymbolGlyphFromCode(code);\r\n }\r\n static _tokenizeChordString(str: string) {\r\n // var str = this._text;\r\n const reg = /^([A-Z|a-z|0-9|]+)/g;\r\n let mmm = str.match(reg);\r\n let tokeType = '';\r\n let toke = '';\r\n const tokens = [];\r\n while (str.length) {\r\n if (!mmm) {\r\n tokeType = str[0];\r\n tokens.push(tokeType);\r\n str = str.slice(1, str.length);\r\n } else {\r\n toke = mmm[0].substr(0, mmm[0].length);\r\n str = str.slice(toke.length, str.length);\r\n tokens.push(toke);\r\n tokeType = '';\r\n toke = '';\r\n }\r\n mmm = str.match(reg);\r\n }\r\n return tokens;\r\n }\r\n\r\n\r\n\r\n constructor(parameters: SmoLyricParams) {\r\n super('SmoLyric');\r\n smoSerialize.serializedMerge(SmoLyric.parameterArray, SmoLyric.defaults, this);\r\n smoSerialize.serializedMerge(SmoLyric.parameterArray, parameters, this);\r\n if (typeof(this.fontInfo.size) !== 'number') {\r\n this.fontInfo.size = SmoLyric.defaults.fontInfo.size;\r\n }\r\n // backwards-compatibility for lyric text\r\n if (parameters.text) {\r\n this.text = parameters.text;\r\n }\r\n\r\n // calculated adjustments for alignment purposes\r\n this.adjY = 0;\r\n this.adjX = 0;\r\n // this.verse = parseInt(this.verse, 10);\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoLyric'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The persisted bits of {@link SmoDynamicTextParams}\r\n * @category SmoParams\r\n */\r\nexport interface SmoDynamicTextSer extends SmoObjectParams {\r\n ctor: string,\r\n xOffset: number,\r\n fontSize: number,\r\n yOffsetLine: number,\r\n yOffsetPixels: number,\r\n text: string\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoDynamicText}\r\n * @category SmoParams\r\n */\r\nexport interface SmoDynamicTextParams extends SmoDynamicTextSer {\r\n ctor: string,\r\n xOffset: number,\r\n fontSize: number,\r\n yOffsetLine: number,\r\n yOffsetPixels: number,\r\n text: string\r\n}\r\n\r\n/**\r\n * Dynamic text tells you how loud not to play.\r\n * @category SmoModifier\r\n */\r\nexport class SmoDynamicText extends SmoNoteModifierBase {\r\n static get dynamics(): Record {\r\n // matches VF.modifier\r\n return {\r\n PP: 'pp',\r\n P: 'p',\r\n MP: 'mp',\r\n MF: 'mf',\r\n F: 'f',\r\n FF: 'ff',\r\n SFZ: 'sfz'\r\n };\r\n }\r\n static get defaults(): SmoDynamicTextParams {\r\n return JSON.parse(JSON.stringify({\r\n ctor: 'SmoDynamicText',\r\n xOffset: 0,\r\n fontSize: defaultNoteScale,\r\n yOffsetLine: 11,\r\n yOffsetPixels: 0,\r\n text: SmoDynamicText.dynamics.MP,\r\n }));\r\n }\r\n static get persistArray(): string[] {\r\n const rv: string[] = [];\r\n // eslint-disable-next-line\r\n for (const key in SmoDynamicText.defaults) {\r\n rv.push(key);\r\n }\r\n return rv;\r\n }\r\n static get parameterArray(): string[] {\r\n const rv = SmoDynamicText.persistArray;\r\n rv.push('selector');\r\n return rv;\r\n }\r\n text: string = '';\r\n yOffsetLine: number = 11;\r\n yOffsetPixels: number = 0;\r\n xOffset: number = 0;\r\n fontSize: number = defaultNoteScale;\r\n serialize(): object {\r\n var params = {};\r\n smoSerialize.serializedMergeNonDefault(SmoDynamicText.defaults,\r\n SmoDynamicText.persistArray, this, params);\r\n return params;\r\n }\r\n constructor(parameters: SmoDynamicTextParams) {\r\n super('SmoDynamicText');\r\n smoSerialize.vexMerge(this, SmoDynamicText.defaults);\r\n smoSerialize.filteredMerge(SmoDynamicText.parameterArray, parameters, this);\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoDynamicText'\r\n };\r\n }\r\n }\r\n}\r\n\r\nexport interface SmoTabBend {\r\n bendType: number,\r\n release: boolean,\r\n text: string\r\n}\r\nexport interface SmoFretPosition {\r\n string: number,\r\n fret: number\r\n}\r\nexport interface SmoTabNoteParams {\r\n positions: SmoFretPosition[]\r\n noteId: string,\r\n flagState: number,\r\n flagThrough: boolean,\r\n noteHead: number,\r\n isAssigned: boolean\r\n}\r\n\r\nexport interface SmoTabNoteParamsSer extends SmoTabNoteParams {\r\n ctor: string\r\n}\r\n\r\nfunction isSmoTabNoteParamsSer(params: Partial): params is SmoTabNoteParamsSer {\r\n if (typeof(params.ctor) !== 'string' || params.ctor !== 'SmoTabNote') {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport class SmoTabNote extends SmoNoteModifierBase {\r\n static get defaults(): SmoTabNoteParams {\r\n return JSON.parse(JSON.stringify({\r\n positions: [],\r\n noteId: '',\r\n isAssigned: false,\r\n flagState: SmoTabNote.flagStates.None,\r\n flagThrough: false,\r\n noteHead: SmoTabNote.noteHeads.number\r\n }));\r\n }\r\n positions: SmoFretPosition[];\r\n noteId: string;\r\n isAssigned: boolean;\r\n noteHead: number;\r\n flagState: number;\r\n flagThrough: boolean;\r\n static get flagStates() {\r\n return { None: 0, Up: 1, Down: -1 };\r\n }\r\n static get noteHeads() {\r\n return { number: 0, x: 1 };\r\n }\r\n constructor(params: SmoTabNoteParams) {\r\n super('SmoTabNote');\r\n this.positions = params.positions\r\n this.noteId = params.noteId;\r\n this.isAssigned = params.isAssigned;\r\n this.noteHead = params.noteHead;\r\n this.flagState = params.flagState;\r\n this.flagThrough = params.flagThrough;\r\n }\r\n serialize(): SmoTabNoteParamsSer {\r\n var params = { ctor: 'SmoTabNote' };\r\n smoSerialize.serializedMergeNonDefault(SmoTabNote.defaults,\r\n ['positions', 'noteId', 'isAssigned', 'noteHead', 'flagState', 'flagThrough'], this, params);\r\n if (!isSmoTabNoteParamsSer(params)) {\r\n throw 'bad params in SmoTabNote';\r\n }\r\n return params;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support partsInfo class, for part extraction. \r\n * Parts is parts.\r\n * @module /smo/data/partInfo\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { createXmlAttribute } from './common';\r\nimport { SmoMeasureFormat, SmoMeasureFormatParamsSer, SmoMeasureModifierBase } from './measureModifiers';\r\nimport { SmoLayoutManager, SmoLayoutManagerParamsSer, SmoLayoutManagerParams, SmoPageLayout } from './scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupParamsSer } from './scoreText';\r\nimport { StaffModifierBase } from './staffModifiers';\r\n\r\nexport type SmoPartInfoStringType = 'partName' | 'partAbbreviation';\r\nexport const SmoPartInfoStringTypes: SmoPartInfoStringType[] = ['partName', 'partAbbreviation'];\r\nexport type SmoPartInfoNumType = 'stavesAfter' | 'stavesBefore';\r\nexport const SmoPartInfoNumTypes: SmoPartInfoNumType[] = ['stavesAfter', 'stavesBefore'];\r\nexport type SmoPartInfoBooleanType = 'preserveTextGroups' | 'cueInScore' | 'expandMultimeasureRests';\r\nexport const SmoPartInfoBooleanTypes: SmoPartInfoBooleanType[] = ['preserveTextGroups', 'cueInScore', 'expandMultimeasureRests'];\r\n\r\nexport const SmoPartAttributesBasic = ['partName', 'partAbbreviation', 'stavesAfter', 'stavesBefore', 'preserveTextGroups', 'cueInScore', 'expandMultimeasureRests'];\r\nexport interface SmoMidiInstrument {\r\n channel: number,\r\n program: number,\r\n volume: number,\r\n pan: number\r\n}\r\n/**\r\n * Data contained in a part. A part has its own text, measure formatting and page layouts,\r\n * and contains the notes from the score. It can be comprised of 1 or 2 adjacent staves.\r\n * Usually you will call\r\n * {@link SmoPartInfo.defaults}, and modify the parameters you need to change.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoPartInfoParams {\r\n /**\r\n * Name of the part, can be used in headers\r\n */\r\n partName: string,\r\n /**\r\n * abbrevation of part name\r\n */\r\n partAbbreviation: string,\r\n /**\r\n * indicates that this part include the next stave (e.g. piano part)\r\n */\r\n stavesAfter: number,\r\n /**\r\n * indicates that this part include the previous stave (e.g. piano part)\r\n */\r\n stavesBefore: number,\r\n /**\r\n * parts can have their own page settings, zoom settings, etc.\r\n */\r\n layoutManager?: SmoLayoutManager;\r\n /**\r\n * parts can have their own measure formatting\r\n */\r\n measureFormatting?: Record,\r\n /**\r\n * for part-specific text\r\n */\r\n textGroups: SmoTextGroup[],\r\n /**\r\n * indicates a part has its own text, not inherited from the score\r\n */\r\n preserveTextGroups: boolean,\r\n /**\r\n * indicates the part appears as cue size in the score\r\n */\r\n cueInScore: boolean,\r\n /**\r\n * future, for playback. TODO: Note staves contain instruments that compete with this.\r\n * maybe this will be removed\r\n */\r\n midiDevice: string | null,\r\n /**\r\n * see midiDevice\r\n */\r\n midiInstrument: SmoMidiInstrument | null,\r\n /**\r\n * indicates multimeasure rests in parts should be expanded.\r\n */\r\n expandMultimeasureRests: boolean \r\n}\r\n\r\n/**\r\n * Serialized part information\r\n * @category serialization\r\n */\r\nexport interface SmoPartInfoParamsSer {\r\n /** constructor */\r\n ctor: string;\r\n /**\r\n * Name of the part, can be used in headers\r\n */\r\n partName: string,\r\n /**\r\n * abbrevation of part name\r\n */\r\n partAbbreviation: string,\r\n /**\r\n * indicates that this part include the next stave (e.g. piano part)\r\n */\r\n stavesAfter: number,\r\n /**\r\n * indicates that this part include the previous stave (e.g. piano part)\r\n */\r\n stavesBefore: number,\r\n /**\r\n * parts can have their own page settings, zoom settings, etc.\r\n */\r\n layoutManager?: SmoLayoutManagerParamsSer;\r\n /**\r\n * parts can have their own measure formatting\r\n */\r\n measureFormatting?: Record,\r\n /**\r\n * for part-specific text\r\n */\r\n textGroups: SmoTextGroupParamsSer[],\r\n /**\r\n * indicates a part has its own text, not inherited from the score\r\n */\r\n preserveTextGroups: boolean,\r\n /**\r\n * indicates the part appears as cue size in the score\r\n */\r\n cueInScore: boolean,\r\n /**\r\n * future, for playback. TODO: Note staves contain instruments that compete with this.\r\n * maybe this will be removed\r\n */\r\n midiDevice: string | null,\r\n /**\r\n * see midiDevice\r\n */\r\n midiInstrument: SmoMidiInstrument | null,\r\n /**\r\n * indicates multimeasure rests in parts should be expanded.\r\n */\r\n expandMultimeasureRests: boolean \r\n}\r\nfunction isSmoPartInfoParamsSer(params: Partial): params is SmoPartInfoParamsSer {\r\n if (params.ctor && params.ctor === 'SmoPartInfo') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Part info contains information that group 1 or 2 adjacent staves.\r\n * Parts can have formatting that is indepenedent of the score\r\n * @category SmoModifier\r\n */\r\nexport class SmoPartInfo extends StaffModifierBase {\r\n partName: string = '';\r\n partAbbreviation: string = '';\r\n layoutManager: SmoLayoutManager;\r\n measureFormatting: Record = {};\r\n textGroups: SmoTextGroup[] = [];\r\n stavesAfter: number = 0;\r\n stavesBefore: number = 0;\r\n preserveTextGroups: boolean = false;\r\n cueInScore: boolean = false;\r\n displayCues: boolean = false;\r\n expandMultimeasureRests: boolean = false;\r\n midiInstrument: SmoMidiInstrument| null;\r\n midiDevice: string | null;\r\n static get defaults(): SmoPartInfoParams {\r\n return JSON.parse(JSON.stringify({\r\n partName: 'Staff ',\r\n partAbbreviation: '',\r\n globalLayout: SmoLayoutManager.defaultLayout,\r\n textGroups: [],\r\n preserveTextGroups: false,\r\n pageLayoutMap: {},\r\n stavesAfter: 0,\r\n stavesBefore: 0,\r\n cueInScore: false,\r\n midiDevice: null,\r\n midiInstrument: null,\r\n expandMultimeasureRests: false\r\n }));\r\n }\r\n constructor(params: SmoPartInfoParams) {\r\n super('SmoPartInfo');\r\n if (!params.layoutManager) {\r\n this.layoutManager = new SmoLayoutManager(SmoLayoutManager.defaults);\r\n } else {\r\n this.layoutManager = new SmoLayoutManager(params.layoutManager);\r\n }\r\n if (typeof(params.measureFormatting) !== 'undefined') {\r\n const formatKeys = Object.keys(params.measureFormatting);\r\n formatKeys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n this.measureFormatting[numKey] = new SmoMeasureFormat(params.measureFormatting![numKey]);\r\n });\r\n }\r\n if (params.textGroups) {\r\n this.textGroups = params.textGroups;\r\n }\r\n SmoPartInfoStringTypes.forEach((st) => {\r\n this[st] = params[st];\r\n });\r\n SmoPartInfoNumTypes.forEach((st) => {\r\n this[st] = params[st];\r\n });\r\n SmoPartInfoBooleanTypes.forEach((st) => {\r\n this[st] = params[st] ?? false;\r\n });\r\n this.midiDevice = params.midiDevice;\r\n if (params.midiInstrument) {\r\n this.midiInstrument = JSON.parse(JSON.stringify(params.midiInstrument));\r\n } else {\r\n this.midiInstrument = null;\r\n }\r\n }\r\n static deserialize(jsonObj: SmoPartInfoParamsSer): SmoPartInfo {\r\n const params = SmoPartInfo.defaults;\r\n smoSerialize.serializedMerge(SmoPartAttributesBasic, jsonObj, params);\r\n jsonObj.textGroups.forEach((tg) => {\r\n params.textGroups.push(SmoTextGroup.deserializePreserveId(tg));\r\n });\r\n params.midiInstrument = jsonObj.midiInstrument;\r\n params.midiDevice = jsonObj.midiDevice;\r\n params.measureFormatting = {};\r\n if (jsonObj.layoutManager) {\r\n const layoutManagerParams: SmoLayoutManagerParams = {\r\n globalLayout: jsonObj.layoutManager.globalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: []\r\n }\r\n jsonObj.layoutManager.pageLayouts.forEach((pl) => {\r\n const pageLayout = new SmoPageLayout(pl);\r\n layoutManagerParams.pageLayouts.push(pageLayout);\r\n });\r\n params.layoutManager = new SmoLayoutManager(layoutManagerParams);\r\n }\r\n if (jsonObj.measureFormatting) {\r\n const mfkeys = Object.keys(jsonObj.measureFormatting);\r\n mfkeys.forEach((mfkey) => {\r\n const mfnum = parseInt(mfkey, 10);\r\n params.measureFormatting![mfnum] = SmoMeasureModifierBase.deserialize(jsonObj.measureFormatting![mfnum]);\r\n });\r\n }\r\n return new SmoPartInfo(params);\r\n \r\n }\r\n serialize(): SmoPartInfoParamsSer {\r\n const rv: Partial = { ctor: 'SmoPartInfo' };\r\n smoSerialize.serializedMergeNonDefault(SmoPartInfo.defaults, SmoPartAttributesBasic, this, rv);\r\n rv.layoutManager = this.layoutManager.serialize();\r\n rv.textGroups = [];\r\n this.textGroups.forEach((tg) => {\r\n rv.textGroups!.push(tg.serialize());\r\n });\r\n rv.measureFormatting = {};\r\n if (this.midiInstrument) {\r\n rv.midiInstrument = JSON.parse(JSON.stringify(this.midiInstrument));\r\n }\r\n if (this.midiDevice) {\r\n rv.midiDevice = this.midiDevice;\r\n }\r\n Object.keys(this.measureFormatting).forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n rv.measureFormatting![numKey] = this.measureFormatting[numKey];\r\n });\r\n if (!isSmoPartInfoParamsSer(rv)) {\r\n throw 'bad part info ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n updateTextGroup(textGroup: SmoTextGroup, toAdd: boolean) {\r\n const tgid = typeof (textGroup) === 'string' ? textGroup :\r\n textGroup.attrs.id;\r\n const ar = this.textGroups.filter((tg) => tg.attrs.id !== tgid);\r\n this.textGroups = ar;\r\n if (toAdd) {\r\n this.textGroups.push(textGroup);\r\n }\r\n }\r\n removeTextGroup(textGroup: SmoTextGroup) {\r\n this.updateTextGroup(textGroup, false);\r\n }\r\n addTextGroup(textGroup: SmoTextGroup) {\r\n this.updateTextGroup(textGroup, true);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoScore}\r\n * @module /smo/data/score\r\n */\r\nimport { SmoMusic } from './music';\r\nimport { Clef, SvgDimensions, smoXmlNs } from './common';\r\nimport { SmoMeasure, SmoMeasureParams, ColumnMappedParams, SmoMeasureParamsSer } from './measure';\r\nimport { SmoNoteModifierBase } from './noteModifiers';\r\nimport {\r\n SmoTempoText, SmoMeasureFormat, SmoMeasureModifierBase, TimeSignature, TimeSignatureParameters,\r\n SmoMeasureFormatParamsSer\r\n} from './measureModifiers';\r\nimport { StaffModifierBase, SmoInstrument } from './staffModifiers';\r\nimport {\r\n SmoSystemGroup, SmoSystemGroupParamsSer, SmoScoreModifierBase, SmoPageLayout,\r\n SmoFormattingManager, SmoAudioPlayerSettings, SmoAudioPlayerParameters, SmoLayoutManagerParamsSer,\r\n SmoLayoutManager, FontPurpose,\r\n SmoScoreInfo, SmoScoreInfoKeys, ScoreMetadataSer, SmoScorePreferences, SmoPageLayoutParams,\r\n SmoLayoutManagerParams, SmoFormattingManagerParams\r\n} from './scoreModifiers';\r\nimport { SmoTextGroup, SmoScoreText, SmoTextGroupParamsSer } from './scoreText';\r\nimport { SmoSystemStaff, SmoSystemStaffParams, SmoSystemStaffParamsSer } from './systemStaff';\r\nimport { SmoSelector, SmoSelection } from '../xform/selections';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\n\r\n/**\r\n * List of engraving fonts available in Smoosic\r\n */\r\nexport type engravingFontType = 'Bravura' | 'Gonville' | 'Petaluma' | 'Leland';\r\n/**\r\n * Arrary of engraving fonts available in Smoosic\r\n */\r\nexport const engravingFontTypes: engravingFontType[] = ['Bravura', 'Gonville', 'Petaluma', 'Leland'];\r\n\r\nexport function isEngravingFont(et: engravingFontType | string): et is engravingFontType {\r\n return (engravingFontTypes as any[]).indexOf(et) >= 0;\r\n}\r\n\r\n/**\r\n * Constructor parameters. Usually you will call\r\n * {@link SmoScore.defaults}, and modify the parameters you need to change.\r\n * A new score with the defaults will create a single, empty measure.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoScoreParams {\r\n /**\r\n * global font defaults for this score\r\n */\r\n fonts: FontPurpose[],\r\n /**\r\n * identifying information about the score\r\n */\r\n scoreInfo: SmoScoreInfo,\r\n /**\r\n * customized editor behavior\r\n */\r\n preferences: SmoScorePreferences,\r\n /**\r\n * contained {@link SmoSystemStaffParams} objects\r\n */\r\n staves: SmoSystemStaffParams[],\r\n activeStaff?: number,\r\n /**\r\n * score text, not part of specific music\r\n */\r\n textGroups: SmoTextGroup[],\r\n /**\r\n * System groups for formatting/justification\r\n */\r\n systemGroups: SmoSystemGroup[],\r\n /**\r\n * future: global audio settings\r\n */\r\n audioSettings: SmoAudioPlayerParameters,\r\n /**\r\n * layout manager, for svg and div geometry, page sizes, header sizes etc.\r\n */\r\n layoutManager?: SmoLayoutManager,\r\n /**\r\n * measure-specific formatting\r\n */\r\n formattingManager?: SmoFormattingManager\r\n}\r\nfunction isSmoScoreParams(params: Partial): params is SmoScoreParams {\r\n if (params.fonts && params.fonts.length) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Serialization structure for the entire score. Score is deserialized from this\r\n * @category serialization\r\n */\r\nexport interface SmoScoreParamsSer {\r\n /**\r\n * some information about the score, mostly non-musical\r\n */\r\n metadata: ScoreMetadataSer,\r\n /**\r\n * contained {@link SmoSystemStaffParams} objects\r\n */\r\n staves: SmoSystemStaffParamsSer[],\r\n /**\r\n * score text, not part of specific music\r\n */\r\n textGroups: SmoTextGroupParamsSer[],\r\n /**\r\n * System groups for formatting/justification\r\n */\r\n systemGroups: SmoSystemGroupParamsSer[],\r\n /**\r\n * future: global audio settings\r\n */\r\n audioSettings: SmoAudioPlayerParameters,\r\n /**\r\n * layout manager, for svg and div geometry, page sizes, header sizes etc.\r\n */\r\n layoutManager?: SmoLayoutManagerParamsSer,\r\n /**\r\n * map of measure formats to measure\r\n */\r\n measureFormats: SmoMeasureFormatParamsSer[],\r\n /**\r\n * tempo, key and other column-mapped parameters\r\n */\r\n columnAttributeMap: ColumnParamsMapType,\r\n /**\r\n * dictionary compression for serialization\r\n */\r\n dictionary: Record\r\n}\r\n\r\nexport interface SmoScoreSerializeOptions {\r\n skipStaves: boolean,\r\n useDictionary: boolean,\r\n preserveStaffIds: boolean // preserve staff modifiers IDs to keep in sync\r\n}\r\n// dont' deserialize trivial text blocks saved by mistake\r\nexport function isEmptyTextBlock(params: Partial): params is SmoTextGroupParamsSer {\r\n if (Array.isArray(params?.textBlocks) || Array.isArray((params as any)?.blocks)) {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport interface ColumnParamsMapType {\r\n keySignature: Record,\r\n tempo: Record,\r\n timeSignature: Record,\r\n renumberingMap: Record\r\n}\r\n\r\n// SmoScoreParemsSer\r\nexport function isSmoScoreParemsSer(params: Partial): params is SmoScoreParamsSer {\r\n if (Array.isArray(params.staves)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Union of modifier types Smo modifier types\r\n */\r\nexport type SmoModifier = SmoNoteModifierBase | SmoMeasureModifierBase | StaffModifierBase | SmoScoreModifierBase;\r\n\r\n/**\r\n * Score is a container of staves, and metadata about the score. Serializing the score serializes the \r\n * child object. It is the highest-level object in Smoosic.\r\n */\r\nexport class SmoScore {\r\n /**\r\n * Map of instruments to staves, used in serialization.\r\n *\r\n * @type {any[]}\r\n * @memberof SmoScore\r\n */\r\n instrumentMap: any[] = [];\r\n /**\r\n * Default fonts in this score, for each type of text (lyrics, etc)\r\n *\r\n * @type {FontPurpose[]}\r\n * @memberof SmoScore\r\n */\r\n fonts: FontPurpose[] = [];\r\n /**\r\n * General info about the score, used for export and library\r\n *\r\n * @type {SmoScoreInfo}\r\n * @memberof SmoScore\r\n */\r\n scoreInfo: SmoScoreInfo = SmoScore.scoreInfoDefaults;\r\n /**\r\n * Default behavior for this score. Indicates some global behavior like whether to advance the cursor.\r\n *\r\n * @type {SmoScorePreferences}\r\n * @memberof SmoScore\r\n */\r\n preferences: SmoScorePreferences = new SmoScorePreferences(SmoScorePreferences.defaults);\r\n /**\r\n * The staves that make up the music of the score\r\n *\r\n * @type {SmoSystemStaff[]}\r\n * @memberof SmoScore\r\n */\r\n staves: SmoSystemStaff[] = [];\r\n /**\r\n * The active staff, used for some types of selections. Not serialized.\r\n *\r\n * @type {number}\r\n * @memberof SmoScore\r\n */\r\n activeStaff: number = 0;\r\n /**\r\n * Text associated with the score, but not a specific musical element (e.g. lyrics are contains by notes)\r\n *\r\n * @type {SmoTextGroup[]}\r\n * @memberof SmoScore\r\n */\r\n textGroups: SmoTextGroup[] = [];\r\n /**\r\n * A logical grouping of staves for justification\r\n *\r\n * @type {SmoSystemGroup[]}\r\n * @memberof SmoScore\r\n */\r\n systemGroups: SmoSystemGroup[] = [];\r\n /**\r\n * some audio player defaults\r\n *\r\n * @type {SmoAudioPlayerSettings}\r\n * @memberof SmoScore\r\n */\r\n audioSettings: SmoAudioPlayerSettings;\r\n /**\r\n * Preserve a map of measures to their actual measure numbers\r\n *\r\n * @type {Record}\r\n * @memberof SmoScore\r\n */\r\n renumberingMap: Record = {};\r\n /**\r\n * page and rendering layout of the score, including the ppi and scaling of the pages.\r\n *\r\n * @type {SmoLayoutManager}\r\n * @memberof SmoScore\r\n */\r\n layoutManager?: SmoLayoutManager;\r\n /**\r\n * per-measure formatting customizations.\r\n *\r\n * @type {SmoFormattingManager}\r\n * @memberof SmoScore\r\n */\r\n formattingManager?: SmoFormattingManager\r\n constructor(params: SmoScoreParams) {\r\n smoSerialize.vexMerge(this, SmoScore.defaults);\r\n smoSerialize.vexMerge(this, params);\r\n if (!this.layoutManager) {\r\n this.layoutManager = new SmoLayoutManager(SmoLayoutManager.defaults);\r\n }\r\n if (!this.formattingManager) {\r\n this.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n }\r\n // Set beaming rules based on preferences.\r\n const pref = this.preferences;\r\n SmoMeasure.defaultDupleDuration = pref.defaultDupleDuration;\r\n SmoMeasure.defaultTripleDuration = pref.defaultTripleDuration;\r\n if (this.staves.length) {\r\n this.numberStaves();\r\n }\r\n if (typeof (this.preferences.showPiano) === 'undefined') {\r\n this.preferences.showPiano = false;\r\n }\r\n this.audioSettings = new SmoAudioPlayerSettings(params.audioSettings);\r\n this.updateMeasureFormats();\r\n this.updateSystemGroups();\r\n }\r\n static get engravingFonts(): Record {\r\n return { Bravura: 'Bravura', Gonville: 'Gonville', Petaluma: 'Petaluma' };\r\n }\r\n static get fontPurposes(): Record {\r\n return { ENGRAVING: 1, SCORE: 2, CHORDS: 3, LYRICS: 4 };\r\n }\r\n static get scoreInfoDefaults(): SmoScoreInfo {\r\n return JSON.parse(JSON.stringify({\r\n name: 'Smoosical',\r\n title: 'Smoosical',\r\n subTitle: '(Op. 1)',\r\n composer: 'Me',\r\n copyright: '',\r\n version: 1\r\n }));\r\n }\r\n static get scoreMetadataDefaults(): ScoreMetadataSer {\r\n return JSON.parse(JSON.stringify({\r\n fonts: [{ name: 'engraving', purpose: SmoScore.fontPurposes.ENGRAVING, family: 'Bravura', size: 1, custom: false },\r\n { name: 'score', purpose: SmoScore.fontPurposes.SCORE, family: 'Merriweather', size: 14, custom: false },\r\n { name: 'chords', purpose: SmoScore.fontPurposes.CHORDS, family: 'Roboto Slab', size: 14, custom: false },\r\n { name: 'lyrics', purpose: SmoScore.fontPurposes.LYRICS, family: 'Merriweather', size: 12, custom: false } ],\r\n scoreInfo: SmoScore.scoreInfoDefaults,\r\n renumberingMap: {},\r\n preferences: new SmoScorePreferences(SmoScorePreferences.defaults)\r\n }));\r\n }\r\n static get defaults(): SmoScoreParams {\r\n return {\r\n // legacy layout structure. Now we use pages.\r\n fonts: [\r\n { name: 'engraving', purpose: SmoScore.fontPurposes.ENGRAVING, family: 'Bravura', size: 1, custom: false },\r\n { name: 'score', purpose: SmoScore.fontPurposes.SCORE, family: 'Merriweather', size: 14, custom: false },\r\n { name: 'chords', purpose: SmoScore.fontPurposes.CHORDS, family: 'Roboto Slab', size: 14, custom: false },\r\n { name: 'lyrics', purpose: SmoScore.fontPurposes.LYRICS, family: 'Merriweather', size: 12, custom: false }\r\n ],\r\n scoreInfo: SmoScore.scoreInfoDefaults,\r\n audioSettings: new SmoAudioPlayerSettings(SmoAudioPlayerSettings.defaults),\r\n preferences: new SmoScorePreferences(SmoScorePreferences.defaults),\r\n staves: [],\r\n activeStaff: 0,\r\n textGroups: [],\r\n systemGroups: []\r\n };\r\n }\r\n static get pageSizes(): string[] {\r\n return ['letter', 'tabloid', 'A4', 'A4Landscape', 'custom'];\r\n }\r\n static get pageDimensions(): Record {\r\n return {\r\n 'letter': { width: 8 * 96 + 48, height: 11 * 96 },\r\n 'letterLandscape': { width: 11 * 96, height: 8 * 96 + 48 },\r\n 'tabloid': { width: 1632, height: 1056 },\r\n 'A4': { width: 794, height: 1122 },\r\n 'A4Landscape': { width: 1122, height: 794 },\r\n 'custom': { width: 1, height: 1 }\r\n };\r\n }\r\n static pageSizeFromDimensions(width: number, height: number): string | null {\r\n const rv =\r\n SmoScore.pageSizes.find((sz) => SmoScore.pageDimensions[sz].width === width && SmoScore.pageDimensions[sz].height === height)\r\n ?? null;\r\n return rv;\r\n }\r\n\r\n static get preferences() {\r\n return ['preferences', 'fonts', 'scoreInfo', 'audioSettings'];\r\n }\r\n /**\r\n * serialize the keySignature, tempo and time signature, which are mapped\r\n * to a column at a measure index\r\n * @returns \r\n */\r\n serializeColumnMapped(func: (measure: SmoMeasure) => ColumnMappedParams) {\r\n const keySignature: Record = {};\r\n const tempo: Record = {};\r\n const timeSignature: Record = {};\r\n const renumberingMap: Record = {};\r\n let previous: ColumnMappedParams | null = null;\r\n this.staves[0].measures.forEach((measure) => {\r\n const current = func(measure);\r\n const ix = measure.measureNumber.measureIndex;\r\n const currentInstrument = this.staves[0].getStaffInstrument(ix);\r\n current.keySignature = SmoMusic.vexKeySigWithOffset(current.keySignature, -1 * currentInstrument.keyOffset);\r\n if (ix === 0) {\r\n keySignature[0] = current.keySignature;\r\n tempo[0] = current.tempo;\r\n timeSignature[0] = current.timeSignature;\r\n renumberingMap[0] = 0;\r\n previous = current;\r\n } else {\r\n if (typeof (this.renumberingMap[measure.measureNumber.measureIndex]) === 'number') {\r\n renumberingMap[measure.measureNumber.measureIndex] = this.renumberingMap[measure.measureNumber.measureIndex];\r\n }\r\n if (current.keySignature !== previous!.keySignature) {\r\n previous!.keySignature = current.keySignature;\r\n keySignature[ix] = current.keySignature;\r\n }\r\n if (!(TimeSignature.equal(current.timeSignature, previous!.timeSignature))) {\r\n previous!.timeSignature = current.timeSignature;\r\n timeSignature[ix] = current.timeSignature;\r\n }\r\n if (!(SmoTempoText.eq(current.tempo, previous!.tempo))) {\r\n previous!.tempo = current.tempo;\r\n tempo[ix] = current.tempo;\r\n }\r\n }\r\n });\r\n return { keySignature, tempo, timeSignature, renumberingMap };\r\n }\r\n\r\n /**\r\n * Column-mapped attributes stay the same in each measure until\r\n * changed, like key-signatures. We don't store each measure value to\r\n * make the files smaller\r\n * @param scoreObj - the json blob that contains the score data\r\n * @returns \r\n */\r\n static deserializeColumnMapped(scoreObj: any) {\r\n let curValue: any;\r\n let mapIx: number = 0;\r\n if (!scoreObj.columnAttributeMap) {\r\n return;\r\n }\r\n const attrs = Object.keys(scoreObj.columnAttributeMap);\r\n scoreObj.staves.forEach((staff: any) => {\r\n const attrIxMap: any = {};\r\n attrs.forEach((attr) => {\r\n attrIxMap[attr] = 0;\r\n });\r\n\r\n staff.measures.forEach((measure: any) => {\r\n attrs.forEach((attr) => {\r\n mapIx = attrIxMap[attr];\r\n const curHash = scoreObj.columnAttributeMap[attr];\r\n const attrKeys: any = Object.keys(curHash);\r\n curValue = curHash[attrKeys[mapIx.toString()]];\r\n attrKeys.sort((a: string, b: string) => parseInt(a, 10) > parseInt(b, 10) ? 1 : -1);\r\n if (attrKeys.length > mapIx + 1) {\r\n if (measure.measureNumber.measureIndex >= attrKeys[mapIx + 1]) {\r\n mapIx += 1;\r\n curValue = curHash[attrKeys[mapIx.toString()]];\r\n }\r\n }\r\n // legacy timeSignature format was just a string 2/4, 3/8 etc.\r\n if (attr === 'timeSignature') {\r\n const ts = new TimeSignature(TimeSignature.defaults);\r\n if (typeof (curValue) === 'string') {\r\n ts.timeSignature = curValue;\r\n measure[attr] = ts;\r\n } else {\r\n measure[attr] = TimeSignature.createFromPartial(curValue);\r\n }\r\n } else {\r\n measure[attr] = curValue;\r\n }\r\n attrIxMap[attr] = mapIx;\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Serialize the entire score.\r\n * @returns JSON object\r\n */\r\n serialize(options?: SmoScoreSerializeOptions): SmoScoreParamsSer {\r\n const skipStaves = options?.skipStaves ?? false;\r\n const useDictionary = options?.skipStaves ?? true;\r\n const preserveIds = options?.preserveStaffIds ?? false;\r\n let obj: Partial = {\r\n layoutManager: { ctor: 'SmoLayoutManager', ...SmoLayoutManager.defaults },\r\n audioSettings: {},\r\n measureFormats: [],\r\n staves: [],\r\n textGroups: [],\r\n systemGroups: [],\r\n metadata: SmoScore.scoreMetadataDefaults\r\n };\r\n if (this.layoutManager) {\r\n obj.layoutManager = this.layoutManager.serialize();\r\n }\r\n obj.metadata!.fonts = JSON.parse(JSON.stringify(this.fonts));\r\n obj.metadata!.renumberingMap = JSON.parse(JSON.stringify(this.renumberingMap));\r\n obj.metadata!.preferences = this.preferences.serialize();\r\n obj.metadata!.scoreInfo = JSON.parse(JSON.stringify(this.scoreInfo));\r\n if (typeof (obj?.metadata?.scoreInfo?.version) !== 'number') {\r\n obj.metadata!.scoreInfo.version = 0;\r\n }\r\n if (this.formattingManager) {\r\n obj.measureFormats = this.formattingManager.serialize();\r\n }\r\n\r\n obj.audioSettings = this.audioSettings.serialize();\r\n if (!skipStaves) {\r\n this.staves.forEach((staff: SmoSystemStaff) => {\r\n obj.staves!.push(staff.serialize({ skipMaps: true, preserveIds: preserveIds }));\r\n });\r\n } else {\r\n obj.staves = [];\r\n }\r\n // Score text is not part of text group, so don't save separately.\r\n this.textGroups.forEach((tg) => {\r\n if (tg.isTextVisible()) {\r\n obj.textGroups!.push(tg.serialize());\r\n }\r\n });\r\n this.systemGroups.forEach((gg) => {\r\n obj.systemGroups!.push(gg.serialize());\r\n });\r\n const getSerMeasure = (measure: SmoMeasure): ColumnMappedParams => {\r\n return measure.serializeColumnMapped();\r\n }\r\n obj.columnAttributeMap = this.serializeColumnMapped(getSerMeasure);\r\n if (useDictionary) {\r\n smoSerialize.jsonTokens(obj);\r\n obj = smoSerialize.detokenize(obj, smoSerialize.tokenValues);\r\n obj.dictionary = smoSerialize.tokenMap;\r\n }\r\n return obj as SmoScoreParamsSer;\r\n }\r\n\r\n updateScorePreferences(pref: SmoScorePreferences) {\r\n this.preferences = pref;\r\n SmoMeasure.defaultDupleDuration = pref.defaultDupleDuration;\r\n SmoMeasure.defaultTripleDuration = pref.defaultTripleDuration;\r\n }\r\n get engravingFont(): engravingFontType {\r\n const efont = this.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (efont) {\r\n const val: engravingFontType | undefined = engravingFontTypes.find((x) => x === efont.family);\r\n if (val) {\r\n return val;\r\n }\r\n }\r\n return 'Bravura';\r\n }\r\n set engravingFont(value: engravingFontType) {\r\n const efont = this.fonts.find((x) => x.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (efont && isEngravingFont(value)) {\r\n efont.family = value;\r\n }\r\n }\r\n static upConvertGlobalLayout(jsonObj: any) {\r\n // upconvert global layout, which used to be directly on layoutManager\r\n if (typeof (jsonObj.layoutManager.globalLayout) === 'undefined') {\r\n jsonObj.layoutManager.globalLayout = {\r\n svgScale: jsonObj.layoutManager.svgScale,\r\n zoomScale: jsonObj.layoutManager.zoomScale,\r\n pageWidth: jsonObj.layoutManager.pageWidth,\r\n pageHeight: jsonObj.layoutManager.pageHeight,\r\n noteSpacing: jsonObj.layoutManager.noteSpacing\r\n };\r\n if (!jsonObj.layoutManager.globalLayout.noteSpacing) {\r\n jsonObj.layoutManager.globalLayout.noteSpacing = 1.0;\r\n }\r\n }\r\n }\r\n /**\r\n * Convert legacy score layout to layoutManager object parameters\r\n * @param jsonObj \r\n */\r\n static upConvertLayout(jsonObj: any) {\r\n let i = 0;\r\n jsonObj.layoutManager = {};\r\n SmoLayoutManager.attributes.forEach((attr) => {\r\n jsonObj.layoutManager[attr] = jsonObj.score.layout[attr];\r\n });\r\n jsonObj.layoutManager.pageLayouts = [];\r\n for (i = 0; i < jsonObj.score.layout.pages; ++i) {\r\n const pageSetting = JSON.parse(JSON.stringify(SmoPageLayout.defaults));\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n if (typeof (jsonObj.score.layout[attr]) !== 'undefined') {\r\n pageSetting[attr] = jsonObj.score.layout[attr];\r\n }\r\n });\r\n jsonObj.layoutManager.pageLayouts.push(pageSetting);\r\n }\r\n SmoScore.upConvertGlobalLayout(jsonObj);\r\n }\r\n\r\n /**\r\n * Hack: for the case of a score containing only a single part, use the text from the \r\n * part.\r\n * @param jsonObj \r\n * @returns \r\n */\r\n static fixTextGroupSinglePart(jsonObj: any) {\r\n if (jsonObj.staves.length !== 1) {\r\n return;\r\n }\r\n if (!jsonObj.staves[0].partInfo) {\r\n return;\r\n }\r\n if (!jsonObj.staves[0].partInfo.textGroups || jsonObj.staves[0].partInfo.textGroups.length < 1) {\r\n return;\r\n }\r\n jsonObj.textGroups = JSON.parse(JSON.stringify(jsonObj.staves[0].partInfo.textGroups));\r\n }\r\n /**\r\n * Deserialize an entire score\r\n * @param jsonString \r\n * @returns SmoScore\r\n */\r\n static deserialize(jsonString: string): SmoScore {\r\n let jsonObj: Partial = JSON.parse(jsonString);\r\n let upconvertFormat = false;\r\n let formattingManager = null;\r\n if (jsonObj.dictionary) {\r\n jsonObj = smoSerialize.detokenize(jsonObj, jsonObj.dictionary);\r\n }\r\n SmoScore.fixTextGroupSinglePart(jsonObj);\r\n upconvertFormat = typeof (jsonObj.measureFormats) === 'undefined';\r\n const params: Partial = {};\r\n const staves: SmoSystemStaff[] = [];\r\n jsonObj.textGroups = jsonObj.textGroups ? jsonObj.textGroups : [];\r\n\r\n // Explode the sparse arrays of attributes into the measures\r\n SmoScore.deserializeColumnMapped(jsonObj);\r\n // 'score' attribute name changes to 'metadata'\r\n if (typeof ((jsonObj as any).score) !== 'undefined') {\r\n jsonObj.metadata = (jsonObj as any).score;\r\n }\r\n // meaning of customProportion has changed, backwards-compatiblity\r\n if (typeof (jsonObj.metadata) === 'undefined') {\r\n jsonObj.metadata = SmoScore.scoreMetadataDefaults;\r\n }\r\n // upconvert old proportion operator\r\n const jsonPropUp = jsonObj.metadata.preferences as any;\r\n if (typeof (jsonPropUp) !== 'undefined' && typeof (jsonPropUp.customProportion) === 'number') {\r\n SmoMeasureFormat.defaults.proportionality = jsonPropUp.customProportion;\r\n if (SmoMeasureFormat.defaults.proportionality === SmoMeasureFormat.legacyProportionality) {\r\n SmoMeasureFormat.defaults.proportionality = SmoMeasureFormat.defaultProportionality;\r\n }\r\n }\r\n // up-convert legacy layout data\r\n if ((jsonObj.metadata as any).layout) {\r\n SmoScore.upConvertLayout(jsonObj);\r\n }\r\n if (jsonObj.layoutManager && !jsonObj.layoutManager.globalLayout) {\r\n SmoScore.upConvertGlobalLayout(jsonObj);\r\n }\r\n if (!jsonObj.layoutManager) {\r\n jsonObj.layoutManager = { ctor: \"SmoLayoutManager\", ...SmoLayoutManager.defaults };\r\n }\r\n const layoutManagerParams: SmoLayoutManagerParams = {\r\n globalLayout: jsonObj.layoutManager.globalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: []\r\n }\r\n jsonObj.layoutManager.pageLayouts.forEach((pl) => {\r\n const pageLayout = new SmoPageLayout(pl);\r\n layoutManagerParams.pageLayouts.push(pageLayout);\r\n });\r\n const layoutManager = new SmoLayoutManager(layoutManagerParams);\r\n\r\n // params.layout = JSON.parse(JSON.stringify(SmoScore.defaults.layout));\r\n smoSerialize.serializedMerge(\r\n ['renumberingMap', 'fonts'],\r\n SmoScore.scoreMetadataDefaults, params);\r\n smoSerialize.serializedMerge(\r\n ['renumberingMap', 'fonts'],\r\n jsonObj.metadata, params);\r\n if (jsonObj.metadata.preferences) {\r\n params.preferences = new SmoScorePreferences(jsonObj.metadata.preferences);\r\n } else {\r\n params.preferences = new SmoScorePreferences(SmoScorePreferences.defaults);\r\n }\r\n if (jsonObj.metadata.scoreInfo) {\r\n const scoreInfo: Partial = {};\r\n smoSerialize.serializedMerge(SmoScoreInfoKeys, SmoScore.scoreInfoDefaults, scoreInfo);\r\n smoSerialize.serializedMerge(SmoScoreInfoKeys, jsonObj.metadata.scoreInfo, scoreInfo);\r\n params.scoreInfo = (scoreInfo as SmoScoreInfo);\r\n } else {\r\n params.scoreInfo = SmoScore.scoreInfoDefaults;\r\n }\r\n if (!jsonObj.audioSettings) {\r\n params.audioSettings = new SmoAudioPlayerSettings(SmoAudioPlayerSettings.defaults);\r\n } else {\r\n params.audioSettings = SmoScoreModifierBase.deserialize(jsonObj.audioSettings);\r\n }\r\n params.preferences.transposingScore = params.preferences.transposingScore ?? false;\r\n params.preferences.hideEmptyLines = params.preferences.hideEmptyLines ?? false;\r\n let renumberingMap: Record = { 0: 0 };\r\n if (jsonObj.columnAttributeMap && jsonObj.columnAttributeMap.renumberingMap) {\r\n renumberingMap = jsonObj.columnAttributeMap.renumberingMap;\r\n }\r\n if (!jsonObj.staves) {\r\n throw 'bad score, no staves: ' + JSON.stringify(jsonObj);\r\n }\r\n jsonObj.staves.forEach((staffObj: any, staffIx: number) => {\r\n staffObj.staffId = staffIx;\r\n staffObj.renumberingMap = renumberingMap;\r\n const staff = SmoSystemStaff.deserialize(staffObj);\r\n staves.push(staff);\r\n });\r\n\r\n const textGroups: SmoTextGroup[] = [];\r\n jsonObj.textGroups.forEach((tg: any) => {\r\n if (!isEmptyTextBlock(tg)) {\r\n textGroups.push(SmoTextGroup.deserializePreserveId(tg));\r\n }\r\n });\r\n\r\n const systemGroups: SmoSystemGroup[] = [];\r\n if (jsonObj.systemGroups) {\r\n jsonObj.systemGroups.forEach((tt: any) => {\r\n var st = SmoScoreModifierBase.deserialize(tt);\r\n st.autoLayout = false; // since this has been layed out, presumably, before save\r\n systemGroups.push(st);\r\n });\r\n }\r\n params.staves = staves;\r\n if (upconvertFormat) {\r\n formattingManager = SmoScore.measureFormatFromLegacyScore(params as any, jsonObj);\r\n } else {\r\n const measureParams: SmoFormattingManagerParams = {\r\n measureFormats: [],\r\n partIndex: -1\r\n }\r\n if (jsonObj.measureFormats) {\r\n jsonObj.measureFormats.forEach((mf: SmoMeasureFormatParamsSer) => {\r\n const mfObj = new SmoMeasureFormat(mf);\r\n measureParams.measureFormats?.push(mfObj);\r\n });\r\n }\r\n params.formattingManager = new SmoFormattingManager(measureParams);\r\n }\r\n params.layoutManager = layoutManager;\r\n if (!isSmoScoreParams(params)) {\r\n throw 'Bad score, missing params: ' + JSON.stringify(params, null, ' ');\r\n }\r\n const score = new SmoScore(params);\r\n score.textGroups = textGroups;\r\n score.systemGroups = systemGroups;\r\n score.scoreInfo.version += 1;\r\n return score;\r\n }\r\n /**\r\n * Convert measure formatting from legacy scores, that had the formatting\r\n * per measure, to the new way that has a separate formatting object.\r\n * **/\r\n static measureFormatFromLegacyScore(score: SmoScore, jsonObj: any): SmoFormattingManager | null {\r\n let current: SmoMeasureFormat | null = null;\r\n let previous: SmoMeasureFormat | null = null;\r\n const measureFormats: SmoMeasureFormat[] = [];\r\n score.staves[0].measures.forEach((measure: SmoMeasure) => {\r\n if (current === null) {\r\n current = SmoMeasureFormat.fromLegacyMeasure(jsonObj.staves[0].measures[measure.measureNumber.measureIndex]);\r\n measureFormats[measure.measureNumber.measureIndex] = current;\r\n } else {\r\n previous = current;\r\n current = SmoMeasureFormat.fromLegacyMeasure(jsonObj.staves[0].measures[measure.measureNumber.measureIndex]);\r\n if (!current.eq(previous)) {\r\n measureFormats[measure.measureNumber.measureIndex] = current;\r\n }\r\n }\r\n });\r\n return new SmoFormattingManager({ measureFormats });\r\n }\r\n\r\n /**\r\n * Return a default score with no notes or staves\r\n * @param scoreDefaults \r\n * @param measureDefaults \r\n * @returns \r\n */\r\n static getDefaultScore(scoreDefaults: SmoScoreParams, measureDefaults: SmoMeasureParams | null) {\r\n measureDefaults = measureDefaults !== null ? measureDefaults : SmoMeasure.defaults;\r\n const score = new SmoScore(scoreDefaults);\r\n score.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n score.addStaff(SmoSystemStaff.defaults);\r\n const measure: SmoMeasure = SmoMeasure.getDefaultMeasure(measureDefaults as SmoMeasureParams);\r\n score.addMeasure(0);\r\n measure.voices.push({\r\n notes: SmoMeasure.getDefaultNotes(measureDefaults as SmoMeasureParams)\r\n });\r\n return score;\r\n }\r\n\r\n /**\r\n * Return an 'empty' score, with one measure of rests\r\n * @param scoreDefaults \r\n * @returns \r\n */\r\n static getEmptyScore(scoreDefaults: SmoScoreParams) {\r\n const score = new SmoScore(scoreDefaults);\r\n score.addStaff(SmoSystemStaff.defaults);\r\n return score;\r\n }\r\n /**\r\n * We have deleted a measure, update the renumber index to\r\n * shuffle back.\r\n * @param indexToDelete \r\n */\r\n updateRenumberForAddDelete(indexToDelete: number, toAdd: boolean) {\r\n if (!toAdd && indexToDelete === 0) {\r\n return;\r\n }\r\n const maxIndex = this.staves[0].measures.length - 1;\r\n const increment = toAdd ? 1 : -1;\r\n for (var i = indexToDelete; i < maxIndex; ++i) {\r\n if (typeof (this.renumberingMap[i]) === 'number') {\r\n this.renumberingMap[i] = this.renumberingMap[i] + increment;\r\n }\r\n }\r\n if (typeof (this.renumberingMap[maxIndex]) === 'number' && !toAdd) {\r\n delete this.renumberingMap[maxIndex];\r\n }\r\n }\r\n\r\n updateRenumberingMap(measureIndex: number, localIndex: number) {\r\n if (measureIndex === 0) {\r\n this.renumberingMap[0] = localIndex;\r\n } else if (typeof (this.renumberingMap[measureIndex]) === 'number') {\r\n if (measureIndex === localIndex) {\r\n delete this.renumberingMap[measureIndex];\r\n } else {\r\n this.renumberingMap[measureIndex] = localIndex;\r\n }\r\n } else {\r\n this.renumberingMap[measureIndex] = localIndex;\r\n }\r\n this.staves.forEach((staff) => {\r\n staff.renumberingMap = this.renumberingMap;\r\n });\r\n this.numberStaves();\r\n }\r\n /**\r\n * Iteratively number the staves, like when adding a measure\r\n */\r\n numberStaves() {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n const stave = this.staves[i];\r\n stave.staffId = i;\r\n stave.numberMeasures();\r\n }\r\n }\r\n\r\n /**\r\n * determine if the measure at this index could be a multi-measure rest\r\n * @param measureIndex - the measure index we are considering to add\r\n * @param start - the measure index would be the start of the rest \r\n * @returns \r\n */\r\n isMultimeasureRest(measureIndex: number, start: boolean, forceRest: boolean) {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n if (!forceRest && !this.staves[i].isRest(measureIndex)) {\r\n return false;\r\n }\r\n if (this.staves[i].getVoltasForMeasure(measureIndex).length > 0) {\r\n return false;\r\n }\r\n if (this.staves[i].isRepeatSymbol(measureIndex)) {\r\n return false;\r\n }\r\n if (!start && measureIndex > 0 && this.staves[i].isRepeat(measureIndex - 1)) {\r\n return false;\r\n }\r\n if (this.staves[i].isRehearsal(measureIndex)) {\r\n return false;\r\n }\r\n // instrument change other than the initial measure\r\n if (this.staves[i].measureInstrumentMap[measureIndex] && i > 0) {\r\n return false;\r\n }\r\n }\r\n if (measureIndex > 0) {\r\n const measure = this.staves[0].measures[measureIndex];\r\n const prev = this.staves[0].measures[measureIndex - 1];\r\n if (!start && !TimeSignature.equal(measure.timeSignature, prev.timeSignature)) {\r\n return false;\r\n }\r\n if (!start && measure.keySignature !== prev.keySignature) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Restore measure formats stored when a score is serialized\r\n */\r\n updateMeasureFormats() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n (this.formattingManager as SmoFormattingManager).updateFormat(measure);\r\n });\r\n });\r\n }\r\n /**\r\n * Add a measure to the score with the supplied parameters at the supplied index.\r\n * The defaults per staff may be different depending on the clef, key of the staff.\r\n */\r\n addDefaultMeasureWithNotes(measureIndex: number, parameters: SmoMeasureParams) {\r\n this.updateRenumberForAddDelete(measureIndex, true);\r\n this.staves.forEach((staff) => {\r\n const defaultMeasure =\r\n SmoMeasure.getDefaultMeasureWithNotes(parameters);\r\n staff.addMeasure(measureIndex, defaultMeasure);\r\n });\r\n }\r\n getLocalMeasureIndex(measureIndex: number) {\r\n let maxKey = -1;\r\n const keys = Object.keys(this.updateRenumberForAddDelete);\r\n keys.forEach((key) => {\r\n const numKey = parseInt(key, 10);\r\n if (numKey <= measureIndex && numKey > maxKey) {\r\n maxKey = numKey;\r\n }\r\n });\r\n if (maxKey < 0) {\r\n return measureIndex;\r\n }\r\n return this.renumberingMap[maxKey] + (measureIndex - maxKey);\r\n }\r\n\r\n /**\r\n * delete the measure at the supplied index in all the staves\r\n */\r\n deleteMeasure(measureIndex: number) {\r\n this.staves.forEach((staff) => {\r\n staff.deleteMeasure(measureIndex);\r\n });\r\n // adjust offset if text was attached to any missing measures after the deleted one.\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n if (tg.attachToSelector && (tg.selector as SmoSelector).measure >= measureIndex && (tg.selector as SmoSelector).measure > 0) {\r\n (tg.selector as SmoSelector).measure -= 1;\r\n }\r\n });\r\n this.updateRenumberForAddDelete(measureIndex, false);\r\n }\r\n /**\r\n * coordinate the ids of the display score with the stored score\r\n * @param other \r\n */\r\n synchronizeTextGroups(other: SmoTextGroup[]) {\r\n this.textGroups = [];\r\n other.forEach((tg) => {\r\n const ntg = SmoTextGroup.deserializePreserveId(tg);\r\n this.textGroups.push(ntg);\r\n });\r\n }\r\n /**\r\n * get a measure 'compatible' with the measure at the given index, in terms\r\n * of key, time signature etc.\r\n * @param measureIndex \r\n * @param staffIndex \r\n * @returns \r\n */\r\n getPrototypeMeasure(measureIndex: number, staffIndex: number) {\r\n const staff = this.staves[staffIndex];\r\n let protomeasure: SmoMeasureParams = {} as SmoMeasureParams;\r\n\r\n // Since this staff may already have instrument settings, use the\r\n // immediately preceeding or post-ceding measure if it exists.\r\n if (measureIndex < staff.measures.length) {\r\n protomeasure = staff.measures[measureIndex];\r\n } else if (staff.measures.length) {\r\n protomeasure = staff.measures[staff.measures.length - 1];\r\n } else {\r\n protomeasure = SmoMeasure.defaults;\r\n }\r\n return SmoMeasure.getDefaultMeasureWithNotes(protomeasure);\r\n }\r\n\r\n /**\r\n * Give a measure prototype, create a new measure and add it to each staff, with the\r\n * correct settings for current time signature/clef.\r\n * @param measureIndex \r\n */\r\n addMeasure(measureIndex: number) {\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n const staff = this.staves[i];\r\n const nmeasure = this.getPrototypeMeasure(measureIndex, i);\r\n if (nmeasure.voices.length <= nmeasure.getActiveVoice()) {\r\n nmeasure.setActiveVoice(0);\r\n }\r\n staff.addMeasure(measureIndex, nmeasure);\r\n }\r\n // Update offsets for score modifiers that have a selector\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n if (typeof (tg.selector) === 'undefined') {\r\n return;\r\n }\r\n if (tg.attachToSelector && tg.selector.measure >= measureIndex && tg.selector.measure < this.staves[0].measures.length) {\r\n tg.selector.measure += 1;\r\n }\r\n });\r\n this.updateRenumberForAddDelete(measureIndex, true);\r\n this.numberStaves();\r\n }\r\n\r\n /**\r\n * Replace the measure at the given location. Probably due to an undo operation or paste.\r\n * @param selector \r\n * @param measure \r\n */\r\n replaceMeasure(selector: SmoSelector, measure: SmoMeasure) {\r\n var staff = this.staves[selector.staff];\r\n staff.measures[selector.measure] = measure;\r\n }\r\n\r\n getSystemGroupForStaff(selection: SmoSelection) {\r\n const staffId: number = selection.staff.staffId;\r\n const measureIndex: number = selection.measure.measureNumber.measureIndex;\r\n const exist = this.systemGroups.find((sg: SmoSystemGroup) =>\r\n sg.startSelector.staff <= staffId &&\r\n sg.endSelector.staff >= staffId &&\r\n (sg.mapType === SmoSystemGroup.mapTypes.allMeasures ||\r\n (sg.startSelector.measure <= measureIndex &&\r\n sg.endSelector.measure >= measureIndex))\r\n );\r\n return exist;\r\n }\r\n\r\n getStavesForGroup(group: SmoSystemGroup) {\r\n return this.staves.filter((staff) => staff.staffId >= group.startSelector.staff &&\r\n staff.staffId <= group.endSelector.staff);\r\n }\r\n\r\n // ### addOrReplaceSystemGroup\r\n // Add a new staff grouping, or replace it if it overlaps and is different, or\r\n // remove it if it is identical (toggle)\r\n addOrReplaceSystemGroup(newGroup: SmoSystemGroup) {\r\n // Replace this group for any groups that overlap it.\r\n this.systemGroups = this.systemGroups.filter((sg) => !sg.overlaps(newGroup));\r\n this.systemGroups.push(newGroup);\r\n }\r\n\r\n isPartExposed(): boolean {\r\n if (this.staves.length > 2) {\r\n return false;\r\n }\r\n const staff = this.staves[0];\r\n const staveCount = staff.partInfo.stavesAfter + staff.partInfo.stavesBefore + 1;\r\n return staveCount === this.staves.length\r\n && staff.partInfo.stavesBefore === 0;\r\n }\r\n\r\n /**\r\n * Probably due to an undo operation, replace the staff at the given index.\r\n * @param index \r\n * @param staff \r\n */\r\n replaceStaff(index: number, staff: SmoSystemStaff) {\r\n const staves = [];\r\n let i = 0;\r\n for (i = 0; i < this.staves.length; ++i) {\r\n if (i !== index) {\r\n staves.push(this.staves[i]);\r\n } else {\r\n staves.push(staff);\r\n }\r\n }\r\n this.staves = staves;\r\n }\r\n /**\r\n * \r\n * @param measureIndex \r\n * @param key \r\n */\r\n addKeySignature(measureIndex: number, key: string) {\r\n this.staves.forEach((staff) => {\r\n // Consider transpose for key of instrument\r\n const netOffset = staff.measures[measureIndex].transposeIndex;\r\n const newKey = SmoMusic.vexKeySigWithOffset(key, netOffset);\r\n staff.addKeySignature(measureIndex, newKey);\r\n });\r\n }\r\n\r\n /**\r\n * If the part is a transposing part, remove the transposition from the notes/staff. This logic\r\n * assumes the measures previously had transposeIndex set up by the instrument map.\r\n */\r\n setTransposing() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n if (mm.transposeIndex !== 0) {\r\n const concert = SmoMusic.vexKeySigWithOffset(mm.keySignature, -1 * mm.transposeIndex);\r\n mm.transposeToOffset(0, concert);\r\n mm.transposeIndex = 0;\r\n mm.keySignature = concert;\r\n }\r\n });\r\n });\r\n }\r\n /**\r\n * If the score is switching from transposing to non-transposing, update the index\r\n * and pitches. This logic assumes we are changing from transposing to non-transposing.\r\n */\r\n setNonTransposing() {\r\n this.staves.forEach((staff) => {\r\n staff.measures.forEach((mm) => {\r\n const inst = staff.getStaffInstrument(mm.measureNumber.measureIndex);\r\n if (inst.keyOffset !== 0) {\r\n const concert = SmoMusic.vexKeySigWithOffset(mm.keySignature, inst.keyOffset);\r\n mm.transposeToOffset(inst.keyOffset, concert);\r\n mm.transposeIndex = inst.keyOffset;\r\n mm.keySignature = concert;\r\n }\r\n });\r\n });\r\n }\r\n\r\n // ### addInstrument\r\n // add a new staff (instrument) to the score\r\n addStaff(parameters: SmoSystemStaffParams): SmoSystemStaff {\r\n let i = 0;\r\n if (this.staves.length === 0) {\r\n const staff = new SmoSystemStaff(parameters);\r\n this.staves.push(staff);\r\n this.activeStaff = 0;\r\n // For part views, we renumber the staves even if there is only one staff.\r\n if (staff.measures.length) {\r\n this.numberStaves();\r\n }\r\n return staff;\r\n }\r\n if (!parameters) {\r\n parameters = SmoSystemStaff.defaults;\r\n }\r\n const proto = this.staves[0];\r\n const measures = [];\r\n for (i = 0; i < proto.measures.length; ++i) {\r\n const measure: SmoMeasure = proto.measures[i];\r\n const jsonObj: SmoMeasureParamsSer = measure.serialize();\r\n // Need to do this since score serialization doesn't include TS in each measure\r\n jsonObj.timeSignature = measure.timeSignature.serialize();\r\n jsonObj.tempo = measure.tempo.serialize();\r\n let newMeasure = SmoMeasure.deserialize(jsonObj);\r\n newMeasure.measureNumber = measure.measureNumber;\r\n newMeasure.clef = parameters.measureInstrumentMap[0].clef as Clef;\r\n newMeasure.modifiers = [];\r\n newMeasure.transposeIndex = 0;\r\n // Consider key change if the proto measure is non-concert pitch\r\n newMeasure.keySignature =\r\n SmoMusic.vexKeySigWithOffset(newMeasure.keySignature,\r\n newMeasure.transposeIndex - measure.transposeIndex);\r\n newMeasure.voices = [{ notes: SmoMeasure.getDefaultNotes(newMeasure) }];\r\n measure.modifiers.forEach((modifier) => {\r\n const nmod: SmoMeasureModifierBase = SmoMeasureModifierBase.deserialize(modifier);\r\n newMeasure.modifiers.push(nmod);\r\n });\r\n measures.push(newMeasure);\r\n }\r\n parameters.measures = measures;\r\n const staff = new SmoSystemStaff(parameters);\r\n this.staves.push(staff);\r\n this.activeStaff = this.staves.length - 1;\r\n this.numberStaves();\r\n return staff;\r\n }\r\n /**\r\n * delete any system groups that apply to deleted staves\r\n */\r\n updateSystemGroups() {\r\n const grpToKeep: SmoSystemGroup[] = [];\r\n this.systemGroups.forEach((grp) => {\r\n if (grp.startSelector.staff < this.staves.length &&\r\n grp.endSelector.staff < this.staves.length\r\n ) {\r\n grpToKeep.push(grp);\r\n }\r\n });\r\n this.systemGroups = grpToKeep;\r\n }\r\n // ### removeStaff\r\n // Remove stave at the given index\r\n removeStaff(index: number) {\r\n const staves: SmoSystemStaff[] = [];\r\n let ix = 0;\r\n this.staves.forEach((staff) => {\r\n if (ix !== index) {\r\n staves.push(staff);\r\n }\r\n ix += 1;\r\n });\r\n this.staves = staves;\r\n this.numberStaves();\r\n this.updateSystemGroups();\r\n }\r\n getStaffInstrument(selector: SmoSelector): SmoInstrument {\r\n const staff: SmoSystemStaff = this.staves[selector.staff];\r\n return staff.getStaffInstrument(selector.measure);\r\n }\r\n\r\n swapStaves(index1: number, index2: number): void {\r\n if (this.staves.length < index1 || this.staves.length < index2) {\r\n return;\r\n }\r\n const tmpStaff = this.staves[index1];\r\n this.staves[index1] = this.staves[index2];\r\n this.staves[index2] = tmpStaff;\r\n this.staves.forEach((staff) => {\r\n staff.mapStaffFromTo(index1, index2);\r\n staff.mapStaffFromTo(index2, index1);\r\n });\r\n this.numberStaves();\r\n }\r\n\r\n updateTextGroup(textGroup: SmoTextGroup, toAdd: boolean) {\r\n const tgid = typeof (textGroup) === 'string' ? textGroup :\r\n textGroup.attrs.id;\r\n const ar = this.textGroups.filter((tg) => tg.attrs.id !== tgid);\r\n this.textGroups = ar;\r\n if (toAdd) {\r\n this.textGroups.push(textGroup);\r\n }\r\n }\r\n addTextGroup(textGroup: SmoTextGroup) {\r\n this.updateTextGroup(textGroup, true);\r\n }\r\n getTextGroups() {\r\n return this.textGroups;\r\n }\r\n scaleTextGroups(scale: number) {\r\n this.textGroups.forEach((tg: SmoTextGroup) => {\r\n tg.scaleText(scale);\r\n });\r\n }\r\n\r\n removeTextGroup(textGroup: SmoTextGroup) {\r\n this.updateTextGroup(textGroup, false);\r\n }\r\n\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.staves.forEach((staff) => {\r\n staff.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.staves.forEach((staff) => {\r\n staff.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n // ### setLyricFont\r\n // set the font for lyrics, which are the same for all lyrics in the score\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.staves.forEach((staff) => {\r\n staff.setLyricFont(fontInfo);\r\n });\r\n const fontInst: FontPurpose | undefined = this.fonts.find((fn) => fn.purpose === SmoScore.fontPurposes.LYRICS);\r\n if (typeof (fontInst) === 'undefined') {\r\n return;\r\n }\r\n fontInst.family = fontInfo.family ?? '';\r\n fontInst.size = parseInt(SmoScoreText.fontPointSize(fontInfo.size).toString());\r\n fontInst.custom = true;\r\n }\r\n\r\n setChordFont(fontInfo: FontInfo) {\r\n this.staves.forEach((staff) => {\r\n staff.setChordFont(fontInfo);\r\n });\r\n }\r\n\r\n get measures() {\r\n if (this.staves.length === 0) {\r\n return [];\r\n }\r\n return this.staves[this.activeStaff].measures;\r\n }\r\n incrementActiveStaff(offset: number) {\r\n if (offset < 0) {\r\n offset = offset + this.staves.length;\r\n }\r\n const nextStaff = (this.activeStaff + offset) % this.staves.length;\r\n if (nextStaff >= 0 && nextStaff < this.staves.length) {\r\n this.activeStaff = nextStaff;\r\n }\r\n return this.activeStaff;\r\n }\r\n\r\n setActiveStaff(index: number) {\r\n this.activeStaff = index <= this.staves.length ? index : this.activeStaff;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * A score modifier is anything that isn't mapped specifically to a musical object.\r\n * This includes score text, layout information\r\n * @module /smo/data/scoreModifier\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoMeasureFormat, SmoMeasureFormatParamsSer } from './measureModifiers';\r\nimport { SmoAttrs, getId, SmoModifierBase, SvgBox, \r\n createXmlAttribute } from './common';\r\nimport { SmoMeasure } from './measure';\r\nimport { SmoSelector } from '../xform/selections';\r\n\r\n/**\r\n * Base class for all {@link SmoScore} modifiers. \r\n * It is used to de/serialize the objects.\r\n * @category SmoModifier\r\n */\r\nexport abstract class SmoScoreModifierBase implements SmoModifierBase {\r\n /**\r\n * constructor\r\n *\r\n * @type {string}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n ctor: string;\r\n /**\r\n * When rendered, keep track of the box\r\n *\r\n * @type {(SvgBox | null)}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n logicalBox: SvgBox | null = null;\r\n /**\r\n * attributes for identification\r\n *\r\n * @type {SmoAttrs}\r\n * @memberof SmoScoreModifierBase\r\n */\r\n attrs: SmoAttrs;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n abstract serialize(): any;\r\n static deserialize(jsonObj: any) {\r\n const ctor = eval('globalThis.Smo.' + jsonObj.ctor);\r\n const rv = new ctor(jsonObj);\r\n return rv;\r\n }\r\n}\r\n\r\n/**\r\n * For global/default font settings.\r\n * @param name to distinguish: chord, lyric etc.\r\n * @param family font family\r\n * @param size in points\r\n * @param custom used to distinguish a specific text is not the default\r\n */\r\nexport interface FontPurpose {\r\n /**\r\n * name of the purpose\r\n * { ENGRAVING: 1, SCORE: 2, CHORDS: 3, LYRICS: 4 }\r\n */\r\n name: string,\r\n /**\r\n * purpose enumeration\r\n */\r\n purpose: number,\r\n /**\r\n * font family\r\n */\r\n family: string,\r\n /**\r\n * default font size\r\n */\r\n size: number,\r\n /**\r\n * a flag that can be used to indicate if this is the global default, or a customization.\r\n * For lyrics for instance, most lyrics would use the custom font, this would be true if\r\n * it was overridden\r\n */\r\n custom: boolean\r\n}\r\n\r\n\r\n// @internal\r\nexport type SmoScoreInfoKey = 'name' | 'title' | 'subTitle' | 'composer' | 'copyright';\r\nexport const SmoScoreInfoKeys = ['name', 'title', 'subTitle', 'composer', 'copyright'];\r\n/**\r\n * Information about the score itself, like composer etc.\r\n * @category SmoModifier\r\n */\r\nexport interface SmoScoreInfo {\r\n /**\r\n * deprecated, now defaults to title\r\n */\r\n name: string,\r\n /**\r\n * name of score\r\n */\r\n title: string,\r\n /**\r\n * subtitle/opus\r\n */\r\n subTitle: string,\r\n /**\r\n * who wrote it\r\n */\r\n composer: string,\r\n /**\r\n * copyright information\r\n */\r\n copyright: string,\r\n /**\r\n * for version tracking\r\n */\r\n version: number\r\n}\r\n\r\n\r\nexport type SmoScorePreferenceBool = 'autoPlay' | 'autoAdvance' | 'showPiano' | 'hideEmptyLines' | 'transposingScore';\r\nexport type SmoScorePreferenceNumber = 'defaultDupleDuration' | 'defaultTripleDuration';\r\nexport const SmoScorePreferenceBools: SmoScorePreferenceBool[] = ['autoPlay', 'autoAdvance', 'showPiano', 'hideEmptyLines', 'transposingScore'];\r\nexport const SmoScorePreferenceNumbers: SmoScorePreferenceNumber[] = ['defaultDupleDuration', 'defaultTripleDuration'];\r\n/**\r\n * Global score/program behavior preferences, see below for parameters\r\n */\r\nexport interface SmoScorePreferencesParams {\r\n autoPlay: boolean;\r\n autoAdvance: boolean;\r\n defaultDupleDuration: number;\r\n defaultTripleDuration: number;\r\n showPiano: boolean;\r\n hideEmptyLines: boolean;\r\n transposingScore: boolean;\r\n}\r\n/**\r\n * Some default SMO behavior\r\n * @param autoPlay play a new note or chord\r\n * @param autoAdvance Sibelius-like behavior of advancing cursor when a letter note is placed\r\n * @param defaultDupleDuration in ticks, even metered measures\r\n * @param defaultTripleDuration in ticks, 6/8 etc.\r\n * @param showPiano show the piano widget in the score\r\n * @param hideEmptyLines Hide empty lines in full score\r\n * @param transposingScore Whether to show the score parts in concert key\r\n * @category SmoModifier\r\n */\r\nexport class SmoScorePreferences {\r\n autoPlay: boolean = true;\r\n autoAdvance: boolean = true;\r\n defaultDupleDuration: number = 4096;\r\n defaultTripleDuration: number = 6144;\r\n showPiano: boolean = false;\r\n hideEmptyLines: boolean = false;\r\n transposingScore: boolean = false;\r\n static get defaults(): SmoScorePreferencesParams {\r\n return {\r\n autoPlay: true,\r\n autoAdvance: true,\r\n defaultDupleDuration: 4096,\r\n defaultTripleDuration: 6144,\r\n showPiano: false,\r\n hideEmptyLines: false,\r\n transposingScore: false\r\n };\r\n }\r\n constructor(params: SmoScorePreferencesParams) {\r\n if (params) {\r\n SmoScorePreferenceBools.forEach((bb) => {\r\n this[bb] = params[bb];\r\n });\r\n SmoScorePreferenceNumbers.forEach((nn) => {\r\n this[nn] = params[nn];\r\n });\r\n }\r\n }\r\n serialize(): SmoScorePreferencesParams {\r\n return {\r\n ...this\r\n }\r\n }\r\n}\r\n/**\r\n * non-musical information about the score\r\n */\r\nexport interface ScoreMetadataSer {\r\n fonts: FontPurpose[],\r\n preferences: SmoScorePreferencesParams,\r\n renumberingMap: Record,\r\n scoreInfo: SmoScoreInfo\r\n}\r\n\r\n/**\r\n * Map of measure formatting to measure IDs. We only save non-default formats\r\n * @param measureFormats \r\n * @param partIndex \r\n */\r\nexport interface SmoFormattingManagerParams {\r\n /**\r\n * map of index to {@link SmoMeasureFormat} objects\r\n */\r\n measureFormats?: SmoMeasureFormat[],\r\n /**\r\n * the associated part, or -1 for the score\r\n */\r\n partIndex?: number\r\n}\r\n/**\r\n * A score can have different views - one for the score itself and one for each\r\n * part, and each part can have its own formatting and text.\r\n * *Note*: I may move this to part info module.\r\n * @param measureFormats map of index to {@link SmoMeasureFormat} objects\r\n * @param partIndex the associated part, or -1 for the score\r\n * @category SmoModifier\r\n */\r\nexport class SmoFormattingManager extends SmoScoreModifierBase {\r\n measureFormats: Record;\r\n partIndex: number = -1;\r\n static get forScore() {\r\n return -1;\r\n }\r\n static get defaults(): SmoFormattingManagerParams {\r\n return {\r\n measureFormats: [new SmoMeasureFormat(SmoMeasureFormat.defaults)],\r\n partIndex: -1\r\n };\r\n }\r\n\r\n constructor(params: SmoFormattingManagerParams) {\r\n super('SmoFormattingManager');\r\n if (typeof (params) === 'undefined') {\r\n params = {};\r\n }\r\n this.measureFormats = {};\r\n this.partIndex = SmoFormattingManager.forScore;\r\n if (typeof (params.partIndex) !== 'undefined') {\r\n this.partIndex = params.partIndex;\r\n }\r\n if (typeof (params.measureFormats) !== 'undefined' && params.measureFormats.length) {\r\n params.measureFormats.forEach((format) => {\r\n // 0 is default value, so fix case of first measure\r\n if (typeof(format.measureIndex) !== 'number') {\r\n format.measureIndex = 0;\r\n }\r\n this.measureFormats[format.measureIndex] = new SmoMeasureFormat(format);\r\n });\r\n }\r\n }\r\n /**\r\n * Update the measure format for the measure at the given index\r\n * @param format \r\n */\r\n updateMeasureFormat(format: SmoMeasureFormat) {\r\n this.measureFormats[format.measureIndex] = format;\r\n }\r\n /**\r\n * Update the measure format based on the format of a given measure\r\n * @param measure \r\n */\r\n updateFormat(measure: SmoMeasure) {\r\n if (this.measureFormats[measure.measureNumber.measureIndex]) {\r\n measure.format = this.measureFormats[measure.measureNumber.measureIndex];\r\n } else {\r\n measure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n }\r\n }\r\n serialize(): SmoMeasureFormatParamsSer[] {\r\n const rv: SmoMeasureFormatParamsSer[] = [];\r\n const keys = Object.keys(this.measureFormats);\r\n keys.forEach((key: any) => {\r\n if (!this.measureFormats[key].isDefault) {\r\n rv.push(this.measureFormats[key].serialize());\r\n }\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport type SmoAudioPlayerType = 'sampler' | 'synthesizer';\r\n/**\r\n * Constructor parameters for audio player\r\n */\r\nexport interface SmoAudioPlayerParameters {\r\n playerType?: SmoAudioPlayerType,\r\n waveform?: OscillatorType,\r\n reverbEnable?: boolean,\r\n reverbDelay?: number,\r\n reverbDecay?: number\r\n}\r\n\r\n/**\r\n * web audio API defines this\r\n * @param otype \r\n * @returns \r\n */\r\nexport function IsOscillatorType(otype: OscillatorType | string): otype is OscillatorType {\r\n return ['sine', 'square', 'sawtooth', 'triangle', 'custom'].findIndex((x) => x === otype) >= 0;\r\n}\r\n/**\r\n * Audio playback parameters. Just fun stuff.\r\n * @category SmoModifier\r\n */\r\nexport class SmoAudioPlayerSettings extends SmoScoreModifierBase {\r\n static get defaults(): SmoAudioPlayerParameters {\r\n return ({\r\n playerType: 'sampler',\r\n waveform: 'sine',\r\n reverbEnable: true,\r\n reverbDelay: 0.5,\r\n reverbDecay: 2\r\n });\r\n }\r\n static get attributes() {\r\n return ['playerType', 'waveform', 'reverbEnable', 'reverbDelay', 'reverbDecay'];\r\n }\r\n\r\n playerType: SmoAudioPlayerType = 'sampler';\r\n waveform: OscillatorType = 'sine';\r\n reverbEnable: boolean = true;\r\n reverbDelay: number = 0.2;\r\n reverbDecay: number = 0.5;\r\n constructor(params: SmoAudioPlayerParameters) {\r\n super('SmoAudioPlayerSettings');\r\n smoSerialize.serializedMerge(SmoAudioPlayerSettings.attributes, SmoAudioPlayerSettings.defaults, this);\r\n smoSerialize.serializedMerge(SmoAudioPlayerSettings.attributes, params, this);\r\n }\r\n serialize(): any {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoAudioPlayerSettings.defaults, SmoAudioPlayerSettings.attributes, this, params);\r\n params.ctor = 'SmoAudioPlayerSettings';\r\n return params;\r\n }\r\n}\r\nexport type ScaledPageAttributes = 'leftMargin' | 'rightMargin' | 'topMargin' | 'bottomMargin' | 'interGap' | 'intraGap';\r\n/**\r\n * Constructor parameters for {@link SmoPageLayout}, part of {@link SmoLayoutManager}\r\n * @category SmoParameters, serialization\r\n */\r\nexport interface SmoPageLayoutParams {\r\n leftMargin: number,\r\n rightMargin: number,\r\n topMargin: number,\r\n bottomMargin: number,\r\n interGap: number,\r\n intraGap: number\r\n}\r\nexport interface SmoPageLayoutParamsSer {\r\n\r\n}\r\n/**\r\n * Define margins and other layout information associated with a specific page, and may\r\n * be different on different pages.\r\n * @category SmoModifier\r\n */\r\nexport class SmoPageLayout extends SmoScoreModifierBase {\r\n static get defaults(): SmoPageLayoutParams {\r\n return JSON.parse(JSON.stringify({\r\n leftMargin: 30,\r\n rightMargin: 30,\r\n topMargin: 144,\r\n bottomMargin: 72,\r\n interGap: 30,\r\n intraGap: 10\r\n }));\r\n }\r\n static get attributes(): ScaledPageAttributes[] {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n leftMargin: number = 30;\r\n rightMargin: number = 30;\r\n topMargin: number = 40;\r\n bottomMargin: number = 40;\r\n interGap: number = 30;\r\n intraGap: number = 10;\r\n constructor(params: SmoPageLayoutParams) {\r\n super('SmoPageLayout');\r\n this.leftMargin = params.leftMargin;\r\n this.rightMargin = params.rightMargin;\r\n this.topMargin = params.topMargin;\r\n this.bottomMargin = params.bottomMargin;\r\n this.interGap = params.interGap;\r\n this.intraGap = params.intraGap;\r\n }\r\n serialize(): any {\r\n const params: any = {};\r\n smoSerialize.serializedMergeNonDefault(SmoPageLayout.defaults, SmoPageLayout.attributes, this, params);\r\n params.ctor = 'SmoPageLayout';\r\n return params;\r\n }\r\n}\r\nexport type ScaledGlobalAttributes = 'pageWidth' | 'pageHeight';\r\nexport type GlobalLayoutAttributes = 'pageWidth' | 'pageHeight' | 'noteSpacing' | 'svgScale' | 'zoomScale' | 'proportionality' | 'maxMeasureSystem';\r\nexport const GlobalLayoutAttributesArray: GlobalLayoutAttributes[] = ['pageWidth', 'pageHeight', 'noteSpacing', 'svgScale', 'zoomScale', 'proportionality', 'maxMeasureSystem'];\r\n/**\r\n * Global layout are parameters that determine the layout of the whole score, because they affect the containing svg element\r\n * @category {SmoParams}\r\n */\r\nexport interface SmoGlobalLayout {\r\n svgScale: number;\r\n zoomScale: number;\r\n noteSpacing: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n proportionality: number,\r\n maxMeasureSystem: number\r\n}\r\n\r\n/**\r\n * Used to create {@link SmoLayoutManagerParams}\r\n * @category {SmoParams}\r\n */\r\nexport interface ScaledPageLayout {\r\n svgScale: number;\r\n zoomScale: number;\r\n noteSpacing: number;\r\n pageWidth: number;\r\n pageHeight: number;\r\n leftMargin: number;\r\n rightMargin: number;\r\n topMargin: number;\r\n bottomMargin: number;\r\n interGap: number;\r\n intraGap: number;\r\n pages: number;\r\n maxMeasureSystem: number;\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoLayoutManager}\r\n * @category {SmoParams}\r\n */\r\nexport interface SmoLayoutManagerParams {\r\n /**\r\n * global svg settings for zoom, page width/height\r\n */\r\n globalLayout: SmoGlobalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: SmoPageLayout[]\r\n}\r\nexport interface SmoLayoutManagerParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string; \r\n /**\r\n * global svg settings for zoom, page width/height\r\n */\r\n globalLayout: SmoGlobalLayout,\r\n /**\r\n * page margins for each page\r\n */\r\n pageLayouts: SmoPageLayoutParams[]\r\n}\r\nfunction isSmoLayoutManagerParamsSer(params: Partial): params is SmoLayoutManagerParamsSer {\r\n if (!params.ctor || params.ctor !== 'SmoLayoutManager') {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Storage and utilities for layout information in the score. Each\r\n * manager has one set of page height/width, since svg element\r\n * must have single length/width and viewbox.\r\n * Each page can have different margins.\r\n * @category SmoModifier\r\n */\r\nexport class SmoLayoutManager extends SmoScoreModifierBase {\r\n static get defaultLayout(): SmoGlobalLayout {\r\n return {\r\n svgScale: 0.55,\r\n zoomScale: 2.0,\r\n noteSpacing: 1.0,\r\n pageWidth: 8 * 96 + 48,\r\n pageHeight: 11 * 96,\r\n proportionality: 5,\r\n maxMeasureSystem: 0\r\n };\r\n }\r\n static get defaults(): SmoLayoutManagerParams {\r\n return {\r\n globalLayout: JSON.parse(JSON.stringify(SmoLayoutManager.defaultLayout)),\r\n pageLayouts: []\r\n };\r\n }\r\n static get attributes(): GlobalLayoutAttributes[] {\r\n return ['pageWidth', 'pageHeight', 'noteSpacing', 'svgScale', 'zoomScale', 'maxMeasureSystem'];\r\n }\r\n // Attributes that are scaled by svgScale\r\n /* static get scalableAttributes(): Global {\r\n return ['pageWidth', 'pageHeight'];\r\n }*/\r\n static get scaledPageAttributes(): ScaledPageAttributes[] {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n static get scaledGlobalAttributes(): ScaledGlobalAttributes[] {\r\n return ['pageWidth', 'pageHeight'];\r\n }\r\n static areLayoutsEqual(g1: SmoGlobalLayout, g2: SmoGlobalLayout) {\r\n let rv = true;\r\n GlobalLayoutAttributesArray.forEach((attr) => {\r\n if (g1[attr] !== g2[attr]) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n static isZoomChange(g1: SmoGlobalLayout, g2: SmoGlobalLayout) {\r\n let rv = true;\r\n GlobalLayoutAttributesArray.forEach((attr) => {\r\n if (g1[attr] !== g2[attr] && attr !== 'zoomScale') {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * Adjust zoom width so the score takes up the whole score area\r\n */\r\n zoomToWidth(screenWidth: number) {\r\n const curWidth = this.globalLayout.pageWidth * this.globalLayout.svgScale;\r\n this.globalLayout.zoomScale = ((screenWidth - 350) / curWidth) * this.globalLayout.svgScale; // magic 350 for left controls....TODO standardize this\r\n }\r\n static getScaledPageLayout(globalLayout: SmoGlobalLayout, pageLayout: SmoPageLayout, pages: number): ScaledPageLayout {\r\n const rv: Partial = {};\r\n SmoLayoutManager.scaledPageAttributes.forEach((attr: ScaledPageAttributes) => {\r\n rv[attr] = pageLayout[attr] / globalLayout.svgScale;\r\n });\r\n SmoLayoutManager.scaledGlobalAttributes.forEach((attr: ScaledGlobalAttributes) => {\r\n rv[attr] = globalLayout[attr] / globalLayout.svgScale;\r\n });\r\n // Note spacing is relative, so * it and not divide\r\n rv.noteSpacing = globalLayout.noteSpacing * globalLayout.svgScale;\r\n rv.svgScale = globalLayout.svgScale;\r\n rv.zoomScale = globalLayout.zoomScale;\r\n rv.maxMeasureSystem = globalLayout.maxMeasureSystem;\r\n \r\n return rv as ScaledPageLayout;\r\n }\r\n globalLayout: SmoGlobalLayout;\r\n pageLayouts: SmoPageLayout[] = [];\r\n constructor(params: SmoLayoutManagerParams) {\r\n super('SmoLayoutManager');\r\n if (typeof(params.globalLayout.maxMeasureSystem) === 'undefined') {\r\n params.globalLayout.maxMeasureSystem = SmoLayoutManager.defaultLayout.maxMeasureSystem;\r\n }\r\n this.globalLayout = JSON.parse(JSON.stringify(params.globalLayout));\r\n if (params.pageLayouts.length) {\r\n params.pageLayouts.forEach((plp) => {\r\n const pageParams: SmoPageLayoutParams = SmoPageLayout.defaults;\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n if (typeof (plp[attr]) !== 'undefined') {\r\n pageParams[attr] = plp[attr];\r\n }\r\n });\r\n this.pageLayouts.push(new SmoPageLayout(pageParams));\r\n });\r\n } else {\r\n this.pageLayouts.push(new SmoPageLayout(SmoPageLayout.defaults));\r\n }\r\n }\r\n trimPages(pageCount: number) {\r\n if (pageCount < this.pageLayouts.length - 1) {\r\n this.pageLayouts = this.pageLayouts.slice(0, pageCount + 1);\r\n }\r\n }\r\n getZoomScale() {\r\n return this.globalLayout.zoomScale;\r\n }\r\n serialize(): SmoLayoutManagerParamsSer {\r\n const rv: Partial = { ctor: 'SmoLayoutManager' };\r\n rv.pageLayouts = [];\r\n this.pageLayouts.forEach((pl) => {\r\n rv.pageLayouts!.push(pl.serialize());\r\n });\r\n rv.globalLayout = JSON.parse(JSON.stringify(this.globalLayout));\r\n if (!isSmoLayoutManagerParamsSer(rv)) {\r\n throw 'bad layout manager ' + JSON.stringify(rv);\r\n }\r\n return rv;\r\n }\r\n updateGlobalLayout(params: SmoGlobalLayout) {\r\n SmoLayoutManager.attributes.forEach((attr: string) => {\r\n if (typeof ((params as any)[attr]) !== 'undefined') {\r\n (this.globalLayout as any)[attr] = (params as any)[attr];\r\n }\r\n });\r\n }\r\n // ### addToPageLayouts\r\n // Make sure the next page has a layout. If not, copy settings from\r\n // previous page.\r\n addToPageLayouts(pageNum: number) {\r\n const lastLayout = this.pageLayouts[this.pageLayouts.length - 1];\r\n if (this.pageLayouts.length <= pageNum) {\r\n this.pageLayouts.push(new SmoPageLayout(lastLayout));\r\n }\r\n }\r\n getGlobalLayout(): SmoGlobalLayout {\r\n return JSON.parse(JSON.stringify(this.globalLayout));\r\n }\r\n // Return a deep copy of the page parameters, adjusted for the global scale.\r\n getScaledPageLayout(pageIndex: number): ScaledPageLayout {\r\n return SmoLayoutManager.getScaledPageLayout(this.globalLayout, this.pageLayouts[pageIndex], this.pageLayouts.length);\r\n }\r\n getPageLayout(pageIndex: number): SmoPageLayout {\r\n return new SmoPageLayout(this.pageLayouts[pageIndex]);\r\n }\r\n getPageLayouts(): SmoPageLayout[] {\r\n const rv: SmoPageLayout[] = [];\r\n this.pageLayouts.forEach((pl) => {\r\n rv.push(new SmoPageLayout(pl));\r\n });\r\n return rv;\r\n }\r\n updatePage(pageLayout: SmoPageLayout, pageIndex: number) {\r\n if (this.pageLayouts.length > pageIndex) {\r\n this.pageLayouts[pageIndex] = new SmoPageLayout(pageLayout);\r\n }\r\n }\r\n}\r\n/**\r\n * constructor parameters for system groups (groupings of staves in the score)\r\n * @param leftConnector\r\n * @param rightConnector\r\n * @param mapType\r\n * @param text\r\n * @param shortText\r\n * @param justify\r\n * @param startSelector not used\r\n * @param endSelector not used\r\n * @category SmoParameters\r\n */\r\nexport interface SmoSystemGroupParams {\r\n /**\r\n * bracket etc.\r\n */\r\n leftConnector: number,\r\n /**\r\n * bracket etc.\r\n */\r\n rightConnector: number,\r\n /**\r\n * future, score groups can be different for different parts of the score\r\n */\r\n mapType: number,\r\n /**\r\n * whether to justify the notes in the group\r\n */\r\n justify: boolean,\r\n /**\r\n * if mapped to a range, start\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * if mapped to a range, end\r\n */\r\n endSelector: SmoSelector\r\n}\r\nexport interface SmoSystemGroupParamsSer extends SmoSystemGroupParams{\r\n /** \r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoSystemGroupParamsSer(params: Partial): params is SmoSystemGroupParamsSer {\r\n if (params.ctor === 'SmoSystemGroup') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * System group is the grouping of staves into a system.\r\n * @category SmoModifier\r\n * */\r\nexport class SmoSystemGroup extends SmoScoreModifierBase {\r\n static get connectorTypes(): Record {\r\n return { brace: 0, bracket: 1, single: 2, double: 3 };\r\n }\r\n static get mapTypes(): Record {\r\n return { allMeasures: 0, range: 1 };\r\n }\r\n static get attributes(): string[] {\r\n return ['leftConnector', 'rightConnector', 'text', 'shortText', 'justify',\r\n 'startSelector', 'endSelector', 'mapType'];\r\n }\r\n static get defaults(): SmoSystemGroupParams {\r\n return JSON.parse(JSON.stringify({\r\n leftConnector: SmoSystemGroup.connectorTypes.single,\r\n rightConnector: SmoSystemGroup.connectorTypes.single,\r\n mapType: SmoSystemGroup.mapTypes.allMeasures,\r\n justify: true,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static isSystemGroup(modifier: SmoSystemGroup | SmoModifierBase): modifier is SmoSystemGroup {\r\n return modifier.ctor === 'SmoSystemGroup';\r\n }\r\n leftConnector: number = SmoSystemGroup.connectorTypes.single;\r\n rightConnector: number = SmoSystemGroup.connectorTypes.single;\r\n mapType: number = SmoSystemGroup.mapTypes.allMeasures;\r\n text: string = '';\r\n shortText: string = '';\r\n justify: boolean = true;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n attrs: SmoAttrs;\r\n constructor(params: SmoSystemGroupParams) {\r\n super('SmoSystemGroup');\r\n smoSerialize.serializedMerge(SmoSystemGroup.attributes, SmoSystemGroup.defaults, this);\r\n smoSerialize.serializedMerge(SmoSystemGroup.attributes, params, this);\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSystemGroup'\r\n };\r\n }\r\n stavesOverlap(group: SmoSystemGroup) {\r\n return (this.startSelector.staff >= group.startSelector.staff && this.startSelector.staff <= group.endSelector.staff) ||\r\n (this.endSelector.staff >= group.startSelector.staff && this.endSelector.staff <= group.endSelector.staff);\r\n }\r\n measuresOverlap(group: SmoSystemGroup) {\r\n return this.stavesOverlap(group) &&\r\n ((this.startSelector.measure >= group.startSelector.measure && this.endSelector.measure <= group.startSelector.measure) ||\r\n (this.endSelector.measure >= group.startSelector.measure && this.endSelector.measure <= group.endSelector.measure));\r\n }\r\n overlaps(group: SmoSystemGroup) {\r\n return (this.stavesOverlap(group) && this.mapType === SmoSystemGroup.mapTypes.allMeasures) ||\r\n (this.measuresOverlap(group) && this.mapType === SmoSystemGroup.mapTypes.range);\r\n }\r\n serialize(): SmoSystemGroupParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoSystemGroup.defaults, SmoSystemGroup.attributes, this, params);\r\n params.ctor = 'SmoSystemGroup';\r\n if (!isSmoSystemGroupParamsSer(params)) {\r\n throw 'bad system group ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Score Text is anything that isn't mapped specifically to a musical object.\r\n * This includes score text, headers, footers. Score text is a single block of text.\r\n * TextGroup is 1 or more ScoreText blocks arranged in some way.\r\n * @module /smo/data/scoreModifier\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoScoreModifierBase, ScaledPageLayout } from './scoreModifiers';\r\nimport { SmoAttrs, SmoModifierBase } from './common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { FontInfo } from '../../common/vex';\r\nimport { TextFormatter } from '../../common/textformatter';\r\n\r\n/**\r\n * Parameters for a single text block. Text blocks make up a text group.\r\n * @category SmoParams\r\n */\r\nexport interface SmoScoreTextParams {\r\n /**\r\n * x location of font\r\n */\r\n x: number,\r\n /**\r\n * location of font\r\n */\r\n y: number,\r\n /**\r\n * In currently supported text groups, width and height comes from the text bounding box\r\n * and so isn't required.\r\n */\r\n width: number,\r\n /**\r\n * In currently supported text groups, width and height comes from the text bounding box\r\n * and so isn't required.\r\n */\r\n height: number,\r\n /**\r\n * The text content\r\n */\r\n text: string,\r\n /**\r\n * Font of the text\r\n */\r\n fontInfo: FontInfo,\r\n /**\r\n * defaults to black\r\n */\r\n fill?: string,\r\n classes?: string,\r\n}\r\n/**\r\n * serialization\r\n */\r\nexport interface SmoScoreTextSer extends SmoScoreTextParams {\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string;\r\n}\r\n\r\nfunction isSmoScoreTextSer(params: Partial): params is SmoScoreTextSer {\r\n if (!(params?.ctor === 'SmoScoreText')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Identify some text in the score, not associated with any musical element, like page\r\n * decorations, titles etc.\r\n * Note: score text is always contained in a text group. So this isn't directly accessed\r\n * by score, but we keep the collection in score for backwards-compatibility\r\n * @category SmoModifier\r\n * @internal\r\n */\r\nexport class SmoScoreText extends SmoScoreModifierBase {\r\n // convert EM to a number, or leave as a number etc.\r\n static fontPointSize(size: string | number | undefined) {\r\n let rv: number = 12;\r\n if (typeof(size) !== 'number' && typeof(size) !== 'string') {\r\n return rv;\r\n }\r\n const szz: string | number = size ?? 14;\r\n if (typeof (szz) === 'number') {\r\n return szz;\r\n }\r\n const ptString = szz.substring(0, szz.length - 2);\r\n rv = parseFloat(ptString);\r\n if (szz.indexOf('em') > 0) {\r\n rv *= 14;\r\n } else if (szz.indexOf('px') > 0) {\r\n rv *= (96.0 / 72.0);\r\n }\r\n if (isNaN(rv)) {\r\n rv = 12;\r\n }\r\n return rv;\r\n }\r\n\r\n /**\r\n * Convert a numeric or string weight into either 'bold' or 'normal'\r\n * @param fontWeight \r\n * @returns \r\n */\r\n static weightString(fontWeight: string | number | undefined): string { \r\n let rv: string = 'normal';\r\n if (fontWeight) {\r\n const numForm = parseInt(fontWeight.toString(), 10);\r\n if (isNaN(numForm)) {\r\n rv = fontWeight.toString();\r\n } else if (numForm > 500) {\r\n rv = 'bold';\r\n }\r\n }\r\n return rv;\r\n }\r\n static familyString(fam: string | undefined): string {\r\n if (!fam) {\r\n return SmoScoreText.fontFamilies.sansSerif;\r\n }\r\n return fam;\r\n }\r\n static get fontFamilies(): Record {\r\n return {\r\n serif: 'Merriweather', sansSerif: 'Roboto,sans-serif', monospace: 'monospace', cursive: 'cursive',\r\n times: 'Merriweather', arial: 'Arial'\r\n };\r\n }\r\n static get parameters() {\r\n return ['x', 'y', 'width', 'height', 'text', 'fontInfo', 'fill', 'classes']\r\n }\r\n static get defaults(): SmoScoreTextParams {\r\n return JSON.parse(JSON.stringify({\r\n x: 15,\r\n y: 15,\r\n width: 0,\r\n height: 0,\r\n text: 'Text',\r\n fontInfo: {\r\n size: 14,\r\n family: SmoScoreText.fontFamilies.serif,\r\n style: 'normal',\r\n weight: 'normal'\r\n },\r\n fill: 'black',\r\n classes: 'score-text',\r\n }));\r\n }\r\n static deserialize(jsonObj: SmoScoreTextSer) {\r\n const params = SmoScoreText.defaults;\r\n smoSerialize.serializedMerge(SmoScoreText.parameters, jsonObj, params);\r\n if (typeof (params.fontInfo.size === 'string')) {\r\n params.fontInfo.size = SmoScoreText.fontPointSize(params.fontInfo.size);\r\n }\r\n return new SmoScoreText(params);\r\n }\r\n x: number = 15;\r\n y: number = 15;\r\n width: number = 0;\r\n height: number = 0;\r\n text: string = 'Text';\r\n fontInfo: FontInfo = {\r\n size: 14,\r\n family: SmoScoreText.fontFamilies.serif,\r\n style: 'normal',\r\n weight: 'normal'\r\n };\r\n fill: string = 'black';\r\n classes: string = 'score-text';\r\n scaleX: number = 1.0;\r\n scaleY: number = 1.0;\r\n\r\n getText() {\r\n return this.text;\r\n }\r\n estimateWidth(): number {\r\n let i = 0;\r\n let rv = 0;\r\n const textFont = TextFormatter.create({\r\n family: this.fontInfo.family,\r\n size: this.fontInfo.size,\r\n weight: this.fontInfo.weight,\r\n style: this.fontInfo.style\r\n });\r\n textFont.setFontSize(SmoScoreText.fontPointSize(this.fontInfo.size));\r\n for (i = 0; i < this.text.length; ++i) {\r\n rv += textFont.getWidthForTextInPx(this.text[i]);\r\n }\r\n return rv;\r\n }\r\n tryParseUnicode() {\r\n this.text = smoSerialize.tryParseUnicode(this.text);\r\n }\r\n\r\n offsetX(offset: number) {\r\n this.x += offset;\r\n }\r\n offsetY(offset: number) {\r\n this.y += offset;\r\n }\r\n\r\n serialize(): SmoScoreTextSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoScoreText.defaults, SmoScoreText.attributes, this, params);\r\n params.ctor = 'SmoScoreText';\r\n if (!isSmoScoreTextSer(params)) {\r\n throw ('bad score text ')\r\n }\r\n return params;\r\n }\r\n static get attributes(): string[] {\r\n return ['x', 'y', 'text', 'fontInfo', 'classes',\r\n 'fill', 'width', 'height', 'scaleX', 'scaleY'];\r\n }\r\n static get simpleAttributes(): string[] {\r\n return ['x', 'y', 'text', 'classes',\r\n 'fill', 'width', 'height', 'scaleX', 'scaleY'];\r\n }\r\n constructor(parameters: SmoScoreTextParams) {\r\n super('SmoScoreText');\r\n let rx = '';\r\n smoSerialize.serializedMerge(SmoScoreText.attributes, SmoScoreText.defaults, this);\r\n smoSerialize.serializedMerge(SmoScoreText.attributes, parameters, this);\r\n\r\n if (!this.classes) {\r\n this.classes = '';\r\n }\r\n if (this.classes.indexOf(this.attrs.id) < 0) {\r\n this.classes += ' ' + this.attrs.id;\r\n }\r\n const weight = parameters.fontInfo ? parameters.fontInfo.weight : 'normal';\r\n this.fontInfo.weight = SmoScoreText.weightString(weight ?? 'normal');\r\n if (this.text) {\r\n rx = smoSerialize.tryParseUnicode(this.text);\r\n this.text = rx;\r\n }\r\n }\r\n}\r\n/**\r\n * Each text block has the text data itself and some data about how it's placed\r\n */\r\nexport interface SmoTextBlock {\r\n /**\r\n * The score text\r\n */\r\n text: SmoScoreText,\r\n /**\r\n * position relative to other blocks\r\n */\r\n position: number,\r\n /**\r\n * run-time flag\r\n */\r\n activeText: boolean\r\n}\r\nexport interface SmoTextBlockSer {\r\n /**\r\n * The score text\r\n */\r\n text: SmoScoreTextSer,\r\n /**\r\n * position relative to other blocks\r\n */\r\n position: number\r\n}\r\n/**\r\n * Used to place text imported from other formats, e.g. music xml\r\n */\r\nexport interface SmoTextPlacement {\r\n fontFamily: string,\r\n fontSize: number,\r\n xPlacement: number,\r\n yOffset: number,\r\n}\r\n/**\r\n * Constructor parameters for a text group, a block of text in Smoosic\r\n * @param justification one of {@link SmoTextGroup.justifications}\r\n * @param relativePosition relative position to other text groups\r\n * @param pagination indicates if this text is paginated (goes on each page)\r\n * @param spacing distance between blocks\r\n * @param attachToSelector acts like 'note text' if attached to a note, otherwise\r\n * the position is based on score position, or page position if paginated\r\n * @param selector if attached, the selector in question\r\n * @param textBlocks the actual textBlocks of text - a score text along with a placement parameter\r\n * @category SmoParams\r\n */\r\nexport interface SmoTextGroupParams {\r\n justification: number,\r\n relativePosition: number,\r\n pagination: number,\r\n purpose: number,\r\n spacing: number,\r\n musicXOffset: number,\r\n musicYOffset: number,\r\n attachToSelector: boolean,\r\n selector: SmoSelector,\r\n textBlocks: SmoTextBlock[]\r\n}\r\n\r\n/**\r\n * The serializable parts of a text group.\r\n * @category serialization\r\n */\r\nexport interface SmoTextGroupParamsSer {\r\n /**\r\n * class name for deserialization\r\n */\r\n ctor: string;\r\n /**\r\n * ID so we can identify which text this is in dialogs, UI\r\n */\r\n attrs: SmoAttrs;\r\n /**\r\n * justification within the block\r\n */\r\n justification?: number,\r\n /**\r\n * position (above, left, right etc)\r\n */\r\n relativePosition?: number,\r\n /**\r\n * pagination for headers, footers\r\n */\r\n pagination?: number,\r\n /**\r\n * spacing between blocks, future\r\n */\r\n spacing?: number,\r\n /**\r\n * true if the text is attached to a note.\r\n */\r\n attachToSelector?: boolean,\r\n /**\r\n * defined if the selector is attached to a note\r\n */\r\n selector?: SmoSelector,\r\n /**\r\n * the individual text blocks\r\n */\r\n textBlocks: SmoTextBlockSer[];\r\n}\r\nfunction isSmoTextGroupParamsSer(params: Partial): params is SmoTextGroupParamsSer {\r\n if (!(params?.ctor === 'SmoTextGroup')) {\r\n return false;\r\n }\r\n if (!(typeof(params.attrs?.id) === 'string')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction isTextBlockSer(params: Partial): params is SmoTextBlockSer {\r\n if (!params.text) {\r\n return false;\r\n }\r\n if (!params.text) {\r\n return false;\r\n }\r\n if (!(typeof(params.position) === 'number')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Suggestion for text purpose, maybe used to find a match..maybe not used at all\r\n */\r\nexport type SmoTextGroupPurpose = 'NONE' |'TITLE' | 'SUBTITLE' | 'COMPOSER' | 'COPYRIGHT';\r\n\r\nexport interface SmoTextGroupContainer {\r\n updateTextGroup: (textGroup: SmoTextGroup, toAdd: boolean) => void,\r\n addTextGroup: (textGroup: SmoTextGroup) => void,\r\n removeTextGroup: (textGroup: SmoTextGroup) => void\r\n}\r\n/**\r\n * A grouping of text that can be used as a block for\r\n * justification, alignment etc.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTextGroup extends SmoScoreModifierBase {\r\n static get justifications() {\r\n return {\r\n LEFT: 1,\r\n RIGHT: 2,\r\n CENTER: 3\r\n };\r\n }\r\n static get paginations() {\r\n return { EVERY: 1, EVENT: 2, ODD: 3, ONCE: 4, SUBSEQUENT: 5 };\r\n }\r\n\r\n // The position of block n relative to block n-1. Each block\r\n // has it's own position. Justification is inter-block.\r\n static get relativePositions() {\r\n return { ABOVE: 1, BELOW: 2, LEFT: 3, RIGHT: 4 };\r\n }\r\n\r\n static get purposes(): Record {\r\n return {\r\n NONE: 1, TITLE: 2, SUBTITLE: 3, COMPOSER: 4, COPYRIGHT: 5\r\n };\r\n }\r\n static get attributes() {\r\n return ['textBlocks', 'justification', 'relativePosition', 'spacing', 'pagination', \r\n 'attachToSelector', 'selector', 'musicXOffset', 'musicYOffset'];\r\n }\r\n static get nonTextAttributes() {\r\n return ['justification', 'relativePosition', 'spacing', 'pagination', \r\n 'attachToSelector', 'selector', 'musicXOffset', 'musicYOffset'];\r\n }\r\n static get simpleAttributes() {\r\n return ['justification', 'relativePosition', 'spacing', 'pagination', \r\n 'attachToSelector', 'musicXOffset', 'musicYOffset'];\r\n } \r\n static isTextGroup(modifier: SmoTextGroup | SmoModifierBase): modifier is SmoTextGroup {\r\n return modifier.ctor === 'SmoTextGroup';\r\n }\r\n static get purposeToFont(): Record {\r\n const rv: Record = {};\r\n rv[SmoTextGroup.purposes.TITLE] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 18,\r\n xPlacement: 0.5,\r\n yOffset: 4\r\n };\r\n rv[SmoTextGroup.purposes.SUBTITLE] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 16,\r\n xPlacement: 0.5,\r\n yOffset: 20,\r\n };\r\n rv[SmoTextGroup.purposes.COMPOSER] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 12,\r\n xPlacement: 0.8,\r\n yOffset: 10\r\n };\r\n rv[SmoTextGroup.purposes.COPYRIGHT] = {\r\n fontFamily: 'Merriweather',\r\n fontSize: 12,\r\n xPlacement: 0.5,\r\n yOffset: -12\r\n };\r\n return rv;\r\n }\r\n // ### createTextForLayout\r\n // Create a specific score text type (title etc.) based on the supplied\r\n // score layout\r\n static createTextForLayout(purpose: number, text: string, layout: ScaledPageLayout) {\r\n let x = 0;\r\n const textAttr = SmoTextGroup.purposeToFont[purpose];\r\n const pageWidth = layout.pageWidth;\r\n const pageHeight = layout.pageHeight;\r\n const bottomMargin = layout.bottomMargin;\r\n const topMargin = layout.topMargin;\r\n x = textAttr.xPlacement > 0 ? pageWidth * textAttr.xPlacement\r\n : pageWidth - (pageWidth * textAttr.xPlacement);\r\n const y = textAttr.yOffset > 0 ?\r\n topMargin + textAttr.yOffset :\r\n pageHeight + textAttr.yOffset - bottomMargin;\r\n const defaults: SmoScoreTextParams = SmoScoreText.defaults;\r\n const st = new SmoScoreText({\r\n text, x, y, width: defaults.width, height: defaults.height,\r\n fontInfo: { family: textAttr.fontFamily, size: textAttr.fontSize, weight: 'normal' }\r\n });\r\n const width = st.estimateWidth();\r\n x -= width / 2;\r\n const params = SmoTextGroup.defaults;\r\n params.textBlocks = [{ text: st, position: SmoTextGroup.relativePositions.RIGHT, activeText: false }];\r\n params.purpose = purpose;\r\n const tg = new SmoTextGroup(params);\r\n return tg;\r\n }\r\n\r\n static get defaults(): SmoTextGroupParams {\r\n return JSON.parse(JSON.stringify({\r\n textBlocks: [],\r\n justification: SmoTextGroup.justifications.LEFT,\r\n relativePosition: SmoTextGroup.relativePositions.RIGHT,\r\n pagination: SmoTextGroup.paginations.ONCE,\r\n purpose: SmoTextGroup.purposes.NONE,\r\n spacing: 0,\r\n attachToSelector: false,\r\n selector: null,\r\n musicXOffset: 0,\r\n musicYOffset: 0\r\n }));\r\n }\r\n justification: number = SmoTextGroup.justifications.LEFT;\r\n relativePosition: number = SmoTextGroup.relativePositions.RIGHT;\r\n pagination: number = SmoTextGroup.paginations.ONCE;\r\n purpose: number = SmoTextGroup.purposes.NONE;\r\n spacing: number = 0;\r\n attachToSelector: boolean = false;\r\n selector?: SmoSelector;\r\n musicXOffset: number = 0;\r\n musicYOffset: number = 0;\r\n elements: SVGSVGElement[] = [];\r\n textBlocks: SmoTextBlock[] = [];\r\n edited: boolean = false; // indicates not edited this session\r\n skipRender: boolean = false; // don't render if it is being edited \r\n static deserialize(jObj: SmoTextGroupParamsSer) {\r\n const textBlocks: SmoTextBlock[] = [];\r\n const params: any = {};\r\n const jObjLegacy: any = jObj;\r\n // handle parameter name change\r\n if (jObjLegacy.blocks) {\r\n jObj.textBlocks = jObjLegacy.blocks;\r\n }\r\n\r\n // Create new scoreText object for the text blocks\r\n jObj.textBlocks.forEach((st: any) => {\r\n const tx = SmoScoreText.deserialize(st.text);\r\n textBlocks.push({ text: tx, position: st.position, activeText: false });\r\n });\r\n // fill in the textBlock configuration\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, jObj, params);\r\n params.textBlocks = textBlocks;\r\n return new SmoTextGroup(params);\r\n }\r\n static deserializePreserveId(jObj: any) {\r\n const rv = SmoTextGroup.deserialize(jObj);\r\n if (jObj.attrs.id) {\r\n rv.attrs.id = jObj.attrs.id;\r\n }\r\n return rv;\r\n }\r\n // ### getPagedTextGroups\r\n // If this text is repeated on page, create duplicates for each page, and\r\n // resolve page numbers;\r\n static getPagedTextGroups(tg: SmoTextGroup, pages: number, pageHeight: number): SmoTextGroup[] {\r\n const rv: SmoTextGroup[] = [];\r\n let i: number = 0;\r\n if (tg.pagination === SmoTextGroup.paginations.ONCE) {\r\n rv.push(tg);\r\n return rv;\r\n }\r\n for (i = 0; i < pages; ++i) {\r\n const ix: number = i;\r\n const nblocks: any = [];\r\n // deep copy the blocks so the page offsets don't bleed into\r\n // original.\r\n tg.textBlocks.forEach((block) => {\r\n const nscoreText = new SmoScoreText(block.text);\r\n nblocks.push({\r\n text: nscoreText, position: block.position\r\n });\r\n });\r\n const params: SmoTextGroupParams = {} as SmoTextGroupParams;\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, tg, params);\r\n params.textBlocks = nblocks;\r\n const ngroup: SmoTextGroup = new SmoTextGroup(params);\r\n ngroup.textBlocks.forEach((block) => {\r\n const xx = block.text;\r\n xx.classes = 'score-text ' + xx.attrs.id;\r\n xx.text = xx.text.replace('###', (ix + 1).toString()); /// page number\r\n xx.text = xx.text.replace('@@@', pages.toString()); /// page number\r\n xx.y += pageHeight * ix;\r\n });\r\n if (tg.logicalBox) {\r\n ngroup.logicalBox = JSON.parse(JSON.stringify(tg.logicalBox));\r\n ngroup.logicalBox!.y += pageHeight * i;\r\n }\r\n rv.push(ngroup);\r\n }\r\n return rv;\r\n }\r\n serialize(): SmoTextGroupParamsSer {\r\n const params: Partial = {\r\n textBlocks: []\r\n };\r\n smoSerialize.serializedMergeNonDefault(SmoTextGroup.defaults, SmoTextGroup.nonTextAttributes, this, params);\r\n this.textBlocks.forEach((blk: SmoTextBlock) => {\r\n \r\n const blockSer: Partial = {\r\n position: blk.position\r\n }\r\n\r\n blockSer.text = blk.text.serialize();\r\n if (!isTextBlockSer(blockSer)) {\r\n throw ('bad text block ' + JSON.stringify(blockSer));\r\n }\r\n params.textBlocks!.push(blockSer);\r\n });\r\n params.ctor = 'SmoTextGroup';\r\n params.attrs = JSON.parse(JSON.stringify(this.attrs));\r\n if (!isSmoTextGroupParamsSer(params)) {\r\n throw('bad text group ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n constructor(params: SmoTextGroupParams) {\r\n super('SmoTextGroup');\r\n if (typeof (params) === 'undefined') {\r\n params = {} as SmoTextGroupParams;\r\n }\r\n this.textBlocks = [];\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, SmoTextGroup.defaults, this);\r\n smoSerialize.serializedMerge(SmoTextGroup.nonTextAttributes, params, this);\r\n if (params.textBlocks) {\r\n params.textBlocks.forEach((block: SmoTextBlock) => {\r\n this.textBlocks.push(block);\r\n });\r\n }\r\n }\r\n scaleText(scale: number) {\r\n this.musicXOffset *= scale;\r\n this.musicYOffset *= scale;\r\n this.textBlocks.forEach((block: SmoTextBlock) => {\r\n block.text.x *= scale;\r\n block.text.y *= scale;\r\n });\r\n }\r\n // ### tryParseUnicode\r\n // Try to parse unicode strings.\r\n tryParseUnicode() {\r\n this.textBlocks.forEach((tb) => {\r\n tb.text.tryParseUnicode();\r\n });\r\n }\r\n estimateWidth() {\r\n let rv = 0;\r\n this.textBlocks.forEach((tb) => {\r\n rv += tb.text.estimateWidth();\r\n });\r\n return rv;\r\n }\r\n // avoid saving text that can't be deleted\r\n isTextVisible() {\r\n let rv = true;\r\n if (this.attachToSelector) {\r\n return true;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n if (block.text.x < 0 || block.text.y < 0) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n // ### setActiveBlock\r\n // let the UI know which block is being edited. Parameter null means reset all\r\n setActiveBlock(scoreText: SmoScoreText | null) {\r\n this.textBlocks.forEach((block) => {\r\n if (scoreText != null && block.text.attrs.id === scoreText.attrs.id) {\r\n block.activeText = true;\r\n } else {\r\n block.activeText = false;\r\n }\r\n });\r\n }\r\n // For editing, keep track of the active text block.\r\n getActiveBlock() {\r\n const rv = this.textBlocks.find((block) => block.activeText === true);\r\n if (typeof (rv) !== 'undefined') {\r\n return rv.text;\r\n }\r\n return this.textBlocks[0].text;\r\n }\r\n setRelativePosition(position: number) {\r\n this.textBlocks.forEach((block) => {\r\n block.position = position;\r\n });\r\n this.relativePosition = position;\r\n }\r\n firstBlock() {\r\n return this.textBlocks[0].text;\r\n }\r\n indexOf(scoreText: SmoScoreText) {\r\n return this.textBlocks.findIndex((block) => block.text.attrs.id === scoreText.attrs.id);\r\n }\r\n addScoreText(scoreText: SmoScoreText, position: number = SmoTextGroup.relativePositions.LEFT) {\r\n this.textBlocks.push({ text: scoreText, position, activeText: false });\r\n }\r\n ul() {\r\n const rv = { x: 0, y: 0 };\r\n this.textBlocks.forEach((block) => {\r\n rv.x = block.text.x > rv.x ? block.text.x : rv.x;\r\n rv.y = block.text.y > rv.y ? block.text.y : rv.y;\r\n });\r\n return rv;\r\n }\r\n removeBlock(scoreText: SmoScoreText) {\r\n const bbid = (typeof (scoreText) === 'string') ? scoreText : scoreText.attrs.id;\r\n const ix = this.textBlocks.findIndex((bb) => bb.text.attrs.id === bbid);\r\n this.textBlocks.splice(ix, 1);\r\n }\r\n offsetX(offset: number) {\r\n if (this.attachToSelector) {\r\n this.musicXOffset += offset;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n block.text.offsetX(offset);\r\n });\r\n }\r\n offsetY(offset: number) {\r\n if (this.attachToSelector) {\r\n this.musicYOffset += offset;\r\n }\r\n this.textBlocks.forEach((block) => {\r\n block.text.offsetY(offset);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to modify a staff or system. Some staff modifiers can span multiple\r\n * staves, so it can be a little arbitrary what is a score vs. staff modifier. But\r\n * generally, a staff modifier is anything that has a beginning and end {@link SmoSelector}\r\n * @module /smo/data/staffModifiers\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoNote } from './note';\r\nimport { SmoAttrs, getId, SvgPoint, SmoObjectParams, Clef, SvgBox, SmoModifierBase, Pitch } from './common';\r\nimport { SmoTabNote, SmoFretPosition } from './noteModifiers';\r\nimport { SmoMusic } from './music';\r\nimport { SuiTimeSignatureMenu } from '../../../typedoc';\r\n/**\r\n * Base class that mostly standardizes the interface and deals with serialization.\r\n * @param ctor constructor for derived class\r\n * @param logicalBox bounding box in SVG coordinates, if rendered\r\n * @param attrs object identification\r\n * @param startSelector where the modifier starts\r\n * @param endSelector where it ends\r\n * @category SmoModifier\r\n * */\r\nexport abstract class StaffModifierBase implements SmoModifierBase {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n associatedStaff: number = 0;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n logicalBox: SvgBox | null = null;\r\n element: SVGSVGElement | null = null;\r\n constructor(ctor: string) {\r\n this.ctor = ctor;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: ctor\r\n };\r\n }\r\n static deserialize(params: SmoObjectParams) {\r\n const ctor = eval('globalThis.Smo.' + params.ctor);\r\n const fixInstrument = params as any;\r\n if (fixInstrument.subFamily) {\r\n fixInstrument.instrument = fixInstrument.subFamily;\r\n }\r\n const rv = new ctor(params);\r\n return rv;\r\n }\r\n serializeWithId() {\r\n const ser = this.serialize();\r\n ser.attrs = JSON.parse(JSON.stringify(this.attrs));\r\n return ser;\r\n }\r\n abstract serialize(): any;\r\n}\r\nexport interface StaffModifierBaseSer {\r\n attrs: SmoAttrs;\r\n ctor: string;\r\n associatedStaff: number;\r\n startSelector: SmoSelector;\r\n endSelector: SmoSelector;\r\n}\r\nexport type SoundSustain = 'percussive' | 'sustained';\r\nexport type oscillatorType = 'sample' | 'sine' | 'sawtooth' | 'square' | 'triangle' | 'custom';\r\nexport type oscillatorOptions = 'plucked' | 'bowed' | 'muted' | 'accented' | 'frequency-sweep' | 'na';\r\n/**\r\n * Parameters of an instrument used to create audio nodes\r\n */\r\nexport interface SmoOscillatorInfo {\r\n waveform: oscillatorType,\r\n sustain: SoundSustain,\r\n realOvertones: number[],\r\n imaginaryOvertones: number[],\r\n sample: string | null,\r\n family: string,\r\n instrument: string,\r\n nativeFrequency: number,\r\n dynamic: number,\r\n options: oscillatorOptions[],\r\n minDuration: number,\r\n maxDuration: number\r\n}\r\nexport type SmoOscillatorInfoNumberType = 'minDuration' | 'maxDuration' | 'dynamic' | 'nativeFrequency';\r\nexport type SmoOscillatorInfoNumberArType = 'realOvertones' | 'imaginaryOvertones';\r\nexport type SmoOscillatorInfoStringType = 'family';\r\nexport type SmoOscillatorInfoStringNullType = 'sample';\r\nexport type SmoOscillatorInfoWaveformType = 'waveform';\r\nexport type SmoOscillatorInfoSustainType = 'sustain';\r\nexport type SmoOscillatorInfoOptionsType = 'options';\r\nexport const SmoOscillatorInfoAllTypes = ['minDuration','maxDuration', 'dynamic', 'nativeFrequency', 'realOvertones', 'imaginaryOvertones', 'sample', 'family',\r\n 'waveform', 'sustain', 'options', 'instrument'];\r\n\r\nexport type SmoOscillatorAnyType = SmoOscillatorInfoNumberType | SmoOscillatorInfoNumberArType | SmoOscillatorInfoStringType | SmoOscillatorInfoStringNullType\r\n | oscillatorType | SoundSustain;\r\n \r\n/**\r\n * Define an instrument. An instrument is associated with a part, but a part can have instrument changes\r\n * and thus contain multiple instruments at different points in the score.\r\n * Not all of these parameters are fully utilized yet, and there are plans to greatly expand what\r\n * an SmoInstrument is. Note I may move this to PartInfo module.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoInstrumentParams {\r\n /**\r\n * where instrument starts to take effect\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where instrument changes\r\n */\r\n endSelector: SmoSelector,\r\n /**\r\n * name, for metadata\r\n */\r\n instrumentName: string,\r\n /**\r\n * woodwind, brass etc.\r\n */\r\n family: string,\r\n /**\r\n * instrument sample\r\n */\r\n instrument: string,\r\n /**\r\n * abbreviation for score\r\n */\r\n abbreviation: string,\r\n /**\r\n * -2 indicates key of Bb\r\n */\r\n keyOffset: number,\r\n /**\r\n * for future\r\n */\r\n midiInstrument: number,\r\n /**\r\n * for future\r\n */\r\n midichannel: number,\r\n /**\r\n * for future\r\n */\r\n midiport: number,\r\n /**\r\n * default clef\r\n */\r\n clef: Clef,\r\n /**\r\n * future, can be used to set sample\r\n */\r\n mutes?: string, \r\n}\r\n\r\n/**\r\n * Serialization of instrument-specific settings, such as sound and key\r\n * @category serialization\r\n */\r\nexport interface SmoInstrumentParamsSer extends SmoInstrumentParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoInstrumentParamsSer(params: Partial): params is SmoInstrumentParamsSer {\r\n return params?.ctor === 'SmoInstrument';\r\n}\r\nexport type SmoInstrumentNumParamType = 'keyOffset' | 'midichannel' | 'midiport' | 'midiInstrument';\r\nexport const SmoInstrumentNumParams: SmoInstrumentNumParamType[] = ['keyOffset', 'midichannel', 'midiport', 'midiInstrument'];\r\nexport type SmoInstrumentStringParamType = 'instrumentName' | 'abbreviation' | 'family' | 'instrument';\r\nexport const SmoInstrumentStringParams: SmoInstrumentStringParamType[] = ['instrumentName', 'abbreviation', 'family', 'instrument'];\r\n/**\r\n * Define an instrument. An instrument is associated with a part, but a part can have instrument changes\r\n * and thus contain multiple instruments at different points in the score.\r\n * Not all of these parameters are fully utilized yet, and there are plans to greatly expand what\r\n * an SmoInstrument is. Note I may move this to PartInfo module.\r\n * @category SmoModifier\r\n */\r\nexport class SmoInstrument extends StaffModifierBase {\r\n static get attributes() {\r\n return ['startSelector', 'endSelector', 'keyOffset', 'midichannel', 'midiport', 'instrumentName', 'abbreviation', 'instrument', 'family'];\r\n }\r\n startSelector: SmoSelector;\r\n endSelector: SmoSelector;\r\n instrumentName: string = '';\r\n abbreviation: string = '';\r\n keyOffset: number = 0;\r\n clef: Clef = 'treble';\r\n midiInstrument: number = 1;\r\n midichannel: number;\r\n midiport: number;\r\n family: string;\r\n instrument: string;\r\n articulation?: string;\r\n mutes?: string;\r\n static get defaults(): SmoInstrumentParams {\r\n return JSON.parse(JSON.stringify({\r\n clef: 'treble',\r\n keyOffset: 0,\r\n instrumentName: '',\r\n abbreviation: '',\r\n family: 'keyboard',\r\n instrument: 'piano',\r\n midichannel: 0,\r\n midiInstrument: 1,\r\n midiport: 0,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get defaultOscillatorParam(): SmoOscillatorInfo {\r\n return JSON.parse(JSON.stringify({\r\n waveform: 'sample',\r\n sustain: 'percussive',\r\n realOvertones: [],\r\n imaginaryOvertones: [],\r\n sample: null,\r\n family: 'none',\r\n instrument: 'none',\r\n nativeFrequency: 440,\r\n dynamic: 100,\r\n options: [],\r\n minDuration: 0,\r\n maxDuration: 0\r\n }));\r\n }\r\n constructor(params: SmoInstrumentParams) {\r\n super('SmoInstrument');\r\n let name = '';\r\n if (typeof ((params as any).instrument) === 'undefined') {\r\n name = params.instrumentName;\r\n } else {\r\n name = (params as any).instrument;\r\n }\r\n this.instrumentName = name;\r\n this.family = params.family;\r\n this.instrument = params.instrument;\r\n this.keyOffset = params.keyOffset;\r\n this.clef = params.clef;\r\n this.midiport = params.midiport;\r\n this.midichannel = params.midichannel;\r\n this.startSelector = params.startSelector;\r\n this.endSelector = params.endSelector;\r\n }\r\n serialize(): SmoInstrumentParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoInstrument.defaults, SmoInstrument.attributes, this, params);\r\n params.ctor = 'SmoInstrument';\r\n if (!isSmoInstrumentParamsSer(params)) {\r\n throw ('bad instrument ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n eq(other: SmoInstrument): boolean {\r\n let rv = true;\r\n SmoInstrumentNumParams.forEach((param) => {\r\n if (other[param] !== this[param]) {\r\n rv = false;\r\n }\r\n });\r\n SmoInstrumentStringParams.forEach((param) => {\r\n if (other[param] !== this[param]) {\r\n rv = false;\r\n }\r\n });\r\n return rv;\r\n }\r\n}\r\n\r\nexport interface SmoInstrumentMeasure {\r\n measureIndex: number,\r\n instrument: SmoInstrumentParams;\r\n}\r\n/**\r\n * constructor params for {@link SmoStaffHairpin}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoStaffHairpinParams {\r\n /**\r\n * extra x on start of shape\r\n */\r\n xOffsetLeft: number,\r\n /**\r\n * extra x on end of shape\r\n */\r\n xOffsetRight: number,\r\n /**\r\n * yOffset\r\n */\r\n yOffset: number,\r\n /**\r\n * flare-out pixels\r\n */\r\n height: number,\r\n /**\r\n * above, below\r\n */\r\n position: number,\r\n /**\r\n * cresc, dim.\r\n */\r\n hairpinType: number,\r\n /**\r\n * where it starts\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where it starts\r\n */\r\n endSelector: SmoSelector\r\n}\r\n\r\n/**\r\n * Serialized dynamic marking (hairpin)\r\n * @category serialization\r\n */\r\nexport interface SmoStaffHairpinParamsSer extends StaffModifierBaseSer {\r\n /**\r\n * extra x on start of shape\r\n */\r\n xOffsetLeft: number,\r\n /**\r\n * extra x on end of shape\r\n */\r\n xOffsetRight: number,\r\n /**\r\n * yOffset\r\n */\r\n yOffset: number,\r\n /**\r\n * flare-out pixels\r\n */\r\n height: number,\r\n /**\r\n * above, below\r\n */\r\n position: number,\r\n /**\r\n * cresc, dim.\r\n */\r\n hairpinType: number,\r\n /**\r\n * where it starts\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * where it starts\r\n */\r\n endSelector: SmoSelector\r\n}\r\nfunction isSmoStaffHairpinParamsSer(params: Partial): params is SmoStaffHairpinParamsSer {\r\n if (!params.ctor || !(params.ctor === 'SmoStaffHairpin')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Also called crescendo etc.\r\n * @category SmoModifier\r\n */\r\nexport class SmoStaffHairpin extends StaffModifierBase {\r\n static get editableAttributes() {\r\n return ['xOffsetLeft', 'xOffsetRight', 'yOffset', 'height'];\r\n }\r\n static get defaults(): SmoStaffHairpinParams {\r\n return JSON.parse(JSON.stringify({\r\n xOffsetLeft: -2,\r\n xOffsetRight: 0,\r\n yOffset: -50,\r\n height: 10,\r\n position: SmoStaffHairpin.positions.BELOW,\r\n hairpinType: SmoStaffHairpin.types.CRESCENDO,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get positions() {\r\n // matches VF.modifier\r\n return {\r\n LEFT: 1,\r\n RIGHT: 2,\r\n ABOVE: 3,\r\n BELOW: 4,\r\n };\r\n }\r\n static get types() {\r\n return {\r\n CRESCENDO: 1,\r\n DECRESCENDO: 2\r\n };\r\n }\r\n static get attributes() {\r\n return ['position', 'startSelector', 'endSelector', 'xOffsetLeft',\r\n 'xOffsetRight', 'yOffset', 'hairpinType', 'height'];\r\n }\r\n xOffsetLeft: number = -2;\r\n xOffsetRight: number = 0;\r\n yOffset: number = -50;\r\n height: number = 10;\r\n position: number = SmoStaffHairpin.positions.BELOW;\r\n hairpinType: number = SmoStaffHairpin.types.CRESCENDO;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n serialize(): SmoStaffHairpinParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoStaffHairpin.defaults, SmoStaffHairpin.attributes, this, params);\r\n params.ctor = 'SmoStaffHairpin';\r\n if (!isSmoStaffHairpinParamsSer(params)) {\r\n throw 'bad hairpin ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n constructor(params: SmoStaffHairpinParams) {\r\n super('SmoStaffHairpin');\r\n smoSerialize.vexMerge(this, SmoStaffHairpin.defaults);\r\n smoSerialize.filteredMerge(SmoStaffHairpin.attributes, params, this);\r\n // If start/end selector on same note, make sure the hairpin extends\r\n if (SmoSelector.eq(this.startSelector, this.endSelector)) {\r\n if (this.xOffsetRight === SmoStaffHairpin.defaults.xOffsetRight\r\n && this.xOffsetLeft === SmoStaffHairpin.defaults.xOffsetLeft) {\r\n this.xOffsetLeft = -10;\r\n this.xOffsetRight = 10;\r\n }\r\n }\r\n\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoStaffHairpin'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * constructor params for {@link SmoStaffTextBracket}\r\n * @category SmoParameters\r\n */\r\nexport interface SmoStaffTextBracketParams {\r\n /**\r\n * the ledger line\r\n */\r\n line: number,\r\n /**\r\n * above or below\r\n */\r\n position: number,\r\n /**\r\n * the text to display\r\n */\r\n text: string,\r\n /**\r\n * text can have superscript\r\n */\r\n superscript: string,\r\n /**\r\n * extend of the line\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * extend of the line\r\n */\r\n endSelector: SmoSelector\r\n}\r\n\r\n/**\r\n * serializable bits of SmoStaffTextBracket\r\n * @category serialization\r\n */\r\nexport interface SmoStaffTextBracketParamsSer extends StaffModifierBaseSer{\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n attrs: SmoAttrs;\r\n /**\r\n * the ledger line\r\n */\r\n line: number;\r\n /**\r\n * above or below\r\n */\r\n position: number,\r\n /**\r\n * the text to display\r\n */\r\n text: string,\r\n /**\r\n * text can have superscript\r\n */\r\n superscript: string,\r\n /**\r\n * extend of the line\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * extend of the line\r\n */\r\n endSelector: SmoSelector\r\n}\r\nfunction isSmoStaffTextBracketParamsSer(params: Partial):\r\n params is SmoStaffTextBracketParamsSer {\r\n if (params.ctor && params.ctor === 'SmoStaffTextBracket') {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexport type SmoTextBracketStringType = 'text' | 'superscript';\r\nexport const SmoTextBracketStringTypes: SmoTextBracketStringType[] = ['text', 'superscript'];\r\nexport type SmoTextBracketNumberType = 'line' | 'position';\r\nexport const SmoTextBracketNumberTypes: SmoTextBracketNumberType[] = ['line', 'position'];\r\n/**\r\n * Text like 8va, rit. that is bracketed on a system\r\n * @category SmoModifier\r\n */\r\nexport class SmoStaffTextBracket extends StaffModifierBase {\r\n static RITARD = 'ritard';\r\n static ACCEL = 'accelerando';\r\n static CRESCENDO = 'crescendo';\r\n static DIMENUENDO = 'diminuendo';\r\n static OCTAVEUP = '8va';\r\n static OCTAVEDOWN = '8vb';\r\n static OCTAVEUP2 = '15va';\r\n static OCTAVE2DOWN = '15vb';\r\n static get defaults(): SmoStaffTextBracketParams {\r\n return JSON.parse(JSON.stringify({\r\n line: 1,\r\n position: SmoStaffTextBracket.positions.BOTTOM,\r\n text: '',\r\n superscript: '',\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n static get positions() {\r\n // matches VF.modifier\r\n return {\r\n TOP: 1,\r\n BOTTOM: -1\r\n };\r\n } \r\n static get attributes() {\r\n return ['startSelector', 'endSelector', 'line', 'position', 'text', 'superscript'];\r\n }\r\n position: number = SmoStaffTextBracket.positions.BOTTOM;\r\n text: string = '';\r\n superscript: string = '';\r\n line: number = 1;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n serialize(): SmoStaffTextBracketParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoStaffTextBracket.defaults, SmoStaffTextBracket.attributes, this, params);\r\n params.ctor = 'SmoStaffTextBracket';\r\n if (!isSmoStaffTextBracketParamsSer(params)) {\r\n throw(' bad text bracket ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n serializeWithId():SmoStaffTextBracketParamsSer {\r\n const ser = this.serialize();\r\n ser.attrs = JSON.parse(JSON.stringify(this.attrs));\r\n return ser;\r\n }\r\n constructor(params: SmoStaffTextBracketParams) {\r\n super('SmoStaffTextBracket');\r\n smoSerialize.serializedMerge(SmoStaffTextBracket.attributes, SmoStaffTextBracket.defaults, this);\r\n smoSerialize.serializedMerge(SmoStaffTextBracket.attributes, params, this);\r\n this.startSelector = JSON.parse(JSON.stringify(params.startSelector));\r\n this.endSelector = JSON.parse(JSON.stringify(params.endSelector));\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoStaffTextBracket'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * used for debugging\r\n */\r\nexport interface SlurDefaultParams {\r\n stemDir1: number,\r\n stemDir2: number,\r\n line1: number,\r\n line2: number,\r\n lineMin: number,\r\n lineMax: number,\r\n position: number,\r\n orientation: number,\r\n sameBeam: number\r\n}\r\nexport type SlurNumberParam = 'spacing' | 'thickness' | 'xOffset' | 'yOffset' | 'position' |\r\n 'position_end' | 'cp1x' | 'cp1y' | 'cp2x' | 'cp2y';\r\nexport const SlurNumberParams: SlurNumberParam[] = ['spacing', 'thickness', 'xOffset', 'yOffset', 'position', \r\n 'position_end', 'cp1x', 'cp1y', 'cp2x', 'cp2y'];\r\n/**\r\n * parameters for a slur\r\n * @param spacing between note and curve\r\n * @param thickness thickness of the line\r\n * @param xOffset in pixels\r\n * @param yOffset in pixels\r\n * @param position top or bottom of the chord we are attached to\r\n * @param position_end top or bottom of the chord we are attached to\r\n * @param invert turns that frown upside down\r\n * @param cp1x bz control point\r\n * @param cp1y bz control point\r\n * @param cp2x bz control point\r\n * @param cp2y bz control point\r\n * @param startSelector the start note we are attached to\r\n * @param endSelector the end note we are attached to\r\n * @category SmoParameters\r\n */\r\nexport interface SmoSlurParams {\r\n /** \r\n * spacing between note and curve \r\n * */\r\n spacing: number,\r\n /**\r\n * thickness of the curve\r\n */\r\n thickness: number,\r\n /**\r\n * x offset on both ends\r\n */\r\n xOffset: number,\r\n /**\r\n * move whole curve up or down\r\n */\r\n yOffset: number,\r\n /**\r\n * VF position, whether head-end or stem end\r\n */\r\n position: number,\r\n /**\r\n * VF position for right side of slur\r\n */\r\n position_end: number,\r\n /**\r\n * indicates whether the user wants up, down or 'auto'.\r\n * internally, sets the 'invert' flag\r\n */\r\n orientation: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp1x: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp1y: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp2x: number,\r\n /**\r\n * control point for bz curve\r\n */\r\n cp2y: number,\r\n /**\r\n * start note of the curve\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * start note of the curve\r\n */\r\n endSelector: SmoSelector,\r\n /**\r\n * optional for debugging\r\n */\r\n debugParams?: SlurDefaultParams\r\n}\r\n/**\r\n * serializable bits of slur\r\n * @category serialization\r\n */\r\nexport interface SmoSlurParamsSer extends SmoSlurParams {\r\n /**\r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\n\r\nfunction isSmoSlurParamsSer(params: Partial): params is SmoSlurParamsSer {\r\n if (params && params.ctor && params.ctor === 'SmoSlur') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Defines a slur\r\n * @category SmoModifier\r\n */\r\nexport class SmoSlur extends StaffModifierBase {\r\n static get defaults(): SmoSlurParams {\r\n return JSON.parse(JSON.stringify({\r\n spacing: 2,\r\n thickness: 2,\r\n xOffset: 5,\r\n yOffset: 0,\r\n position: SmoSlur.positions.AUTO,\r\n position_end: SmoSlur.positions.AUTO,\r\n orientation: SmoSlur.orientations.AUTO,\r\n cp1x: 0,\r\n cp1y: 15,\r\n cp2x: 0,\r\n cp2y: 15,\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n\r\n // matches VF curve\r\n static get positions() {\r\n return {\r\n HEAD: 1,\r\n TOP: 2,\r\n ABOVE: 3,\r\n BELOW: 4,\r\n AUTO: 5\r\n };\r\n }\r\n static get orientations() {\r\n return {\r\n AUTO: 0,\r\n UP: 1,\r\n DOWN: 2\r\n };\r\n }\r\n static get parameterArray() {\r\n return ['startSelector', 'endSelector', 'spacing', 'xOffset', 'yOffset', 'position', 'position_end', 'invert',\r\n 'orientation', 'cp1x', 'cp1y', 'cp2x', 'cp2y', 'thickness', 'pitchesStart', 'pitchesEnd'];\r\n }\r\n spacing: number = 2;\r\n thickness: number = 2;\r\n xOffset: number = -5;\r\n yOffset: number = 10;\r\n position: number = SmoSlur.positions.TOP;\r\n position_end: number = SmoSlur.positions.TOP;\r\n orientation: number = SmoSlur.orientations.AUTO;\r\n cp1x: number = 0;\r\n cp1y: number = 15;\r\n cp2x: number = 0;\r\n cp2y: number = 15;\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n\r\n serialize(): SmoSlurParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoSlur.defaults,\r\n SmoSlur.parameterArray, this, params);\r\n params.ctor = 'SmoSlur';\r\n if (!isSmoSlurParamsSer(params)) {\r\n throw('bad slur ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n get controlPoints(): SvgPoint[] {\r\n const ar: SvgPoint[] = [{\r\n x: this.cp1x,\r\n y: this.cp1y\r\n }, {\r\n x: this.cp2x,\r\n y: this.cp2y\r\n }];\r\n return ar;\r\n }\r\n\r\n constructor(params: SmoSlurParams) {\r\n super('SmoSlur');\r\n smoSerialize.serializedMerge(SmoSlur.parameterArray, SmoSlur.defaults, this);\r\n smoSerialize.serializedMerge(SmoSlur.parameterArray, params, this);\r\n this.startSelector = params.startSelector;\r\n this.endSelector = params.endSelector;\r\n\r\n // Fix some earlier serialization error. \r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSlur'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Map pitch indices of the tie line\r\n */\r\nexport interface TieLine {\r\n from: number,\r\n to: number\r\n}\r\n/**\r\n * Constructor parameters for a tie.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTieParams {\r\n /**\r\n * future: x offset on both sides\r\n */\r\n tie_spacing: number,\r\n /**\r\n * x coord of cp for bz curve\r\n */\r\n cp1: number,\r\n /**\r\n * x coord of cp for bz curve\r\n */\r\n cp2: number,\r\n /**\r\n * x offset\r\n */\r\n first_x_shift: number,\r\n /**\r\n * x offset end\r\n */\r\n last_x_shift: number,\r\n /**\r\n * y offset for all the curves\r\n */\r\n y_shift: number,\r\n /**\r\n * map of lines for the pitches\r\n */\r\n lines: TieLine[],\r\n /**\r\n * start note\r\n */\r\n startSelector: SmoSelector | null,\r\n /**\r\n * end note\r\n */\r\n endSelector: SmoSelector | null\r\n}\r\n\r\n/**\r\n * serializable bits of SmoTie\r\n * @category serialization\r\n */\r\nexport interface SmoTieParamsSer extends SmoTieParams {\r\n /** \r\n * constructor\r\n */\r\n ctor: string;\r\n}\r\nfunction isSmoTieParamsSer(params: Partial): params is SmoTieParamsSer {\r\n if (params.ctor && params.ctor === 'SmoTie') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Like slur, but multiple pitches.\r\n * @category SmoModifier\r\n */\r\nexport class SmoTie extends StaffModifierBase {\r\n invert: boolean = false;\r\n cp1: number = 8;\r\n cp2: number = 12;\r\n first_x_shift: number = 0;\r\n last_x_shift: number = 0;\r\n y_shift: number = 7;\r\n tie_spacing: number = 0;\r\n lines: TieLine[] = [];\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n static get defaults(): SmoTieParams {\r\n return JSON.parse(JSON.stringify({\r\n invert: false,\r\n cp1: 8,\r\n cp2: 12,\r\n y_shift: 7,\r\n first_x_shift: 0,\r\n last_x_shift: 0,\r\n lines: [],\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default\r\n }));\r\n }\r\n\r\n static get parameterArray() {\r\n return ['startSelector', 'endSelector', 'invert', 'lines', 'y_shift', 'tie_spacing', 'cp1', 'cp2', 'first_x_shift', 'last_x_shift'];\r\n }\r\n static get vexParameters() {\r\n return ['cp1', 'cp2', 'first_x_shift', 'last_x_shift', 'y_shift'];\r\n }\r\n static isTie(modifier: SmoTie | SmoModifierBase): modifier is SmoTie {\r\n return modifier.ctor === 'SmoTie';\r\n }\r\n\r\n static createLines(fromNote: SmoNote, toNote: SmoNote): TieLine[] {\r\n const maxPitches = Math.max(fromNote.pitches.length, toNote.pitches.length);\r\n let i = 0;\r\n const lines: TieLine[] = [];\r\n // By default, just tie all the pitches to all the other pitches in order\r\n for (i = 0; i < maxPitches; ++i) {\r\n const from = i < fromNote.pitches.length ? i : fromNote.pitches.length - 1;\r\n const to = i < toNote.pitches.length ? i : toNote.pitches.length - 1;\r\n lines.push({ from, to });\r\n }\r\n return lines;\r\n }\r\n\r\n serialize(): SmoTieParamsSer {\r\n const params: Partial = {};\r\n smoSerialize.serializedMergeNonDefault(SmoTie.defaults,\r\n SmoTie.parameterArray, this, params);\r\n\r\n params.ctor = 'SmoTie';\r\n if (!isSmoTieParamsSer(params)) {\r\n throw 'bad tie ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n // ### checkLines\r\n // If the note chords have changed, the lines may no longer be valid so update them\r\n checkLines(fromNote: SmoNote, toNote: SmoNote) {\r\n if (this.lines.length < 1) {\r\n return;\r\n }\r\n const maxTo = this.lines.map((ll) => ll.to).reduce((a, b) => a > b ? a : b);\r\n const maxFrom = this.lines.map((ll) => ll.from).reduce((a, b) => a > b ? a : b);\r\n if (maxTo < toNote.pitches.length && maxFrom < fromNote.pitches.length) {\r\n return;\r\n }\r\n this.lines = SmoTie.createLines(fromNote, toNote);\r\n }\r\n constructor(params: SmoTieParams) {\r\n super('SmoTie');\r\n smoSerialize.serializedMerge(SmoTie.parameterArray, SmoTie.defaults, this);\r\n smoSerialize.serializedMerge(SmoTie.parameterArray, params, this);\r\n if (!this.attrs) {\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoTie'\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Parameters for SmoTabStave\r\n */\r\nexport interface SmoTabStaveParams {\r\n /**\r\n * start selector, by measure\r\n */\r\n startSelector: SmoSelector,\r\n /**\r\n * end selector, by measure\r\n */\r\n endSelector: SmoSelector,\r\n /**\r\n * space between staves, in pixels\r\n */\r\n spacing: number,\r\n /**\r\n * number of lines\r\n */\r\n numLines: number,\r\n /**\r\n * Default setting of showing stems\r\n */\r\n showStems: boolean,\r\n /**\r\n * If true, the score should keep a single tab stave for all measures\r\n */\r\n allMeasures: boolean,\r\n /**\r\n * The strings for each line\r\n */\r\n stringPitches?: Pitch[]\r\n}\r\n\r\nexport interface SmoTabStaveParamsSer extends SmoTabStaveParams {\r\n ctor: string\r\n}\r\n\r\n/**\r\n * A stave for guitar tablature sits below the music stave.\r\n */\r\nexport class SmoTabStave extends StaffModifierBase {\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n spacing: number = 13;\r\n numLines: number = 6;\r\n showStems: boolean = true;\r\n allMeasures: boolean = true;\r\n stringPitches: Pitch[];\r\n /** The default guitar tuning. Different instruments could have different tuning */\r\n static get defaultStringPitches(): Pitch[] {\r\n return JSON.parse(JSON.stringify([\r\n { letter: 'e', accidental: 'n', octave: 2 },\r\n { letter: 'a', accidental: 'n', octave: 2 },\r\n { letter: 'd', accidental: 'n', octave: 3 },\r\n { letter: 'g', accidental: 'n', octave: 3 },\r\n { letter: 'b', accidental: 'n', octave: 3 },\r\n { letter: 'e', accidental: 'n', octave: 4 }\r\n ]));\r\n }\r\n /**\r\n * Get default tab note position for a pitch on a music staff\r\n * @param pitch \r\n * @param stringPitches \r\n * @returns \r\n */\r\n static getDefaultPositionForStaff(pitch: Pitch, stringPitches: Pitch[], transposeIndex: number, stringIndex?: number): SmoFretPosition {\r\n const pitchAr = stringPitches.map((pp) => SmoMusic.smoPitchToInt(pp));\r\n const pitchInt = SmoMusic.smoPitchToInt(pitch) + (-1 * transposeIndex);\r\n stringIndex = stringIndex ?? -1;\r\n // if the note is higher than the highest string, count the frets.\r\n const lastIndex = pitchAr.length - 1;\r\n // If the user wants to preserve a certain string, find the fret for that if we can.\r\n if (stringIndex > 0 && stringIndex < pitchAr.length && pitchAr[stringIndex] <= pitchInt ) {\r\n return { string: stringIndex + 1, fret: pitchInt - pitchAr[stringIndex] };\r\n }\r\n // If the note is between this and the next string, count the frets\r\n for (var i = 0; i < lastIndex; i++) {\r\n if (pitchInt >= pitchAr[i]) {\r\n return { string: i + 1, fret: pitchInt - pitchAr[i] };\r\n }\r\n }\r\n // if lower that the lowest string, there is no fret so just return 0\r\n return { string: lastIndex + 1, fret: 0 };\r\n }\r\n /**\r\n * Find default fret positions for a set of pitches from a note\r\n * @param pitches \r\n * @param stringPitches \r\n * @returns \r\n */\r\n static getDefaultPositionsForStaff(pitches: Pitch[], stringPitches: Pitch[], transposeIndex: number): SmoFretPosition[] {\r\n const rv: SmoFretPosition[] = [];\r\n pitches.forEach((pp) => rv.push(SmoTabStave.getDefaultPositionForStaff(pp, stringPitches, transposeIndex)));\r\n return rv;\r\n }\r\n\r\n static get defaults(): SmoTabStaveParams {\r\n return {\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default,\r\n spacing: 13,\r\n numLines: 6,\r\n showStems: true,\r\n allMeasures: true,\r\n stringPitches: SmoTabStave.defaultStringPitches\r\n }\r\n }\r\n static parameterArray: string[] = ['startSelector', 'endSelector', 'spacing', 'numLines', 'showStems', 'allMeasures'];\r\n static featuresEqual(st1: SmoTabStave, st2: SmoTabStave): boolean {\r\n if (st1.numLines !== st2.numLines) {\r\n return false;\r\n }\r\n if (st1.stringPitches.length !== st2.stringPitches.length) {\r\n return false;\r\n }\r\n if (st1.showStems !== st2.showStems) {\r\n return false;\r\n }\r\n for (var i = 0; i < st1.stringPitches.length; ++i) {\r\n const p1 = st1.stringPitches[i];\r\n const p2 = st2.stringPitches[i];\r\n if (SmoMusic.smoPitchToInt(p1) !== SmoMusic.smoPitchToInt(p2)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n static overlaps(st1: StaffModifierBase, st2: StaffModifierBase): boolean {\r\n return SmoSelector.overlaps(st1.startSelector, st1.endSelector, st2.startSelector, st2.endSelector);\r\n }\r\n getTabNoteFromNote(note: SmoNote, transposeIndex: number) {\r\n if (note.tabNote) {\r\n return note.tabNote;\r\n }\r\n const positions = SmoTabStave.getDefaultPositionsForStaff(note.pitches, this.stringPitches, transposeIndex);\r\n return new SmoTabNote({\r\n positions, noteId: note.attrs.id, isAssigned: false, flagState: SmoTabNote.flagStates.None,\r\n noteHead: SmoTabNote.noteHeads.number, flagThrough: false\r\n });\r\n }\r\n constructor(params: SmoTabStaveParams) {\r\n super('SmoTabStave');\r\n smoSerialize.serializedMerge(SmoTabStave.parameterArray, SmoTabStave.defaults, this);\r\n smoSerialize.serializedMerge(SmoTabStave.parameterArray, params, this);\r\n if (!params.stringPitches) {\r\n this.stringPitches = SmoTabStave.defaultStringPitches;\r\n } else {\r\n this.stringPitches = params.stringPitches;\r\n }\r\n this.stringPitches.sort((pa, pb) => SmoMusic.smoPitchToInt(pa) > SmoMusic.smoPitchToInt(pb) ? -1 : 1);\r\n }\r\n serialize():any {\r\n const params: Partial = { ctor: 'SmoTabStave' };\r\n smoSerialize.serializedMergeNonDefault(SmoTabStave.defaults,\r\n SmoTabStave.parameterArray, this, params);\r\n params.stringPitches = JSON.parse(JSON.stringify(this.stringPitches));\r\n return params;\r\n }\r\n}\r\n\r\nexport interface SmoTabTieParams {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n hammerType: number,\r\n slideType: number,\r\n isTap: boolean,\r\n text: string\r\n}\r\n\r\nexport interface SmoTabTieParamsSer extends SmoTabTieParams {\r\n ctor: string\r\n}\r\n\r\nexport class SmoTabTie extends StaffModifierBase {\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n hammerType: number = SmoTabTie.hammerType.None;\r\n slideType: number = SmoTabTie.slideType.None;\r\n isTap: boolean = false;\r\n text: string = '';\r\n static get hammerType() {\r\n return { None: 0, Hammeron: 1, Pulloff: 2 }\r\n }\r\n static get slideType() {\r\n return { None: 0, SlideUp: 1, SlideDown: 2 }\r\n }\r\n\r\n static get defaults(): SmoTabTieParams {\r\n return JSON.parse(JSON.stringify({\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default,\r\n hammerType: SmoTabTie.hammerType.None,\r\n slideType: SmoTabTie.slideType.None,\r\n isTap: false,\r\n text: ''\r\n }));\r\n }\r\n static get parameterArray() {\r\n return ['startSelector', 'endSelector', 'hammerType', 'slideType', 'isTap', 'text'] \r\n };\r\n constructor(params: SmoTabTieParams) {\r\n super('SmoTabTie');\r\n smoSerialize.serializedMerge(SmoTabTie.parameterArray, SmoTabTie.defaults, this);\r\n smoSerialize.serializedMerge(SmoTabTie.parameterArray, params, this);\r\n }\r\n serialize() {\r\n const params: Partial = { ctor: 'SmoTabTie' };\r\n smoSerialize.serializedMergeNonDefault(SmoTabTie.defaults,\r\n SmoTabTie.parameterArray, this, params);\r\n return params;\r\n }\r\n}\r\n\r\nexport interface SmoPedalMarkingParams {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n startMark: boolean,\r\n releaseMark: boolean,\r\n bracket: boolean,\r\n depressText: string,\r\n releaseText: string,\r\n releases: SmoSelector[]\r\n}\r\nexport interface SmoPedalMarkingParamsSer extends SmoPedalMarkingParams {\r\n ctor: string\r\n}\r\nexport function isSmoPedalMarkingParamsSer(params: Partial):params is SmoPedalMarkingParamsSer {\r\n if (params.ctor !== 'SmoPedalMarking') {\r\n return false;\r\n }\r\n return true;\r\n}\r\nexport class SmoPedalMarking extends StaffModifierBase {\r\n startSelector: SmoSelector = SmoSelector.default;\r\n endSelector: SmoSelector = SmoSelector.default;\r\n startMark: boolean = true;\r\n releaseMark: boolean = true;\r\n bracket: boolean = true;\r\n depressText: string='';\r\n releaseText: string = '';\r\n releases: SmoSelector[] = [];\r\n static get defaults(): SmoPedalMarkingParams {\r\n const rv = {\r\n startSelector: SmoSelector.default,\r\n endSelector: SmoSelector.default,\r\n startMark: true,\r\n releaseMark: true,\r\n bracket: true,\r\n depressText: '',\r\n releaseText: '',\r\n releases: []\r\n };\r\n return JSON.parse(JSON.stringify(rv));\r\n }\r\n static get parameterArray() {\r\n return ['startSelector', 'endSelector', 'startMark', 'endMark', 'bracket', 'depressText', 'releaseText', 'releases'];\r\n };\r\n constructor(params: SmoPedalMarkingParams) {\r\n super('SmoPedalMarking');\r\n smoSerialize.serializedMerge(SmoPedalMarking.parameterArray, SmoPedalMarking.defaults, this);\r\n smoSerialize.serializedMerge(SmoPedalMarking.parameterArray, params, this);\r\n }\r\n serialize(): SmoPedalMarkingParamsSer {\r\n const params: Partial = { ctor: 'SmoPedalMarking' };\r\n smoSerialize.serializedMergeNonDefault(SmoPedalMarking.defaults,\r\n SmoPedalMarking.parameterArray, this, params);\r\n if (!isSmoPedalMarkingParamsSer(params)) {\r\n throw('bad serialization for SmoPedalMarking');\r\n }\r\n return params;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support a {@link SmoSystemStaff}, which is a container for measures and\r\n * staff modifiers.\r\n * @module /smo/data/systemStaff\r\n * **/\r\nimport { SmoObjectParams, SmoAttrs, MeasureNumber, getId, \r\n createXmlAttribute } from './common';\r\nimport { SmoMusic } from './music';\r\nimport { SmoMeasure, SmoMeasureParamsSer } from './measure';\r\nimport { SmoMeasureFormat, SmoRehearsalMark, SmoRehearsalMarkParams, SmoTempoTextParams, SmoVolta, SmoBarline } from './measureModifiers';\r\nimport { SmoInstrumentParams, StaffModifierBase, SmoInstrument, SmoInstrumentMeasure, SmoInstrumentStringParams, SmoInstrumentNumParams, \r\n SmoTie, SmoStaffTextBracket, SmoStaffTextBracketParamsSer, \r\n StaffModifierBaseSer, SmoTabStave, SmoTabStaveParamsSer } from './staffModifiers';\r\nimport { SmoPartInfo, SmoPartInfoParamsSer } from './partInfo';\r\nimport { SmoTextGroup } from './scoreText';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoBeamer } from '../xform/beamers';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { FontInfo } from '../../common/vex';\r\n/**\r\n * indicate that we need to serialize the key signature, etc.\r\n * maps beause we are going to be deserializing again in a different score\r\n */\r\nexport interface SmoStaffSerializationOptions {\r\n skipMaps: boolean,\r\n preserveIds: boolean\r\n}\r\n/**\r\n * Constructor parameters for {@link SmoSystemStaff}.\r\n * Usually you will call\r\n * {@link SmoSystemStaff.defaults}, and modify the parameters you need to change,\r\n * or get the defaults from an existing staff\r\n * @param renumberingMap For alternate number, pickups, etc.\r\n * @param keySignatureMap map of keys to measures\r\n * @param measureInstrumentMap map of instruments to staves\r\n * @param measures array of {@link SmoMeasure}\r\n * @param modifiers slurs and such\r\n * @param partInfo \r\n * @category SmoParameters\r\n */\r\nexport interface SmoSystemStaffParams {\r\n /* the index of the staff in the score */\r\n staffId: number,\r\n /**\r\n * For alternate number, pickups, etc.\r\n * */ \r\n renumberingMap: Record,\r\n /**\r\n * map of keys to measures \r\n */\r\n keySignatureMap: Record,\r\n /* map of instruments to staves */\r\n measureInstrumentMap: Record,\r\n /**\r\n * array of {@link SmoMeasure})\r\n */\r\n measures: SmoMeasure[],\r\n /** \r\n * modifiers slurs and such\r\n * */ \r\n modifiers: StaffModifierBase[],\r\n /**\r\n * information about the part\r\n */\r\n partInfo?: SmoPartInfo;\r\n /**\r\n * text lines\r\n */\r\n textBrackets?: SmoStaffTextBracket[];\r\n /**\r\n *guitar tablature\r\n */\r\n tabStaves: SmoTabStave[]\r\n}\r\n/**\r\n * Serialized components of a stave\r\n * @category serialization\r\n */\r\nexport interface SmoSystemStaffParamsSer { \r\n /**\r\n * class name\r\n */\r\n ctor: string,\r\n /**\r\n * index of the staff\r\n */\r\n staffId: number,\r\n /**\r\n * map of measure numbers vs. indices of measures\r\n */\r\n renumberingMap?: Record,\r\n /**\r\n * locations of key signature changes\r\n */\r\n keySignatureMap?: Record,\r\n /**\r\n * map of measures to instruments (clef, transpose, sounds)\r\n */\r\n measureInstrumentMap: Record,\r\n /**\r\n * measure container\r\n */\r\n measures: SmoMeasureParamsSer[],\r\n /**\r\n * array of modifiers like slurs\r\n */\r\n modifiers: StaffModifierBaseSer[],\r\n /**\r\n * Associated part information for this stave\r\n */\r\n partInfo: SmoPartInfoParamsSer;\r\n /**\r\n * text brackets are another kind of modifier\r\n */\r\n textBrackets: SmoStaffTextBracketParamsSer[];\r\n /**\r\n * guitar tablature\r\n */\r\n tabStaves: SmoTabStave[];\r\n}\r\n\r\nfunction isSmoSystemStaffParamsSer(params: Partial):params is SmoSystemStaffParamsSer {\r\n if (!(typeof(params.ctor) === 'string' && params.ctor === 'SmoSystemStaff')) {\r\n return false;\r\n }\r\n if (!(Array.isArray(params.measures))) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A staff is a line of music that can span multiple measures.\r\n * A system is a line of music for each staff in the score. So a staff\r\n * spans multiple systems.\r\n * A staff modifier connects 2 points in the staff.\r\n * @category SmoObject\r\n * */\r\nexport class SmoSystemStaff implements SmoObjectParams {\r\n /**\r\n * Gets the instrument assigned to a given measure\r\n * @param measureInstrumentMap\r\n * @param measureIndex \r\n * @returns \r\n */\r\n static getStaffInstrument(measureInstrumentMap: Record, measureIndex: number) {\r\n const keyar: string[] = Object.keys(measureInstrumentMap);\r\n let fit = 0;\r\n keyar.forEach((key) => {\r\n const numkey = parseInt(key, 10);\r\n if (numkey <= measureIndex && numkey > fit) {\r\n fit = numkey;\r\n }\r\n });\r\n return measureInstrumentMap[fit];\r\n }\r\n static getStaffInstrumentArray(measureInstrumentMap: Record): SmoInstrumentMeasure[] {\r\n const rv: SmoInstrumentMeasure[] = [];\r\n const keyar: string[] = Object.keys(measureInstrumentMap);\r\n keyar.forEach((key) => {\r\n const measureIndex = parseInt(key, 10);\r\n rv.push({ measureIndex, instrument: measureInstrumentMap[measureIndex] });\r\n });\r\n return rv;\r\n }\r\n staffId: number = 0;\r\n renumberingMap: Record = {};\r\n keySignatureMap: Record = {};\r\n partInfo: SmoPartInfo;\r\n measureInstrumentMap: Record = {};\r\n measures: SmoMeasure[] = [];\r\n modifiers: StaffModifierBase[] = [];\r\n textBrackets: SmoStaffTextBracket[] = [];\r\n bracketMap: Record = {};\r\n tabStaves: SmoTabStave[] = [];\r\n attrs: SmoAttrs = {\r\n id: '',\r\n type: 'SmoSystemStaff'\r\n }\r\n ctor: string = 'SmoSystemStaff';\r\n _mappedStaffId: number = 0;\r\n\r\n // ### defaults\r\n // default values for all instances\r\n static get defaults(): SmoSystemStaffParams {\r\n return JSON.parse(JSON.stringify({\r\n staffId: 0,\r\n renumberingMap: {},\r\n keySignatureMap: {},\r\n measureInstrumentMap: {},\r\n textBrackets: [],\r\n measures: [],\r\n modifiers: [],\r\n tabStaves: []\r\n }));\r\n }\r\n setMappedStaffId(value: number) {\r\n this._mappedStaffId = value;\r\n }\r\n getMappedStaffId(): number {\r\n return this._mappedStaffId;\r\n }\r\n\r\n constructor(params: SmoSystemStaffParams) {\r\n this.staffId = params.staffId;\r\n this.measures = params.measures;\r\n this.modifiers = params.modifiers;\r\n this.textBrackets = params.textBrackets ?? [];\r\n this.renumberingMap = params.renumberingMap;\r\n this.tabStaves = params.tabStaves;\r\n if (Object.keys(params.measureInstrumentMap).length === 0) {\r\n const instrument = new SmoInstrument(SmoInstrument.defaults);\r\n instrument.startSelector.staff = instrument.endSelector.staff = this.staffId;\r\n instrument.endSelector.measure = this.measures.length - 1;\r\n this.measureInstrumentMap[0] = instrument;\r\n } else {\r\n const keys = Object.keys(params.measureInstrumentMap);\r\n keys.forEach((p, ix) => {\r\n const pnum = parseInt(p, 10);\r\n const instrument = new SmoInstrument(params.measureInstrumentMap[pnum]);\r\n instrument.startSelector.staff = instrument.endSelector.staff = this.staffId;\r\n\r\n // Make sure transposition goes to the end stave of the song.\r\n if (ix === keys.length - 1) {\r\n instrument.endSelector.measure = this.measures.length - 1;\r\n }\r\n this.measureInstrumentMap[pnum] = instrument;\r\n });\r\n }\r\n if (this.measures.length) {\r\n this.numberMeasures();\r\n }\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoSystemStaff'\r\n };\r\n if (params.partInfo) {\r\n this.partInfo = params.partInfo;\r\n } else {\r\n const staveNo = this.staffId + 1;\r\n const partDefs = SmoPartInfo.defaults;\r\n partDefs.partName = 'Staff ' + staveNo;\r\n partDefs.partAbbreviation = staveNo.toString() + '.';\r\n this.partInfo = new SmoPartInfo(partDefs);\r\n }\r\n }\r\n /**\r\n * records need to be serialized separately from other elements in parameters\r\n *\r\n * @static\r\n * @type {string[]}\r\n * @memberof SmoSystemStaff\r\n */\r\n static serializableElements: string[] = ['ctor', 'staffId'];\r\n static recordElements: string[] = ['renumberingMap', 'keySignatureMap', 'measureInstrumentMap'];\r\n \r\n // ### defaultParameters\r\n // the parameters that get saved with the score.\r\n static get defaultParameters() {\r\n return [\r\n 'renumberingMap', 'keySignatureMap', 'instrumentInfo'];\r\n }\r\n\r\n get renderableModifiers() {\r\n const rv: StaffModifierBase[] = \r\n this.modifiers.concat(this.textBrackets);\r\n return rv;\r\n }\r\n // ### serialize\r\n // JSONify self.\r\n serialize(options: SmoStaffSerializationOptions): SmoSystemStaffParamsSer {\r\n const params: Partial = {\r\n ctor: 'SmoSystemStaff',\r\n tabStaves: []\r\n };\r\n if (!options.skipMaps) {\r\n smoSerialize.serializedMerge(SmoSystemStaff.defaultParameters, this, params);\r\n }\r\n params.measures = [];\r\n params.measureInstrumentMap = {};\r\n const ikeys: string[] = Object.keys(this.measureInstrumentMap);\r\n this.tabStaves.forEach((ts) => {\r\n params.tabStaves?.push(ts.serialize());\r\n });\r\n ikeys.forEach((ikey: string) => {\r\n params.measureInstrumentMap![parseInt(ikey, 10)] = this.measureInstrumentMap[parseInt(ikey, 10)].serialize();\r\n });\r\n this.measures.forEach((measure) => {\r\n params.measures!.push(measure.serialize());\r\n });\r\n params.modifiers = [];\r\n this.modifiers.forEach((modifier) => {\r\n const ser = options.preserveIds ? modifier.serializeWithId() : modifier.serialize();\r\n params.modifiers!.push(ser);\r\n });\r\n this.textBrackets.forEach((bracket) => {\r\n const ser = options.preserveIds ? bracket.serializeWithId() : bracket.serialize();\r\n params.modifiers!.push(ser);\r\n });\r\n params.partInfo = this.partInfo.serialize();\r\n if (!isSmoSystemStaffParamsSer(params)) {\r\n throw ('bad staff ' + JSON.stringify(params));\r\n }\r\n return params;\r\n }\r\n // ### deserialize\r\n // parse formerly serialized staff.\r\n static deserialize(jsonObj: SmoSystemStaffParamsSer): SmoSystemStaff {\r\n const params: SmoSystemStaffParams = SmoSystemStaff.defaults;\r\n params.staffId = jsonObj.staffId ?? 0;\r\n params.measures = [];\r\n params.modifiers = [];\r\n params.textBrackets = [];\r\n params.renumberingMap = jsonObj.renumberingMap ?? {};\r\n if (jsonObj.tabStaves) {\r\n jsonObj.tabStaves.forEach((ts) => {\r\n params.tabStaves.push(StaffModifierBase.deserialize(ts));\r\n });\r\n }\r\n if (jsonObj.partInfo) {\r\n // Deserialize the text groups first\r\n const tgs: SmoTextGroup[] = [];\r\n jsonObj.partInfo.textGroups.forEach((tgSer: any) => {\r\n tgs.push(SmoTextGroup.deserializePreserveId(tgSer));\r\n });\r\n jsonObj.partInfo.textGroups = tgs;\r\n params.partInfo = SmoPartInfo.deserialize(jsonObj.partInfo);\r\n }\r\n // Up-convert legacy instrument info, which was split between different objects\r\n if (!jsonObj.measureInstrumentMap) {\r\n const jsonLegacy = jsonObj as any;\r\n if (jsonLegacy.instrumentInfo) {\r\n const defs = SmoInstrument.defaults;\r\n defs.keyOffset = jsonLegacy.instrumentInfo.keyOffset;\r\n defs.clef = jsonLegacy.instrumentInfo.clef;\r\n defs.instrumentName = jsonLegacy.instrumentInfo.instrumentName;\r\n const ii: SmoInstrument = new SmoInstrument(defs);\r\n params.measureInstrumentMap = { 0: ii };\r\n } else {\r\n const ii: SmoInstrument = new SmoInstrument(SmoInstrument.defaults);\r\n params.measureInstrumentMap = { 0: ii };\r\n }\r\n params.measureInstrumentMap[0].startSelector.staff = params.staffId;\r\n params.measureInstrumentMap[0].endSelector.staff = params.staffId;\r\n params.measureInstrumentMap[0].endSelector.measure = jsonObj.measures.length - 1;\r\n params.measureInstrumentMap[0].keyOffset = jsonObj.measures[0].transposeIndex ?? 0;\r\n } else {\r\n const ikeys = Object.keys(jsonObj.measureInstrumentMap);\r\n ikeys.forEach((ikey) => {\r\n const ix = parseInt(ikey, 10);\r\n const inst = jsonObj.measureInstrumentMap[ix];\r\n const defs = SmoInstrument.defaults;\r\n SmoInstrumentStringParams.forEach((str) => {\r\n if (typeof(inst[str]) === 'string') {\r\n defs[str] = inst[str];\r\n }\r\n });\r\n SmoInstrumentNumParams.forEach((str) => {\r\n if (typeof(inst[str]) === 'number') {\r\n defs[str] = inst[str];\r\n }\r\n });\r\n if (typeof(inst.startSelector) !== 'undefined') {\r\n defs.startSelector = inst.startSelector;\r\n }\r\n if (typeof(inst.endSelector) !== 'undefined') {\r\n defs.endSelector = inst.endSelector;\r\n }\r\n params.measureInstrumentMap[ix] = new SmoInstrument(defs);\r\n });\r\n }\r\n const instrumentAr = SmoSystemStaff.getStaffInstrumentArray(params.measureInstrumentMap);\r\n let curInstrumentIndex = 0;\r\n jsonObj.measures.forEach((measureObj: any) => {\r\n const measure = SmoMeasure.deserialize(measureObj);\r\n if (instrumentAr.length > (curInstrumentIndex + 1) && measure.measureNumber.measureIndex >=\r\n instrumentAr[curInstrumentIndex + 1].measureIndex) {\r\n curInstrumentIndex += 1;\r\n }\r\n measure.transposeIndex = instrumentAr[curInstrumentIndex].instrument.keyOffset;\r\n params.measures.push(measure);\r\n });\r\n if (jsonObj.modifiers) {\r\n jsonObj.modifiers.forEach((modParams: any) => {\r\n const mod = StaffModifierBase.deserialize(modParams);\r\n if (modParams.attrs?.id) {\r\n mod.attrs.id = modParams.attrs.id;\r\n }\r\n mod.associatedStaff = jsonObj.staffId;\r\n if (mod.ctor === 'SmoStaffTextBracket') {\r\n params.textBrackets!.push(mod as SmoStaffTextBracket);\r\n } else {\r\n params.modifiers.push(mod);\r\n }\r\n });\r\n }\r\n const rv = new SmoSystemStaff(params);\r\n return rv;\r\n }\r\n /**\r\n * We have created a score with staff mappings. Update the selectors in staff modifiers so that\r\n * 'from' in the staff slot is 'to'\r\n */\r\n mapStaffFromTo(from: number, to: number) {\r\n if (from === to) {\r\n return;\r\n }\r\n this.modifiers.forEach((mod) => {\r\n if (mod.startSelector.staff === from) {\r\n mod.startSelector.staff = to;\r\n }\r\n if (mod.endSelector.staff === from) {\r\n mod.endSelector.staff = to;\r\n }\r\n mod.associatedStaff = to; // this.staffId will remap to 'to' value\r\n });\r\n }\r\n updateMeasureFormatsForPart() {\r\n this.measures.forEach((measure, mix) => {\r\n if (this.partInfo.measureFormatting[mix]) {\r\n measure.format = new SmoMeasureFormat(this.partInfo.measureFormatting[mix]);\r\n } else {\r\n measure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n }\r\n });\r\n }\r\n /**\r\n * Get the active instrument at the given measure\r\n * @param measureIndex\r\n * @returns\r\n */\r\n getStaffInstrument(measureIndex: number): SmoInstrument {\r\n return SmoSystemStaff.getStaffInstrument(this.measureInstrumentMap, measureIndex);\r\n }\r\n getInstrumentList(): SmoInstrument[] {\r\n const rv: SmoInstrument[] = [];\r\n const keys = Object.keys(this.measureInstrumentMap);\r\n keys.forEach((key) => {\r\n rv.push(this.getStaffInstrument(parseInt(key)));\r\n });\r\n return rv;\r\n }\r\n updateInstrumentOffsets() {\r\n const ar = SmoSystemStaff.getStaffInstrumentArray(this.measureInstrumentMap);\r\n ar.forEach((entry) => {\r\n let i = entry.instrument.startSelector.measure;\r\n for (i; i <= entry.instrument.endSelector.measure && i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n const concertKey = SmoMusic.vexKeySigWithOffset(measure.keySignature, -1 * measure.transposeIndex);\r\n const targetKey = SmoMusic.vexKeySigWithOffset(concertKey, entry.instrument.keyOffset);\r\n const tabStave: SmoTabStave | undefined = this.getTabStaveForMeasure(SmoSelector.fromMeasure(measure));\r\n measure.transposeToOffset(entry.instrument.keyOffset, targetKey, entry.instrument.clef);\r\n measure.transposeIndex = entry.instrument.keyOffset;\r\n measure.keySignature = targetKey;\r\n measure.setClef(entry.instrument.clef);\r\n }\r\n });\r\n }\r\n isRest(index: number) {\r\n return this.measures[index].isRest();\r\n }\r\n /**\r\n * for the purposes of breaking up multimeasure rests, isRepeat is true if\r\n * the next bar has a start repeat, or the current bar has an end repeat.\r\n * @param index \r\n * @returns \r\n */\r\n isRepeat(index: number) {\r\n if (index < this.measures.length - 1) {\r\n if (this.measures[index + 1].getStartBarline().barline !== SmoBarline.barlines.singleBar && \r\n this.measures[index + 1].getStartBarline().barline !== SmoBarline.barlines.noBar) {\r\n return true;\r\n }\r\n }\r\n const specialBar = this.measures[index].getEndBarline().barline !== SmoBarline.barlines.singleBar &&\r\n this.measures[index].getStartBarline().barline !== SmoBarline.barlines.noBar;\r\n return specialBar || this.measures[index].repeatSymbol;\r\n }\r\n isRepeatSymbol(index: number) {\r\n return this.measures[index].repeatSymbol;\r\n }\r\n isRehearsal(index: number) {\r\n return !(typeof(this.measures[index].getRehearsalMark()) === 'undefined');\r\n }\r\n findSimlarOverlap(modifier: StaffModifierBase) {\r\n const overlap = this.modifiers.filter((ff) => \r\n SmoSelector.overlaps(ff.startSelector, ff.endSelector, modifier.startSelector, modifier.endSelector) &&\r\n ff.ctor === modifier.ctor);\r\n return overlap;\r\n }\r\n removeTabStaves(delList: SmoTabStave[]) {\r\n if (delList.length < 1) {\r\n return;\r\n }\r\n const newList: SmoTabStave[] = [];\r\n this.tabStaves.forEach((ts) => {\r\n if (delList.findIndex((xx:SmoTabStave) => xx.attrs.id === ts.attrs.id) < 0) {\r\n newList.push(ts);\r\n }\r\n });\r\n this.tabStaves = newList;\r\n }\r\n updateTabStave(ts: SmoTabStave) {\r\n if (ts.allMeasures) {\r\n ts.startSelector.measure = 0;\r\n ts.endSelector.measure = this.measures.length - 1;\r\n this.tabStaves = [ts];\r\n return;\r\n }\r\n if (!this.tabStaves.length) {\r\n this.tabStaves.push(ts);\r\n return;\r\n }\r\n const toRemove: SmoTabStave[] = [];\r\n for (var i = 0; i < this.tabStaves.length; ++i) {\r\n const ex = this.tabStaves[i];\r\n if (SmoTabStave.overlaps(ex, ts)) {\r\n const starts = SmoSelector.order(ex.startSelector, ts.startSelector);\r\n const ends = SmoSelector.order(ex.startSelector, ex.endSelector);\r\n // If the tabs are the same type and overlap, then just merge them\r\n if (SmoTabStave.featuresEqual(ex, ts)) {\r\n ts.startSelector = starts[0];\r\n ts.endSelector = ends[1];\r\n }\r\n toRemove.push(ex);\r\n }\r\n }\r\n this.removeTabStaves(toRemove);\r\n this.tabStaves.push(ts);\r\n }\r\n getTabStaveForMeasure(selector: SmoSelector): SmoTabStave | undefined {\r\n return this.tabStaves.find((ts) => \r\n SmoSelector.sameStaff(ts.startSelector, selector) && ts.startSelector.measure <= selector.measure\r\n && ts.endSelector.measure >= selector.measure);\r\n }\r\n getTabStavesForMeasureRow(measures: SmoMeasure[]) {\r\n const rv: SmoTabStave[] = [];\r\n const added: Record = {};\r\n measures.forEach((mm) => {\r\n const ts = this.getTabStaveForMeasure(SmoSelector.measureSelector(mm.measureNumber.staffId, mm.measureNumber.measureIndex));\r\n if (ts && !added[ts.attrs.id]) {\r\n added[ts.attrs.id] = true;\r\n rv.push(ts);\r\n }\r\n });\r\n return rv;\r\n }\r\n // ### addStaffModifier\r\n // add a staff modifier, or replace a modifier of same type\r\n // with same endpoints.\r\n addStaffModifier(modifier: StaffModifierBase) {\r\n this.removeStaffModifier(modifier);\r\n this.modifiers.push(modifier);\r\n modifier.associatedStaff = this.staffId;\r\n }\r\n\r\n // ### removeStaffModifier\r\n // Remove a modifier of given type and location\r\n removeStaffModifier(modifier: StaffModifierBase) {\r\n const mods: StaffModifierBase[] = [];\r\n const tbs: SmoStaffTextBracket[] = [];\r\n this.renderableModifiers.forEach((mod: StaffModifierBase) => {\r\n if (mod.attrs.type !== modifier.attrs.type ||\r\n SmoSelector.neq(mod.startSelector, modifier.startSelector) ||\r\n SmoSelector.neq(mod.endSelector, modifier.endSelector)) {\r\n if (mod.ctor === 'SmoStaffTextBracket') {\r\n tbs.push(mod as SmoStaffTextBracket);\r\n } else {\r\n mods.push(mod);\r\n }\r\n }\r\n });\r\n this.textBrackets = tbs;\r\n this.modifiers = mods;\r\n }\r\n // ### getVoltaMap\r\n getVoltaMap(startIndex: number, endIndex: number) {\r\n const rv: SmoVolta[] = [];\r\n this.measures.forEach((measure) => {\r\n measure.getNthEndings().forEach((ending) => {\r\n if (ending.startBar >= startIndex && ending.endBar <= endIndex) {\r\n rv.push(ending);\r\n }\r\n });\r\n });\r\n return rv;\r\n }\r\n getVoltasForMeasure(ix: number) {\r\n const rv: SmoVolta[] = [];\r\n this.measures.forEach((measure) => {\r\n measure.getNthEndings().forEach((ending) => {\r\n if (ending.startSelector?.measure === ix || ending.endSelector?.measure === ix) {\r\n rv.push(ending);\r\n }\r\n });\r\n });\r\n return rv;\r\n }\r\n // ### getModifiersAt\r\n // get any modifiers at the selected location\r\n getModifiersAt(selector: SmoSelector): StaffModifierBase[] {\r\n const rv: StaffModifierBase[] = [];\r\n this.modifiers.forEach((mod) => {\r\n if (SmoSelector.sameNote(mod.startSelector, selector)) {\r\n rv.push(mod);\r\n }\r\n });\r\n return rv;\r\n }\r\n getModifier(modData: any) {\r\n return this.renderableModifiers.find((mod) =>\r\n SmoSelector.eq(mod.startSelector, modData.startSelector) && mod.attrs.type === modData.attrs.type);\r\n }\r\n setLyricFont(fontInfo: FontInfo) {\r\n this.measures.forEach((measure) => {\r\n measure.setLyricFont(fontInfo);\r\n });\r\n }\r\n setLyricAdjustWidth(adjustNoteWidth: boolean) {\r\n this.measures.forEach((measure) => {\r\n measure.setLyricAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n setChordFont(fontInfo: FontInfo) {\r\n this.measures.forEach((measure) => {\r\n measure.setChordFont(fontInfo);\r\n });\r\n }\r\n setChordAdjustWidth(adjustNoteWidth: boolean) {\r\n this.measures.forEach((measure) => {\r\n measure.setChordAdjustWidth(adjustNoteWidth);\r\n });\r\n }\r\n addTextBracket(bracketParams: SmoStaffTextBracket) {\r\n const nb = new SmoStaffTextBracket(bracketParams);\r\n const brackets = this.textBrackets.filter((tb) => SmoSelector.lteq(tb.startSelector, nb.startSelector)\r\n || SmoSelector.gteq(tb.endSelector, nb.startSelector) || tb.position !== nb.position);\r\n \r\n brackets.push(new SmoStaffTextBracket(bracketParams));\r\n this.textBrackets = brackets;\r\n }\r\n removeTextBracket(bracketParams: SmoStaffTextBracket) { \r\n const nb = new SmoStaffTextBracket(bracketParams);\r\n const brackets = this.textBrackets.filter((tb) => SmoSelector.lteq(tb.startSelector, nb.startSelector)\r\n || SmoSelector.gteq(tb.endSelector, nb.startSelector) || tb.position !== nb.position);\r\n brackets.push(new SmoStaffTextBracket(bracketParams));\r\n this.textBrackets = brackets;\r\n }\r\n getTextBracketsStartingAt(selector: SmoSelector) {\r\n return this.textBrackets.filter((tb) => SmoSelector.eq(tb.startSelector, selector));\r\n }\r\n\r\n // ### getSlursStartingAt\r\n // like it says. Used by audio player to slur notes\r\n getSlursStartingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) && mod.attrs.type === 'SmoSlur'\r\n );\r\n }\r\n // ### getSlursEndingAt\r\n // like it says.\r\n getSlursEndingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector) && mod.attrs.type === 'SmoSlur'\r\n );\r\n }\r\n\r\n getTiesStartingAt(selector: SmoSelector): SmoTie[] {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) && mod.attrs.type === 'SmoTie'\r\n ) as SmoTie[];\r\n }\r\n\r\n getTiesEndingAt(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector) && mod.attrs.type === 'SmoTie'\r\n );\r\n }\r\n getPedalMarkingsContaining(selector: SmoSelector) {\r\n return this.modifiers.filter((mod) => \r\n mod.ctor === 'SmoPedalMarking' && SmoSelector.contains(selector, mod.startSelector, mod.endSelector)\r\n );\r\n }\r\n\r\n // ### accesor getModifiers\r\n getModifiers() {\r\n return this.modifiers;\r\n }\r\n\r\n // ### applyBeams\r\n // group all the measures' notes into beam groups.\r\n applyBeams() {\r\n for (let i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n SmoBeamer.applyBeams(measure);\r\n }\r\n }\r\n\r\n // ### addRehearsalMark\r\n // for all measures in the system, and also bump the\r\n // auto-indexing\r\n addRehearsalMark(index: number, parameters: SmoRehearsalMarkParams) {\r\n let i = 0;\r\n let symbol = '';\r\n var mark = new SmoRehearsalMark(parameters);\r\n if (!mark.increment) {\r\n this.measures[index].addRehearsalMark(mark);\r\n return;\r\n }\r\n\r\n symbol = mark.symbol;\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const mm = this.measures[i];\r\n if (i < index) {\r\n const rm: SmoRehearsalMark = (mm.getRehearsalMark() as SmoRehearsalMark);\r\n if (rm && rm.cardinality === mark.cardinality && rm.increment) {\r\n symbol = rm.getIncrement();\r\n mark.symbol = symbol;\r\n }\r\n }\r\n if (i === index) {\r\n mm.addRehearsalMark(mark);\r\n symbol = mark.getIncrement();\r\n }\r\n if (i > index) {\r\n const rm: SmoRehearsalMark = (mm.getRehearsalMark() as SmoRehearsalMark);\r\n if (rm && rm.cardinality === mark.cardinality && rm.increment) {\r\n rm.symbol = symbol;\r\n symbol = rm.getIncrement();\r\n }\r\n }\r\n }\r\n }\r\n\r\n removeTempo(index: number) {\r\n this.measures[index].resetTempo();\r\n }\r\n\r\n addTempo(tempo: SmoTempoTextParams, index: number) {\r\n this.measures[index].setTempo(tempo);\r\n }\r\n\r\n // ### removeRehearsalMark\r\n // for all measures in the system, and also decrement the\r\n // auto-indexing\r\n removeRehearsalMark(index: number) {\r\n let ix: number = 0;\r\n let symbol: string | null = null;\r\n let card: string | null = null;\r\n this.measures.forEach((measure) => {\r\n if (ix === index) {\r\n const mark: SmoRehearsalMark = measure.getRehearsalMark() as SmoRehearsalMark;\r\n if (mark) {\r\n symbol = mark.symbol;\r\n card = mark.cardinality;\r\n }\r\n measure.removeRehearsalMark();\r\n }\r\n if (ix > index && symbol && card) {\r\n const mark: SmoRehearsalMark = measure.getRehearsalMark() as SmoRehearsalMark;\r\n if (mark && mark.increment) {\r\n mark.symbol = symbol;\r\n symbol = mark.getIncrement();\r\n }\r\n }\r\n ix += 1;\r\n });\r\n }\r\n\r\n /**\r\n * Sync the staff modifier indices between the full score and the score view, which may\r\n * have fewer staves\r\n * @param measureIndex \r\n * @param ostaff \r\n */\r\n syncStaffModifiers(measureIndex: number, ostaff: SmoSystemStaff) {\r\n const mods: StaffModifierBase[] = [];\r\n this.modifiers.forEach((modifier) => {\r\n if (modifier.startSelector.measure !== measureIndex) {\r\n mods.push(modifier);\r\n } else {\r\n const omod = ostaff.modifiers.find((mm) => mm.attrs.id === modifier.attrs.id);\r\n if (omod) {\r\n mods.push(modifier);\r\n }\r\n }\r\n });\r\n this.modifiers = mods;\r\n }\r\n // ### deleteMeasure\r\n // delete the measure, and any staff modifiers that start/end there.\r\n deleteMeasure(index: number) {\r\n if (this.measures.length < 2) {\r\n return; // don't delete last measure.\r\n }\r\n const nm: SmoMeasure[] = [];\r\n this.measures.forEach((measure) => {\r\n if (measure.measureNumber.measureIndex !== index) {\r\n nm.push(measure);\r\n }\r\n });\r\n this.tabStaves.forEach((ts) => {\r\n ts.endSelector.measure = this.measures.length - 1;\r\n });\r\n const sm: StaffModifierBase[] = [];\r\n this.modifiers.forEach((mod) => {\r\n // Bug: if we are deleting a measure before the selector, change the measure number.\r\n if (mod.startSelector.measure !== index && mod.endSelector.measure !== index) {\r\n if (index < mod.startSelector.measure) {\r\n mod.startSelector.measure -= 1;\r\n }\r\n if (index < mod.endSelector.measure) {\r\n mod.endSelector.measure -= 1;\r\n }\r\n sm.push(mod);\r\n }\r\n });\r\n const instMap: Record = {};\r\n SmoSystemStaff.getStaffInstrumentArray(this.measureInstrumentMap).forEach((mm) => {\r\n if (mm.instrument.startSelector.measure > index || mm.instrument.startSelector.measure > this.measures.length - 1) {\r\n mm.instrument.startSelector.measure -= 1;\r\n }\r\n if (mm.instrument.endSelector.measure > index || mm.instrument.endSelector.measure > this.measures.length - 1) {\r\n mm.instrument.endSelector.measure -= 1;\r\n }\r\n instMap[mm.instrument.startSelector.measure] = new SmoInstrument(mm.instrument);\r\n });\r\n this.measures = nm;\r\n this.modifiers = sm;\r\n this.numberMeasures();\r\n }\r\n\r\n // ### addKeySignature\r\n // Add key signature to the given measure and update map so we know\r\n // when it changes, cancels etc.\r\n addKeySignature(measureIndex: number, key: string) {\r\n this.keySignatureMap[measureIndex] = key;\r\n const target = this.measures[measureIndex];\r\n target.keySignature = key;\r\n }\r\n\r\n _updateKeySignatures() {\r\n let i = 0;\r\n const currentSig = this.measures[0].keySignature;\r\n\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n const nextSig = this.keySignatureMap[i] ? this.keySignatureMap[i] : currentSig;\r\n measure.setKeySignature(nextSig);\r\n }\r\n }\r\n\r\n // ### numberMeasures\r\n // After anything that might change the measure numbers, update them iteratively\r\n numberMeasures() {\r\n let i: number = 0;\r\n let localIndex = 0;\r\n for (i = 0; i < this.measures.length; ++i) {\r\n const measure = this.measures[i];\r\n if (typeof(this.renumberingMap[i]) === 'number') {\r\n localIndex = this.renumberingMap[i];\r\n } else {\r\n localIndex += 1;\r\n }\r\n // since systemIndex is a render-time decision, we don't update it here.\r\n const systemIndex = measure.measureNumber.systemIndex;\r\n // If this is the first full measure, call it '1'\r\n const numberObj: MeasureNumber = {\r\n localIndex,\r\n measureIndex: i,\r\n systemIndex,\r\n staffId: this.staffId\r\n };\r\n measure.setMeasureNumber(numberObj);\r\n }\r\n }\r\n\r\n addDefaultMeasure(index: number, params: SmoMeasure) {\r\n const measure = SmoMeasure.getDefaultMeasure(params);\r\n this.addMeasure(index, measure);\r\n }\r\n\r\n // ## addMeasure\r\n // ## Description:\r\n // Add the measure at the specified index, splicing the array as required.\r\n addMeasure(index: number, measure: SmoMeasure) {\r\n if (index === 0 && this.measures.length) {\r\n measure.setMeasureNumber(this.measures[0].measureNumber);\r\n }\r\n if (index >= this.measures.length) {\r\n this.measures.push(measure);\r\n } else {\r\n this.measures.splice(index, 0, measure);\r\n }\r\n const modifiers = this.modifiers.filter((mod) => mod.startSelector.measure >= index);\r\n modifiers.forEach((mod) => {\r\n if (mod.startSelector.measure < this.measures.length) {\r\n mod.startSelector.measure += 1;\r\n }\r\n if (mod.endSelector.measure < this.measures.length) {\r\n mod.endSelector.measure += 1;\r\n }\r\n });\r\n // If there is a tab stave, it should extend the length of the stave.\r\n this.tabStaves.forEach((ts) => {\r\n ts.endSelector.measure = this.measures.length - 1;\r\n });\r\n this.numberMeasures();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support {@link SmoTuplet}\r\n * @module /smo/data/tuplet\r\n */\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoNote, SmoNoteParamsSer, TupletInfo } from './note';\r\nimport { SmoMusic } from './music';\r\nimport { SmoNoteModifierBase } from './noteModifiers';\r\nimport { getId, SmoAttrs, Clef } from './common';\r\nimport {SmoMeasure, SmoVoice} from './measure';\r\nimport {tuplets} from \"vexflow_smoosic/build/esm/types/tests/formatter/tests\";\r\n\r\n\r\nexport interface SmoTupletTreeParams {\r\n tuplet: SmoTuplet\r\n}\r\n\r\nexport interface SmoTupletTreeParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string,\r\n /**\r\n * root tuplet\r\n */\r\n tuplet: SmoTupletParamsSer\r\n}\r\n\r\nexport class SmoTupletTree {\r\n\r\n /**\r\n * root tuplet\r\n */\r\n tuplet: SmoTuplet;\r\n\r\n constructor(params: SmoTupletTreeParams) {\r\n this.tuplet = params.tuplet;\r\n }\r\n\r\n static syncTupletIds(tupletTrees: SmoTupletTree[], voices: SmoVoice[]) {\r\n const traverseTupletTree = (parentTuplet: SmoTuplet): void => {\r\n const notes: SmoNote[] = voices[parentTuplet.voice].notes;\r\n for (let i = parentTuplet.startIndex; i <= parentTuplet.endIndex; i++) {\r\n const note: SmoNote = notes[i];\r\n note.tupletId = parentTuplet.attrs.id;\r\n }\r\n for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) {\r\n const tuplet = parentTuplet.childrenTuplets[i];\r\n traverseTupletTree(tuplet);\r\n }\r\n };\r\n\r\n //traverse tuplet tree\r\n for (let i = 0; i < tupletTrees.length; i++) {\r\n const tupletTree: SmoTupletTree = tupletTrees[i];\r\n traverseTupletTree(tupletTree.tuplet);\r\n }\r\n }\r\n\r\n static adjustTupletIndexes(tupletTrees: SmoTupletTree[], voice: number, startTick: number, diff: number) {\r\n const traverseTupletTree = (parentTuplet: SmoTuplet): void => {\r\n if (parentTuplet.endIndex >= startTick) {\r\n parentTuplet.endIndex += diff;\r\n if(parentTuplet.startIndex > startTick) {\r\n parentTuplet.startIndex += diff;\r\n }\r\n }\r\n for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) {\r\n const tuplet = parentTuplet.childrenTuplets[i];\r\n traverseTupletTree(tuplet);\r\n } \r\n }\r\n\r\n //traverse tuplet tree\r\n for (let i = 0; i < tupletTrees.length; i++) {\r\n const tupletTree: SmoTupletTree = tupletTrees[i];\r\n if (tupletTree.endIndex >= startTick && tupletTree.voice == voice) {\r\n traverseTupletTree(tupletTree.tuplet);\r\n }\r\n }\r\n }\r\n\r\n static getTupletForNoteIndex(tupletTrees: SmoTupletTree[], voiceIx: number, noteIx: number): SmoTuplet | null {\r\n const tuplets = SmoTupletTree.getTupletHierarchyForNoteIndex(tupletTrees, voiceIx, noteIx);\r\n if(tuplets.length) {\r\n return tuplets[tuplets.length - 1];\r\n }\r\n return null;\r\n }\r\n\r\n static getTupletTreeForNoteIndex(tupletTrees: SmoTupletTree[], voiceIx: number, noteIx: number): SmoTupletTree | null {\r\n for (let i = 0; i < tupletTrees.length; i++) {\r\n const tupletTree: SmoTupletTree = tupletTrees[i];\r\n if (tupletTree.startIndex <= noteIx && tupletTree.endIndex >= noteIx && tupletTree.voice == voiceIx) {\r\n return tupletTree;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n // Finds the tuplet hierarchy for a given note index.\r\n static getTupletHierarchyForNoteIndex(tupletTrees: SmoTupletTree[], voiceIx: number, noteIx: number): SmoTuplet[] {\r\n let tupletHierarchy: SmoTuplet[] = [];\r\n const traverseTupletTree = ( parentTuplet: SmoTuplet): void => { \r\n tupletHierarchy.push(parentTuplet);\r\n for (let i = 0; i < parentTuplet.childrenTuplets.length; i++) {\r\n const tuplet = parentTuplet.childrenTuplets[i];\r\n if (tuplet.startIndex <= noteIx && tuplet.endIndex >= noteIx) {\r\n traverseTupletTree(tuplet);\r\n break;\r\n }\r\n } \r\n }\r\n\r\n //find tuplet tree\r\n for (let i = 0; i < tupletTrees.length; i++) {\r\n const tupletTree: SmoTupletTree = tupletTrees[i];\r\n if (tupletTree.startIndex <= noteIx && tupletTree.endIndex >= noteIx && tupletTree.voice == voiceIx) {\r\n traverseTupletTree(tupletTree.tuplet);\r\n break;\r\n }\r\n }\r\n\r\n return tupletHierarchy;\r\n }\r\n\r\n static removeTupletForNoteIndex(measure: SmoMeasure, voiceIx: number, noteIx: number) {\r\n for (let i = 0; i < measure.tupletTrees.length; i++) {\r\n const tupletTree: SmoTupletTree = measure.tupletTrees[i];\r\n if (tupletTree.startIndex <= noteIx && tupletTree.endIndex >= noteIx && tupletTree.voice == voiceIx) {\r\n measure.tupletTrees.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n serialize(): SmoTupletTreeParamsSer {\r\n const params = {\r\n ctor: 'SmoTupletTree',\r\n tuplet: this.tuplet.serialize()\r\n };\r\n return params;\r\n }\r\n\r\n static deserialize(jsonObj: SmoTupletTreeParamsSer): SmoTupletTree {\r\n const tuplet = SmoTuplet.deserialize(jsonObj.tuplet);\r\n \r\n return new SmoTupletTree({tuplet: tuplet});\r\n }\r\n\r\n static clone(tupletTree: SmoTupletTree): SmoTupletTree {\r\n return SmoTupletTree.deserialize(tupletTree.serialize());\r\n }\r\n\r\n get startIndex() {\r\n return this.tuplet.startIndex;\r\n }\r\n\r\n get endIndex() {\r\n return this.tuplet.endIndex;\r\n }\r\n\r\n get voice() {\r\n return this.tuplet.voice;\r\n }\r\n\r\n get totalTicks() {\r\n return this.tuplet.totalTicks;\r\n }\r\n\r\n\r\n}\r\n\r\n/**\r\n * Parameters for tuplet construction\r\n * @param notes - runtime instance of tuplet has an actual instance of \r\n * notes. The note instances are created by the deserilization of the \r\n * measure. We serialize the note parameters so we can identify the correct notes\r\n * when deserializing.\r\n * @category SmoParameters\r\n */\r\nexport interface SmoTupletParams {\r\n numNotes: number,\r\n notesOccupied: number,\r\n stemTicks: number,\r\n totalTicks: number,\r\n ratioed: boolean,\r\n bracketed: boolean,\r\n voice: number,\r\n startIndex: number,\r\n endIndex: number,\r\n}\r\n/**\r\n * serializabl bits of SmoTuplet\r\n * @category serialization\r\n */\r\nexport interface SmoTupletParamsSer {\r\n /**\r\n * constructor\r\n */\r\n ctor: string,\r\n /**\r\n * attributes for ID\r\n */\r\n attrs: SmoAttrs,\r\n /**\r\n * numNotes in the tuplet (not necessarily same as notes array size)\r\n */\r\n numNotes: number,\r\n /**\r\n * \r\n */\r\n notesOccupied: number,\r\n /**\r\n * used to decide how to beam, 2048 for 1/4 triplet for instance\r\n */\r\n stemTicks: number,\r\n \r\n /**\r\n * total ticks to squeeze numNotes\r\n */\r\n totalTicks: number,\r\n /**\r\n * whether to use the :\r\n */\r\n ratioed: boolean,\r\n /**\r\n * whether to show the brackets\r\n */\r\n bracketed: boolean,\r\n /**\r\n * which voice the tuplet applies to\r\n */\r\n voice: number,\r\n\r\n startIndex: number,\r\n\r\n endIndex: number,\r\n\r\n parentTuplet: TupletInfo | null,\r\n\r\n childrenTuplets: SmoTupletParamsSer[]\r\n \r\n}\r\n\r\n/**\r\n * tuplets must be serialized with their id attribute, enforce this\r\n * @param params a possible-valid SmoTupletParamsSer\r\n * @returns \r\n */\r\nfunction isSmoTupletParamsSer(params: Partial): params is SmoTupletParamsSer {\r\n if (!params.ctor || !(params.ctor === 'SmoTuplet')) {\r\n return false;\r\n }\r\n if (!params.attrs || !(typeof(params.attrs.id) === 'string')) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * A tuplet is a container for notes within a measure\r\n * @category SmoObject\r\n */\r\nexport class SmoTuplet {\r\n static get defaults(): SmoTupletParams {\r\n return JSON.parse(JSON.stringify({\r\n numNotes: 3,\r\n notesOccupied: 2,\r\n stemTicks: 2048,\r\n startIndex: 0,\r\n endIndex: 0,\r\n totalTicks: 4096, // how many ticks this tuple takes up\r\n bracketed: true,\r\n voice: 0,\r\n ratioed: false\r\n }));\r\n }\r\n attrs: SmoAttrs;\r\n numNotes: number = 3;\r\n notesOccupied: number = 2;\r\n stemTicks: number = 2048;\r\n totalTicks: number = 4096;\r\n bracketed: boolean = true;\r\n voice: number = 0;\r\n ratioed: boolean = false;\r\n parentTuplet: TupletInfo | null = null;\r\n childrenTuplets: SmoTuplet[] = [];\r\n startIndex: number = 0;\r\n endIndex: number = 0;\r\n\r\n get clonedParams() {\r\n const paramAr = ['stemTicks', 'ticks', 'totalTicks', 'numNotes'];\r\n const rv = {};\r\n smoSerialize.serializedMerge(paramAr, this, rv);\r\n return rv;\r\n }\r\n\r\n static get parameterArray() {\r\n return ['stemTicks', 'totalTicks', 'startIndex', 'endIndex',\r\n 'attrs', 'ratioed', 'bracketed', 'voice', 'numNotes'];\r\n }\r\n\r\n serialize(): SmoTupletParamsSer {\r\n const params: Partial = {};\r\n params.ctor = 'SmoTuplet';\r\n params.childrenTuplets = [];\r\n\r\n smoSerialize.serializedMergeNonDefault(SmoTuplet.defaults, SmoTuplet.parameterArray, this, params);\r\n\r\n this.childrenTuplets.forEach((tuplet) => {\r\n params.childrenTuplets!.push(tuplet.serialize());\r\n });\r\n \r\n if (!isSmoTupletParamsSer(params)) {\r\n throw 'bad tuplet ' + JSON.stringify(params);\r\n }\r\n return params;\r\n }\r\n\r\n static deserialize(jsonObj: SmoTupletParamsSer): SmoTuplet {\r\n const tupJson = SmoTuplet.defaults;\r\n smoSerialize.serializedMerge(SmoTuplet.parameterArray, jsonObj, tupJson);\r\n // Legacy schema did not have notesOccupied, we need to calculate it.\r\n if ((jsonObj as any).notes !== undefined) {\r\n //todo: notesOccupied can probably be removed\r\n tupJson.notesOccupied = tupJson.totalTicks / tupJson.stemTicks;\r\n }\r\n\r\n const tuplet = new SmoTuplet(tupJson);\r\n tuplet.parentTuplet = jsonObj.parentTuplet ? jsonObj.parentTuplet : null;\r\n if (jsonObj.childrenTuplets !== undefined) {\r\n for (let i = 0; i < jsonObj.childrenTuplets.length; i++) {\r\n const childTuplet = SmoTuplet.deserialize(jsonObj.childrenTuplets[i]);\r\n tuplet.childrenTuplets.push(childTuplet);\r\n }\r\n }\r\n return tuplet;\r\n }\r\n\r\n static calculateStemTicks(totalTicks: number, numNotes: number) {\r\n const stemValue = totalTicks / numNotes;\r\n let stemTicks = SmoTuplet.longestTuplet;\r\n\r\n // The stem value is the type on the non-tuplet note, e.g. 1/8 note\r\n // for a triplet.\r\n while (stemValue < stemTicks) {\r\n stemTicks = stemTicks / 2;\r\n }\r\n return stemTicks * 2;\r\n }\r\n\r\n constructor(params: SmoTupletParams) {\r\n const defs = SmoTuplet.defaults;\r\n this.numNotes = params.numNotes ? params.numNotes : defs.numNotes;\r\n this.notesOccupied = params.notesOccupied ? params.notesOccupied : defs.notesOccupied;\r\n this.stemTicks = params.stemTicks ? params.stemTicks : defs.stemTicks;\r\n this.totalTicks = params.totalTicks ? params.totalTicks : defs.totalTicks;\r\n this.bracketed = params.bracketed ? params.bracketed : defs.bracketed;\r\n this.voice = params.voice ? params.voice : defs.voice;\r\n this.ratioed = params.ratioed ? params.ratioed : defs.ratioed;\r\n this.startIndex = params.startIndex ? params.startIndex : defs.startIndex;\r\n this.endIndex = params.endIndex ? params.endIndex : defs.endIndex;\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoTuplet'\r\n };\r\n }\r\n\r\n static get longestTuplet() {\r\n return 8192;\r\n }\r\n\r\n //todo: adjust naming\r\n get num_notes() {\r\n return this.numNotes;\r\n }\r\n get notes_occupied() {\r\n return Math.floor(this.totalTicks / this.stemTicks);\r\n }\r\n\r\n get tickCount() {\r\n return this.totalTicks;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Convert midi to Smo object model. Midi parsing code from:\r\n * @module /smo/midi/midiToSmo\r\n */\r\nimport { SmoToMidi } from \"./smoToMidi\";\r\nimport { Clef, Pitch } from \"../data/common\";\r\nimport { SmoMeasure } from \"../data/measure\";\r\nimport { SmoTempoText, TimeSignature } from \"../data/measureModifiers\";\r\nimport { SmoMusic } from \"../data/music\";\r\nimport { SmoNote } from \"../data/note\";\r\nimport { SmoScore } from \"../data/score\";\r\nimport { SmoLayoutManager } from \"../data/scoreModifiers\";\r\nimport { SmoTie } from \"../data/staffModifiers\";\r\nimport { SmoSystemStaff } from \"../data/systemStaff\";\r\nimport {SmoTuplet, SmoTupletTree} from \"../data/tuplet\";\r\nimport { SmoOperation } from \"../xform/operations\";\r\n\r\nexport type MidiEventType = 'text' | 'copyrightNotice' | 'trackName' | 'instrumentName' | 'lyrics' | 'marker' |\r\n 'cuePoint' | 'channelPrefix' | 'portPrefix' | 'endOfTrack' | 'setTempo' | 'smpteOffset' | 'timeSignature' | 'keySignature' |\r\n 'sequencerSpecific' | 'unknownMeta' |\r\n 'noteOff' | 'noteOn' | 'noteAftertouch' | 'controller' | 'programChange' | 'channelAftertouch' | 'pitchBend';\r\n\r\n/**\r\n * These are the midi events as defined by the parser.\r\n */\r\nexport interface MidiTrackEvent {\r\n deltaTime: number,\r\n meta?: boolean,\r\n numerator?: number,\r\n denominator?: number,\r\n microsecondsPerBeat?: number,\r\n scale?: number,\r\n key?: number,\r\n metronome?: number,\r\n thirtyseconds?: number,\r\n type: MidiEventType,\r\n channel?: number,\r\n noteNumber?: number,\r\n velocity?: number\r\n}\r\nexport interface RunningMetadata {\r\n keySignature: string,\r\n timeSignature: TimeSignature,\r\n tempo: SmoTempoText\r\n}\r\nexport interface MidiNoteOn {\r\n channel: number,\r\n note: number,\r\n smoIndex: number\r\n}\r\nexport interface MidiTupletInfo {\r\n numNotes: number,\r\n stemTicks: number,\r\n totalTicks: number,\r\n isLast: boolean\r\n}\r\nexport interface EventSmoData {\r\n pitches: Pitch[],\r\n durationTicks: number,\r\n tupletInfo: MidiTupletInfo | null,\r\n isRest: boolean,\r\n isTied: boolean,\r\n timeSignature: TimeSignature,\r\n tempo: SmoTempoText,\r\n keySignature: string,\r\n measure: number,\r\n tick: number\r\n}\r\n\r\nexport function getValueForTick(arg: Record, tick: number) {\r\n const keys = Object.keys(arg);\r\n let maxKey = 0;\r\n let rv = arg[0];\r\n keys.forEach((key) => {\r\n const keyInt = parseInt(key, 10);\r\n if (keyInt <= tick && keyInt > maxKey && arg[keyInt]) {\r\n rv = arg[maxKey];\r\n maxKey = keyInt;\r\n }\r\n });\r\n return rv;\r\n}\r\n/**\r\n * Converts a JSON midi file to a {@link SmoScore}\r\n * @category SmoToMidi\r\n */\r\nexport class MidiToSmo {\r\n timeSignatureMap: Record = {};\r\n tempoMap: Record = {};\r\n keySignatureMap: Record = {};\r\n tieMap: Record = {};\r\n timeDivision: number = 480;\r\n trackIndex: number = 0;\r\n eventIndex: number = 0; // index into current track\r\n maxMeasure: number = 0;\r\n quantizeTicks: number = MidiToSmo.quantizeTicksDefault;\r\n eot: boolean = false;\r\n midiOnNotes: Record = {};\r\n\r\n midi: any; // MIDI JSON from MIDI parser\r\n static get quantizeTicksDefault() {\r\n return 1024;\r\n }\r\n /**\r\n * Since midi has very little metadata, we don't know the original clef.\r\n * so just use the one (treble or bass) that uses the fewest ledger lines\r\n * @internal\r\n * @param notes notes in measure\r\n * @returns \r\n */\r\n static guessClefForNotes(measure: SmoMeasure): Clef {\r\n let trebleMax = 0;\r\n let bassMax = 0;\r\n measure.voices[0].notes.forEach((note) => {\r\n note.pitches.forEach((pitch) => {\r\n const tl = Math.abs(SmoMusic.pitchToStaffLine('treble', pitch));\r\n const bl = Math.abs(SmoMusic.pitchToStaffLine('bass', pitch));\r\n trebleMax = Math.max(trebleMax, tl);\r\n bassMax = Math.max(bassMax, bl);\r\n })\r\n });\r\n const clef: Clef = trebleMax <= bassMax ? 'treble' : 'bass';\r\n measure.clef = clef;\r\n // For rests, make sure the rest is centered in the clef\r\n measure.voices[0].notes.forEach((note) => {\r\n if (note.noteType === 'r') {\r\n note.pitches = [SmoMeasure.defaultPitchForClef[clef]];\r\n }\r\n note.clef = clef;\r\n });\r\n return clef;\r\n }\r\n /**\r\n * Create an object to convert MIDI to a {@link SmoScore}\r\n * @param midi the output of midi parser\r\n * @param quantizeDuration ticks to quantize (1024 == 16th note)\r\n */\r\n constructor(midi: any, quantizeDuration: number) {\r\n this.midi = midi;\r\n // console.log(JSON.stringify(midi, null, ''));\r\n this.timeSignatureMap[0] = new TimeSignature(TimeSignature.defaults);\r\n this.tempoMap[0] = new SmoTempoText(SmoTempoText.defaults);\r\n this.keySignatureMap[0] = 'c';\r\n this.timeDivision = midi.header.ticksPerBeat;\r\n this.quantizeTicks = quantizeDuration;\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getTempo(ticks: number) {\r\n if (this.tempoMap[ticks]) {\r\n return this.tempoMap[ticks];\r\n }\r\n return getValueForTick(this.tempoMap, ticks);\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getTimeSignature(ticks: number): TimeSignature {\r\n if (this.timeSignatureMap[ticks]) {\r\n return this.timeSignatureMap[ticks];\r\n }\r\n return getValueForTick(this.timeSignatureMap, ticks);\r\n }\r\n /**\r\n * @internal\r\n * @param ticks \r\n * @returns \r\n */\r\n getKeySignature(ticks: number) {\r\n if (this.keySignatureMap[ticks]) {\r\n return this.keySignatureMap[ticks];\r\n }\r\n return getValueForTick(this.keySignatureMap, ticks);\r\n }\r\n /**\r\n * Get metadata from the map for this point in the score\r\n * @param ticks current point in track\r\n * @returns \r\n */\r\n getMetadata(ticks: number) {\r\n return { tempo: this.getTempo(ticks), \r\n timeSignature: this.getTimeSignature(ticks), keySignature: this.getKeySignature(ticks).toLowerCase() };\r\n }\r\n /**\r\n * We process 3 types of metadata at present: time signature, tempo and keysignature.\r\n * @param trackEvent \r\n * @param ticks \r\n */\r\n handleMetadata(trackEvent: MidiTrackEvent, ticks: number) {\r\n if (trackEvent.meta) {\r\n const mtype = trackEvent.type;\r\n if (mtype === 'timeSignature') {\r\n /**\r\n * whenever we get a time signature event, recompute ticks per measure\r\n */\r\n const numerator = trackEvent.numerator!;\r\n const denominator = trackEvent.denominator!;\r\n const tsDef = TimeSignature.defaults;\r\n tsDef.actualBeats = numerator;\r\n tsDef.beatDuration = denominator;\r\n const ts = new TimeSignature(tsDef);\r\n this.timeSignatureMap[ticks] = ts;\r\n } else if (mtype === 'setTempo') {\r\n const bpm = 60 / (trackEvent.microsecondsPerBeat! / 1000000);\r\n const tempoDef = SmoTempoText.defaults;\r\n tempoDef.bpm = bpm;\r\n this.tempoMap[ticks] = new SmoTempoText(tempoDef);\r\n } else if (mtype === 'keySignature') {\r\n const mdata = trackEvent.key!;\r\n if (mdata === 0) {\r\n this.keySignatureMap[ticks] = 'c';\r\n } else {\r\n // there seem to be different ways to encode this...\r\n let signed = mdata / 256;\r\n if (signed > 7) {\r\n signed = -1 * (256 - signed);\r\n }\r\n if (Math.abs(mdata) < 256) {\r\n signed = mdata;\r\n }\r\n this.keySignatureMap[ticks] = SmoMusic.midiKeyToVexKey(signed);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Convert from Midi PPQ to Smoosic (and vex) ticks\r\n * @internal\r\n */\r\n getSmoTicks(midiTicks: number) {\r\n return 4096 * midiTicks / this.timeDivision;\r\n }\r\n /**\r\n * @internal\r\n */\r\n createNewEvent(metadata: RunningMetadata): EventSmoData {\r\n return {\r\n pitches: [], durationTicks: 0, tupletInfo: null, isRest: false, timeSignature: new TimeSignature(metadata.timeSignature),\r\n tempo: new SmoTempoText(metadata.tempo), keySignature: metadata.keySignature, measure: 0, tick: 0, isTied: false\r\n };\r\n }\r\n /**\r\n * @internal\r\n */\r\n static copyEvent(o: EventSmoData): EventSmoData {\r\n const pitches = JSON.parse(JSON.stringify(o.pitches));\r\n const timeSignature = new TimeSignature(o.timeSignature);\r\n const tempo = new SmoTempoText(o.tempo);\r\n return ({\r\n pitches, durationTicks: o.durationTicks, tupletInfo: o.tupletInfo, isRest: o.isRest, timeSignature, tempo, keySignature: o.keySignature,\r\n measure: o.measure, tick: o.tick, isTied: o.isTied\r\n });\r\n }\r\n /**\r\n * @internal\r\n */\r\n addToTieMap(measureIndex: number) {\r\n const staffIx = this.trackIndex;\r\n if (typeof (this.tieMap[staffIx]) === 'undefined') {\r\n this.tieMap[staffIx] = [];\r\n }\r\n this.tieMap[staffIx].push(measureIndex);\r\n }\r\n /**\r\n * Step 3 in the 3-step process. Quantize the note durations and convert the midi\r\n * event into SmoNotes.\r\n * @param events \r\n * @returns \r\n */\r\n createNotesFromEvents(events: EventSmoData[]): SmoMeasure[] {\r\n let measureIndex = 0;\r\n const measures: SmoMeasure[] = [];\r\n let measure: SmoMeasure | null = null;\r\n let deficit = 0;\r\n // If the midi event is smaller than the smallest note..\r\n const smallest = 1 * (this.quantizeTicks / 4);\r\n events.forEach((ev) => {\r\n if (measure === null || ev.measure > measureIndex) {\r\n const measureDefs = SmoMeasure.defaults;\r\n measureDefs.keySignature = ev.keySignature;\r\n measureDefs.timeSignature = new TimeSignature(ev.timeSignature);\r\n measureDefs.tempo = new SmoTempoText(ev.tempo);\r\n measure = new SmoMeasure(measureDefs);\r\n measure.voices.push({ notes: [] });\r\n measureIndex = ev.measure;\r\n measures.push(measure);\r\n }\r\n if (Math.abs(ev.durationTicks - deficit) < smallest && !(ev.tupletInfo !== null)) {\r\n deficit = deficit - ev.durationTicks;\r\n } else {\r\n const best = SmoMusic.midiTickSearch(ev.durationTicks - deficit, this.quantizeTicks);\r\n deficit += best.result - ev.durationTicks;\r\n ev.durationTicks = best.result;\r\n const defs = SmoNote.defaults;\r\n defs.ticks.numerator = ev.durationTicks;\r\n defs.pitches = JSON.parse(JSON.stringify(ev.pitches));\r\n defs.noteType = ev.isRest ? 'r' : 'n';\r\n const note = new SmoNote(defs);\r\n SmoNote.sortPitches(note);\r\n measure.voices[0].notes.push(note);\r\n if (ev.tupletInfo !== null && ev.tupletInfo.isLast === true) {\r\n const voiceLen = measure.voices[0].notes.length;\r\n const tupletNotes = [note, measure.voices[0].notes[voiceLen - 2], measure.voices[0].notes[voiceLen - 3]];\r\n const defs = SmoTuplet.defaults;\r\n defs.stemTicks = ev.tupletInfo.stemTicks;\r\n defs.numNotes = ev.tupletInfo.numNotes;\r\n defs.totalTicks = ev.tupletInfo.totalTicks;\r\n defs.startIndex = voiceLen - 3;\r\n defs.endIndex = voiceLen - 1;\r\n const tuplet = new SmoTuplet(defs);\r\n this.adjustTupletNotes(tupletNotes, tuplet);\r\n const tupletTree: SmoTupletTree = new SmoTupletTree({tuplet: tuplet});\r\n measure.tupletTrees.push(tupletTree);\r\n }\r\n if (ev.isTied) {\r\n this.addToTieMap(measureIndex);\r\n }\r\n }\r\n });\r\n measures.forEach((measure) => {\r\n measure.clef = MidiToSmo.guessClefForNotes(measure);\r\n });\r\n return measures;\r\n }\r\n\r\n adjustTupletNotes(notes: SmoNote[], tuplet: SmoTuplet) {\r\n const numerator = tuplet.totalTicks / tuplet.numNotes;\r\n for (let i = 0; i < notes.length; ++i) {\r\n const note = notes[i];\r\n note.ticks = { numerator: Math.floor(numerator), denominator: 1, remainder: 0 }\r\n note.stemTicks = tuplet.stemTicks;\r\n note.tupletId = tuplet.attrs.id;\r\n }\r\n if (numerator % 1) {\r\n notes[0].ticks.numerator += 1;\r\n }\r\n }\r\n /**\r\n * @param ticks \r\n * @returns the length in ticks of a triplet, if this looks like a triplet. Otherwise 0\r\n */\r\n tripletType(ticks: number): number {\r\n const tripletBeat = Math.round(4096 / 3);\r\n const tripletHalf = Math.round((4096 * 2) / 3);\r\n const tripletEighth = Math.round((4096 / 2) / 3);\r\n const beatTrip = tripletBeat / ticks;\r\n const eigthTrip = tripletEighth / ticks;\r\n const halfTrip = tripletHalf / ticks;\r\n if (Math.abs(1 - beatTrip) < 0.05) {\r\n return 4096;\r\n }\r\n if (Math.abs(1 - eigthTrip) < 0.05) {\r\n return 2048;\r\n }\r\n if (Math.abs(1 - halfTrip) < 0.05) {\r\n return 4096 * 2;\r\n }\r\n return 0;\r\n }\r\n /**\r\n * step 2 in the 3 step process. Divide the music up into measures based on\r\n * tick duration. If there are events overlapping measures, create extra events in the\r\n * new measure (hence the expand) and shorten the original event\r\n * @param events\r\n * @returns \r\n */\r\n expandMidiEvents(events: EventSmoData[]): EventSmoData[] {\r\n const rv: EventSmoData[] = [];\r\n if (events.length === 0) {\r\n return rv;\r\n }\r\n let i = 0;\r\n let ticksSoFar = 0;\r\n let measure = 0;\r\n let tick = 0;\r\n let tripletCount = 0;\r\n let tripletValue = 0;\r\n for (i = 0; i < events.length; ++i) {\r\n const ev = events[i];\r\n // If it's too small, continue. Don't record the event but do count the ticks\r\n if (ev.durationTicks < 128) {\r\n ticksSoFar += ev.durationTicks;\r\n continue;\r\n }\r\n const ticksPerMeasure = SmoMusic.timeSignatureToTicks(ev.timeSignature.timeSignature);\r\n const nevent = MidiToSmo.copyEvent(ev);\r\n if (ticksSoFar + ev.durationTicks > ticksPerMeasure) {\r\n nevent.durationTicks = ticksPerMeasure - ticksSoFar;\r\n if (nevent.durationTicks > 0) {\r\n rv.push(nevent);\r\n nevent.tick = tick;\r\n }\r\n tick = 0;\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n measure += 1;\r\n ticksSoFar = 0;\r\n this.maxMeasure = Math.max(this.maxMeasure, measure);\r\n let overflow = ev.durationTicks - nevent.durationTicks;\r\n while (overflow > ticksPerMeasure) {\r\n const ovfEvent = MidiToSmo.copyEvent(nevent);\r\n ovfEvent.tick = tick;\r\n ovfEvent.measure = measure;\r\n tick += 1;\r\n measure += 1;\r\n ovfEvent.durationTicks = ticksPerMeasure;\r\n rv.push(ovfEvent);\r\n overflow -= ticksPerMeasure;\r\n }\r\n if (overflow > 0) {\r\n const ovfEvent = MidiToSmo.copyEvent(nevent);\r\n ovfEvent.isTied = true;\r\n ovfEvent.durationTicks = overflow;\r\n ovfEvent.measure = measure;\r\n ovfEvent.tick = tick;\r\n ticksSoFar += ovfEvent.durationTicks;\r\n tick += 1;\r\n rv.push(ovfEvent);\r\n overflow = 0;\r\n }\r\n } else {\r\n ticksSoFar += ev.durationTicks;\r\n // Try to infer the presence of triplets. If it looks like a triplet, mark it and we will\r\n // create the tuplet when we create the measure.\r\n const possibleTriplet = this.tripletType(nevent.durationTicks);\r\n if (possibleTriplet > 0 && (tripletValue === 0 || possibleTriplet === tripletValue)) {\r\n tripletCount += 1;\r\n tripletValue = possibleTriplet;\r\n if (tripletCount === 3) {\r\n nevent.tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: true\r\n };\r\n rv[rv.length - 1].tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: false\r\n };\r\n rv[rv.length - 2].tupletInfo = {\r\n numNotes: 3,\r\n stemTicks: possibleTriplet / 2,\r\n totalTicks: possibleTriplet,\r\n isLast: false\r\n };\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n }\r\n } else {\r\n tripletCount = 0;\r\n tripletValue = 0;\r\n }\r\n rv.push(nevent);\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Store midi on events. If the midi on or off matches an existing\r\n * stored event based on channel and note, return it so it can be processed\r\n * @param ev raw event\r\n * @param evIndex index of processed events\r\n * @returns \r\n */\r\n pushPopMidiEvent(ev: MidiTrackEvent, evIndex: number): MidiNoteOn | null {\r\n let rv: MidiNoteOn | null = null;\r\n if (!ev.noteNumber || typeof (ev.channel) === 'undefined') {\r\n return null;\r\n }\r\n if (this.midiOnNotes[ev.noteNumber]) {\r\n const ix = this.midiOnNotes[ev.noteNumber].findIndex((x) => x.channel === ev.channel);\r\n if (ix >= 0) {\r\n rv = JSON.parse(JSON.stringify(this.midiOnNotes[ev.noteNumber][ix]));\r\n this.midiOnNotes[ev.noteNumber].splice(ix);\r\n }\r\n }\r\n if (!this.midiOnNotes[ev.noteNumber]) {\r\n this.midiOnNotes[ev.noteNumber] = [];\r\n }\r\n if (ev.type === 'noteOn' && ev.velocity && ev.velocity > 0) {\r\n this.midiOnNotes[ev.noteNumber].push({\r\n note: ev.noteNumber,\r\n channel: ev.channel,\r\n smoIndex: evIndex\r\n });\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Step 1 in the 3-step process. Collapse midi events into \r\n * a single EventSmoData for each distinct tick that contains\r\n * the metadata state, a duration, and note information.\r\n * @param trackEvents \r\n * @returns \r\n */\r\n collapseMidiEvents(trackEvents: MidiTrackEvent[]): EventSmoData[] {\r\n const isEot = (ev: MidiTrackEvent) => {\r\n if (!ev) {\r\n return true;\r\n }\r\n if (typeof (ev.type) === 'undefined') {\r\n return true;\r\n }\r\n return ev.type === 'endOfTrack';\r\n }\r\n if (this.eventIndex >= trackEvents.length) {\r\n this.eot = true;\r\n return [];\r\n }\r\n const rv: EventSmoData[] = [];\r\n let cur = trackEvents[0];\r\n let metadata: RunningMetadata = this.getMetadata(0);\r\n let curSmo = this.createNewEvent(metadata);\r\n let untrackedTicks = 0;\r\n let ticks = 0;\r\n while (this.eventIndex < trackEvents.length && !(this.eot)) {\r\n if (isEot(cur)) {\r\n this.eot = true;\r\n break;\r\n }\r\n if (cur.deltaTime > 0) {\r\n curSmo.durationTicks = this.getSmoTicks(cur.deltaTime);\r\n ticks += curSmo.durationTicks;\r\n // We only need to track note on/off events. Other events update the global\r\n // map, we need to keep track of the duration changes though.\r\n if (cur.type === 'noteOn' || cur.type === 'noteOff') {\r\n if (curSmo.pitches.length === 0) {\r\n curSmo.isRest = true;\r\n }\r\n curSmo.durationTicks += untrackedTicks;\r\n untrackedTicks = 0;\r\n rv.push(curSmo);\r\n } else {\r\n untrackedTicks += curSmo.durationTicks\r\n }\r\n curSmo = this.createNewEvent(metadata);\r\n }\r\n curSmo.timeSignature = metadata.timeSignature;\r\n curSmo.tempo = metadata.tempo;\r\n curSmo.keySignature = metadata.keySignature.toLowerCase();\r\n\r\n if (cur.type === 'noteOn' || cur.type === 'noteOff') {\r\n const mm = this.pushPopMidiEvent(cur, rv.length);\r\n if (mm) {\r\n const npitch = SmoMusic.getEnharmonicInKey(SmoMusic.smoIntToPitch(mm.note - 12), metadata.keySignature);\r\n if (mm.smoIndex < rv.length) {\r\n rv[mm.smoIndex].pitches.push(npitch);\r\n rv[mm.smoIndex].isRest = false;\r\n } else {\r\n console.warn('bad index in event mm.smoIndex');\r\n }\r\n }\r\n } else if (cur.meta) {\r\n this.handleMetadata(cur, ticks);\r\n }\r\n metadata = this.getMetadata(ticks);\r\n this.eventIndex += 1;\r\n cur = trackEvents[this.eventIndex];\r\n if (isEot(cur)) {\r\n this.eot = true;\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n getTrackData(midi: any) {\r\n if (midi.header.format !== 0) {\r\n return midi.tracks;\r\n }\r\n const trackData: any[] = [];\r\n const trackHash: Record = {};\r\n const trackEvents: MidiTrackEvent[] = midi.tracks[0];\r\n trackEvents.forEach((ev) => {\r\n const channel = ev.channel ?? 0;\r\n if (!trackHash[channel]) {\r\n trackHash[channel] = [];\r\n }\r\n trackHash[channel].push(ev);\r\n });\r\n const trackKeys = Object.keys(trackHash);\r\n trackKeys.forEach((trackKey) => {\r\n trackData.push(trackHash[trackKey]);\r\n });\r\n return trackData;\r\n }\r\n\r\n /**\r\n * Convert the midi to a score as best we can. The conversion is made via a 3-step\r\n * process. \r\n * 1. consolidate all the MIDI events into individual note on/off events with a duration\r\n * 2. adjust the durations so the fit in with Smoosic measure lengths.\r\n * 3. Create the {@link SmoNote} objects from the events.\r\n * @returns \r\n */\r\n convert(): SmoScore {\r\n let staves: SmoSystemStaff[] = [];\r\n // go through the tracks. If this is midi format 1, split tracks into their own channels\r\n const tracks = this.getTrackData(this.midi);\r\n try {\r\n tracks.forEach((trackEvents: MidiTrackEvent[], trackIx: number) => {\r\n this.eventIndex = 0; // index into current track\r\n this.trackIndex = trackIx;\r\n this.eot = false;\r\n this.tieMap[trackIx] = [];\r\n const collapsed: EventSmoData[] = this.collapseMidiEvents(trackEvents);\r\n const expanded: EventSmoData[] = this.expandMidiEvents(collapsed);\r\n if (expanded.length > 0) {\r\n const staffDef = SmoSystemStaff.defaults;\r\n staffDef.staffId = trackIx;\r\n staffDef.measures = this.createNotesFromEvents(expanded);\r\n\r\n const staff = new SmoSystemStaff(staffDef);\r\n // For notes that are tied across measures, add the tie\r\n this.tieMap[trackIx].forEach((mm) => {\r\n const startMeasure = staffDef.measures[mm - 1];\r\n const endMeasure = staffDef.measures[mm];\r\n const endIx = startMeasure.voices[0].notes.length - 1;\r\n const startNote = startMeasure.voices[0].notes[endIx];\r\n const endNote = endMeasure.voices[0].notes[0];\r\n if (startNote.noteType === 'n' &&\r\n endNote.noteType === 'n' && SmoMusic.pitchArraysMatch(startNote.pitches, endNote.pitches)) {\r\n const tieDefs = SmoTie.defaults;\r\n tieDefs.startSelector = {\r\n staff: trackIx, measure: mm - 1, voice: 0, tick: endIx,\r\n pitches: []\r\n }\r\n tieDefs.endSelector = {\r\n staff: trackIx, measure: mm, voice: 0, tick: 0,\r\n pitches: []\r\n }\r\n tieDefs.lines.push({ from: 0, to: 0 });\r\n const tie = new SmoTie(tieDefs);\r\n staff.modifiers.push(tie);\r\n }\r\n });\r\n staves.push(staff);\r\n }\r\n });\r\n } catch (exception) {\r\n console.warn(exception);\r\n }\r\n if (staves.length === 0) {\r\n return SmoScore.getEmptyScore(SmoScore.defaults);\r\n }\r\n let longestStave = staves[0];\r\n staves.forEach((staff) => {\r\n if (staff.measures.length > longestStave.measures.length) {\r\n longestStave = staff;\r\n }\r\n });\r\n staves.forEach((staff) => {\r\n let i = 0;\r\n for (i = staff.measures.length; i < longestStave.measures.length; ++i) {\r\n const measure = SmoMeasure.getDefaultMeasure(longestStave.measures[i]);\r\n measure.voices.push({ notes: SmoMeasure.getDefaultNotes(longestStave.measures[i]) });\r\n staff.measures.push(measure);\r\n }\r\n });\r\n const scoreDefs = SmoScore.defaults;\r\n scoreDefs.staves = staves;\r\n\r\n const rv = new SmoScore(scoreDefs);\r\n const layoutDefaults = rv.layoutManager as SmoLayoutManager;\r\n // if no scale given in score, default to something small.\r\n layoutDefaults.globalLayout.svgScale = 0.65;\r\n layoutDefaults.globalLayout.zoomScale = 1.5;\r\n SmoOperation.clearAllBeamGroups(rv);\r\n return rv;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Support for converting Smo object model to MIDI\r\n * @module /smo/midi/smoToMidi\r\n */\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoAudioScore } from '../xform/audioTrack';\r\nimport { SmoScore } from '../data/score';\r\ndeclare var MidiWriter: any;\r\n/* options: [{\r\n\r\n value: 1,\r\n label: 'Piano (bowed)'\r\n }, {\r\n value: 34,\r\n label: 'Bass (plucked)'\r\n }, {\r\n value: 27,\r\n label: 'Electric Guitar'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'trombone',\r\n label: 'Trombone'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'altoSax',\r\n label: 'Eb Alto Sax'\r\n }, {\r\n value: 'tenorSax',\r\n label: 'Bb Tenor Sax'\r\n }, {\r\n value: 'bariSax',\r\n label: 'Eb Bari Sax'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]*/\r\n\r\nexport interface MidiTrackHash {\r\n track: any,\r\n lastMeasure: number\r\n}\r\n\r\n/**\r\n * Convert a {@link SmoScore} object to MIDI\r\n * @category SmoToMidi\r\n */\r\nexport class SmoToMidi {\r\n /**\r\n * @param score \r\n * @returns Midi byte array that can be sent to a file upload widget\r\n */\r\n static convert(score: SmoScore) {\r\n const beatTime = 128; // midi ticks per beat\r\n const converter = new SmoAudioScore(score, beatTime);\r\n const audioScore = converter.convert();\r\n const smoTracks = audioScore.tracks;\r\n let currentKey: string = 'C';\r\n const trackHash: Record = {};\r\n smoTracks.forEach((smoTrack, trackIx) => {\r\n let j = 0;\r\n if (typeof(trackHash[trackIx]) === 'undefined') {\r\n trackHash[trackIx] = {\r\n track: new MidiWriter.Track(),\r\n lastMeasure: 0\r\n };\r\n }\r\n const track = trackHash[trackIx].track;\r\n // eslint-disable-next-line\r\n audioScore.repeatMap.forEach((measureMap) => {\r\n for (j = measureMap.startMeasure; j <= measureMap.endMeasure; ++j) {\r\n // eslint-disable-next-line\r\n const notes = smoTrack.notes.filter((nn) => nn.selector.measure === j);\r\n notes.forEach((noteData) => { \r\n const selectorKey = SmoSelector.getMeasureKey(noteData.selector);\r\n if (smoTrack.tempoMap[selectorKey]) {\r\n track.setTempo(smoTrack.tempoMap[selectorKey]);\r\n }\r\n if (smoTrack.timeSignatureMap[selectorKey]) {\r\n const ts = smoTrack.timeSignatureMap[selectorKey];\r\n track.setTimeSignature(ts.numerator, ts.denominator);\r\n }\r\n if (smoTrack.keyMap[j]) {\r\n const ksString = smoTrack.keyMap[j];\r\n const ks = -1 * SmoMusic.getFlatsInKeySignature(ksString) + SmoMusic.getSharpsInKeySignature(ksString);\r\n track.setKeySignature(ks, 0);\r\n }\r\n if (noteData.noteType === 'r') {\r\n if (!noteData.padding) {\r\n const rest = new MidiWriter.NoteOffEvent({\r\n channel: trackIx + 1,\r\n pitch: 'C4',\r\n duration: 't' + noteData.duration\r\n });\r\n track.addEvent(rest);\r\n }\r\n } else {\r\n const pitchArray = SmoMusic.smoPitchesToMidiStrings(noteData.pitches);\r\n const velocity = Math.round(127 * noteData.volume);\r\n const midiNote = new MidiWriter.NoteEvent({\r\n channel: trackIx + 1,\r\n pitch: pitchArray,\r\n duration: 't' + noteData.duration,\r\n velocity\r\n });\r\n track.addEvent(midiNote);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n const tracks = Object.keys(trackHash).map((key) => trackHash[key].track);\r\n const writer = new MidiWriter.Writer(tracks);\r\n return writer.buildFile();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef, Pitch } from '../data/common';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoBarline, TimeSignature, SmoRehearsalMark, SmoMeasureModifierBase } from '../data/measureModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, SmoTie } from '../data/staffModifiers';\r\nimport { SmoArticulation, SmoLyric, SmoOrnament } from '../data/noteModifiers';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoTuplet, SmoTupletTree } from '../data/tuplet';\r\n\r\nimport { XmlHelpers } from './xmlHelpers';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoTempoText } from '../data/measureModifiers';\r\nimport { XmlToSmo } from './xmlToSmo';\r\nimport { SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SuiSampleMedia } from '../../render/audio/samples';\r\n\r\nexport interface SlurXml {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n number: number\r\n}\r\n/**\r\n * Keep state of the xml document as we are generating it\r\n * @category SmoToXml\r\n */\r\nexport interface SmoState {\r\n divisions: number,\r\n measureNumber: number,\r\n measureIndex: number,\r\n transposeOffset: number,\r\n tickCount: number,\r\n voiceIndex: number,\r\n keySignature: string,\r\n voiceTickIndex: number,\r\n voice?: SmoVoice,\r\n partStaves: SmoSystemStaff[],\r\n staffPartIx: number, // index of staff in part\r\n slurs: SlurXml[],\r\n ties: SlurXml[],\r\n tieds: SlurXml[],\r\n lyricState: Record,\r\n measureTicks: number,\r\n note?: SmoNote,\r\n beamState: number,\r\n beamTicks: number,\r\n timeSignature?: TimeSignature,\r\n tempo?: SmoTempoText,\r\n currentTupletLevel: number, // not sure about the name\r\n}\r\n\r\n/**\r\n * Convert {@link SmoScore} object into a music XML serialization\r\n * \r\n * usage: `xdoc: XmlDocument = SmoToXml.convert(score)`\r\n * @category SmoToXml\r\n */\r\nexport class SmoToXml {\r\n static get beamStates(): Record {\r\n return {\r\n none: 1, start: 2, continue: 3, stop: 4\r\n };\r\n }\r\n static get defaultState(): SmoState {\r\n return JSON.parse(JSON.stringify({\r\n divisions: 0,\r\n measureNumber: 0,\r\n measureIndex: 0,\r\n transposeOffset: 0,\r\n tickCount: 0,\r\n voiceIndex: 0,\r\n keySignature: 'C',\r\n voiceTickIndex: 0,\r\n slurs: [],\r\n ties: [],\r\n partStaves: [],\r\n lyricState: {},\r\n measureTicks: 0,\r\n beamState: 0,\r\n beamTicks: 4096,\r\n currentTupletLevel: 0,\r\n }));\r\n }\r\n /**\r\n * see usage\r\n * @param score\r\n * @returns \r\n */\r\n static convert(score: SmoScore): XMLDocument {\r\n let staffGroupIx = 0;\r\n let staffIx = 0;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const dom = XmlHelpers.createRootElement(); \r\n const root = dom.children[0];\r\n const work = nn(root, 'work', null, '');\r\n nn(work, 'work-title', score.scoreInfo, 'title');\r\n const identification = nn(root, 'identification', null, '');\r\n const creator = nn(identification, 'creator', score.scoreInfo, 'composer');\r\n XmlHelpers.createAttributes(creator, { type: 'composer' });\r\n const encoding = nn(identification, 'encoding', null, '');\r\n nn(encoding, 'software', { software: 'Some pre-release version of Smoosic' }, 'software');\r\n const today = new Date();\r\n const dd = (n: number) => n < 10 ? '0' + n.toString() : n.toString()\r\n const dateString: string = today.getFullYear() + '-' + dd(today.getMonth() + 1) + '-' + dd(today.getDate());\r\n nn(encoding, 'encoding-date', dateString, 'date');\r\n const defaults = nn(root, 'defaults', null, '');\r\n const scaling = nn(defaults, 'scaling', null, '');\r\n const svgScale = score.layoutManager!.getGlobalLayout().svgScale;\r\n\r\n // music in vexflow is rendered at a font size of 38\r\n const mm = XmlToSmo.mmPerPixel * 42 * svgScale;\r\n nn(scaling, 'millimeters', { mm }, 'mm');\r\n nn(scaling, 'tenths', { tenths: 40 }, 'tenths');\r\n const pageLayout = nn(defaults, 'page-layout', null, '');\r\n const musicFont = nn(defaults, 'music-font', null, '');\r\n const engrave = score.fonts.find((fn) => fn.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n XmlHelpers.createAttribute(musicFont, 'font-size', 38 * svgScale );\r\n if (engrave) {\r\n XmlHelpers.createAttribute(musicFont, 'font-family', engrave.family);\r\n }\r\n const tenthConversion = (25.2 / 96) * (40 / mm);\r\n const pageDims = {\r\n 'page-height': score.layoutManager!.globalLayout.pageHeight * tenthConversion,\r\n 'page-width' : score.layoutManager!.globalLayout.pageWidth * tenthConversion\r\n };\r\n Object.keys(pageDims).forEach((dim) => {\r\n nn(pageLayout, dim, pageDims, dim);\r\n });\r\n const margins = { 'left-margin': score.layoutManager!.pageLayouts[0].leftMargin * tenthConversion,\r\n 'right-margin': score.layoutManager!.pageLayouts[0].rightMargin * tenthConversion,\r\n 'top-margin': score.layoutManager!.pageLayouts[0].topMargin * tenthConversion,\r\n 'bottom-margin': score.layoutManager!.pageLayouts[0].bottomMargin * tenthConversion };\r\n const pageMargins = nn(pageLayout, 'page-margins', null, '');\r\n Object.keys(margins).forEach((margin) => {\r\n nn(pageMargins, margin, margins, margin);\r\n });\r\n const partList = nn(root, 'part-list', null, '');\r\n score.staves.forEach((staff) => {\r\n score.systemGroups.forEach((sg) => {\r\n if (sg.startSelector.staff === staff.staffId && sg.startSelector.staff < sg.endSelector.staff ) {\r\n const partGroup = nn(partList, 'part-group', null, '');\r\n XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'start' });\r\n const groupSymbol = nn(partGroup, 'group-symbol', null, '');\r\n let symbolText = 'line';\r\n if (sg.leftConnector === SmoSystemGroup.connectorTypes['brace']) {\r\n symbolText = 'brace';\r\n } else if (sg.leftConnector === SmoSystemGroup.connectorTypes['bracket']) {\r\n symbolText = 'bracket';\r\n } else if (sg.leftConnector === SmoSystemGroup.connectorTypes['double']) {\r\n symbolText = 'square';\r\n }\r\n groupSymbol.textContent = symbolText;\r\n } else if (sg.endSelector.staff === staff.staffId && sg.startSelector.staff < sg.endSelector.staff ) {\r\n const partGroup = nn(partList, 'part-group', null, '');\r\n XmlHelpers.createAttributes(partGroup, { number: staffGroupIx, type: 'stop' });\r\n }\r\n });\r\n if (!staff.partInfo.stavesBefore) {\r\n const id = 'P' + staff.staffId;\r\n const scorePart = nn(partList, 'score-part', null, '');\r\n XmlHelpers.createAttributes(scorePart, { id });\r\n nn(scorePart, 'part-name', { name: staff.measureInstrumentMap[0].instrumentName }, 'name');\r\n nn(scorePart, 'part-abbreviation', { name: staff.measureInstrumentMap[0].abbreviation }, 'name');\r\n const staffInsts = staff.getInstrumentList();\r\n staffInsts.forEach((inst, ix) => {\r\n const scoreInstrument = nn(scorePart, 'score-instrument', null, '');\r\n XmlHelpers.createAttributes(scoreInstrument, { id: `${id}-${ix}` });\r\n const iname = nn(scoreInstrument, 'instrument-name', null, '');\r\n iname.textContent = inst.instrumentName;\r\n const iinst = nn(scoreInstrument, 'instrument-sound', null, '');\r\n // Hack: family is in the sample library, breaks dependency direction\r\n const family = SuiSampleMedia.getFamilyForInstrument(inst.instrument);\r\n iinst.textContent = `${family}.${inst.instrument}`;\r\n });\r\n }\r\n });\r\n const smoState: SmoState = SmoToXml.defaultState;\r\n for (staffIx = 0; staffIx < score.staves.length; ++staffIx) {\r\n smoState.partStaves = [];\r\n // If this is the second staff in a part, we've already output the music with the\r\n // first stave\r\n if (score.staves[staffIx].partInfo.stavesBefore > 0) {\r\n continue;\r\n }\r\n smoState.partStaves.push(score.staves[staffIx]);\r\n if (smoState.partStaves[0].partInfo.stavesAfter > 0 && staffIx < score.staves.length + 1) {\r\n smoState.partStaves.push(score.staves[staffIx + 1]);\r\n } \r\n const part = nn(root, 'part', null, '');\r\n const id = 'P' + smoState.partStaves[0].staffId;\r\n XmlHelpers.createAttributes(part, { id });\r\n smoState.measureNumber = 1;\r\n smoState.tickCount = 0;\r\n smoState.transposeOffset = 0;\r\n smoState.slurs = [];\r\n smoState.ties = [];\r\n smoState.tieds = [];\r\n smoState.lyricState = {};\r\n for (smoState.measureIndex = 0; smoState.measureIndex < smoState.partStaves[0].measures.length; ++smoState.measureIndex) {\r\n const measureElement = nn(part, 'measure', null, '');\r\n for (smoState.staffPartIx = 0; smoState.staffPartIx < smoState.partStaves.length; ++smoState.staffPartIx) {\r\n smoState.measureTicks = 0;\r\n // each staff in a part goes in the same measure element. If this is a subsequent part, we've already \r\n SmoToXml.measure(measureElement, smoState);\r\n }\r\n smoState.measureNumber += 1;\r\n }\r\n }\r\n \r\n return smoSerialize.prettifyXml(dom);\r\n } \r\n /**\r\n * /score-partwise/part/measure\r\n * @param measureElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static measure(measureElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const measure = smoState.partStaves[smoState.staffPartIx].measures[smoState.measureIndex];\r\n if (smoState.measureNumber === 1 && measure.isPickup()) {\r\n smoState.measureNumber = 0;\r\n }\r\n if (measure.getForceSystemBreak()) {\r\n const printElement = nn(measureElement, 'print', null, '');\r\n XmlHelpers.createAttributes(printElement, { 'new-system': 'yes' });\r\n }\r\n XmlHelpers.createAttributes(measureElement, { number: smoState.measureNumber });\r\n SmoToXml.attributes(measureElement, measure, smoState);\r\n smoState.voiceIndex = 1;\r\n smoState.beamState = SmoToXml.beamStates.none;\r\n smoState.beamTicks = 0;\r\n SmoToXml.barline(measureElement, smoState, true);\r\n measure.voices.forEach((voice) => {\r\n smoState.voiceTickIndex = 0;\r\n smoState.voice = voice;\r\n voice.notes.forEach((note) => {\r\n smoState.note = note;\r\n // Start wedge before note starts\r\n SmoToXml.direction(measureElement, smoState, true);\r\n SmoToXml.note(measureElement, measure, note, smoState);\r\n // End wedge on next tick\r\n SmoToXml.direction(measureElement, smoState, false);\r\n });\r\n // If this is the end of a voice, back up the time to align the voices\r\n if (measure.voices.length > smoState.voiceIndex) {\r\n smoState.voiceIndex += 1;\r\n const backupElement = nn(measureElement, 'backup', null, '');\r\n nn(backupElement, 'duration', { duration: smoState.measureTicks }, 'duration');\r\n } else {\r\n if (smoState.partStaves.length > 1 && smoState.staffPartIx + 1 < smoState.partStaves.length) {\r\n // If this is the end of a measure, and this is the first part in the staff, back it up for the second staff\r\n const backupElement = nn(measureElement, 'backup', null, '');\r\n nn(backupElement, 'duration', { duration: smoState.measureTicks }, 'duration'); \r\n smoState.tickCount += smoState.measureTicks;\r\n } else if (smoState.partStaves.length === 1) {\r\n smoState.tickCount += smoState.measureTicks;\r\n }\r\n }\r\n smoState.measureTicks = 0;\r\n });\r\n SmoToXml.barline(measureElement, smoState, false);\r\n }\r\n /**\r\n * /score-partwise/part/measure/barline\r\n * @param measureElement \r\n * @param smoState \r\n * @param start \r\n */\r\n static barline(measureElement: Element, smoState: SmoState, start: boolean) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n let barlineElement = null;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n if (start) {\r\n if (measure!.getStartBarline().barline === SmoBarline.barlines.startRepeat) {\r\n barlineElement = nn(measureElement, 'barline', null, '');\r\n const repeatElement = nn(barlineElement, 'repeat', null, '');\r\n XmlHelpers.createAttributes(repeatElement, { direction: 'forward' });\r\n }\r\n }\r\n const voltas = staff.getVoltasForMeasure(measure!.measureNumber.measureIndex);\r\n const numArray: number[] = [];\r\n voltas.forEach((volta) => {\r\n if ((start && volta?.startSelector?.measure === measure.measureNumber.measureIndex) || \r\n (!start && volta?.endSelector?.measure === measure.measureNumber.measureIndex)) {\r\n numArray.push(volta.number);\r\n }\r\n });\r\n if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.endBar) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n nn(barlineElement, 'bar-style', { style: 'light-heavy'} , 'style');\r\n } else if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.doubleBar) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n nn(barlineElement, 'bar-style', { style: 'light-light'} , 'style');\r\n }\r\n if (numArray.length) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n const numstr = numArray.join(',');\r\n const endElement = nn(barlineElement, 'ending', null, '');\r\n const endString = start ? 'start' : 'stop';\r\n XmlHelpers.createAttributes(endElement, { type: endString, number: numstr });\r\n }\r\n if (!start && measure!.getEndBarline().barline === SmoBarline.barlines.endRepeat) {\r\n barlineElement = barlineElement ?? nn(measureElement, 'barline', null, '');\r\n const repeatElement = nn(barlineElement, 'repeat', null, '');\r\n XmlHelpers.createAttributes(repeatElement, { direction: 'backward' });\r\n }\r\n }\r\n\r\n /**\r\n * /score-partwise/part/measure/note/tie\r\n * @param notationsElement \r\n * @param smoState \r\n */\r\n static tied(notationsElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForTie = ((ties: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n ties.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getTiesStartingAt(selector) as SmoTie[];\r\n const ends = staff.getTiesEndingAt(selector) as SmoTie[];\r\n const remove: SlurXml[] = [];\r\n const newTies: SlurXml[] = [];\r\n ends.forEach((tie) => {\r\n const match = smoState.tieds.find((ss: any) => SmoSelector.eq(ss.startSelector, tie.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, tie.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const tieElement = nn(notationsElement, 'tied', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'stop' });\r\n }\r\n });\r\n smoState.tieds.forEach((tie: any) => {\r\n if (remove.findIndex((rr) => rr.number === tie.number) < 0) {\r\n newTies.push(tie);\r\n }\r\n });\r\n smoState.tieds = newTies;\r\n starts.forEach((tie) => {\r\n const number = getNumberForTie(smoState.ties);\r\n smoState.tieds.push({\r\n startSelector: tie.startSelector,\r\n endSelector: tie.endSelector,\r\n number\r\n });\r\n const tieElement = nn(notationsElement, 'tied', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/note/tie\r\n * @param noteElement\r\n * @param smoState \r\n */\r\n static tie(noteElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForTie = ((ties: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n ties.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getTiesStartingAt(selector) as SmoTie[];\r\n const ends = staff.getTiesEndingAt(selector) as SmoTie[];\r\n const remove: SlurXml[] = [];\r\n const newTies: SlurXml[] = [];\r\n ends.forEach((tie) => {\r\n const match = smoState.ties.find((ss: any) => SmoSelector.eq(ss.startSelector, tie.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, tie.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const tieElement = nn(noteElement, 'tie', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'stop' });\r\n }\r\n });\r\n smoState.ties.forEach((tie: any) => {\r\n if (remove.findIndex((rr) => rr.number === tie.number) < 0) {\r\n newTies.push(tie);\r\n }\r\n });\r\n smoState.ties = newTies;\r\n starts.forEach((tie) => {\r\n const number = getNumberForTie(smoState.ties);\r\n smoState.ties.push({\r\n startSelector: tie.startSelector,\r\n endSelector: tie.endSelector,\r\n number\r\n });\r\n const tieElement = nn(noteElement, 'tie', null, '');\r\n XmlHelpers.createAttributes(tieElement, { type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/note/notations/slur\r\n * @param notationsElement \r\n * @param smoState \r\n */\r\n static slur(notationsElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const getNumberForSlur = ((slurs: SlurXml[]) => {\r\n let rv = 1;\r\n const hash: Record = {};\r\n slurs.forEach((ss) => {\r\n hash[ss.number] = true;\r\n });\r\n while (rv < 100) {\r\n if (typeof(hash[rv]) === 'undefined') {\r\n break;\r\n }\r\n rv += 1;\r\n }\r\n return rv;\r\n });\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n const starts = staff.getSlursStartingAt(selector) as SmoSlur[];\r\n const ends = staff.getSlursEndingAt(selector) as SmoSlur[];\r\n const remove: SlurXml[] = [];\r\n const newSlurs: SlurXml[] = [];\r\n ends.forEach((slur) => {\r\n const match = smoState.slurs.find((ss: any) => SmoSelector.eq(ss.startSelector, slur.startSelector) &&\r\n SmoSelector.eq(ss.endSelector, slur.endSelector));\r\n if (match) {\r\n remove.push(match);\r\n const slurElement = nn(notationsElement, 'slur', null, '');\r\n XmlHelpers.createAttributes(slurElement, { number: match.number, type: 'stop' });\r\n }\r\n });\r\n smoState.slurs.forEach((slur: any) => {\r\n if (remove.findIndex((rr) => rr.number === slur.number) < 0) {\r\n newSlurs.push(slur);\r\n }\r\n });\r\n smoState.slurs = newSlurs;\r\n starts.forEach((slur) => {\r\n const number = getNumberForSlur(smoState.slurs);\r\n smoState.slurs.push({\r\n startSelector: slur.startSelector,\r\n endSelector: slur.endSelector,\r\n number\r\n });\r\n const slurElement = nn(notationsElement, 'slur', null, '');\r\n XmlHelpers.createAttributes(slurElement, { number: number, type: 'start' });\r\n });\r\n }\r\n /**\r\n * /score-partwise/measure/note/time-modification\r\n * /score-partwise/measure/note/tuplet\r\n */\r\n static tupletTime(noteElement: Element, note: SmoNote, measure: SmoMeasure, smoState: SmoState) {\r\n const tuplets: SmoTuplet[] = SmoTupletTree.getTupletHierarchyForNoteIndex(measure.tupletTrees, smoState.voiceIndex - 1, smoState.voiceTickIndex);\r\n let actualNotes: number = 1;\r\n let normalNotes: number = 1;\r\n for (let i = 0; i < tuplets.length; i++) {\r\n const tuplet = tuplets[i];\r\n actualNotes *= tuplet.numNotes;\r\n normalNotes *= tuplet.notesOccupied;\r\n }\r\n const nn = XmlHelpers.createTextElementChild;\r\n const obj = {\r\n actualNotes: actualNotes, normalNotes: normalNotes\r\n };\r\n const timeModification = nn(noteElement, 'time-modification', null, '');\r\n nn(timeModification, 'actual-notes', obj, 'actualNotes');\r\n nn(timeModification, 'normal-notes', obj, 'normalNotes');\r\n }\r\n static tupletNotation(notationsElement: Element, note: SmoNote, measure: SmoMeasure, smoState: SmoState) {\r\n const tuplets: SmoTuplet[] = SmoTupletTree.getTupletHierarchyForNoteIndex(measure.tupletTrees, smoState.voiceIndex - 1, smoState.voiceTickIndex);\r\n for (let i = 0; i < tuplets.length; i++) {\r\n const tuplet: SmoTuplet = tuplets[i];\r\n const nn = XmlHelpers.createTextElementChild;\r\n\r\n if (tuplet.startIndex === smoState.voiceTickIndex) {//START\r\n const tupletElement = nn(notationsElement, 'tuplet', null, '');\r\n smoState.currentTupletLevel++;\r\n XmlHelpers.createAttributes(tupletElement, {\r\n number: smoState.currentTupletLevel, type: 'start'\r\n });\r\n\r\n const tupletType = XmlHelpers.ticksToNoteTypeMap[tuplet.stemTicks];\r\n\r\n const tupletActual = nn(tupletElement, 'tuplet-actual', null, '');\r\n nn(tupletActual, 'tuplet-number', tuplet, 'numNotes');\r\n nn(tupletActual, 'tuplet-type', tupletType, '');\r\n\r\n const tupletNormal = nn(tupletElement, 'tuplet-normal', null, '');\r\n nn(tupletNormal, 'tuplet-number', tuplet, 'notesOccupied');\r\n nn(tupletNormal, 'tuplet-type', tupletType, '');\r\n } else if (tuplet.endIndex === smoState.voiceTickIndex) {//STOP\r\n const tupletElement = nn(notationsElement, 'tuplet', null, '');\r\n XmlHelpers.createAttributes(tupletElement, {\r\n number: smoState.currentTupletLevel, type: 'stop'\r\n });\r\n smoState.currentTupletLevel--;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * /score-partwise/measure/note/pitch\r\n * @param pitch \r\n * @param noteElement \r\n */\r\n static pitch(pitch: Pitch, noteElement: Element) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const accidentalOffset = ['bb', 'b', 'n', '#', '##'];\r\n const alter = accidentalOffset.indexOf(pitch.accidental) - 2;\r\n const pitchElement = nn(noteElement, 'pitch', null, '');\r\n nn(pitchElement, 'step', { letter: pitch.letter.toUpperCase() }, 'letter');\r\n nn(pitchElement, 'alter', { alter }, 'alter');\r\n nn(pitchElement, 'octave', pitch, 'octave');\r\n }\r\n /**\r\n * /score-partwise/measure/beam\r\n * @param noteElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static beamNote(noteElement: Element, smoState: SmoState) {\r\n if (!smoState.note) {\r\n return;\r\n }\r\n if (!smoState.voice) {\r\n return;\r\n }\r\n const nn = XmlHelpers.createTextElementChild;\r\n const note = smoState.note;\r\n const nextNote = (smoState.voiceTickIndex + 1) >= smoState.voice.notes.length ?\r\n null : smoState.voice.notes[smoState.voiceTickIndex + 1];\r\n const exceedTicks = smoState.beamTicks + note.tickCount >= note.beamBeats;\r\n // don't start a beam on a rest\r\n if (note.isRest() && smoState.beamState === SmoToXml.beamStates.none) {\r\n return;\r\n }\r\n let toBeam = SmoToXml.beamStates.none;\r\n if (note.tickCount <= 2048 && !exceedTicks) {\r\n // Explicit end beam, or no more notes to beam, so stop beam\r\n if (note.endBeam || nextNote === null) {\r\n if (smoState.beamState !== SmoToXml.beamStates.none) {\r\n toBeam = SmoToXml.beamStates.stop;\r\n }\r\n } else {\r\n // else if the next note is beamable, start or continue the beam\r\n if (nextNote.tickCount <= 2048) {\r\n toBeam = smoState.beamState === SmoToXml.beamStates.continue ?\r\n SmoToXml.beamStates.continue : SmoToXml.beamStates.start;\r\n }\r\n }\r\n }\r\n if (toBeam === SmoToXml.beamStates.start || toBeam === SmoToXml.beamStates.continue) {\r\n smoState.beamTicks += smoState.note.tickCount;\r\n } else {\r\n smoState.beamTicks = 0;\r\n }\r\n // slur is start/stop, beam is begin, end, gf\r\n if (toBeam === SmoToXml.beamStates.start) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'begin' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n smoState.beamState = SmoToXml.beamStates.continue;\r\n } else if (toBeam === SmoToXml.beamStates.continue) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'continue' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n } else if ((toBeam === SmoToXml.beamStates.stop) ||\r\n (toBeam === SmoToXml.beamStates.none && smoState.beamState !== SmoToXml.beamStates.none)) {\r\n const beamElement = nn(noteElement, 'beam', { type: 'end' }, 'type');\r\n XmlHelpers.createAttributes(beamElement, { number: 1 });\r\n smoState.beamState = SmoToXml.beamStates.none;\r\n }\r\n }\r\n /**\r\n * /score-partwise/measure/direction/direction-type\r\n * @param measureElement \r\n * @param smoState \r\n * @param beforeNote \r\n */\r\n static direction(measureElement: Element, smoState: SmoState, beforeNote: boolean) {\r\n let addDirection = false;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const directionElement = measureElement.ownerDocument.createElement('direction');\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const directionChildren: Element[] = [];\r\n const tempo = measure.getTempo();\r\n let displayTempo = false;\r\n if (smoState.tempo) {\r\n if (tempo.display && measure.measureNumber.measureIndex === 0 && smoState.measureTicks === 0) {\r\n displayTempo = true;\r\n } else if (tempo.display && !SmoTempoText.eq(smoState.tempo, tempo)) {\r\n displayTempo = true;\r\n }\r\n } else {\r\n displayTempo = true;\r\n }\r\n smoState.tempo = new SmoTempoText(tempo);\r\n if (beforeNote === true && smoState.staffPartIx === 0 && smoState.measureTicks === 0 && smoState.partStaves[0].staffId === 0) {\r\n const mark: SmoMeasureModifierBase | undefined = measure.getRehearsalMark();\r\n if (mark) {\r\n const rmtype = nn(directionElement, 'direction-type', null, '');\r\n const xmark = (mark as SmoRehearsalMark);\r\n const rElement = nn(rmtype, 'rehearsal', { mark: xmark.symbol }, 'mark');\r\n XmlHelpers.createAttribute(rElement, 'enclosure', 'square');\r\n XmlHelpers.createAttribute(directionElement, 'placement', 'above');\r\n addDirection = true;\r\n }\r\n }\r\n if (beforeNote === true && displayTempo) {\r\n addDirection = true;\r\n const tempoBpm = Math.round(tempo.bpm * tempo.beatDuration / 4096);\r\n const tempoElement = nn(directionElement, 'direction-type', null, '');\r\n XmlHelpers.createAttribute(directionElement, 'placement', 'above');\r\n let tempoText = tempo.tempoText;\r\n if (tempo.tempoMode === SmoTempoText.tempoModes.customMode) {\r\n tempoText = tempo.customText;\r\n }\r\n if (tempo.tempoMode === SmoTempoText.tempoModes.textMode) {\r\n nn(tempoElement, 'words', { words: tempoText }, 'words');\r\n } else if (tempo.tempoMode === SmoTempoText.tempoModes.customMode || tempo.tempoMode === SmoTempoText.tempoModes.durationMode) {\r\n const metronomeElement = nn(tempoElement, 'metronome', null, '');\r\n let durationType = 'quarter';\r\n let dotType = false;\r\n if (tempo.bpm >= 8192) {\r\n durationType = 'half';\r\n } else if (tempo.bpm < 4096) {\r\n durationType = 'eighth';\r\n }\r\n if (tempo.bpm === 6144 || tempo.bpm === 12288 || tempo.bpm === 3072) {\r\n dotType = true;\r\n }\r\n nn(metronomeElement, 'beat-unit', { beatUnit: durationType}, 'beatUnit');\r\n if (dotType) {\r\n nn(metronomeElement, 'beat-unit-dot', null, '');\r\n }\r\n nn(metronomeElement, 'per-minute', { tempo }, 'bpm');\r\n }\r\n // Sound is supposed to come last under 'direction' element\r\n const soundElement = measureElement.ownerDocument.createElement('sound');\r\n soundElement.setAttribute('tempo', tempoBpm.toString());\r\n directionChildren.push(soundElement);\r\n }\r\n const selector: SmoSelector = {\r\n staff: staff.staffId,\r\n measure: measure.measureNumber.measureIndex,\r\n voice: smoState.voiceIndex - 1,\r\n tick: smoState.voiceTickIndex,\r\n pitches: []\r\n };\r\n if (!beforeNote) {\r\n selector.tick -= 1;\r\n }\r\n const startWedge = staff.modifiers.find((mod) =>\r\n SmoSelector.sameNote(mod.startSelector, selector) &&\r\n (mod.attrs.type === 'SmoStaffHairpin')) as SmoStaffHairpin;\r\n const endWedge = staff.modifiers.find((mod) =>\r\n SmoSelector.sameNote(mod.endSelector, selector) &&\r\n (mod.attrs.type === 'SmoStaffHairpin')) as SmoStaffHairpin;\r\n if (endWedge && !beforeNote) {\r\n const wedgeDirection = nn(measureElement, 'direction', null, '');\r\n const dtype = nn(wedgeDirection, 'direction-type', null, '');\r\n const wedgeElement = nn(dtype, 'wedge', null, '');\r\n XmlHelpers.createAttributes(wedgeElement, { type: 'stop', spread: '20' });\r\n }\r\n if (startWedge && beforeNote) {\r\n const wedgeDirection = nn(measureElement, 'direction', null, '');\r\n const dtype = nn(wedgeDirection, 'direction-type', null, '');\r\n const wedgeElement = nn(dtype, 'wedge', null, '');\r\n const wedgeType = startWedge.hairpinType === SmoStaffHairpin.types.CRESCENDO ?\r\n 'crescendo' : 'diminuendo';\r\n XmlHelpers.createAttributes(wedgeElement, { type: wedgeType });\r\n }\r\n if (addDirection) {\r\n measureElement.appendChild(directionElement);\r\n directionChildren.forEach((el) => {\r\n directionElement.appendChild(el);\r\n })\r\n }\r\n }\r\n /**\r\n * /score-partwise/measure/note/lyric\r\n * @param noteElement \r\n * @param smoState \r\n */\r\n static lyric(noteElement: Element, smoState: SmoState) {\r\n const smoNote = smoState.note!;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const lyrics = smoNote.getTrueLyrics() as SmoLyric[];\r\n lyrics.forEach((lyric) => {\r\n let syllabic = 'single';\r\n if (lyric.isHyphenated() === false && lyric.isDash() === false) {\r\n if (smoState.lyricState[lyric.verse] === 'begin') {\r\n syllabic = 'end';\r\n } // else stays single\r\n } else {\r\n if (lyric.isHyphenated()) {\r\n syllabic = smoState.lyricState[lyric.verse] === 'begin' ?\r\n 'middle' : 'begin';\r\n } else if (lyric.isDash()) {\r\n syllabic = 'middle';\r\n }\r\n }\r\n smoState.lyricState[lyric.verse] = syllabic;\r\n const lyricElement = nn(noteElement, 'lyric', null, '');\r\n XmlHelpers.createAttribute(lyricElement, 'number', lyric.verse + 1);\r\n XmlHelpers.createAttribute(lyricElement, 'placement', 'below');\r\n XmlHelpers.createAttribute(lyricElement, 'default-y',\r\n -80 - 10 * lyric.verse);\r\n nn(lyricElement, 'syllabic', syllabic, '');\r\n nn(lyricElement, 'text', lyric.getText(), '');\r\n });\r\n }\r\n /**\r\n * /score-partwise/measure/note\r\n * @param measureElement \r\n * @param smoState \r\n */\r\n static note(measureElement: Element, measure: SmoMeasure, note: SmoNote, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n let i = 0;\r\n for (i = 0; i < note.pitches.length; ++i) {\r\n let j = 0;\r\n const noteElement = nn(measureElement, 'note', null, '');\r\n const isChord = i > 0;\r\n if (isChord) {\r\n nn(noteElement, 'chord', null, '');\r\n } else {\r\n }\r\n if (note.isRest()) {\r\n const restElement = nn(noteElement, 'rest', null, '');\r\n const step = { letter: note.pitches[i].letter.toUpperCase() };\r\n nn(restElement, 'display-step', step, 'letter');\r\n nn(restElement, 'display-octave', { ...note.pitches[i] }, 'octave');\r\n } else {\r\n SmoToXml.pitch(note.pitches[i], noteElement);\r\n }\r\n const duration = note.tickCount;\r\n smoState.measureTicks += duration;\r\n const tuplet = SmoTupletTree.getTupletForNoteIndex(measure.tupletTrees, smoState.voiceIndex - 1, smoState.voiceTickIndex);\r\n nn(noteElement, 'duration', { duration }, 'duration');\r\n SmoToXml.tie(noteElement, smoState);\r\n nn(noteElement, 'voice', { voice: smoState.voiceIndex }, 'voice');\r\n let typeTickCount = note.stemTicks;\r\n // if (tuplet) {\r\n // typeTickCount = tuplet.stemTicks;\r\n // }\r\n nn(noteElement, 'type', { type: XmlHelpers.closestStemType(typeTickCount) },\r\n 'type');\r\n const dots = SmoMusic.smoTicksToVexDots(note.tickCount);\r\n for (j = 0; j < dots; ++j) {\r\n nn(noteElement, 'dot', null, '');\r\n }\r\n // time modification (tuplet) comes before notations which have tuplet beaming rules\r\n // also before stem\r\n if (tuplet) {\r\n SmoToXml.tupletTime(noteElement, note, measure, smoState);\r\n }\r\n if (note.flagState === SmoNote.flagStates.up) {\r\n nn(noteElement, 'stem', { direction: 'up' }, 'direction');\r\n }\r\n if (note.flagState === SmoNote.flagStates.down) {\r\n nn(noteElement, 'stem', { direction: 'down' }, 'direction');\r\n }\r\n // stupid musicxml requires beam to be last.\r\n const notationsElement = noteElement.ownerDocument.createElement('notations');\r\n // If a multi-part staff, we need to include 'staff' element\r\n if (smoState.partStaves.length > 1) {\r\n nn(noteElement, 'staff', { staffIx: smoState.staffPartIx + 1 }, 'staffIx');\r\n }\r\n if (!isChord) {\r\n SmoToXml.beamNote(noteElement, smoState);\r\n }\r\n if (!isChord) {\r\n SmoToXml.slur(notationsElement, smoState);\r\n }\r\n SmoToXml.tied(notationsElement, smoState);\r\n if (tuplet) {\r\n SmoToXml.tupletNotation(notationsElement, note, measure, smoState);\r\n }\r\n const ornaments = note.getOrnaments();\r\n if (ornaments.length) {\r\n const ornamentsElement = noteElement.ownerDocument.createElement('ornaments');\r\n ornamentsElement.textContent = '\\n';\r\n ornaments.forEach((ornament) => {\r\n if (SmoOrnament.xmlOrnaments[ornament.ornament]) {\r\n const sub = nn(ornamentsElement, SmoOrnament.xmlOrnaments[ornament.ornament], null, '');\r\n XmlHelpers.createAttribute(sub, 'placement', 'above');\r\n }\r\n });\r\n if (ornamentsElement.children.length) {\r\n notationsElement.appendChild(ornamentsElement);\r\n }\r\n }\r\n const jazzOrnaments = note.getJazzOrnaments();\r\n const articulations = note.articulations;\r\n if (jazzOrnaments.length || articulations.length) {\r\n const articulationsElement = noteElement.ownerDocument.createElement('articulations');\r\n jazzOrnaments.forEach((ornament) => {\r\n if (SmoOrnament.xmlJazz[ornament.ornament]) {\r\n nn(articulationsElement, SmoOrnament.xmlJazz[ornament.ornament], null, '');\r\n }\r\n });\r\n articulations.forEach((articulation) => {\r\n if (SmoArticulation.xmlArticulations[articulation.articulation]) {\r\n nn(articulationsElement, SmoArticulation.xmlArticulations[articulation.articulation], null, '');\r\n }\r\n });\r\n if (articulationsElement.children.length) {\r\n notationsElement.append(articulationsElement);\r\n }\r\n }\r\n if (notationsElement.children.length) {\r\n noteElement.appendChild(notationsElement);\r\n }\r\n // stupid musicxml requires beam to be laster.\r\n if (!isChord) {\r\n SmoToXml.lyric(noteElement, smoState);\r\n }\r\n }\r\n smoState.voiceTickIndex += 1;\r\n }\r\n /**\r\n * /score-partwise/measure/attributes/key\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static key(attributesElement: Element, measure: SmoMeasure, smoState: SmoState) {\r\n let fifths = 0;\r\n if (smoState.keySignature && measure.keySignature === smoState.keySignature) {\r\n return; // no key change\r\n }\r\n const flats = SmoMusic.getFlatsInKeySignature(measure.keySignature);\r\n const nn = XmlHelpers.createTextElementChild;\r\n if (flats > 0) {\r\n fifths = -1 * flats;\r\n } else {\r\n fifths = SmoMusic.getSharpsInKeySignature(measure.keySignature);\r\n }\r\n const keyElement = nn(attributesElement, 'key', null, '');\r\n nn(keyElement, 'fifths', { fifths }, 'fifths');\r\n nn(keyElement, 'mode', { mode: 'major' }, 'major');\r\n smoState.keySignature = measure.keySignature;\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/time\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static time(attributesElement: Element, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n const currentTs = (smoState.timeSignature as TimeSignature) ?? null;\r\n if (currentTs !== null && TimeSignature.equal(currentTs, measure.timeSignature)) {\r\n return;\r\n }\r\n smoState.timeSignature = measure.timeSignature;\r\n const time = { beats: measure.timeSignature.actualBeats, beatType: measure.timeSignature.beatDuration };\r\n const timeElement = nn(attributesElement, 'time', null, '');\r\n nn(timeElement, 'beats', time, 'beats');\r\n nn(timeElement, 'beat-type', time, 'beatType');\r\n smoState.timeSignature = measure.timeSignature;\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/clef\r\n * @param attributesElement \r\n * @param smoState \r\n * @returns \r\n */\r\n static clef(attributesElement: Element, smoState: SmoState) { \r\n smoState.partStaves.forEach((staff, staffIx) => {\r\n const measure = staff.measures[smoState.measureIndex];\r\n let prevMeasure: SmoMeasure | null = null;\r\n let clefChange: Clef | null = null;\r\n if (smoState.measureIndex > 0) {\r\n prevMeasure = staff.measures[smoState.measureIndex - 1];\r\n }\r\n if (prevMeasure && prevMeasure.clef !== measure.clef) {\r\n clefChange = measure.clef;\r\n }\r\n // both clefs are defined in the first measure one time.\r\n if (smoState.measureIndex === 0 && smoState.staffPartIx === 0) {\r\n clefChange = measure.clef;\r\n }\r\n if (clefChange) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const xmlClef = SmoMusic.clefSigns[clefChange];\r\n const clefElement = nn(attributesElement, 'clef', null, '');\r\n nn(clefElement, 'sign', xmlClef.sign, 'sign');\r\n if (typeof(xmlClef.line) !== 'undefined') {\r\n nn(clefElement, 'line', xmlClef, 'line');\r\n }\r\n if (typeof(xmlClef.octave) !== 'undefined') {\r\n nn(clefElement, 'clef-octave-change', xmlClef, 'octave');\r\n }\r\n XmlHelpers.createAttribute(clefElement, 'number', (staffIx + 1).toString());\r\n }\r\n });\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes\r\n * @param measureElement \r\n * @param smoState \r\n */\r\n static attributes(measureElement: Element, measure: SmoMeasure, smoState: SmoState) {\r\n const nn = XmlHelpers.createTextElementChild;\r\n const attributesElement = measureElement.ownerDocument.createElement('attributes');\r\n if (smoState.divisions < 1) {\r\n nn(attributesElement, 'divisions', { divisions: 4096 }, 'divisions');\r\n smoState.divisions = 4096;\r\n }\r\n SmoToXml.key(attributesElement, measure, smoState);\r\n SmoToXml.time(attributesElement, smoState);\r\n // only call out number of staves in a part at the beginning of the part\r\n if (smoState.measureIndex === 0 && smoState.staffPartIx === 0) {\r\n SmoToXml.staves(attributesElement, smoState);\r\n }\r\n SmoToXml.clef(attributesElement, smoState);\r\n SmoToXml.transpose(attributesElement, smoState);\r\n if (attributesElement.children.length > 0) {\r\n // don't add an empty attributes element\r\n measureElement.appendChild(attributesElement);\r\n }\r\n }\r\n static staves(attributesElement: Element, smoState: SmoState) {\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const staffCount = staff.partInfo.stavesAfter > 0 ? 2 : 1;\r\n const nn = XmlHelpers.createTextElementChild;\r\n nn(attributesElement, 'staves', { staffCount: staffCount.toString() }, 'staffCount');\r\n }\r\n /**\r\n * /score-partwise/part/measure/attributes/transpose\r\n * @param attributesElement\r\n * @param smoState \r\n * @returns \r\n */\r\n static transpose(attributesElement: Element, smoState: SmoState) {\r\n const staff = smoState.partStaves[smoState.staffPartIx];\r\n const measure = staff.measures[smoState.measureIndex];\r\n if (measure.transposeIndex !== smoState.transposeOffset) {\r\n smoState.transposeOffset = measure.transposeIndex;\r\n const nn = XmlHelpers.createTextElementChild;\r\n const xposeElement = nn(attributesElement, 'transpose', null, '');\r\n const offset = (measure.transposeIndex * -1).toString();;\r\n nn(xposeElement, 'chromatic', { offset: offset }, 'offset');\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoArticulation, SmoNoteModifierBase, SmoOrnament } from '../data/noteModifiers';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { Pitch, PitchLetter, createXmlAttributes, createXmlAttribute } from '../data/common';\r\nimport { SmoSelector } from '../xform/selections';\r\nimport { SmoBarline } from '../data/measureModifiers';\r\nimport { XmlTupletData } from './xmlState';\r\n\r\nexport interface XmlOrnamentData {\r\n ctor: string,\r\n params: Record\r\n}\r\nexport interface XmlSmoMap {\r\n xml: string, smo: string\r\n}\r\nexport interface XmlDurationAlteration {\r\n noteCount: number, noteDuration: number\r\n}\r\nexport interface XmlDuration {\r\n tickCount: number, duration: number, alteration: XmlDurationAlteration\r\n}\r\n/**\r\n * Store slur information when parsing xml\r\n */\r\nexport interface XmlSlurType {\r\n number: number, type: string, orientation: string, placement: string, controlX: number, controlY: number, selector: SmoSelector, yOffset: number\r\n}\r\n/**\r\n * Store tie information when parsing xml\r\n */\r\nexport interface XmlTieType {\r\n number: number, type: string, orientation: string, selector: SmoSelector, pitchIndex: number\r\n}\r\n/**\r\n * Store tuplet information when parsing xml\r\n */\r\nexport interface XmlTupletType {\r\n number: number,\r\n type: string,\r\n data: XmlTupletData | null,\r\n}\r\n\r\nexport interface XmlTimeModificationType {\r\n actualNotes: number,\r\n normalNotes: number,\r\n normalType: number,\r\n //normalDot, todo: check if just bool or list of dots (probably list of dots)\r\n}\r\n\r\nexport interface XmlEndingData {\r\n numbers: number[], type: string\r\n}\r\nexport type LyricSyllabic = 'begin' | 'end' | 'middle' | 'single';\r\n/**\r\n * Store lyric information when parsing xml\r\n */\r\nexport interface XmlLyricData {\r\n _text: string, verse: number | string, syllabic: LyricSyllabic\r\n}\r\n/**\r\n * Utilities for parsing and serialzing musicXML.\r\n * @category SmoToXml\r\n * */\r\nexport class XmlHelpers {\r\n /**\r\n * mxml note 'types', really s/b stem types.\r\n * For grace notes, we use the note type and not duration\r\n * to get the flag\r\n */\r\n static get noteTypesToSmoMap(): Record {\r\n return {\r\n 'breve': 8192 * 4,\r\n 'whole': 8192 * 2,\r\n 'half': 8192,\r\n 'quarter': 4096,\r\n 'eighth': 2048,\r\n '16th': 1024,\r\n '32nd': 512,\r\n '64th': 256,\r\n '128th': 128\r\n };\r\n }\r\n static readonly _ticksToNoteTypeMap: Record = smoSerialize.reverseMap(XmlHelpers.noteTypesToSmoMap) as Record;\r\n\r\n static get ticksToNoteTypeMap(): Record {\r\n return XmlHelpers._ticksToNoteTypeMap;\r\n }\r\n // ### closestStemType\r\n // smo infers the stem type from the duration, but other applications don't\r\n static closestStemType(ticks: number) {\r\n const nticks = SmoMusic.closestDurationTickLtEq(ticks);\r\n return XmlHelpers.ticksToNoteTypeMap[nticks];\r\n }\r\n static get beamStates(): Record {\r\n return {\r\n BEGIN: 1,\r\n END: 2,\r\n AUTO: 3\r\n };\r\n }\r\n static get ornamentXmlToSmoMap(): Record {\r\n return {\r\n staccato: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.staccato } },\r\n tenuto: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.tenuto } },\r\n marcato: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.marcato } },\r\n accent: { ctor: 'SmoArticulation', params: { articulation: SmoArticulation.articulations.accent } },\r\n doit: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.doitLong } },\r\n falloff: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.fall } },\r\n scoop: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.scoop } },\r\n 'delayed-turn': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turn, offset: SmoOrnament.offsets.after } },\r\n turn: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turn, offset: SmoOrnament.offsets.on } },\r\n 'inverted-turn': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.turnInverted } },\r\n mordent: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordent } },\r\n 'inverted-mordent': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordentInverted } },\r\n shake: { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.mordentInverted } },\r\n 'trill-mark': { ctor: 'SmoOrnament', params: { ornament: SmoOrnament.ornaments.trill } },\r\n };\r\n }\r\n // ### createRootElement\r\n // Create score-partwise document with prelude\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=318086\r\n static createRootElement() {\r\n const doc = document.implementation.createDocument('', '', null);\r\n const rootElem = doc.createElement('score-partwise');\r\n const piElement = doc.createProcessingInstruction('xml', 'version=\"1.0\" encoding=\"UTF-8\"');\r\n rootElem.setAttribute('version', '3.1');\r\n doc.appendChild(rootElem);\r\n doc.insertBefore(piElement, rootElem);\r\n return doc;\r\n }\r\n // Parse an element whose child has a number in the textContent\r\n static getNumberFromElement(parent: Element, path: string, defaults: number): number {\r\n let rv = (typeof (defaults) === 'undefined' || defaults === null)\r\n ? 0 : defaults;\r\n const tval = XmlHelpers.getTextFromElement(parent, path, defaults);\r\n if (!tval) {\r\n return rv;\r\n }\r\n if (typeof (tval) === 'number') {\r\n return tval;\r\n }\r\n if (tval.indexOf('.')) {\r\n const tf = parseFloat(tval);\r\n rv = isNaN(tf) ? rv : tf;\r\n } else {\r\n const ff = parseInt(tval, 10);\r\n rv = isNaN(ff) ? rv : ff;\r\n }\r\n return rv;\r\n }\r\n // Parse an element whose child has a textContent\r\n static getTextFromElement(parent: Element, path: string, defaults: number | string | null): string {\r\n const rv = (typeof (defaults) === 'undefined' || defaults === null)\r\n ? 0 : defaults;\r\n const el = [...parent.getElementsByTagName(path)];\r\n if (!el.length) {\r\n return rv.toString();\r\n }\r\n return el[0].textContent as string;\r\n }\r\n static getNumberFromAttribute(node: Element, attribute: string, defaults: number) {\r\n const str = XmlHelpers.getTextFromAttribute(node, attribute, defaults.toString());\r\n const rv = parseInt(str, 10);\r\n if (isNaN(rv)) {\r\n return defaults;\r\n }\r\n return rv;\r\n }\r\n static getTextFromAttribute(node: Element, attribute: string, defaults: string): string {\r\n const rv = node.getAttribute(attribute);\r\n if (rv) {\r\n return rv;\r\n }\r\n return defaults;\r\n }\r\n // ### getChildrenFromPath\r\n // Like xpath, given ['foo', 'bar'] and parent element\r\n // 'moo' return any element /moo/foo/bar as an array of elements\r\n static getChildrenFromPath(parent: Element, pathAr: string[]): Element[] {\r\n let i = 0;\r\n let node = parent;\r\n const rv: Element[] = [];\r\n for (i = 0; i < pathAr.length; ++i) {\r\n const tag = pathAr[i];\r\n const nodes: Element[] = [...node.getElementsByTagName(tag)];\r\n if (nodes.length === 0) {\r\n return [];\r\n }\r\n if (i < pathAr.length - 1) {\r\n node = nodes[0];\r\n } else {\r\n nodes.forEach((nn: Element) => {\r\n rv.push(nn);\r\n });\r\n }\r\n }\r\n return rv;\r\n }\r\n static getStemType(noteElement: Element) {\r\n const tt = XmlHelpers.getTextFromElement(noteElement, 'stem', '');\r\n if (tt === 'up') {\r\n return SmoNote.flagStates.up;\r\n } else if (tt === 'down') {\r\n return SmoNote.flagStates.down;\r\n }\r\n return SmoNote.flagStates.auto;\r\n }\r\n static getEnding(barlineNode: Element): XmlEndingData | null {\r\n const endingNodes = [...barlineNode.getElementsByTagName('ending')];\r\n if (!endingNodes.length) {\r\n return null;\r\n }\r\n const attrs = XmlHelpers.nodeAttributes(endingNodes[0]);\r\n if (attrs.number && attrs.type) {\r\n return {\r\n numbers: attrs.number.split(',').map((x) => parseInt(x, 10)),\r\n type: attrs.type\r\n };\r\n }\r\n return null;\r\n }\r\n static getBarline(barlineNode: Element): number {\r\n const rptNode = [...barlineNode.getElementsByTagName('repeat')];\r\n if (rptNode.length) {\r\n const repeatattr = XmlHelpers.nodeAttributes(rptNode[0]);\r\n return repeatattr.direction === 'forward' ? SmoBarline.barlines.startRepeat : SmoBarline.barlines.endRepeat;\r\n }\r\n const styleText = XmlHelpers.getTextFromElement(barlineNode, 'bar-style', '');\r\n if (styleText.length) {\r\n const double = styleText.indexOf('-') >= 0;\r\n const heavy = styleText.indexOf('heavy') >= 0;\r\n const light = styleText.indexOf('light') >= 0;\r\n if (double && heavy && light) {\r\n return SmoBarline.barlines.endBar;\r\n }\r\n if (double) {\r\n return SmoBarline.barlines.doubleBar;\r\n }\r\n }\r\n return SmoBarline.barlines.singleBar;\r\n }\r\n \r\n // ### assignDefaults\r\n // Map SMO layout data from xml layout data (default node)\r\n static assignDefaults(node: Element, defObj: any, parameters: XmlSmoMap[]) {\r\n parameters.forEach((param) => {\r\n if (!isNaN(parseInt(defObj[param.smo], 10))) {\r\n const smoParam = param.smo;\r\n const xmlParam = param.xml;\r\n defObj[smoParam] = XmlHelpers.getNumberFromElement(node, xmlParam, defObj[smoParam]);\r\n }\r\n });\r\n }\r\n // ### nodeAttributes\r\n // turn the attributes of an element into a JS hash\r\n static nodeAttributes(node: Element): Record {\r\n const rv: Record = {};\r\n node.getAttributeNames().forEach((attr) => {\r\n const aval: string | null = node.getAttribute(attr);\r\n if (aval) {\r\n rv[attr] = aval;\r\n }\r\n });\r\n return rv;\r\n }\r\n // Some measures have staff ID, some don't.\r\n // convert xml 1 index to array 0 index\r\n static getStaffId(node: Element) {\r\n const staff = [...node.getElementsByTagName('staff')];\r\n if (staff.length && staff[0].textContent) {\r\n return parseInt(staff[0].textContent, 10) - 1;\r\n }\r\n return 0;\r\n }\r\n static noteBeamState(noteNode: Element) {\r\n const beamNodes = [...noteNode.getElementsByTagName('beam')];\r\n if (!beamNodes.length) {\r\n return XmlHelpers.beamStates.AUTO;\r\n }\r\n const beamText = beamNodes[0].textContent;\r\n if (beamText === 'begin') {\r\n return XmlHelpers.beamStates.BEGIN;\r\n } else if (beamText === 'end') {\r\n return XmlHelpers.beamStates.END;\r\n }\r\n return XmlHelpers.beamStates.AUTO;\r\n }\r\n // same with notes and voices. same convert\r\n static getVoiceId(node: Element) {\r\n const voice = [...node.getElementsByTagName('voice')];\r\n if (voice.length && voice[0].textContent) {\r\n return parseInt(voice[0].textContent, 10) - 1;\r\n }\r\n return 0;\r\n }\r\n static smoPitchFromNote(noteNode: Element, defaultPitch: Pitch): Pitch {\r\n const accidentals = ['bb', 'b', 'n', '#', '##'];\r\n const letter: PitchLetter = XmlHelpers.getTextFromElement(noteNode, 'step', defaultPitch.letter).toLowerCase() as PitchLetter;\r\n const octave = XmlHelpers.getNumberFromElement(noteNode, 'octave', defaultPitch.octave);\r\n const xaccidental = XmlHelpers.getNumberFromElement(noteNode, 'alter', 0);\r\n return { letter, accidental: accidentals[xaccidental + 2], octave };\r\n }\r\n static isGrace(noteNode: Element) {\r\n const path = XmlHelpers.getChildrenFromPath(noteNode, ['grace']);\r\n return path?.length > 0;\r\n }\r\n static isSystemBreak(measureNode: Element) {\r\n const printNodes = measureNode.getElementsByTagName('print');\r\n if (printNodes.length) {\r\n const attrs = XmlHelpers.nodeAttributes(printNodes[0]);\r\n if (typeof (attrs['new-system']) !== 'undefined') {\r\n return attrs['new-system'] === 'yes';\r\n }\r\n }\r\n return false;\r\n }\r\n // ### durationFromType\r\n // Get the SMO tick duration of a note, based on the XML type element (quarter, etc)\r\n static durationFromType(noteNode: Element, def: number): number {\r\n const typeNodes = [...noteNode.getElementsByTagName('type')];\r\n if (typeNodes.length) {\r\n const txt = typeNodes[0].textContent;\r\n if (txt && XmlHelpers.noteTypesToSmoMap[txt]) {\r\n return XmlHelpers.noteTypesToSmoMap[txt];\r\n }\r\n }\r\n return def;\r\n }\r\n // ### durationFromNode\r\n // the true duration value, used to handle forward/backward\r\n static durationFromNode(noteNode: Element, def: number) {\r\n const durationNodes = [...noteNode.getElementsByTagName('duration')];\r\n if (durationNodes.length && durationNodes[0].textContent) {\r\n const duration = parseInt(durationNodes[0].textContent, 10);\r\n return duration;\r\n }\r\n return def;\r\n }\r\n static ticksFromDuration(noteNode: Element, divisions: number, def: number): XmlDuration {\r\n const rv: XmlDuration = { tickCount: def, duration: def / divisions, alteration: { noteCount: 1, noteDuration: 1 } };\r\n const durationNodes = [...noteNode.getElementsByTagName('duration')];\r\n const timeAlteration = XmlHelpers.getTimeAlteration(noteNode);\r\n // different ways to declare note duration - from type is the graphical\r\n // type, SMO uses ticks for everything\r\n if (durationNodes.length && durationNodes[0].textContent) {\r\n rv.duration = parseInt(durationNodes[0].textContent, 10);\r\n rv.tickCount = 4096 * (rv.duration / divisions);\r\n } else {\r\n rv.tickCount = XmlHelpers.durationFromType(noteNode, def);\r\n rv.duration = (divisions / 4096) * rv.tickCount;\r\n }\r\n //todo nenad: seems like this is not needed since we keep stemTicks directly on the note object now\r\n // If this is a tuplet, we adjust the note duration back to the graphical type\r\n // and SMO will create the tuplet after. We keep track of tuplet data though for beaming\r\n // if (timeAlteration) {\r\n // rv.tickCount = (rv.tickCount * timeAlteration.noteCount) / timeAlteration.noteDuration;\r\n // rv.alteration = timeAlteration;\r\n // }\r\n return rv;\r\n }\r\n \r\n static getTieData(noteNode: Element, selector: SmoSelector, pitchIndex: number): XmlTieType[] {\r\n const rv: XmlTieType[] = [];\r\n let number = 0;\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n const slurNodes = [...nNode.getElementsByTagName('tied')];\r\n slurNodes.forEach((slurNode) => {\r\n const orientation = XmlHelpers.getTextFromAttribute(slurNode, 'orientation', 'auto');\r\n const type = slurNode.getAttribute('type') as string;\r\n number = XmlHelpers.getNumberFromAttribute(slurNode, 'number', 1);\r\n rv.push({ number, type, orientation, selector, pitchIndex });\r\n });\r\n });\r\n return rv;\r\n }\r\n static getSlurData(noteNode: Element, selector: SmoSelector): XmlSlurType[] {\r\n const rv: XmlSlurType[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n const slurNodes = [...nNode.getElementsByTagName('slur')];\r\n slurNodes.forEach((slurNode) => {\r\n const number = parseInt(slurNode.getAttribute('number') as string, 10);\r\n const type = slurNode.getAttribute('type') as string;\r\n const orientation = XmlHelpers.getTextFromAttribute(slurNode, 'orienation', 'auto');\r\n const placement = XmlHelpers.getTextFromAttribute(slurNode, 'placement', 'auto');\r\n const controlX = XmlHelpers.getNumberFromAttribute(slurNode, 'bezier-x', 0);\r\n // Y coordinates are reversed from music XML to SVG, hence the -1\r\n const controlY = XmlHelpers.getNumberFromAttribute(slurNode, 'bezier-y', 15) * -1;\r\n const slurInfo = { number, type, orientation, placement, controlX, controlY, selector, invert: false, yOffset: 0 };\r\n rv.push(slurInfo);\r\n });\r\n });\r\n return rv;\r\n }\r\n static getCrescendoData(directionElement: Element) {\r\n let rv = {};\r\n const nNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'wedge']);\r\n nNodes.forEach((nNode) => {\r\n rv = { type: nNode.getAttribute('type') };\r\n });\r\n return rv;\r\n }\r\n\r\n static getTimeModificationType(noteNode: Element): XmlTimeModificationType | null {\r\n const timeModificationNode = noteNode.querySelector('time-modification');\r\n let xmlTimeModification: XmlTimeModificationType | null = null;\r\n if (timeModificationNode) {\r\n const actualNotesNode = timeModificationNode.querySelector('actual-notes');\r\n const normalNotesNode = timeModificationNode.querySelector('normal-notes');\r\n const normalTypeNode = timeModificationNode.querySelector('normal-type');\r\n const noteTypeNode = noteNode.querySelector('type');\r\n let normalType: number | null = null;\r\n if (normalTypeNode) {\r\n normalType = normalTypeNode.textContent ? XmlHelpers.noteTypesToSmoMap[normalTypeNode.textContent] ?? null : null;\r\n } else if (noteTypeNode) {\r\n normalType = noteTypeNode.textContent ? XmlHelpers.noteTypesToSmoMap[noteTypeNode.textContent] ?? null : null;\r\n }\r\n if (actualNotesNode?.textContent && normalNotesNode?.textContent && normalType) {\r\n const actualNotes = parseInt(actualNotesNode.textContent, 10);\r\n const normalNotes = parseInt(normalNotesNode.textContent, 10);\r\n xmlTimeModification = {\r\n actualNotes: actualNotes,\r\n normalNotes: normalNotes,\r\n normalType: normalType\r\n };\r\n }\r\n }\r\n return xmlTimeModification;\r\n }\r\n\r\n static getTupletData(noteNode: Element): XmlTupletType[] {\r\n const rv: XmlTupletType[] = [];\r\n const timeModification = XmlHelpers.getTimeModificationType(noteNode);\r\n const notationNode = noteNode.querySelector('notations');\r\n if (notationNode) {\r\n const tupletNodes = [...notationNode.getElementsByTagName('tuplet')];\r\n tupletNodes.forEach((tupletNode) => {\r\n const number = parseInt(tupletNode.getAttribute('number') as string, 10) as number;\r\n const type = tupletNode.getAttribute('type') as string;\r\n const xmlTupletType: XmlTupletType = {\r\n number: number,\r\n type: type,\r\n data: null\r\n };\r\n if (type === 'start') {\r\n let tupletActual = null;\r\n let tupletNormal = null;\r\n const tupletActualNode = tupletNode.querySelector('tuplet-actual');\r\n if (tupletActualNode) {\r\n const tupletNumberNode = tupletActualNode.querySelector('tuplet-number');\r\n const tupletTypeNode = tupletActualNode.querySelector('tuplet-type');\r\n const tupletTypeContent = tupletTypeNode?.textContent;\r\n const tupletType = tupletTypeContent ? XmlHelpers.noteTypesToSmoMap[tupletTypeContent] ?? null : null;\r\n if (tupletNumberNode?.textContent && tupletType) {\r\n const tupletNumber = parseInt(tupletNumberNode.textContent, 10);\r\n tupletActual = {tupletNumber: tupletNumber, tupletType: tupletType};\r\n }\r\n }\r\n const tupletNormalNode = tupletNode.querySelector('tuplet-normal');\r\n if (tupletNormalNode) {\r\n const tupletNumberNode = tupletNormalNode.querySelector('tuplet-number');\r\n const tupletTypeNode = tupletNormalNode.querySelector('tuplet-type');\r\n const tupletTypeContent = tupletTypeNode?.textContent;\r\n const tupletType = tupletTypeContent ? XmlHelpers.noteTypesToSmoMap[tupletTypeContent] ?? null : null;\r\n if (tupletNumberNode?.textContent && tupletType) {\r\n const tupletNumber = parseInt(tupletNumberNode.textContent, 10);\r\n tupletNormal = {tupletNumber: tupletNumber, tupletType: tupletType};\r\n }\r\n }\r\n if (tupletActual && tupletNormal) {\r\n const xmlTupletData: XmlTupletData = {\r\n stemTicks: tupletActual.tupletType,\r\n numNotes: tupletActual.tupletNumber,\r\n notesOccupied: (tupletActual.tupletType / tupletNormal.tupletType) * tupletNormal.tupletNumber\r\n };\r\n xmlTupletType.data = xmlTupletData;\r\n } else if (timeModification) {\r\n const xmlTupletData: XmlTupletData = {\r\n stemTicks: timeModification.normalType,\r\n numNotes: timeModification.actualNotes,\r\n notesOccupied: timeModification.normalNotes\r\n };\r\n xmlTupletType.data = xmlTupletData;\r\n }\r\n }\r\n rv.push(xmlTupletType);\r\n });\r\n }\r\n\r\n return rv;\r\n }\r\n\r\n static articulationsAndOrnaments(noteNode: Element): SmoNoteModifierBase[] {\r\n const rv: SmoNoteModifierBase[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('notations')];\r\n nNodes.forEach((nNode) => {\r\n ['articulations', 'ornaments'].forEach((typ) => {\r\n const articulations = [...nNode.getElementsByTagName(typ)];\r\n articulations.forEach((articulation) => {\r\n Object.keys(XmlHelpers.ornamentXmlToSmoMap).forEach((key) => {\r\n if (articulation.getElementsByTagName(key).length) {\r\n const ctor = eval('globalThis.Smo.' + XmlHelpers.ornamentXmlToSmoMap[key].ctor);\r\n rv.push(new ctor(XmlHelpers.ornamentXmlToSmoMap[key].params));\r\n }\r\n });\r\n });\r\n });\r\n });\r\n return rv;\r\n }\r\n static lyrics(noteNode: Element): XmlLyricData[] {\r\n const rv: XmlLyricData[] = [];\r\n const nNodes = [...noteNode.getElementsByTagName('lyric')];\r\n nNodes.forEach((nNode) => {\r\n let verse = nNode.getAttribute('number');\r\n const text = XmlHelpers.getTextFromElement(nNode, 'text', '_');\r\n const name = nNode.getAttribute('name') as string;\r\n const syllabic = XmlHelpers.getTextFromElement(nNode, 'syllabic', 'end') as LyricSyllabic;\r\n // Per xml spec, verse can be specified by a string (name), as in 'chorus'\r\n if (!verse) {\r\n verse = name;\r\n }\r\n const obj: XmlLyricData = { _text: text, verse, syllabic };\r\n rv.push(obj);\r\n });\r\n return rv;\r\n }\r\n\r\n static getTimeAlteration(noteNode: Element): XmlDurationAlteration | null {\r\n const timeNodes = XmlHelpers.getChildrenFromPath(noteNode, ['time-modification']);\r\n if (timeNodes.length) {\r\n return {\r\n noteCount: XmlHelpers.getNumberFromElement(timeNodes[0], 'actual-notes', 1),\r\n noteDuration: XmlHelpers.getNumberFromElement(timeNodes[0], 'normal-notes', 1)\r\n };\r\n }\r\n return null;\r\n }\r\n // ### createTextElementChild\r\n // In: ../parent\r\n // Out: ../parent/elementName/obj[field]\r\n // returns elementName element. If obj is null, just creates and returns child\r\n // if obj is a string, it uses it as the text value\r\n static createTextElementChild(parentElement: Element, elementName: string, obj: any, field: string): Element {\r\n const el = parentElement.ownerDocument.createElement(elementName);\r\n if (obj) {\r\n if (typeof (obj) === 'string') {\r\n el.textContent = obj;\r\n } else {\r\n el.textContent = obj[field];\r\n }\r\n }\r\n parentElement.appendChild(el);\r\n return el;\r\n }\r\n static createAttributes(element: Element, obj: any) {\r\n createXmlAttributes(element, obj);\r\n }\r\n static createAttribute(element: Element, name: string, value: any) {\r\n createXmlAttribute(element, name, value);\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport {XmlDurationAlteration, XmlHelpers, XmlLyricData, XmlSlurType, XmlTieType, XmlTupletType} from './xmlHelpers';\r\nimport {SmoScore} from '../data/score';\r\nimport {SmoFormattingManager, SmoSystemGroup} from '../data/scoreModifiers';\r\nimport {SmoSystemStaff} from '../data/systemStaff';\r\nimport {\r\n SmoInstrument,\r\n SmoInstrumentParams,\r\n SmoSlur,\r\n SmoSlurParams,\r\n SmoStaffHairpin,\r\n SmoTie,\r\n TieLine\r\n} from '../data/staffModifiers';\r\nimport {SmoBarline, SmoMeasureModifierBase, SmoRehearsalMark, SmoTempoText} from '../data/measureModifiers';\r\nimport {SmoPartInfo} from '../data/partInfo';\r\nimport {SmoMeasure} from '../data/measure';\r\nimport {SmoNote} from '../data/note';\r\nimport {SmoDynamicText, SmoGraceNote, SmoLyric} from '../data/noteModifiers';\r\nimport {SmoTuplet, SmoTupletTree} from '../data/tuplet';\r\nimport {Clef} from '../data/common';\r\nimport {SmoMusic} from '../data/music';\r\nimport {SmoSelection, SmoSelector} from '../xform/selections';\r\n\r\nexport interface XmlClefInfo {\r\n clef: string, staffId: number\r\n}\r\nexport interface XmlVoiceInfo {\r\n notes: SmoNote[],\r\n ticksUsed: number\r\n}\r\nexport interface XmlStaffInfo {\r\n clefInfo: XmlClefInfo,\r\n measure: SmoMeasure | null,\r\n voices: Record\r\n}\r\nexport interface XmlBeamGroupInfo {\r\n ticks: number, notes: number\r\n}\r\nexport interface XmlSystemInfo {\r\n startSelector: SmoSelector, endSelector: SmoSelector, leftConnector: number\r\n}\r\nexport interface XmlStaffGroupInfo {\r\n start: number, length: number\r\n}\r\n/**\r\n * Wedge is a hairpin/cresc.\r\n */\r\nexport interface XmlWedgeInfo {\r\n type: string\r\n}\r\nexport interface XmlWedgeState {\r\n type: string, start: number\r\n}\r\nexport interface XmlHairpinInfo {\r\n type: string, start: number, end: number\r\n}\r\nexport interface XmlDynamicInfo {\r\n dynamic: string, offset: number\r\n}\r\nexport interface XmlCompletedTies {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n fromPitch: number,\r\n toPitch: number\r\n}\r\n\r\nexport interface XmlCompletedTuplet {\r\n tuplet: SmoTuplet,\r\n staffId: number,\r\n voiceId: number\r\n}\r\nexport class XmlTupletStateTreeNode {\r\n tupletState: XmlTupletState;\r\n children: XmlTupletStateTreeNode[];\r\n constructor(tupletState: XmlTupletState) {\r\n this.tupletState = tupletState;\r\n this.children = [];\r\n }\r\n}\r\n\r\nexport interface XmlCompletedTupletState {\r\n tupletState: XmlTupletState,\r\n staffId: number,\r\n voiceId: number\r\n}\r\nexport interface XmlTupletState {\r\n start: SmoSelector | null,\r\n end: SmoSelector | null,\r\n data: XmlTupletData | null,\r\n}\r\nexport interface XmlTupletData {\r\n numNotes: number,\r\n notesOccupied: number,\r\n stemTicks: number,\r\n}\r\n\r\nexport interface XmlEnding {\r\n start: number,\r\n end: number,\r\n number: number\r\n}\r\nexport interface XmlPartGroup {\r\n partNum: number,\r\n group: SmoSystemGroup,\r\n parts: number[]\r\n}\r\n/**\r\n * Keep state of musical objects while parsing music xml\r\n * @category SmoToXml\r\n * */\r\nexport class XmlState {\r\n static get defaults() {\r\n return {\r\n divisions: 4096, tempo: new SmoTempoText(SmoTempoText.defaults), timeSignature: '4/4', keySignature: 'c',\r\n clefInfo: [], staffGroups: [], smoStaves: []\r\n };\r\n }\r\n clefInfo: XmlClefInfo[] = [];\r\n systems: XmlSystemInfo[] = [];\r\n staffGroups: XmlStaffGroupInfo[] = [];\r\n smoStaves: SmoSystemStaff[] = [];\r\n slurs: Record = {};\r\n wedges: XmlWedgeState = {} as XmlWedgeState;\r\n hairpins: XmlHairpinInfo[] = [];\r\n instrument: SmoInstrumentParams = SmoInstrument.defaults;\r\n instrumentMap: Record = {};\r\n globalCursor = 0;\r\n staffVoiceHash: Record = {};\r\n endingMap: Record = {};\r\n startRepeatMap: Record = {};\r\n endRepeatMap: Record = {};\r\n startBarline: number = SmoBarline.barlines.singleBar;\r\n endBarline: number = SmoBarline.barlines.singleBar;\r\n measureIndex = -1;\r\n completedSlurs: SmoSlurParams[] = [];\r\n completedTies: XmlTieType[] = [];\r\n verseMap: Record = {};\r\n measureNumber: number = 0;\r\n formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n\r\n completedTupletStates: XmlCompletedTupletState[] = [];\r\n tupletStatesInProgress: Record = {};\r\n\r\n tickCursor: number = 0;\r\n tempo: SmoTempoText = new SmoTempoText(SmoTempoText.defaults);\r\n staffArray: XmlStaffInfo[] = [];\r\n staffIndex: number = 0;\r\n graceNotes: SmoGraceNote[] = [];\r\n currentDuration: number = 0;\r\n beamGroups: Record = {};\r\n dynamics: XmlDynamicInfo[] = [];\r\n previousNote: SmoNote = new SmoNote(SmoNote.defaults);\r\n completedTuplets: XmlCompletedTuplet[] = [];\r\n newTitle: boolean = false;\r\n divisions: number = 4096;\r\n keySignature: string = 'c';\r\n timeSignature: string = '4/4';\r\n voiceIndex: number = 0;\r\n pixelsPerTenth: number = 0.4;\r\n musicFontSize: number = 16;\r\n partId: string = '';\r\n rehearsalMark = '';\r\n rehearsalMarks: Record = {};\r\n parts: Record = {}; \r\n openPartGroup: XmlPartGroup | null = null;\r\n // Initialize things that persist throughout a staff\r\n // likc hairpins and slurs\r\n initializeForPart() {\r\n this.slurs = {};\r\n this.wedges = {} as XmlWedgeState;\r\n this.hairpins = [];\r\n this.globalCursor = 0;\r\n this.staffVoiceHash = {};\r\n this.measureIndex = -1;\r\n this.completedSlurs = [];\r\n this.verseMap = {};\r\n this.instrument.keyOffset = 0;\r\n this.instrumentMap = {};\r\n this.partId = '';\r\n this.clefInfo = [];\r\n this.formattingManager = new SmoFormattingManager(SmoFormattingManager.defaults);\r\n }\r\n // ### initializeForMeasure\r\n // reset state for a new measure: beam groups, tuplets\r\n // etc. that don't cross measure boundaries\r\n initializeForMeasure(measureElement: Element) {\r\n const oldMeasure = this.measureNumber;\r\n this.measureNumber =\r\n parseInt(measureElement.getAttribute('number') as string, 10) - 1;\r\n if (isNaN(this.measureNumber)) {\r\n this.measureNumber = oldMeasure + 1;\r\n }\r\n this.tupletStatesInProgress = {};\r\n this.tickCursor = 0;\r\n this.tempo = SmoMeasureModifierBase.deserialize(this.tempo.serialize());\r\n this.tempo.display = false;\r\n this.staffArray = [];\r\n this.graceNotes = [];\r\n this.currentDuration = 0;\r\n this.beamGroups = {};\r\n this.completedTuplets = [];\r\n this.dynamics = [];\r\n this.startBarline = SmoBarline.barlines.singleBar;\r\n this.endBarline = SmoBarline.barlines.singleBar;\r\n this.previousNote = new SmoNote(SmoNote.defaults);\r\n this.measureIndex += 1;\r\n this.rehearsalMark = '';\r\n }\r\n // ### initializeStaff\r\n // voices are not sequential, seem to have artitrary numbers and\r\n // persist per part, so we treat them as a hash.\r\n // staff IDs persist per part but are sequential.\r\n initializeStaff(staffIndex: number, voiceIndex: number) {\r\n // If no clef is specified, default to treble\r\n if (typeof (this.staffArray[staffIndex]) === 'undefined') {\r\n this.staffArray.push({ clefInfo: { clef: 'treble', staffId: this.staffIndex }, measure: null, voices: {} });\r\n }\r\n if (typeof (this.staffArray[staffIndex].voices[voiceIndex]) === 'undefined') {\r\n this.staffArray[staffIndex].voices[voiceIndex] = { notes: [], ticksUsed: 0 };\r\n // keep track of 0-indexed voice for slurs and other modifiers\r\n if (!this.staffVoiceHash[staffIndex]) {\r\n this.staffVoiceHash[staffIndex] = [];\r\n }\r\n if (this.staffVoiceHash[staffIndex].indexOf(voiceIndex) < 0) {\r\n this.staffVoiceHash[staffIndex].push(voiceIndex);\r\n }\r\n // The smo 0-indexed voice index, used in selectors\r\n this.beamGroups[voiceIndex] = null;\r\n }\r\n }\r\n // ### updateStaffGroups\r\n // once everything is parsed, figure out how to group the staves\r\n updateStaffGroups() {\r\n this.systems = [];\r\n this.staffGroups.forEach((staffGroup) => {\r\n const len = this.smoStaves[staffGroup.start].measures.length;\r\n const startSelector = SmoSelector.default;\r\n startSelector.staff = staffGroup.start;\r\n startSelector.measure = 0;\r\n const endSelector = SmoSelector.default;\r\n endSelector.staff = staffGroup.start + (staffGroup.length - 1);\r\n endSelector.measure = len;\r\n const grpParams = SmoSystemGroup.defaults;\r\n grpParams.startSelector = startSelector;\r\n grpParams.endSelector = endSelector;\r\n grpParams.leftConnector = SmoSystemGroup.connectorTypes.brace;\r\n this.systems.push(\r\n new SmoSystemGroup(grpParams)\r\n );\r\n });\r\n }\r\n addLyric(note: SmoNote, lyricData: XmlLyricData) {\r\n if (typeof (this.verseMap[lyricData.verse]) === 'undefined') {\r\n const keys = Object.keys(this.verseMap);\r\n this.verseMap[lyricData.verse] = keys.length;\r\n }\r\n lyricData.verse = this.verseMap[lyricData.verse];\r\n const params = SmoLyric.defaults;\r\n params.text = lyricData._text;\r\n params.verse = lyricData.verse;\r\n if (lyricData.syllabic === 'begin' || lyricData.syllabic === 'middle') {\r\n params.text += '-';\r\n }\r\n const lyric = new SmoLyric(params);\r\n note.addLyric(lyric);\r\n }\r\n /**\r\n * process a wedge aka hairpin dynamic\r\n * @param wedgeInfo \r\n */\r\n processWedge(wedgeInfo: XmlWedgeInfo) {\r\n if (wedgeInfo.type) {\r\n // If we already know about this wedge, it must have been\r\n // started, so complete it\r\n if (this.wedges.type) {\r\n this.hairpins.push({\r\n type: this.wedges.type,\r\n start: this.wedges.start,\r\n end: this.tickCursor + this.globalCursor\r\n });\r\n this.wedges = {} as XmlWedgeState;\r\n } else {\r\n this.wedges.type = wedgeInfo.type;\r\n this.wedges.start = this.tickCursor + this.globalCursor;\r\n }\r\n }\r\n }\r\n // ### backtrackHairpins\r\n // For the measure just parsed, find the correct tick for the\r\n // beginning and end of hairpins, if a hairpin stop directive\r\n // was received. These are not associated with a staff or voice, so\r\n // we use the first one in the measure element for both\r\n backtrackHairpins(smoStaff: SmoSystemStaff, staffId: number) {\r\n this.hairpins.forEach((hairpin) => {\r\n let hpMeasureIndex = this.measureIndex;\r\n let hpMeasure = smoStaff.measures[hpMeasureIndex];\r\n let startTick = hpMeasure.voices[0].notes.length - 1;\r\n let hpTickCount = this.globalCursor; // All ticks read so far\r\n const endSelector = {\r\n staff: staffId - 1, measure: hpMeasureIndex, voice: 0,\r\n tick: -1, pitches: []\r\n };\r\n while (hpMeasureIndex >= 0 && hpTickCount > hairpin.start) {\r\n if (endSelector.tick < 0 && hpTickCount <= hairpin.end) {\r\n endSelector.tick = startTick;\r\n }\r\n hpTickCount -= hpMeasure.voices[0].notes[startTick].ticks.numerator;\r\n if (hpTickCount > hairpin.start) {\r\n startTick -= 1;\r\n if (startTick < 0) {\r\n hpMeasureIndex -= 1;\r\n hpMeasure = smoStaff.measures[hpMeasureIndex];\r\n startTick = hpMeasure.voices[0].notes.length - 1;\r\n }\r\n }\r\n }\r\n\r\n const params = SmoStaffHairpin.defaults;\r\n params.startSelector = {\r\n staff: staffId - 1, measure: hpMeasureIndex, voice: 0, tick: startTick, pitches: []\r\n };\r\n params.endSelector = endSelector;\r\n params.hairpinType = hairpin.type === 'crescendo' ? SmoStaffHairpin.types.CRESCENDO : SmoStaffHairpin.types.DECRESCENDO;\r\n const smoHp = new SmoStaffHairpin(params);\r\n smoStaff.modifiers.push(smoHp);\r\n });\r\n this.hairpins = [];\r\n }\r\n\r\n // ### updateDynamics\r\n // Based on note just parsed, put the dynamics on the closest\r\n // note, based on the offset of dynamic\r\n updateDynamics() {\r\n const smoNote = this.previousNote;\r\n const tickCursor = this.tickCursor;\r\n const newArray: XmlDynamicInfo[] = [];\r\n this.dynamics.forEach((dynamic) => {\r\n if (tickCursor >= dynamic.offset) {\r\n const modParams = SmoDynamicText.defaults;\r\n modParams.text = dynamic.dynamic;\r\n // TODO: change the smonote name of this interface\r\n smoNote.addDynamic(new SmoDynamicText(modParams));\r\n } else {\r\n newArray.push(dynamic);\r\n }\r\n });\r\n this.dynamics = newArray;\r\n }\r\n // For the given voice, beam the notes according to the\r\n // note beam length\r\n backtrackBeamGroup(voice: XmlVoiceInfo, beamGroup: XmlBeamGroupInfo) {\r\n let i = 0;\r\n for (i = 0; i < beamGroup.notes; ++i) {\r\n const note = voice.notes[voice.notes.length - (i + 1)];\r\n if (!note) {\r\n console.warn('no note for beam group');\r\n return;\r\n }\r\n note.endBeam = i === 0;\r\n note.beamBeats = beamGroup.ticks;\r\n }\r\n }\r\n // ### updateBeamState\r\n // Keep track of beam instructions found while parsing note element\r\n // includes time alteration from tuplets\r\n updateBeamState(beamState: number, alteration: XmlDurationAlteration, voice: XmlVoiceInfo, voiceIndex: number) {\r\n const note = voice.notes[voice.notes.length - 1];\r\n if (beamState === XmlHelpers.beamStates.BEGIN) {\r\n this.beamGroups[voiceIndex] = {\r\n ticks: (note.tickCount * alteration.noteCount) / alteration.noteDuration,\r\n notes: 1\r\n };\r\n } else if (this.beamGroups[voiceIndex]) {\r\n (this.beamGroups[voiceIndex] as XmlBeamGroupInfo).ticks += note.tickCount;\r\n (this.beamGroups[voiceIndex] as XmlBeamGroupInfo).notes += 1;\r\n if (beamState === XmlHelpers.beamStates.END) {\r\n this.backtrackBeamGroup(voice, this.beamGroups[voiceIndex] as XmlBeamGroupInfo);\r\n this.beamGroups[voiceIndex] = null;\r\n }\r\n }\r\n }\r\n updateTieStates(tieInfos: XmlTieType[]) {\r\n tieInfos.forEach((tieInfo) => {\r\n // tieInfo = { number, type, orientation, selector, pitchIndex }\r\n if (tieInfo.type === 'start') {\r\n this.completedTies.push(tieInfo);\r\n }\r\n });\r\n }\r\n updateEndings(barlineNode: Element) {\r\n const findStartEnding = (endingNumber: number, ix: number): XmlEnding | null | undefined => {\r\n const endingIx = Object.keys(this.endingMap).map((xx) => parseInt(xx, 10));\r\n let gt = -1;\r\n let rv: XmlEnding | null = null;\r\n endingIx.forEach((ee) => {\r\n if (ee > gt && ee <= ix) {\r\n const endings = this.endingMap[ee];\r\n const txt = endings.find((xx: XmlEnding) => xx.number === endingNumber);\r\n if (txt) {\r\n gt = ee;\r\n rv = txt;\r\n }\r\n if (endings.findIndex((xx: XmlEnding) => xx.number === endingNumber) >= 0) {\r\n gt = ee;\r\n }\r\n }\r\n });\r\n if (gt >= 0) {\r\n return rv;\r\n } else {\r\n return null;\r\n }\r\n };\r\n const ending = XmlHelpers.getEnding(barlineNode);\r\n if (ending) {\r\n if (ending.type === 'start') {\r\n const numbers = ending.numbers;\r\n numbers.forEach((nn) => {\r\n const endings: XmlEnding[] | undefined = this.endingMap[this.measureIndex];\r\n if (!endings) {\r\n this.endingMap[this.measureIndex] = [];\r\n }\r\n const inst = this.endingMap[this.measureIndex].find((ee) => ee.number === nn);\r\n if (!inst) {\r\n this.endingMap[this.measureIndex].push({\r\n start: this.measureIndex,\r\n end: -1,\r\n number: nn\r\n });\r\n }\r\n });\r\n } else {\r\n ending.numbers.forEach((nn) => {\r\n const inst = findStartEnding(nn, this.measureIndex);\r\n if (!inst) {\r\n console.warn('bad ending ' + nn + ' at ' + this.measureIndex);\r\n } else {\r\n inst.end = this.measureIndex;\r\n }\r\n });\r\n }\r\n }\r\n const barline = XmlHelpers.getBarline(barlineNode);\r\n if (barline === SmoBarline.barlines.startRepeat) {\r\n this.startBarline = barline;\r\n } else {\r\n this.endBarline = barline;\r\n }\r\n }\r\n\r\n /**\r\n * While parsing a measure,\r\n * on a slur element, either complete a started\r\n * slur or start a new one.\r\n * @param slurInfos \r\n */\r\n updateSlurStates(slurInfos: XmlSlurType[]) {\r\n const clef: Clef = this.staffArray[this.staffIndex].clefInfo.clef as Clef;\r\n const note = this.previousNote;\r\n const getForcedSlurDirection = (smoParams: SmoSlurParams, xmlStart: XmlSlurType, xmlEnd: XmlSlurType | null) => {\r\n // If the slur direction is specified, otherwise use autor.\r\n if (xmlStart.placement === 'above' || xmlEnd?.placement === 'above') {\r\n smoParams.position_end = SmoSlur.positions.ABOVE;\r\n smoParams.position = SmoSlur.positions.ABOVE;\r\n if (xmlStart.orientation === 'over') {\r\n smoParams.orientation = SmoSlur.orientations.DOWN;\r\n } else if (xmlStart.orientation === 'under') {\r\n smoParams.orientation = SmoSlur.orientations.UP;\r\n }\r\n } else if (xmlStart.placement === 'below' || xmlEnd?.placement === 'below') {\r\n smoParams.position_end = SmoSlur.positions.BELOW;\r\n smoParams.position = SmoSlur.positions.BELOW;\r\n if (xmlStart.orientation === 'over') {\r\n smoParams.orientation = SmoSlur.orientations.DOWN;\r\n } else if (xmlStart.orientation === 'under') {\r\n smoParams.orientation = SmoSlur.orientations.UP;\r\n }\r\n }\r\n };\r\n slurInfos.forEach((slurInfo) => {\r\n // slurInfo = { number, type, selector }\r\n if (slurInfo.type === 'start') {\r\n const slurParams = SmoSlur.defaults;\r\n // if start and stop come out of order\r\n if (this.slurs[slurInfo.number] && (this.slurs[slurInfo.number] as XmlSlurType).type === 'stop') {\r\n slurParams.endSelector = JSON.parse(JSON.stringify((this.slurs[slurInfo.number] as XmlSlurType).selector));\r\n slurParams.startSelector = slurInfo.selector;\r\n slurParams.cp1x = slurInfo.controlX;\r\n slurParams.cp1y = slurInfo.controlY;\r\n const slurType = this.slurs[slurInfo.number];\r\n getForcedSlurDirection(slurParams, slurInfo, slurType);\r\n this.completedSlurs.push(slurParams);\r\n this.slurs[slurInfo.number] = null;\r\n } else {\r\n // We no longer try to pick the slur direction until the score is complete.\r\n this.slurs[slurInfo.number] = JSON.parse(JSON.stringify(slurInfo));\r\n }\r\n } else if (slurInfo.type === 'stop') {\r\n if (this.slurs[slurInfo.number] && (this.slurs[slurInfo.number] as XmlSlurType).type === 'start') {\r\n const slurData = this.slurs[slurInfo.number] as XmlSlurType;\r\n const slurParams = SmoSlur.defaults;\r\n slurParams.startSelector = JSON.parse(JSON.stringify((this.slurs[slurInfo.number] as XmlSlurType).selector));\r\n slurParams.endSelector = slurInfo.selector;\r\n slurParams.cp2x = slurInfo.controlX;\r\n slurParams.cp2y = slurInfo.controlY;\r\n slurParams.yOffset = slurData.yOffset;\r\n const slurType = this.slurs[slurInfo.number];\r\n getForcedSlurDirection(slurParams, slurInfo, slurType);\r\n // console.log('complete slur ' + slurInfo.number + JSON.stringify(slurParams, null, ' '));\r\n this.completedSlurs.push(slurParams);\r\n this.slurs[slurInfo.number] = null;\r\n } else {\r\n this.slurs[slurInfo.number] = JSON.parse(JSON.stringify(slurInfo));\r\n }\r\n }\r\n });\r\n }\r\n assignRehearsalMarks() {\r\n Object.keys(this.rehearsalMarks).forEach((rm) => {\r\n const measureIx = parseInt(rm, 10);\r\n this.smoStaves.forEach((staff) => {\r\n const mark = new SmoRehearsalMark(SmoRehearsalMark.defaults);\r\n staff.addRehearsalMark(measureIx, mark);\r\n });\r\n });\r\n }\r\n /**\r\n * After reading in a measure, update any completed slurs and make them\r\n * into SmoSlur and add them to the SmoSystemGroup objects.\r\n * staffIndexOffset is the offset from the xml staffId and the score staff Id\r\n * (i.e. the staves that have already been parsed in other parts)\r\n */\r\n completeSlurs() {\r\n this.completedSlurs.forEach((slur) => { \r\n const smoSlur = new SmoSlur(slur);\r\n this.smoStaves[slur.startSelector.staff].addStaffModifier(smoSlur);\r\n });\r\n }\r\n /**\r\n * Go through saved start ties, try to find the endpoint of the tie. Ties in music xml\r\n * are a little ambiguous, we assume we are tying to the same pitch\r\n * @param score \r\n */\r\n completeTies(score: SmoScore) {\r\n this.completedTies.forEach((tieInfo) => {\r\n const startSelection: SmoSelection | null = SmoSelection.noteFromSelector(score, tieInfo.selector);\r\n if (startSelection && startSelection.note) {\r\n const startNote = startSelection.note;\r\n const endSelection = SmoSelection.nextNoteSelectionFromSelector(score, startSelection.selector);\r\n const endNote = endSelection?.note;\r\n const pitches: TieLine[] = [];\r\n if (endSelection && endNote) {\r\n startNote.pitches.forEach((spitch, ix) => {\r\n endNote.pitches.forEach((epitch, jx) => {\r\n if (SmoMusic.smoPitchToInt(spitch) === SmoMusic.smoPitchToInt(epitch)) {\r\n pitches.push({ from: ix, to: jx });\r\n }\r\n });\r\n });\r\n }\r\n if (pitches.length && endSelection) {\r\n const params = SmoTie.defaults;\r\n params.startSelector = startSelection.selector;\r\n params.endSelector = endSelection.selector;\r\n params.lines = pitches;\r\n const smoTie = new SmoTie(params);\r\n score.staves[smoTie.startSelector.staff].addStaffModifier(smoTie);\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n // ### updateTupletStates\r\n // react to a tuplet start or stop directive\r\n // we need to handle start and stop directives that appear out of order\r\n updateTupletStates(tupletInfos: XmlTupletType[], voice: XmlVoiceInfo, staffIndex: number, voiceIndex: number) {\r\n // this.tickCursor;\r\n const tick = voice.notes.length - 1;\r\n tupletInfos.forEach((tupletInfo) => {\r\n let tupletState: XmlTupletState | undefined = this.tupletStatesInProgress[tupletInfo.number];\r\n if (tupletState == undefined) {\r\n tupletState = {\r\n start: null,\r\n end: null,\r\n data: null,\r\n };\r\n this.tupletStatesInProgress[tupletInfo.number] = tupletState;\r\n }\r\n if (tupletInfo.type === 'start') {\r\n tupletState.start = {\r\n staff: staffIndex, measure: this.measureNumber, voice: voiceIndex, tick, pitches: []\r\n };\r\n tupletState.data = tupletInfo.data;\r\n } else if (tupletInfo.type === 'stop') {\r\n tupletState.end = {\r\n staff: staffIndex, measure: this.measureNumber, voice: voiceIndex, tick, pitches: []\r\n };\r\n }\r\n if (tupletState.start != null && tupletState.end != null) {\r\n this.completedTupletStates.push({\r\n tupletState: tupletState,\r\n staffId: staffIndex,\r\n voiceId: voiceIndex\r\n });\r\n delete this.tupletStatesInProgress[tupletInfo.number];\r\n }\r\n });\r\n }\r\n addTupletsToMeasure(smoMeasure: SmoMeasure, staffId: number, voiceId: number) {\r\n const tupletStates = this.findAndRemoveCompletedTupletStatesByStaffAndVoice(staffId, voiceId);\r\n const xmlTupletStateTrees = this.buildXmlTupletStateTrees(tupletStates);\r\n const notes: SmoNote[] = smoMeasure.voices[voiceId].notes;\r\n smoMeasure.tupletTrees = this.buildSmoTupletTreesFromXmlTupletStateTrees(xmlTupletStateTrees, notes);\r\n }\r\n private findAndRemoveCompletedTupletStatesByStaffAndVoice(staffId: number, voiceId: number): XmlTupletState[] {\r\n const remainingXmlTupletStates: XmlCompletedTupletState[] = [];\r\n const tupletStatesForReturn: XmlTupletState[] = [];\r\n this.completedTupletStates.forEach((completedTupletState) => {\r\n if (completedTupletState.staffId === staffId && completedTupletState.voiceId === voiceId) {\r\n tupletStatesForReturn.push(completedTupletState.tupletState);\r\n } else {\r\n remainingXmlTupletStates.push(completedTupletState)\r\n }\r\n });\r\n this.completedTupletStates = remainingXmlTupletStates;\r\n return tupletStatesForReturn;\r\n }\r\n private buildXmlTupletStateTrees(tupletStates: XmlTupletState[]): XmlTupletStateTreeNode[] {\r\n let sortedTupletStates = this.sortTupletStates(tupletStates);\r\n let roots: XmlTupletStateTreeNode[] = [];\r\n let activeNodes: XmlTupletStateTreeNode[] = [];\r\n for (let tupletState of sortedTupletStates) {\r\n let node = new XmlTupletStateTreeNode(tupletState);\r\n let placed = false;\r\n while (activeNodes.length > 0) {\r\n let lastNode = activeNodes[activeNodes.length - 1];\r\n if (tupletState.start!.tick <= lastNode.tupletState.end!.tick) {\r\n lastNode.children.push(node);\r\n placed = true;\r\n break;\r\n } else {\r\n activeNodes.pop();\r\n }\r\n }\r\n if (!placed) {\r\n roots.push(node);\r\n }\r\n activeNodes.push(node);\r\n }\r\n return roots;\r\n }\r\n private sortTupletStates(tupletStates: XmlTupletState[]): XmlTupletState[] {\r\n return tupletStates.sort((a, b) => {\r\n if (a.start === b.start) {\r\n return a.end!.tick - b.end!.tick;\r\n }\r\n return a.start!.tick - b.start!.tick;\r\n });\r\n }\r\n /**\r\n * Create SmoTuplets out of completedTupletStates\r\n */\r\n buildSmoTupletTreesFromXmlTupletStateTrees(xmlTupletStateTrees: XmlTupletStateTreeNode[], notes: SmoNote[]): SmoTupletTree[] {\r\n const smoTupletTrees: SmoTupletTree[] = [];\r\n const traverseXmlTupletStateTree = (xmlTupletStateTreeNode: XmlTupletStateTreeNode): SmoTuplet => {\r\n const smoTupletParams = SmoTuplet.defaults;\r\n const xmlTupletState = xmlTupletStateTreeNode.tupletState;\r\n if (xmlTupletState.data) {\r\n smoTupletParams.numNotes = xmlTupletState.data.numNotes;\r\n smoTupletParams.notesOccupied = xmlTupletState.data.notesOccupied;\r\n smoTupletParams.stemTicks = xmlTupletState.data.stemTicks;\r\n }\r\n smoTupletParams.startIndex = xmlTupletState.start!.tick;\r\n smoTupletParams.endIndex = xmlTupletState.end!.tick;\r\n for (let i = smoTupletParams.startIndex; i <= smoTupletParams.endIndex; i++) {\r\n smoTupletParams.totalTicks += notes[i].tickCount;\r\n }\r\n smoTupletParams.voice = xmlTupletState.start!.voice;\r\n const smoTuplet = new SmoTuplet(smoTupletParams);\r\n for (let i = 0; i < xmlTupletStateTreeNode.children.length; i++) {\r\n const childSmoTuplet = traverseXmlTupletStateTree(xmlTupletStateTreeNode.children[i]);\r\n childSmoTuplet.parentTuplet = {id: smoTuplet.attrs.id};\r\n smoTuplet.childrenTuplets.push(childSmoTuplet);\r\n }\r\n return smoTuplet;\r\n };\r\n\r\n for (let i = 0; i < xmlTupletStateTrees.length; i++) {\r\n const xmlTupletStateTreeNode = xmlTupletStateTrees[i];\r\n const tuplet: SmoTuplet = traverseXmlTupletStateTree(xmlTupletStateTreeNode);\r\n smoTupletTrees.push(new SmoTupletTree({tuplet: tuplet}));\r\n }\r\n return smoTupletTrees;\r\n }\r\n\r\n\r\n getSystems(): SmoSystemGroup[] {\r\n const rv: SmoSystemGroup[] = [];\r\n this.systems.forEach((system: { startSelector: SmoSelector; endSelector: SmoSelector; leftConnector: number; }) => {\r\n const params = SmoSystemGroup.defaults;\r\n params.startSelector = system.startSelector;\r\n params.endSelector = system.endSelector;\r\n params.leftConnector = system.leftConnector;\r\n rv.push(new SmoSystemGroup(params));\r\n });\r\n return rv;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Logic to convert music XML (finale) to Smo internal format\r\n * @module XmlToSmo\r\n */\r\nimport { XmlHelpers } from './xmlHelpers';\r\nimport { XmlVoiceInfo, XmlState, XmlWedgeInfo } from './xmlState';\r\nimport { SmoLayoutManager, SmoPageLayout, SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SmoTextGroup } from '../data/scoreText';\r\nimport { SmoTempoText, SmoMeasureFormat, SmoMeasureModifierBase, SmoVolta, SmoBarline } from '../data/measureModifiers';\r\nimport { SmoScore, isEngravingFont } from '../data/score';\r\nimport { SmoMeasure, SmoMeasureParams } from '../data/measure';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoGraceNote, SmoOrnament, SmoArticulation } from '../data/noteModifiers';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoNote, SmoNoteParams } from '../data/note';\r\nimport { Pitch, PitchKey, Clef } from '../data/common';\r\nimport { SmoOperation } from '../xform/operations';\r\nimport { SmoInstrument, SmoSlur, SmoTie, TieLine } from '../data/staffModifiers';\r\nimport { SmoPartInfo } from '../data/partInfo';\r\nimport {SmoTupletTree} from \"../data/tuplet\";\r\n\r\n/**\r\n * A class that takes a music XML file and outputs a {@link SmoScore}\r\n * @category SmoToXml\r\n */\r\nexport class XmlToSmo {\r\n static get mmPerPixel() {\r\n return 0.264583;\r\n }\r\n /**\r\n * Vex renders everything as if the font size were 39\r\n */\r\n static get vexFontSize() {\r\n return 39;\r\n }\r\n static get customProportionDefault(): number {\r\n return SmoScore.defaults.layoutManager?.getGlobalLayout().proportionality ?? 0;\r\n }\r\n static get pageLayoutMap() {\r\n return [\r\n { xml: 'page-height', smo: 'pageHeight' },\r\n { xml: 'page-width', smo: 'pageWidth' }\r\n ];\r\n }\r\n static get pageMarginMap() {\r\n return [\r\n { xml: 'left-margin', smo: 'leftMargin' },\r\n { xml: 'right-margin', smo: 'rightMargin' },\r\n { xml: 'top-margin', smo: 'topMargin' },\r\n { xml: 'bottom-margin', smo: 'bottomMargin' }\r\n ];\r\n }\r\n static get scoreInfoFields() {\r\n return ['title', 'subTitle', 'composer', 'copyright'];\r\n }\r\n /**\r\n * Convert music XML file from parsed xml to a {@link SmoScore}\r\n * @param xmlDoc \r\n * @returns\r\n */\r\n static convert(xmlDoc: Document): SmoScore {\r\n try {\r\n const scoreRoots = [...xmlDoc.getElementsByTagName('score-partwise')];\r\n if (!scoreRoots.length) {\r\n // no score node\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n\r\n const scoreRoot = scoreRoots[0];\r\n const rv: SmoScore = new SmoScore(SmoScore.defaults);\r\n rv.staves = [];\r\n const layoutDefaults = rv.layoutManager as SmoLayoutManager;\r\n // if no scale given in score, default to something small.\r\n layoutDefaults.globalLayout.svgScale = 0.5;\r\n layoutDefaults.globalLayout.zoomScale = 1.0;\r\n const xmlState = new XmlState();\r\n xmlState.newTitle = false;\r\n rv.scoreInfo.name = 'Imported Smoosic';\r\n XmlToSmo.scoreInfoFields.forEach((field) => {\r\n (rv.scoreInfo as any)[field] = '';\r\n });\r\n const childNodes = [...scoreRoot.children];\r\n childNodes.forEach((scoreElement) => {\r\n if (scoreElement.tagName === 'work') {\r\n const scoreNameNode = [...scoreElement.getElementsByTagName('work-title')];\r\n if (scoreNameNode.length && scoreNameNode[0].textContent) {\r\n rv.scoreInfo.title = scoreNameNode[0].textContent;\r\n rv.scoreInfo.name = rv.scoreInfo.title;\r\n xmlState.newTitle = true;\r\n }\r\n } else if (scoreElement.tagName === 'identification') {\r\n const creators = [...scoreElement.getElementsByTagName('creator')];\r\n creators.forEach((creator) => {\r\n if (creator.getAttribute('type') === 'composer' && creator.textContent) {\r\n rv.scoreInfo.composer = creator.textContent;\r\n }\r\n });\r\n } else if (scoreElement.tagName === 'movement-title') {\r\n if (xmlState.newTitle && scoreElement.textContent) {\r\n rv.scoreInfo.subTitle = scoreElement.textContent;\r\n } else if (scoreElement.textContent) {\r\n rv.scoreInfo.title = scoreElement.textContent;\r\n rv.scoreInfo.name = rv.scoreInfo.title;\r\n xmlState.newTitle = true;\r\n }\r\n } else if (scoreElement.tagName === 'defaults') {\r\n XmlToSmo.defaults(scoreElement, rv, layoutDefaults, xmlState);\r\n } else if (scoreElement.tagName === 'part') {\r\n xmlState.initializeForPart();\r\n XmlToSmo.part(scoreElement, xmlState);\r\n } else if (scoreElement.tagName === 'part-list') {\r\n XmlToSmo.partList(scoreElement, rv, xmlState);\r\n }\r\n });\r\n // The entire score is parsed and xmlState now contains the staves.\r\n rv.formattingManager = xmlState.formattingManager;\r\n rv.staves = xmlState.smoStaves;\r\n xmlState.updateStaffGroups();\r\n rv.systemGroups = xmlState.getSystems();\r\n\r\n // Fix tempo to be column mapped\r\n rv.staves[0].measures.forEach((measure) => {\r\n const tempoStaff = rv.staves.find((ss) => ss.measures[measure.measureNumber.measureIndex].tempo.display === true);\r\n if (tempoStaff) {\r\n const tempo = tempoStaff.measures[measure.measureNumber.measureIndex].tempo;\r\n rv.staves.forEach((ss) => {\r\n ss.measures[measure.measureNumber.measureIndex].tempo =\r\n SmoMeasureModifierBase.deserialize(tempo);\r\n });\r\n }\r\n });\r\n const lm: SmoLayoutManager = rv.layoutManager as SmoLayoutManager;\r\n if (rv.scoreInfo.title) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.TITLE, rv.scoreInfo.title, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n if (rv.scoreInfo.subTitle) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.SUBTITLE, rv.scoreInfo.subTitle, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n if (rv.scoreInfo.composer) {\r\n rv.addTextGroup(SmoTextGroup.createTextForLayout(\r\n SmoTextGroup.purposes.COMPOSER, rv.scoreInfo.composer, lm.getScaledPageLayout(0)\r\n ));\r\n }\r\n XmlToSmo.setSlurDefaults(rv);\r\n xmlState.completeTies(rv);\r\n \r\n rv.preferences.showPiano = false;\r\n XmlToSmo.setVoltas(rv, xmlState);\r\n rv.staves.forEach((staff) => {\r\n\r\n });\r\n return rv;\r\n } catch (exc) {\r\n console.warn(exc);\r\n return SmoScore.getDefaultScore(SmoScore.defaults, SmoMeasure.defaults);\r\n }\r\n }\r\n /**\r\n * when building the slurs, we don't always know which direction the beams will go or what other\r\n * voices there will be.\r\n * @param score\r\n */\r\n static setSlurDefaults(score: SmoScore) {\r\n score.staves.forEach((staff) => {\r\n const slurs = staff.modifiers.filter((mm) =>mm.ctor === 'SmoSlur');\r\n slurs.forEach((ss) => {\r\n const slur = (ss as any) as SmoSlur;\r\n let slurPosition = SmoSlur.positions.AUTO;\r\n if (slur.position === slur.position_end) {\r\n slurPosition = slur.position;\r\n }\r\n const slurParams = SmoOperation.getDefaultSlurDirection(score, ss.startSelector, ss.endSelector);\r\n slur.position = SmoSlur.positions.AUTO;\r\n slur.position_end = SmoSlur.positions.AUTO;\r\n slur.orientation = SmoSlur.orientations.AUTO;\r\n slur.yOffset = slurParams.yOffset;\r\n slur.cp1y = slurParams.cp1y;\r\n slur.cp2y = slurParams.cp2y;\r\n slur.xOffset = slurParams.xOffset;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * After parsing the XML, resolve the voltas we've saved\r\n * @param score \r\n * @param state \r\n */\r\n static setVoltas(score: SmoScore, state: XmlState) {\r\n const endingMeasures = Object.keys(state.endingMap).map((k) => parseInt(k, 10));\r\n endingMeasures.forEach((em) => {\r\n const endings = state.endingMap[em];\r\n endings.forEach((ending) => {\r\n const defs = SmoVolta.defaults;\r\n defs.number = ending.number;\r\n defs.startBar = ending.start;\r\n defs.endBar = ending.end >= 0 ? ending.end : ending.start;\r\n const volta = new SmoVolta(defs);\r\n SmoOperation.addEnding(score, volta);\r\n });\r\n });\r\n }\r\n static partList(partList: Element, score: SmoScore, state: XmlState) {\r\n const children = partList.children;\r\n let partIndex = 0;\r\n var i = 0;\r\n for (i = 0;i < children.length; ++i) {\r\n const child = children[i];\r\n if (child.tagName === 'score-part') {\r\n const partElement = child;\r\n const partData = new SmoPartInfo(SmoPartInfo.defaults);\r\n partData.partName = XmlHelpers.getTextFromElement(partElement, 'part-name', 'part ' + i);\r\n const partId = XmlHelpers.getTextFromAttribute(partElement, 'id', i.toString());\r\n if (state.openPartGroup) {\r\n state.openPartGroup.parts.push(partIndex);\r\n }\r\n partIndex += 1;\r\n state.parts[partId] = partData;\r\n partData.partAbbreviation = XmlHelpers.getTextFromElement(partElement, 'part-abbreviation', 'p.');\r\n partData.midiDevice = XmlHelpers.getTextFromElement(partElement, 'part-abbreviation', null);\r\n // it seems like musicxml doesn't allow for different music font size in parts vs. score\r\n // partData.layoutManager.globalLayout.svgScale = 0.55;\r\n partData.layoutManager.globalLayout.svgScale = state.musicFontSize / XmlToSmo.vexFontSize;\r\n const midiElements = partElement.getElementsByTagName('midi-instrument');\r\n if (midiElements.length) {\r\n const midiElement = midiElements[0];\r\n partData.midiInstrument = {\r\n channel: XmlHelpers.getNumberFromElement(midiElement, 'midi-channel', 1),\r\n program: XmlHelpers.getNumberFromElement(midiElement, 'midi-program', 1),\r\n volume: XmlHelpers.getNumberFromElement(midiElement, 'volume', 80),\r\n pan: XmlHelpers.getNumberFromElement(midiElement, 'pan', 0)\r\n };\r\n }\r\n } else if (child.tagName === 'part-group') {\r\n const groupElement = child;\r\n if (state.openPartGroup) {\r\n const staffGroup = state.openPartGroup.group;\r\n state.openPartGroup.parts.forEach((part) => {\r\n if (staffGroup.startSelector.staff === 0 || staffGroup.startSelector.staff > part) {\r\n staffGroup.startSelector.staff = part;\r\n }\r\n if (staffGroup.endSelector.staff < part) {\r\n staffGroup.endSelector.staff = part;\r\n }\r\n });\r\n score.systemGroups.push(staffGroup);\r\n state.openPartGroup = null;\r\n } else {\r\n const staffGroup = new SmoSystemGroup(SmoSystemGroup.defaults); \r\n const groupNum = XmlHelpers.getNumberFromAttribute(groupElement, 'number', 1);\r\n const xmlSymbol = XmlHelpers.getTextFromElement(groupElement, 'group-symbol', 'single');\r\n if (xmlSymbol === 'single') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['single'];\r\n } else if (xmlSymbol === 'brace') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['brace'];\r\n } if (xmlSymbol === 'bracket') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['bracket'];\r\n } if (xmlSymbol === 'square') {\r\n staffGroup.leftConnector = SmoSystemGroup.connectorTypes['double'];\r\n }\r\n state.openPartGroup = {\r\n partNum: groupNum,\r\n parts: [],\r\n group: staffGroup\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n /**\r\n * page-layout element occurs in a couple of places\r\n * @param defaultsElement\r\n * @param layoutDefaults \r\n * @param xmlState \r\n */\r\n static pageSizeFromLayout(defaultsElement: Element, layoutDefaults: SmoLayoutManager, xmlState: XmlState) {\r\n const pageLayoutNode = defaultsElement.getElementsByTagName('page-layout');\r\n if (pageLayoutNode.length) {\r\n XmlHelpers.assignDefaults(pageLayoutNode[0], layoutDefaults.globalLayout, XmlToSmo.pageLayoutMap);\r\n layoutDefaults.globalLayout.pageHeight *= xmlState.pixelsPerTenth;\r\n layoutDefaults.globalLayout.pageWidth *= xmlState.pixelsPerTenth;\r\n }\r\n const pageMarginNode = XmlHelpers.getChildrenFromPath(defaultsElement,\r\n ['page-layout', 'page-margins']);\r\n if (pageMarginNode.length) {\r\n XmlHelpers.assignDefaults(pageMarginNode[0], layoutDefaults.pageLayouts[0], XmlToSmo.pageMarginMap);\r\n SmoPageLayout.attributes.forEach((attr) => {\r\n layoutDefaults.pageLayouts[0][attr] *= xmlState.pixelsPerTenth;\r\n });\r\n }\r\n }\r\n /**\r\n * /score-partwise/defaults\r\n * @param defaultsElement \r\n * @param score \r\n * @param layoutDefaults \r\n */\r\n static defaults(defaultsElement: Element, score: SmoScore, layoutDefaults: SmoLayoutManager, xmlState: XmlState) {\r\n // Default scale for mxml\r\n let scale = 1 / 7;\r\n const currentScale = layoutDefaults.getGlobalLayout().svgScale;\r\n const scaleNode = defaultsElement.getElementsByTagName('scaling');\r\n if (scaleNode.length) {\r\n const mm = XmlHelpers.getNumberFromElement(scaleNode[0], 'millimeters', 1);\r\n const tn = XmlHelpers.getNumberFromElement(scaleNode[0], 'tenths', 7);\r\n if (tn > 0 && mm > 0) {\r\n scale = mm / tn;\r\n }\r\n }\r\n const fontNode = defaultsElement.getElementsByTagName('music-font');\r\n // All musicxml sizes are given in 'tenths'. Smoosic and vex use pixels. so find the ratio and \r\n // normalize all values.\r\n xmlState.pixelsPerTenth = scale / XmlToSmo.mmPerPixel;\r\n if (fontNode.length) {\r\n const fontString = fontNode[0].getAttribute('font-size');\r\n if (fontString) {\r\n xmlState.musicFontSize = parseInt(fontString, 10);\r\n }\r\n const fontFamily = fontNode[0].getAttribute('font-family');\r\n if (fontFamily && isEngravingFont(fontFamily)) {\r\n score.engravingFont =fontFamily;\r\n }\r\n }\r\n XmlToSmo.pageSizeFromLayout(defaultsElement, layoutDefaults, xmlState);\r\n \r\n // svgScale is the ratio of music font size to the default Vex font size (39).\r\n layoutDefaults.globalLayout.svgScale = xmlState.musicFontSize / XmlToSmo.vexFontSize;\r\n score.scaleTextGroups(currentScale / layoutDefaults.globalLayout.svgScale);\r\n }\r\n\r\n /**\r\n * /score-partwise/part\r\n * @param partElement \r\n * @param xmlState \r\n */\r\n static part(partElement: Element, xmlState: XmlState) {\r\n let staffId = xmlState.smoStaves.length;\r\n const partId = XmlHelpers.getTextFromAttribute(partElement, 'id', '');\r\n console.log('part ' + partId);\r\n xmlState.initializeForPart();\r\n xmlState.partId = partId;\r\n const stavesForPart: SmoSystemStaff[] = [];\r\n const measureElements = [...partElement.getElementsByTagName('measure')];\r\n measureElements.forEach((measureElement) => {\r\n // Parse the measure element, populate staffArray of xmlState with the\r\n // measure data\r\n XmlToSmo.measure(measureElement, xmlState);\r\n const newStaves = xmlState.staffArray;\r\n if (newStaves.length > 1 && stavesForPart.length <= newStaves[0].clefInfo.staffId) {\r\n xmlState.staffGroups.push({ start: staffId, length: newStaves.length });\r\n }\r\n xmlState.globalCursor += (newStaves[0].measure as SmoMeasure).getMaxTicksVoice();\r\n newStaves.forEach((staffMeasure) => {\r\n if (stavesForPart.length <= staffMeasure.clefInfo.staffId) {\r\n const params = SmoSystemStaff.defaults;\r\n params.staffId = staffId;\r\n params.measureInstrumentMap = xmlState.instrumentMap;\r\n const newStaff = new SmoSystemStaff(params);\r\n if (xmlState.parts[partId]) {\r\n console.log('putting part ' + partId + ' in staff ' + newStaff.staffId);\r\n newStaff.partInfo = new SmoPartInfo(xmlState.parts[partId]);\r\n }\r\n console.log('createing stave ' + newStaff.staffId);\r\n stavesForPart.push(newStaff);\r\n staffId += 1;\r\n }\r\n const smoStaff = stavesForPart[staffMeasure.clefInfo.staffId];\r\n smoStaff.measures.push(staffMeasure.measure as SmoMeasure);\r\n });\r\n const oldStaffId = staffId - stavesForPart.length;\r\n xmlState.backtrackHairpins(stavesForPart[0], oldStaffId + 1);\r\n });\r\n if (stavesForPart.length > 1) {\r\n stavesForPart[0].partInfo.stavesAfter = 1;\r\n stavesForPart[0].partInfo.stavesBefore = 0;\r\n console.log('part has stave after ' + stavesForPart[0].staffId);\r\n stavesForPart[1].partInfo.stavesAfter = 0;\r\n stavesForPart[1].partInfo.stavesBefore = 1;\r\n console.log('part has stave before ' + stavesForPart[1].staffId);\r\n }\r\n xmlState.smoStaves = xmlState.smoStaves.concat(stavesForPart);\r\n xmlState.completeSlurs();\r\n xmlState.assignRehearsalMarks();\r\n }\r\n /**\r\n * /score-partwise/measure/direction/sound:tempo\r\n * @param element \r\n * @returns \r\n */\r\n static tempo(element: Element) {\r\n let tempoText = '';\r\n let customText = tempoText;\r\n const rv: { staffId: number, tempo: SmoTempoText }[] = [];\r\n const soundNodes = XmlHelpers.getChildrenFromPath(element,\r\n ['sound']);\r\n soundNodes.forEach((sound) => {\r\n let tempoMode = SmoTempoText.tempoModes.durationMode;\r\n tempoText = sound.getAttribute('tempo') as string;\r\n if (tempoText) {\r\n const bpm = parseInt(tempoText, 10);\r\n const wordNode =\r\n [...element.getElementsByTagName('words')];\r\n tempoText = wordNode.length ? wordNode[0].textContent as string :\r\n tempoText.toString();\r\n if (isNaN(parseInt(tempoText, 10))) {\r\n if (SmoTempoText.tempoTexts[tempoText.toLowerCase()]) {\r\n tempoMode = SmoTempoText.tempoModes.textMode;\r\n } else {\r\n tempoMode = SmoTempoText.tempoModes.customMode;\r\n customText = tempoText;\r\n }\r\n }\r\n const params = SmoTempoText.defaults;\r\n params.tempoMode = tempoMode;\r\n params.bpm = bpm;\r\n params.tempoText = tempoText;\r\n params.customText = customText;\r\n params.display = true;\r\n const tempo = new SmoTempoText(params);\r\n const staffId = XmlHelpers.getStaffId(element);\r\n rv.push({ staffId, tempo });\r\n }\r\n });\r\n return rv;\r\n }\r\n /**\r\n * /score-partwise/measure/direction/dynamics\r\n * @param element \r\n * @returns \r\n */\r\n static dynamics(directionElement: Element, xmlState: XmlState) {\r\n let offset = 1;\r\n const dynamicNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'dynamics']);\r\n const rehearsalNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'rehearsal']);\r\n const offsetNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['offset']);\r\n if (offsetNodes.length) {\r\n offset = parseInt(offsetNodes[0].textContent as string, 10);\r\n }\r\n if (rehearsalNodes.length) {\r\n const rm = rehearsalNodes[0].textContent;\r\n if (rm) {\r\n xmlState.rehearsalMark = rm;\r\n }\r\n }\r\n dynamicNodes.forEach((dynamic) => {\r\n xmlState.dynamics.push({\r\n dynamic: dynamic.children[0].tagName,\r\n offset: (offset / xmlState.divisions) * 4096\r\n });\r\n });\r\n }\r\n\r\n // ### attributes\r\n // /score-partwise/part/measure/attributes\r\n static attributes(measureElement: Element, xmlState: XmlState) {\r\n let smoKey: PitchKey = {} as PitchKey;\r\n const attributesNodes = XmlHelpers.getChildrenFromPath(measureElement, ['attributes']);\r\n if (!attributesNodes.length) {\r\n return;\r\n }\r\n const attributesNode = attributesNodes[0];\r\n xmlState.divisions =\r\n XmlHelpers.getNumberFromElement(attributesNode, 'divisions', xmlState.divisions);\r\n\r\n const keyNode = XmlHelpers.getChildrenFromPath(attributesNode, ['key']);\r\n // MusicXML expresses keys in 'fifths' from C.\r\n if (keyNode.length) {\r\n const fifths = XmlHelpers.getNumberFromElement(keyNode[0], 'fifths', 0);\r\n if (fifths < 0) {\r\n smoKey = SmoMusic.circleOfFifths[SmoMusic.circleOfFifths.length + fifths];\r\n } else {\r\n smoKey = SmoMusic.circleOfFifths[fifths];\r\n }\r\n xmlState.keySignature = smoKey.letter.toUpperCase();\r\n if (smoKey.accidental !== 'n') {\r\n xmlState.keySignature += smoKey.accidental;\r\n }\r\n }\r\n const transposeNode = XmlHelpers.getChildrenFromPath(attributesNode, ['transpose']);\r\n if (transposeNode.length) {\r\n const offset = XmlHelpers.getNumberFromElement(transposeNode[0], 'chromatic', 0);\r\n if (offset !== xmlState.instrument.keyOffset) {\r\n xmlState.instrument.keyOffset = -1 * offset;\r\n if (xmlState.instrumentMap[xmlState.measureIndex]) {\r\n xmlState.instrumentMap[xmlState.measureIndex].keyOffset = xmlState.instrument.keyOffset;\r\n } else {\r\n const params = xmlState.instrument;\r\n xmlState.instrumentMap[xmlState.measureIndex] = new SmoInstrument(params);\r\n }\r\n }\r\n }\r\n\r\n const currentTime = xmlState.timeSignature.split('/');\r\n const timeNodes = XmlHelpers.getChildrenFromPath(attributesNode, ['time']);\r\n if (timeNodes.length) {\r\n const timeNode = timeNodes[0];\r\n const num = XmlHelpers.getNumberFromElement(timeNode, 'beats', parseInt(currentTime[0], 10));\r\n const den = XmlHelpers.getNumberFromElement(timeNode, 'beat-type', parseInt(currentTime[1], 10));\r\n xmlState.timeSignature = '' + num + '/' + den;\r\n }\r\n\r\n const clefNodes = XmlHelpers.getChildrenFromPath(attributesNode, ['clef']);\r\n if (clefNodes.length) {\r\n // We expect the number of clefs to equal the number of staves in each measure\r\n clefNodes.forEach((clefNode) => {\r\n let clefNum = 0;\r\n let clef = 'treble';\r\n const clefAttrs = XmlHelpers.nodeAttributes(clefNode);\r\n if (typeof (clefAttrs.number) !== 'undefined') {\r\n // staff numbers index from 1 in mxml\r\n clefNum = parseInt(clefAttrs.number, 10) - 1;\r\n }\r\n const clefType = XmlHelpers.getTextFromElement(clefNode, 'sign', 'G');\r\n const clefLine = XmlHelpers.getNumberFromElement(clefNode, 'line', 2);\r\n // mxml supports a zillion clefs, just implement the basics.\r\n if (clefType === 'F') {\r\n clef = 'bass';\r\n } else if (clefType === 'C') {\r\n if (clefLine === 4) {\r\n clef = 'alto';\r\n } else if (clefLine === 3) {\r\n clef = 'tenor';\r\n } else if (clefLine === 1) {\r\n clef = 'soprano';\r\n }\r\n } else if (clefType === 'percussion') {\r\n clef = 'percussion';\r\n }\r\n if (xmlState.clefInfo.length <= clefNum) {\r\n xmlState.clefInfo.push({ clef, staffId: clefNum });\r\n } else {\r\n xmlState.clefInfo[clefNum].clef = clef;\r\n }\r\n });\r\n }\r\n }\r\n\r\n // ### wedge (hairpin)\r\n // /score-partwise/part/measure/direction/direction-type/wedge\r\n static wedge(directionElement: Element, xmlState: XmlState) {\r\n let crescInfo: XmlWedgeInfo | null = null;\r\n const wedgeNodes = XmlHelpers.getChildrenFromPath(directionElement,\r\n ['direction-type', 'wedge']);\r\n wedgeNodes.forEach((wedgeNode) => {\r\n crescInfo = { type: wedgeNode.getAttribute('type') as string };\r\n });\r\n // If this is a start hairpin, start it. If an end hairpin, add it to the\r\n // hairpin array with the type and start/stop ticks\r\n if (crescInfo !== null) {\r\n xmlState.processWedge(crescInfo);\r\n }\r\n }\r\n // ### direction\r\n // /score-partwise/part/measure/direction\r\n static direction(directionElement: Element, xmlState: XmlState) {\r\n const tempo = XmlToSmo.tempo(directionElement);\r\n // Only display tempo if changes.\r\n if (tempo.length) {\r\n // TODO: staff ID is with tempo, but tempo is per column in SMO\r\n if (!SmoTempoText.eq(xmlState.tempo, tempo[0].tempo)) {\r\n xmlState.tempo = tempo[0].tempo;\r\n xmlState.tempo.display = true;\r\n }\r\n }\r\n // parse dynamic node and add to xmlState\r\n XmlToSmo.dynamics(directionElement, xmlState);\r\n\r\n // parse wedge (hairpin)\r\n XmlToSmo.wedge(directionElement, xmlState);\r\n }\r\n // ### note\r\n // /score-partwise/part/measure/note\r\n static note(noteElement: Element, xmlState: XmlState) {\r\n let grIx = 0;\r\n const staffIndex: number = XmlHelpers.getStaffId(noteElement);\r\n xmlState.staffIndex = staffIndex;\r\n // We assume the clef information from attributes comes before the notes\r\n // xmlState.staffArray[staffIndex] = { clefInfo: { clef }, voices[voiceIndex]: notes[] }\r\n if (xmlState.staffArray.length <= staffIndex) {\r\n // mxml has measures for all staves in a part interleaved. In SMO they are\r\n // each in a separate stave object. Base the staves we expect based on\r\n // the number of clefs in the xml state object\r\n xmlState.clefInfo.forEach((clefInfo) => {\r\n xmlState.staffArray.push({ clefInfo, measure: null, voices: {} as Record });\r\n });\r\n }\r\n const chordNode = XmlHelpers.getChildrenFromPath(noteElement, ['chord']);\r\n if (chordNode.length === 0) {\r\n xmlState.currentDuration += XmlHelpers.durationFromNode(noteElement, 0);\r\n }\r\n // voices are not sequential, seem to have artitrary numbers and\r\n // persist per part (same with staff IDs). Update XML state if these are new\r\n // staves\r\n const voiceIndex = XmlHelpers.getVoiceId(noteElement);\r\n xmlState.voiceIndex = voiceIndex;\r\n xmlState.initializeStaff(staffIndex, voiceIndex);\r\n const voice = xmlState.staffArray[staffIndex].voices[voiceIndex];\r\n // Calculate the tick and staff index for selectors\r\n const tickIndex = chordNode.length < 1 ? voice.notes.length : voice.notes.length - 1;\r\n const smoVoiceIndex = xmlState.staffVoiceHash[staffIndex].indexOf(voiceIndex);\r\n const pitchIndex = chordNode.length ? xmlState.previousNote.pitches.length : 0;\r\n const smoStaffIndex = xmlState.smoStaves.length + staffIndex;\r\n const selector = {\r\n staff: smoStaffIndex, measure: xmlState.measureIndex, voice: smoVoiceIndex,\r\n tick: tickIndex, pitches: []\r\n };\r\n const divisions = xmlState.divisions;\r\n const printText = noteElement.getAttribute('print-object');\r\n const hideNote = typeof (printText) === 'string' && printText === 'no';\r\n const isGrace = XmlHelpers.isGrace(noteElement);\r\n const restNode = XmlHelpers.getChildrenFromPath(noteElement, ['rest']);\r\n const noteType = restNode.length ? 'r' : 'n';\r\n const durationData = XmlHelpers.ticksFromDuration(noteElement, divisions, 4096);\r\n const tickCount = durationData.tickCount;\r\n //todo nenad: we probably need to handle dotted durations\r\n const stemTicks = XmlHelpers.durationFromType(noteElement, 4096);\r\n if (chordNode.length === 0) {\r\n xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed += tickCount;\r\n }\r\n xmlState.tickCursor = (xmlState.currentDuration / divisions) * 4096;\r\n const beamState = XmlHelpers.noteBeamState(noteElement);\r\n const slurInfos = XmlHelpers.getSlurData(noteElement, selector);\r\n const tieInfos = XmlHelpers.getTieData(noteElement, selector, pitchIndex);\r\n const tupletInfos = XmlHelpers.getTupletData(noteElement);\r\n const ornaments = XmlHelpers.articulationsAndOrnaments(noteElement);\r\n const lyrics = XmlHelpers.lyrics(noteElement);\r\n const flagState = XmlHelpers.getStemType(noteElement);\r\n const clefString: Clef = xmlState.staffArray[staffIndex].clefInfo.clef as Clef;\r\n const pitch: Pitch = XmlHelpers.smoPitchFromNote(noteElement,\r\n SmoMeasure.defaultPitchForClef[clefString]);\r\n if (isGrace === false) {\r\n if (chordNode.length) {\r\n // If this is a note in a chord, just add the pitch to previous note.\r\n xmlState.previousNote.pitches.push(pitch);\r\n xmlState.updateTieStates(tieInfos);\r\n } else {\r\n // Create a new note\r\n const noteData: SmoNoteParams = SmoNote.defaults;\r\n noteData.noteType = noteType;\r\n noteData.pitches = [pitch];\r\n // If this is a non-grace note, add any grace notes to the note since SMO\r\n // treats them as note modifiers\r\n noteData.ticks = { numerator: tickCount, denominator: 1, remainder: 0 };\r\n noteData.stemTicks = stemTicks;\r\n noteData.flagState = flagState;\r\n noteData.clef = clefString;\r\n xmlState.previousNote = new SmoNote(noteData);\r\n if (hideNote) {\r\n xmlState.previousNote.makeHidden(true);\r\n }\r\n xmlState.updateDynamics();\r\n ornaments.forEach((ornament) => {\r\n if (ornament.ctor === 'SmoOrnament') {\r\n xmlState.previousNote.setOrnament(ornament as SmoOrnament, true);\r\n } else if (ornament.ctor === 'SmoArticulation') {\r\n xmlState.previousNote.toggleArticulation(ornament as SmoArticulation);\r\n }\r\n });\r\n lyrics.forEach((lyric) => {\r\n xmlState.addLyric(xmlState.previousNote, lyric);\r\n });\r\n for (grIx = 0; grIx < xmlState.graceNotes.length; ++grIx) {\r\n xmlState.previousNote.addGraceNote(xmlState.graceNotes[grIx], grIx);\r\n }\r\n xmlState.graceNotes = []; // clear the grace note array\r\n // If this note starts later than the cursor due to forward, pad with rests\r\n if (xmlState.tickCursor > xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed) {\r\n const pads = SmoMusic.splitIntoValidDurations(\r\n xmlState.tickCursor - xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed);\r\n console.log(`padding ${pads.length} before ${xmlState.staffIndex}-${xmlState.measureIndex}-${xmlState.voiceIndex}-${tickIndex}`);\r\n pads.forEach((pad) => {\r\n const clefString: Clef = xmlState.staffArray[staffIndex].clefInfo.clef as Clef;\r\n const padNote = SmoMeasure.createRestNoteWithDuration(pad,\r\n clefString);\r\n padNote.makeHidden(true);\r\n voice.notes.push(padNote); \r\n });\r\n // slurs and ties use selector, so this affects them, also\r\n selector.tick += pads.length;\r\n // then reset the cursor since we are now in sync\r\n xmlState.staffArray[staffIndex].voices[voiceIndex].ticksUsed = xmlState.tickCursor;\r\n }\r\n /* slurInfos.forEach((slurInfo) => {\r\n console.log(`xml slur: ${slurInfo.selector.staff}-${slurInfo.selector.measure}-${slurInfo.selector.voice}-${slurInfo.selector.tick} ${slurInfo.type} ${slurInfo.number}`);\r\n console.log(` ${slurInfo.placement}`);\r\n });*/\r\n /* tieInfos.forEach((tieInfo) => {\r\n console.log(`xml tie: ${tieInfo.selector.staff}-${tieInfo.selector.measure}-${tieInfo.selector.voice}-${tieInfo.selector.tick} ${tieInfo.type} `);\r\n console.log(` pitch ${tieInfo.pitchIndex} orient ${tieInfo.orientation} num ${tieInfo.number}`);\r\n });*/\r\n \r\n xmlState.updateSlurStates(slurInfos);\r\n xmlState.updateTieStates(tieInfos);\r\n voice.notes.push(xmlState.previousNote);\r\n //todo nenad: check if we need to change something with 'alteration'\r\n xmlState.updateBeamState(beamState, durationData.alteration, voice, voiceIndex);\r\n xmlState.updateTupletStates(tupletInfos, voice,\r\n staffIndex, voiceIndex);\r\n }\r\n } else {\r\n if (chordNode.length) {\r\n xmlState.graceNotes[xmlState.graceNotes.length - 1].pitches.push(pitch);\r\n } else {\r\n // grace note durations don't seem to have explicit duration, so\r\n // get it from note type\r\n xmlState.updateSlurStates(slurInfos);\r\n xmlState.updateTieStates(tieInfos);\r\n xmlState.graceNotes.push(new SmoGraceNote({\r\n pitches: [pitch],\r\n ticks: { numerator: tickCount, denominator: 1, remainder: 0 }\r\n }));\r\n }\r\n }\r\n }\r\n static print(printElement: Element, xmlState: XmlState) {\r\n if (xmlState.parts[xmlState.partId]) {\r\n XmlToSmo.pageSizeFromLayout(printElement, xmlState.parts[xmlState.partId].layoutManager, xmlState);\r\n }\r\n }\r\n /**\r\n * /score-partwise/part/measure\r\n * A measure in music xml might represent several measures in SMO at the same\r\n * column in the score\r\n * @param measureElement \r\n * @param xmlState \r\n */\r\n static measure(measureElement: Element, xmlState: XmlState) {\r\n xmlState.initializeForMeasure(measureElement);\r\n const elements = [...measureElement.children];\r\n let hasNotes = false;\r\n elements.forEach((element) => { \r\n if (element.tagName === 'backup') {\r\n xmlState.currentDuration -= XmlHelpers.durationFromNode(element, 0);\r\n }\r\n if (element.tagName === 'forward') {\r\n xmlState.currentDuration += XmlHelpers.durationFromNode(element, 0);\r\n }\r\n if (element.tagName === 'attributes') {\r\n // update the running state of the XML with new information from this measure\r\n // if an XML attributes element is present\r\n XmlToSmo.attributes(measureElement, xmlState);\r\n } else if (element.tagName === 'direction') {\r\n XmlToSmo.direction(element, xmlState);\r\n } else if (element.tagName === 'note') {\r\n XmlToSmo.note(element, xmlState);\r\n hasNotes = true;\r\n } else if (element.tagName === 'barline') {\r\n xmlState.updateEndings(element);\r\n } else if (element.tagName === 'print') {\r\n XmlToSmo.print(element, xmlState);\r\n }\r\n });\r\n // If a measure has no notes, just make one with the defaults\r\n if (hasNotes === false && xmlState.staffArray.length < 1 && xmlState.clefInfo.length >= 1) {\r\n xmlState.clefInfo.forEach((clefInfo) => {\r\n xmlState.staffArray.push({ clefInfo, measure: null, voices: {} });\r\n });\r\n }\r\n if (xmlState.rehearsalMark.length) {\r\n xmlState.rehearsalMarks[xmlState.measureIndex] = xmlState.rehearsalMark;\r\n }\r\n xmlState.staffArray.forEach((staffData) => {\r\n const clef = staffData.clefInfo.clef as Clef;\r\n const params: SmoMeasureParams = SmoMeasure.defaults;\r\n params.transposeIndex = xmlState.instrument.keyOffset;\r\n params.clef = clef;\r\n const smoMeasure = SmoMeasure.getDefaultMeasure(params);\r\n smoMeasure.format = new SmoMeasureFormat(SmoMeasureFormat.defaults);\r\n smoMeasure.format.measureIndex = xmlState.measureNumber;\r\n smoMeasure.format.systemBreak = XmlHelpers.isSystemBreak(measureElement);\r\n smoMeasure.tempo = xmlState.tempo;\r\n smoMeasure.format.proportionality = XmlToSmo.customProportionDefault;\r\n xmlState.formattingManager.updateMeasureFormat(smoMeasure.format);\r\n smoMeasure.keySignature = xmlState.keySignature.toLowerCase();\r\n smoMeasure.timeSignature = SmoMeasure.convertLegacyTimeSignature(xmlState.timeSignature);\r\n smoMeasure.measureNumber.localIndex = xmlState.measureNumber;\r\n smoMeasure.measureNumber.measureIndex = xmlState.measureIndex;\r\n smoMeasure.measureNumber.staffId = staffData.clefInfo.staffId + xmlState.smoStaves.length;\r\n const startBarDefs = SmoBarline.defaults;\r\n startBarDefs.position = SmoBarline.positions.start;\r\n startBarDefs.barline = xmlState.startBarline;\r\n const endBarDefs = SmoBarline.defaults;\r\n endBarDefs.position = SmoBarline.positions.end;\r\n endBarDefs.barline = xmlState.endBarline;\r\n smoMeasure.setBarline(new SmoBarline(startBarDefs));\r\n smoMeasure.setBarline(new SmoBarline(endBarDefs));\r\n // voices not in array, put them in an array\r\n Object.keys(staffData.voices).forEach((voiceKey) => {\r\n const voice = staffData.voices[voiceKey];\r\n voice.notes.forEach((note) => {\r\n if (!note.clef) {\r\n note.clef = smoMeasure.clef;\r\n }\r\n });\r\n smoMeasure.voices.push(voice);\r\n const voiceId = smoMeasure.voices.length - 1;\r\n xmlState.addTupletsToMeasure(smoMeasure, staffData.clefInfo.staffId, voiceId);\r\n });\r\n SmoTupletTree.syncTupletIds(smoMeasure.tupletTrees, smoMeasure.voices);\r\n if (smoMeasure.voices.length === 0) {\r\n smoMeasure.voices.push({ notes: SmoMeasure.getDefaultNotes(smoMeasure) });\r\n }\r\n staffData.measure = smoMeasure;\r\n });\r\n // Pad incomplete measures/voices with rests\r\n const maxTicks = xmlState.staffArray.map((staffData) => (staffData.measure as SmoMeasure).getMaxTicksVoice())\r\n .reduce((a, b) => a > b ? a : b);\r\n xmlState.staffArray.forEach((staffData) => {\r\n let i = 0;\r\n let j = 0;\r\n const measure = staffData.measure as SmoMeasure;\r\n for (i = 0; i < measure.voices.length; ++i) {\r\n const curTicks = measure.getTicksFromVoice(i);\r\n if (curTicks < maxTicks) {\r\n const tickAr = SmoMusic.splitIntoValidDurations(maxTicks - curTicks);\r\n for (j = 0; j < tickAr.length; ++j) {\r\n measure.voices[i].notes.push(\r\n SmoMeasure.createRestNoteWithDuration(tickAr[j], measure.clef)\r\n );\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoDynamicText, SmoMicrotone } from '../data/noteModifiers';\r\nimport { SmoSelector, SmoSelection } from './selections';\r\nimport { SmoStaffHairpin, StaffModifierBase } from '../data/staffModifiers';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoTempoText, SmoBarline, SmoVolta } from '../data/measureModifiers';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoNote } from '../data/note';\r\nimport { Pitch } from '../data/common';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoAudioPitch } from '../data/music';\r\nimport { SmoTupletTree } from '../data/tuplet';\r\n\r\nexport interface SmoAudioRepeat {\r\n startRepeat: number,\r\n endRepeat?: number,\r\n voltas: SmoAudioVolta[]\r\n}\r\nexport interface SmoAudioVolta {\r\n measureIndex: number,\r\n ending: number\r\n}\r\nexport interface SmoAudioRepeatMap {\r\n startMeasure: number,\r\n endMeasure: number\r\n}\r\nexport interface SmoAudioHairpin {\r\n hairpinType: number,\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector,\r\n delta: number,\r\n ticks: number\r\n}\r\nexport interface SmoAudioTie {\r\n startSelector: SmoSelector,\r\n endSelector: SmoSelector\r\n}\r\nexport interface SmoAudioNote {\r\n pitches: Pitch[],\r\n frequencies: number[],\r\n noteType: string,\r\n duration: number,\r\n offset: number,\r\n selector: SmoSelector,\r\n volume: number,\r\n padding?: boolean\r\n}\r\nexport interface SmoAudioTimeSignature {\r\n numerator: number,\r\n denominator: number\r\n}\r\nexport interface SmoAudioTrack {\r\n lastMeasure: number,\r\n notes: SmoAudioNote[],\r\n tempoMap: Record,\r\n measureNoteMap: Record,\r\n keyMap: Record,\r\n timeSignatureMap: Record,\r\n hairpins: SmoAudioHairpin[],\r\n volume: number,\r\n tiedNotes: SmoAudioTie[],\r\n repeats: []\r\n}\r\nexport interface AudioTracks {\r\n tracks: SmoAudioTrack[],\r\n repeats: SmoAudioRepeat[],\r\n repeatMap: SmoAudioRepeatMap[],\r\n measureBeats: number[],\r\n tempoMap: number[]\r\n}\r\n/** \r\n * Convert a score into a JSON structure that can be rendered to audio.\r\n * the return value looks like this:\r\n * ` { tracks, repeats, repeatMap} `\r\n * repeatMap is just an array of tuples with start/end measures.\r\n * each track contains:\r\n * ` { lastMeasure, notes, tempoMap, timeSignatureMap, hairpins, volume, tiedNotes } `\r\n * where each note might contain:\r\n * `{ pitches, noteType, duration, selector, volume }`\r\n * _Note_: pitches are smo pitches, durations are adjusted for beatTime\r\n * (beatTime === 4096 uses Smo/Vex ticks, 128 is midi tick default)\r\n * volume is normalized 0-1\r\n * @category SmoTransform\r\n */\r\nexport class SmoAudioScore {\r\n // ### dynamicVolumeMap\r\n // normalized dynamic\r\n static get dynamicVolumeMap(): Record {\r\n // matches SmoDynamicText.dynamics\r\n return {\r\n pp: 0.3,\r\n p: 0.4,\r\n mp: 0.5,\r\n mf: 0.6,\r\n f: 0.7,\r\n ff: 0.8\r\n };\r\n }\r\n static get emptyTrack(): SmoAudioTrack {\r\n return {\r\n lastMeasure: 0,\r\n notes: [],\r\n tempoMap: {},\r\n timeSignatureMap: {},\r\n hairpins: [],\r\n measureNoteMap: {},\r\n keyMap: {},\r\n volume: 0,\r\n tiedNotes: [],\r\n repeats: []\r\n };\r\n }\r\n timeDiv: number;\r\n score: SmoScore;\r\n beatTime: number;\r\n volume: number = 0;\r\n constructor(score: SmoScore, beatTime: number) {\r\n this.timeDiv = 4096 / beatTime;\r\n this.score = score;\r\n this.beatTime = beatTime;\r\n }\r\n // ### volumeFromNote\r\n // Return a normalized volume from the dynamic setting of the note\r\n // or supplied default if none exists\r\n static volumeFromNote(smoNote: SmoNote, def?: number): number {\r\n if (typeof (def) === 'undefined' || def === 0) {\r\n def = SmoAudioScore.dynamicVolumeMap[SmoDynamicText.dynamics.PP];\r\n }\r\n const dynamic: SmoDynamicText[] = smoNote.getModifiers('SmoDynamicText') as SmoDynamicText[];\r\n if (dynamic.length < 1) {\r\n return def;\r\n }\r\n if (dynamic[0].text === SmoDynamicText.dynamics.SFZ) {\r\n return SmoAudioScore.dynamicVolumeMap[SmoDynamicText.dynamics.F];\r\n }\r\n if (typeof (SmoAudioScore.dynamicVolumeMap[dynamic[0].text]) === 'undefined') {\r\n return def;\r\n }\r\n return SmoAudioScore.dynamicVolumeMap[dynamic[0].text];\r\n }\r\n getVoltas(repeat: SmoAudioRepeat, measureIndex: number): SmoAudioVolta[] {\r\n let v1 = measureIndex;\r\n let endings = null;\r\n let currentEnding = -1;\r\n const rv: SmoAudioVolta[] = [];\r\n const staff = this.score.staves[0];\r\n while (v1 > repeat.startRepeat) {\r\n endings = staff.measures[v1].getNthEndings();\r\n if (endings.length && endings[0].endSelector) {\r\n currentEnding = endings[0].number;\r\n rv.push({ measureIndex: v1, ending: currentEnding });\r\n v1 = endings[0].endSelector.measure + 1;\r\n break;\r\n }\r\n v1--;\r\n }\r\n if (currentEnding < 0 || !staff?.measures) {\r\n return rv;\r\n }\r\n while (endings?.length && v1 < staff.measures.length) {\r\n endings = staff.measures[v1].getNthEndings();\r\n if (!endings.length) {\r\n break;\r\n }\r\n currentEnding = endings[0].number;\r\n rv.push({ measureIndex: v1, ending: currentEnding });\r\n v1 = (endings[0].endSelector as SmoSelector).measure + 1;\r\n }\r\n rv.sort((a: SmoAudioVolta, b: SmoAudioVolta) => a.ending - b.ending);\r\n return rv;\r\n }\r\n // ### ticksFromSelection\r\n // return the count of ticks between the selectors, adjusted for\r\n // beatTime\r\n ticksFromSelection(startSelector: SmoSelector, endSelector: SmoSelector): number {\r\n const selection = SmoSelection.selectionFromSelector(this.score, startSelector);\r\n const note = selection?.note as SmoNote;\r\n let ticks: number = note.tickCount;\r\n let nextSelection: SmoSelection | null = SmoSelection.nextNoteSelectionFromSelector(this.score, startSelector);\r\n while (nextSelection && nextSelection.note && !SmoSelector.gt(nextSelection.selector, endSelector)) {\r\n ticks += nextSelection.note.tickCount;\r\n nextSelection = SmoSelection.nextNoteSelectionFromSelector(this.score, nextSelection.selector);\r\n }\r\n return ticks / this.timeDiv;\r\n }\r\n // ### getHairpinInfo\r\n // Get any hairpin starting at this selection, and calculate its\r\n // effect on the overall volume\r\n getHairpinInfo(track: SmoAudioTrack, selection: SmoSelection) {\r\n const staff: SmoSystemStaff = selection.staff;\r\n const selector: SmoSelector = selection.selector;\r\n const cp = (x: SmoSelector) => JSON.parse(JSON.stringify(x));\r\n const hps: StaffModifierBase[] = staff.getModifiersAt(selector)\r\n .filter((hairpin) => hairpin.ctor === 'SmoStaffHairpin' &&\r\n SmoSelector.eq(hairpin.startSelector, selector));\r\n const rv: SmoAudioHairpin[] = [];\r\n // clear out old hairpins.\r\n // usually there will only be a single hairpin per voice, except\r\n // in the case of overlapping.\r\n track.hairpins.forEach((hairpin: SmoAudioHairpin) => {\r\n if (SmoSelector.gteq(selection.selector, hairpin.startSelector) &&\r\n SmoSelector.lteq(selection.selector, hairpin.endSelector)) {\r\n rv.push(hairpin);\r\n }\r\n });\r\n track.hairpins = rv;\r\n\r\n hps.forEach((hairpin) => {\r\n const ch = hairpin as SmoStaffHairpin;\r\n let endDynamic = 0;\r\n const trackHairpin: SmoAudioHairpin = {\r\n hairpinType: ch.hairpinType,\r\n startSelector: cp(hairpin.startSelector),\r\n endSelector: cp(hairpin.endSelector),\r\n delta: 0,\r\n ticks: 0\r\n };\r\n // For a hairpin, try to calculate the volume difference from start to end,\r\n // as a function of ticks\r\n const endSelection: SmoSelection | null = SmoSelection.selectionFromSelector(this.score, hairpin.endSelector);\r\n if (endSelection !== null && typeof (endSelection.note) !== 'undefined') {\r\n const endNote = endSelection.note as SmoNote;\r\n const curNote = selection.note as SmoNote;\r\n endDynamic = SmoAudioScore.volumeFromNote(endNote);\r\n const startDynamic = SmoAudioScore.volumeFromNote(curNote, track.volume);\r\n if (startDynamic === endDynamic) {\r\n const nextSelection = SmoSelection.nextNoteSelectionFromSelector(this.score, hairpin.endSelector);\r\n if (nextSelection) {\r\n const nextNote = nextSelection.note as SmoNote;\r\n endDynamic = SmoAudioScore.volumeFromNote(nextNote);\r\n }\r\n }\r\n if (startDynamic === endDynamic) {\r\n const offset = (hairpin as SmoStaffHairpin).hairpinType === SmoStaffHairpin.types.CRESCENDO ? 0.1 : -0.1;\r\n endDynamic = Math.max(endDynamic + offset, 0.1);\r\n endDynamic = Math.min(endDynamic, 1.0);\r\n }\r\n trackHairpin.delta = endDynamic - startDynamic;\r\n trackHairpin.ticks = this.ticksFromSelection(hairpin.startSelector, hairpin.endSelector);\r\n track.hairpins.push(trackHairpin);\r\n }\r\n });\r\n }\r\n // ### computeVolume\r\n // come up with a current normalized volume based on dynamics\r\n // that appear in the music\r\n computeVolume(track: SmoAudioTrack, selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n if (track.volume === 0) {\r\n track.volume = SmoAudioScore.volumeFromNote(note,\r\n SmoAudioScore.dynamicVolumeMap.p);\r\n return;\r\n }\r\n if (track.hairpins.length) {\r\n const hp = track.hairpins[0];\r\n const coff = (note.tickCount / this.timeDiv) / hp.ticks;\r\n track.volume += hp.delta * coff;\r\n } else {\r\n track.volume = SmoAudioScore.volumeFromNote(note, track.volume);\r\n }\r\n }\r\n getSlurInfo(track: SmoAudioTrack, selection: SmoSelection) {\r\n const tn: SmoAudioTie[] = [];\r\n const cp = (x: any) => JSON.parse(JSON.stringify(x));\r\n track.tiedNotes.forEach((tie) => {\r\n if (SmoSelector.gteq(selection.selector, tie.startSelector) && SmoSelector.lteq(selection.selector, tie.endSelector)) { \r\n tn.push(tie);\r\n }\r\n });\r\n track.tiedNotes = tn;\r\n const tieStart = selection.staff.getTiesStartingAt(selection.selector);\r\n tieStart.forEach((tie) => {\r\n tn.push({\r\n startSelector: cp(tie.startSelector),\r\n endSelector: cp(tie.endSelector)\r\n });\r\n });\r\n }\r\n isTiedPitch(track: SmoAudioTrack, selection: SmoSelection, noteIx: number): boolean {\r\n if (noteIx < 1) {\r\n return false;\r\n }\r\n if (!track.tiedNotes.length) {\r\n return false;\r\n }\r\n if (track.notes[noteIx - 1].noteType !== 'n') {\r\n return false;\r\n }\r\n // Don't do this for first note of nth endings, because it will mess up\r\n // other endings.\r\n if (selection.selector.tick === 0) {\r\n const endings = selection.measure.getNthEndings();\r\n if (endings.length) {\r\n return false;\r\n }\r\n }\r\n // the first note should be played, not tied\r\n if (SmoSelector.eq(track.tiedNotes[0].startSelector, selection.selector)) {\r\n return false;\r\n }\r\n return SmoMusic.pitchArraysMatch(track.notes[noteIx - 1].pitches, (selection.note as SmoNote).pitches);\r\n }\r\n static updateMeasureIndexMap(note: SmoAudioNote, measureIndexMap: Record>) {\r\n if (note.noteType !== 'n') {\r\n return;\r\n }\r\n const selector = note.selector;\r\n if (typeof (measureIndexMap[selector.measure]) === 'undefined') {\r\n measureIndexMap[selector.measure] = {} as Record;\r\n }\r\n const measureIndex = measureIndexMap[selector.measure];\r\n if (typeof (measureIndex[selector.tick]) === 'undefined') {\r\n measureIndex[selector.tick] = [];\r\n }\r\n if (note.noteType === 'n') {\r\n measureIndex[selector.tick].push(note);\r\n }\r\n }\r\n updateMeasureNoteMap(track: SmoAudioTrack, measureIndex: number, note: SmoAudioNote) {\r\n if (!track.measureNoteMap[measureIndex]) {\r\n track.measureNoteMap[measureIndex] = [];\r\n }\r\n track.measureNoteMap[measureIndex].push(note)\r\n }\r\n createTrackNote(track: SmoAudioTrack, selection: SmoSelection, duration: number, runningDuration: number, measureIndexMap: Record>) {\r\n const noteIx = track.notes.length;\r\n if (this.isTiedPitch(track, selection, noteIx)) {\r\n track.notes[noteIx - 1].duration += duration;\r\n const restPad = this.createTrackRest(track, duration, runningDuration, selection.selector, measureIndexMap);\r\n // Indicate this rest is just padding for a previous tied note. Midi and audio render this\r\n // differently\r\n restPad.padding = true;\r\n track.notes.push(restPad);\r\n return;\r\n }\r\n const tpitches: Pitch[] = [];\r\n const frequencies: number[] = [];\r\n const xpose = selection.measure.transposeIndex;\r\n const smoNote = selection.note as SmoNote;\r\n smoNote.pitches.forEach((pitch, pitchIx) => {\r\n tpitches.push(SmoMusic.smoIntToPitch(\r\n SmoMusic.smoPitchToInt(pitch) - xpose));\r\n const mtone: SmoMicrotone | null = smoNote.getMicrotone(pitchIx) ?? null;\r\n frequencies.push(SmoAudioPitch.smoPitchToFrequency(pitch, -1 * xpose, mtone));\r\n });\r\n const pitchArray = JSON.parse(JSON.stringify(tpitches));\r\n const note: SmoAudioNote = {\r\n pitches: pitchArray,\r\n noteType: 'n',\r\n duration,\r\n offset: runningDuration,\r\n selector: selection.selector,\r\n volume: track.volume,\r\n frequencies\r\n };\r\n this.updateMeasureNoteMap(track, selection.selector.measure, note);\r\n track.notes.push(note);\r\n SmoAudioScore.updateMeasureIndexMap(note, measureIndexMap);\r\n }\r\n createTrackRest(track: SmoAudioTrack, duration: number, runningDuration: number, selector: SmoSelector, \r\n measureIndexMap: Record>): SmoAudioNote {\r\n const rest: SmoAudioNote = {\r\n duration,\r\n offset: runningDuration,\r\n noteType: 'r',\r\n selector,\r\n volume: 0,\r\n pitches: [],\r\n frequencies: []\r\n };\r\n SmoAudioScore.updateMeasureIndexMap(rest, measureIndexMap);\r\n this.updateMeasureNoteMap(track, selector.measure, rest); \r\n return rest;\r\n }\r\n createRepeatMap(repeats: SmoAudioRepeat[]): SmoAudioRepeatMap[] {\r\n let startm = 0;\r\n let j = 0;\r\n const staff = this.score.staves[0];\r\n const repeatMap: SmoAudioRepeatMap[] = [];\r\n const endm = staff.measures.length - 1;\r\n repeats.forEach((repeat) => {\r\n // Include the current start to start of repeat, unless there is no start repeat\r\n if (repeat.startRepeat > 0) {\r\n repeatMap.push({ startMeasure: startm, endMeasure: repeat.startRepeat - 1 });\r\n }\r\n // Include first time through\r\n if (repeat.endRepeat) {\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.endRepeat });\r\n }\r\n startm = repeat.startRepeat;\r\n // nth time through, go to the start of volta 0, then to the start of volta n\r\n if (repeat.endRepeat && repeat.voltas.length < 1) {\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.endRepeat });\r\n startm = repeat.endRepeat + 1;\r\n }\r\n for (j = 1; j < repeat.voltas.length; ++j) {\r\n const volta = repeat.voltas[j];\r\n repeatMap.push({ startMeasure: repeat.startRepeat, endMeasure: repeat.voltas[0].measureIndex - 1 });\r\n // If there are more endings, repeat to first volta\r\n if (j + 1 < repeat.voltas.length) {\r\n repeatMap.push({ startMeasure: volta.measureIndex, endMeasure: repeat.voltas[j + 1].measureIndex - 1 });\r\n } else {\r\n startm = volta.measureIndex;\r\n }\r\n }\r\n });\r\n if (startm <= endm) {\r\n repeatMap.push({ startMeasure: startm, endMeasure: endm });\r\n }\r\n return repeatMap;\r\n }\r\n normalizeVolume(measureIndexMap: Record>) {\r\n let i = 0;\r\n let j = 0;\r\n let runningSum = -1;\r\n const measureKeys = Object.keys(measureIndexMap);\r\n for (i = 0; i < measureKeys.length; ++i) {\r\n const measureNotes = measureIndexMap[i];\r\n if (typeof (measureNotes) === 'undefined') {\r\n continue;\r\n }\r\n const tickKeys = Object.keys(measureNotes);\r\n for (j = 0; j < tickKeys.length; ++j) {\r\n let volumeSum = 0;\r\n let normalize = 1.0;\r\n const tickNotes = measureNotes[parseInt(tickKeys[j], 10)];\r\n if (typeof (tickNotes) === 'undefined') {\r\n continue;\r\n }\r\n volumeSum = tickNotes.map((nn) => nn.volume).reduce((a, b) => a + b);\r\n if (volumeSum > 1.0) {\r\n normalize = 1.0 / volumeSum;\r\n volumeSum = 1.0;\r\n }\r\n if (runningSum < 0) {\r\n runningSum = volumeSum;\r\n }\r\n const diff = Math.abs(runningSum - volumeSum);\r\n if (diff > 0.6) {\r\n const avg = (volumeSum * 3 + runningSum) / 4;\r\n normalize = normalize * avg;\r\n }\r\n runningSum = volumeSum * normalize;\r\n tickNotes.forEach((nn) => {\r\n nn.volume *= normalize;\r\n });\r\n runningSum = volumeSum;\r\n }\r\n }\r\n }\r\n convert(): AudioTracks {\r\n let measureIx = 0;\r\n const trackHash: Record = {};\r\n const measureBeats: number[] = [];\r\n const measureIndexMap = {};\r\n const repeats: SmoAudioRepeat[] = [];\r\n let startRepeat = 0;\r\n const tempoMap: number[] = [];\r\n this.score.staves.forEach((staff, staffIx) => {\r\n let runningKey = staff.measures[0].keySignature;\r\n this.volume = 0;\r\n for (measureIx = 0; measureIx < staff.measures.length; ++measureIx) {\r\n const measure = staff.measures[measureIx];\r\n measure.voices.forEach((voice, voiceIx) => {\r\n let duration = 0;\r\n const trackKey = (this.score.staves.length * voiceIx) + staffIx;\r\n if (typeof (trackHash[trackKey]) === 'undefined') {\r\n trackHash[trackKey] = SmoAudioScore.emptyTrack;\r\n }\r\n const measureSelector = SmoSelector.default;\r\n measureSelector.staff = staffIx;\r\n measureSelector.measure = measureIx;\r\n const track: SmoAudioTrack = trackHash[trackKey];\r\n if (!measure.tempo) {\r\n measure.tempo = new SmoTempoText(SmoTempoText.defaults);\r\n }\r\n const tempo = measure.tempo.bpm * (measure.tempo.beatDuration / 4096);\r\n // staff 0/voice 0, set track values for the measure\r\n if (voiceIx === 0) {\r\n if (staffIx === 0) {\r\n track.keyMap[0] = runningKey;\r\n measureBeats.push(measure.getMaxTicksVoice() / this.timeDiv);\r\n const startBar = measure.getStartBarline();\r\n const endBar = measure.getEndBarline();\r\n if (startBar.barline === SmoBarline.barlines.startRepeat) {\r\n startRepeat = measureIx;\r\n }\r\n if (endBar.barline === SmoBarline.barlines.endRepeat) {\r\n const repeat: SmoAudioRepeat = { startRepeat, endRepeat: measureIx, voltas: [] };\r\n repeat.voltas = this.getVoltas(repeat, measureIx);\r\n repeats.push(repeat);\r\n }\r\n tempoMap.push(tempo);\r\n }\r\n\r\n const selectorKey = SmoSelector.getMeasureKey(measureSelector);\r\n track.tempoMap[selectorKey] = Math.round(tempo);\r\n if (measure.keySignature !== runningKey) {\r\n runningKey = measure.keySignature;\r\n track.keyMap[measureIx] = runningKey;\r\n }\r\n track.timeSignatureMap[selectorKey] = {\r\n numerator: measure.timeSignature.actualBeats,\r\n denominator: measure.timeSignature.beatDuration\r\n };\r\n }\r\n // If this voice is not in every measure, fill in the space\r\n // in its own channel.\r\n while (track.lastMeasure < measureIx) {\r\n track.notes.push(this.createTrackRest(track, measureBeats[track.lastMeasure], 0,\r\n { staff: staffIx, measure: track.lastMeasure, voice: voiceIx, tick: 0, pitches: [] },\r\n measureIndexMap,\r\n ));\r\n track.lastMeasure += 1;\r\n }\r\n let tupletTicks = 0;\r\n let runningDuration = 0;\r\n voice.notes.forEach((note, noteIx) => {\r\n const selector = {\r\n staff: staffIx, measure: measureIx, voice: voiceIx, tick: noteIx, pitches: []\r\n };\r\n const selection = SmoSelection.selectionFromSelector(this.score, selector) as SmoSelection;\r\n // update staff features of slur/tie/cresc.\r\n this.getSlurInfo(track, selection);\r\n this.getHairpinInfo(track, selection);\r\n const tuplet = SmoTupletTree.getTupletForNoteIndex(measure.tupletTrees, voiceIx, noteIx);\r\n if (tuplet && tuplet.startIndex === noteIx) {\r\n tupletTicks = tuplet.tickCount / this.timeDiv;\r\n }\r\n if (tupletTicks) {\r\n // tuplet likely won't fit evenly in ticks, so\r\n // use remainder in last tuplet note.\r\n if (tuplet && tuplet.endIndex === noteIx) {\r\n duration = tupletTicks;\r\n tupletTicks = 0;\r\n } else {\r\n duration = note.tickCount / this.timeDiv;\r\n tupletTicks -= duration;\r\n }\r\n } else {\r\n duration = note.tickCount / this.timeDiv;\r\n }\r\n if (note.isRest() || note.isSlash()) {\r\n track.notes.push(this.createTrackRest(track, duration, runningDuration, selector, measureIndexMap));\r\n } else {\r\n this.computeVolume(track, selection);\r\n this.createTrackNote(track, selection, duration, runningDuration, measureIndexMap);\r\n }\r\n runningDuration += duration;\r\n });\r\n track.lastMeasure += 1;\r\n });\r\n }\r\n });\r\n // For voices that don't fill out the full piece, fill them in with rests\r\n const tracks = Object.keys(trackHash).map((key) => trackHash[key]);\r\n const maxMeasure = tracks[0].lastMeasure;\r\n tracks.forEach((track) => {\r\n while (track.lastMeasure < maxMeasure) {\r\n const staff = track.notes[0].selector.staff;\r\n const voice = track.notes[0].selector.voice;\r\n const rest: SmoAudioNote = this.createTrackRest(track, measureBeats[track.lastMeasure], 0,\r\n { staff, measure: track.lastMeasure, voice, tick: 0, pitches: [] }, measureIndexMap\r\n );\r\n track.notes.push(rest);\r\n track.lastMeasure += 1;\r\n }\r\n });\r\n const repeatMap = this.createRepeatMap(repeats);\r\n this.normalizeVolume(measureIndexMap);\r\n return { tracks, repeats, repeatMap, measureBeats, tempoMap };\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoAttrs, getId } from '../data/common';\r\nimport { SmoMeasure, ISmoBeamGroup } from '../data/measure';\r\nimport { TickMap } from './tickMap';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\n\r\nexport interface SmoBeamGroupParams {\r\n notes: SmoNote[],\r\n voice: number\r\n}\r\n\r\n/**\r\n * Contain a group of {@link SmoNote} used for beaming.\r\n * @internal\r\n */\r\nexport class SmoBeamGroup implements ISmoBeamGroup {\r\n notes: SmoNote[];\r\n attrs: SmoAttrs;\r\n voice: number = 0;\r\n constructor(params: SmoBeamGroupParams) {\r\n let i = 0;\r\n this.voice = params.voice;\r\n this.notes = params.notes;\r\n smoSerialize.vexMerge(this, params);\r\n\r\n this.attrs = {\r\n id: getId().toString(),\r\n type: 'SmoBeamGroup'\r\n };\r\n for (i = 0; i < this.notes.length; ++i) {\r\n const note = this.notes[i];\r\n if (note.tickCount < 4096) {\r\n note.beam_group = this.attrs;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Apply the beam policy set up in node and measure to group the notes into beam groups\r\n * @category SmoTransform\r\n */\r\nexport class SmoBeamer {\r\n static applyBeams(measure: SmoMeasure) {\r\n let i = 0;\r\n let j = 0;\r\n for (i = 0; i < measure.voices.length; ++i) {\r\n const beamer = new SmoBeamer(measure, i);\r\n const tickmap = measure.tickmapForVoice(i);\r\n for (j = 0; j < tickmap.durationMap.length; ++j) {\r\n beamer.beamNote(tickmap, j, measure.voices[i].notes[j]);\r\n }\r\n }\r\n }\r\n measure: SmoMeasure;\r\n duration: number;\r\n measureDuration: number;\r\n meterNumbers: number[];\r\n beamBeats: number;\r\n skipNext: number;\r\n currentGroup: SmoNote[];\r\n constructor(measure: SmoMeasure, voice: number) {\r\n this.measure = measure;\r\n this._removeVoiceBeam(measure, voice);\r\n this.duration = 0;\r\n this.measureDuration = 0;\r\n this.meterNumbers = [measure.timeSignature.actualBeats, measure.timeSignature.beatDuration];\r\n // beam on 1/4 notes in most meter, triple time dotted quarter\r\n this.beamBeats = 2 * 2048;\r\n if (this.meterNumbers[0] % 3 === 0) {\r\n this.beamBeats = 3 * 2048;\r\n }\r\n this.skipNext = 0;\r\n this.currentGroup = [];\r\n }\r\n\r\n get beamGroups() {\r\n return this.measure.beamGroups;\r\n }\r\n _removeVoiceBeam(measure: SmoMeasure, voice: number) {\r\n const beamGroups: ISmoBeamGroup[] = [];\r\n measure.beamGroups.forEach((gr: ISmoBeamGroup) => {\r\n if (gr.voice !== voice) {\r\n beamGroups.push(gr);\r\n }\r\n });\r\n measure.beamGroups = beamGroups;\r\n }\r\n\r\n _completeGroup(voice: number) {\r\n const nrCount: SmoNote[] = this.currentGroup.filter((nn: SmoNote) =>\r\n nn.isRest() === false\r\n );\r\n // don't beam groups of 1\r\n if (nrCount.length > 1) {\r\n this.measure.beamGroups.push(new SmoBeamGroup({\r\n notes: this.currentGroup,\r\n voice\r\n }));\r\n }\r\n }\r\n\r\n _advanceGroup() {\r\n this.currentGroup = [];\r\n this.duration = 0;\r\n }\r\n\r\n // ### _isRemainingTicksBeamable\r\n // look ahead, and see if we need to beam the tuplet now or if we\r\n // can combine current beam with future notes.\r\n _isRemainingTicksBeamable(tickmap: TickMap, index: number) {\r\n let acc = 0;\r\n let i = 0;\r\n if (this.duration >= this.beamBeats) {\r\n return false;\r\n }\r\n acc = this.duration;\r\n for (i = index + 1; i < tickmap.deltaMap.length; ++i) {\r\n acc += tickmap.deltaMap[i];\r\n if (acc === this.beamBeats) {\r\n return true;\r\n }\r\n if (acc > this.beamBeats) {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n allEighth() {\r\n for (var i = 0; i < this.currentGroup.length; ++i) {\r\n const cg = this.currentGroup[i];\r\n if (cg.tickCount !== 2048) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n beamNote(tickmap: TickMap, index: number, note: SmoNote) {\r\n this.beamBeats = note.beamBeats;\r\n this.duration += tickmap.deltaMap[index];\r\n this.measureDuration += tickmap.deltaMap[index];\r\n if (note.noteType === '/') {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n // beam tuplets\r\n // if (note.isTuplet) {\r\n // const tuplet = this.measure.getTupletForNote(note);\r\n // // The underlying notes must have been deleted.\r\n // if (!tuplet) {\r\n // return;\r\n // }\r\n\r\n // const first = tuplet.getFirstNote();\r\n // if (!first) {\r\n // return;\r\n // }\r\n\r\n // const ult = tuplet.getLastNote();\r\n // if (!ult) {\r\n // return;\r\n // }\r\n\r\n // if (first.endBeam) {\r\n // this._advanceGroup();\r\n // return;\r\n // }\r\n\r\n // // is this beamable length-wise\r\n // if (note.noteType === 'n' && note.stemTicks < 4096) {\r\n // this.currentGroup.push(note);\r\n // }\r\n // // Ultimate note in tuplet\r\n // if (ult.attrs.id === note.attrs.id && !this._isRemainingTicksBeamable(tickmap, index)) {\r\n // this._completeGroup(tickmap.voice);\r\n // this._advanceGroup();\r\n // }\r\n // return;\r\n // }\r\n\r\n // don't beam > 1/4 note in 4/4 time. Don't beam rests.\r\n if (note.stemTicks >= 4096 || (note.isRest() && this.currentGroup.length === 0)) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n //if areTupletElementsDifferent(noteOne, noteTwo)\r\n //this._completeGroup(tickmap.voice);\r\n //this._advanceGroup();\r\n if (index > 0 && !SmoBeamer.areTupletElementsTheSame(tickmap.notes[index - 1], tickmap.notes[index])) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n }\r\n\r\n this.currentGroup.push(note);\r\n if (note.endBeam) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n }\r\n if (this.measure.timeSignature.actualBeats % 4 === 0) {\r\n if (this.duration < 8192 && this.allEighth()) {\r\n return;\r\n } else if (this.duration === 8192) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n }\r\n }\r\n // If we are aligned to a beat on the measure, and we are in common time\r\n if (this.currentGroup.length > 1 && this.measure.timeSignature.beatDuration === 4 &&\r\n this.measureDuration % 4096 === 0) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n if (this.duration === this.beamBeats) {\r\n this._completeGroup(tickmap.voice);\r\n this._advanceGroup();\r\n return;\r\n }\r\n\r\n // If this does not align on a beat, don't beam it\r\n if (this.duration > this.beamBeats) {\r\n this._advanceGroup();\r\n }\r\n }\r\n\r\n public static areTupletElementsTheSame(noteOne: SmoNote, noteTwo: SmoNote): boolean {\r\n if (typeof(noteOne.tupletId) === 'undefined' && typeof(noteTwo.tupletId) === 'undefined') {\r\n return true;\r\n }\r\n if (noteOne.tupletId === null && noteTwo.tupletId === null) {\r\n return true;\r\n }\r\n if (noteOne.isTuplet && noteTwo.isTuplet && noteOne.tupletId == noteTwo.tupletId) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoSelection, SmoSelector } from './selections';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { StaffModifierBase } from '../data/staffModifiers';\r\nimport {SmoTuplet, SmoTupletTree, SmoTupletTreeParams} from '../data/tuplet';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { SmoScore } from '../data/score';\r\nimport { TickMap } from './tickMap';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { getId } from '../data/common';\r\nimport {SmoUnmakeTupletActor} from \"./tickDuration\";\r\n\r\n/**\r\n * Used to calculate the offset and transposition of a note to be pasted\r\n */\r\nexport interface PasteNote {\r\n note: SmoNote,\r\n selector: SmoSelector,\r\n originalKey: string,\r\n tupletStart: SmoTupletTree | null\r\n}\r\n\r\n/**\r\n * Used when pasting staff modifiers like slurs to calculate the\r\n * offset\r\n */\r\nexport interface ModifierPlacement {\r\n modifier: StaffModifierBase,\r\n ticksToStart: number\r\n}\r\n/**\r\n * PasteBuffer holds copied music, and handles the action of pasting the music to\r\n * a different point in the score. It does this by serializing the measure(s) from the source\r\n * and then creating handling the overlap with existing music when deserializaing it.\r\n * @category SmoTransform\r\n */\r\nexport class PasteBuffer {\r\n notes: PasteNote[];\r\n totalDuration: number;\r\n noteIndex: number;\r\n measures: SmoMeasure[];\r\n measureIndex: number;\r\n remainder: number;\r\n replacementMeasures: SmoSelection[];\r\n score: SmoScore | null = null;\r\n modifiers: StaffModifierBase[] = [];\r\n modifiersToPlace: ModifierPlacement[] = [];\r\n destination: SmoSelector = SmoSelector.default;\r\n staffSelectors: SmoSelector[] = [];\r\n constructor() {\r\n this.notes = [];\r\n this.totalDuration = 0;\r\n this.noteIndex = 0;\r\n this.measures = [];\r\n this.measureIndex = -1;\r\n this.remainder = 0;\r\n this.replacementMeasures = [];\r\n }\r\n\r\n setScore(score: SmoScore) {\r\n this.score = score;\r\n }\r\n getCopyBufferTickCount() {\r\n let rv = 0;\r\n this.notes.forEach((note) => {\r\n rv += note.note.tickCount;\r\n });\r\n return rv;\r\n }\r\n setSelections(score: SmoScore, selections: SmoSelection[]) {\r\n this.notes = [];\r\n this.noteIndex = 0;\r\n this.score = score;\r\n if (selections.length < 1) {\r\n return;\r\n }\r\n // this.tupletNoteMap = [];\r\n const first = selections[0];\r\n const last = selections[selections.length - 1];\r\n if (!first.note || !last.note) {\r\n return;\r\n }\r\n const startTupletTree: SmoTupletTree | null = SmoTupletTree.getTupletTreeForNoteIndex(first.measure.tupletTrees, first.selector.voice, first.selector.tick);\r\n if (startTupletTree) {\r\n if (startTupletTree.startIndex !== first.selector.tick) {\r\n return; // can't copy from the middle of a tuplet\r\n }\r\n }\r\n const endTupletTree: SmoTupletTree | null = SmoTupletTree.getTupletTreeForNoteIndex(last.measure.tupletTrees, last.selector.voice, last.selector.tick);\r\n if (endTupletTree) {\r\n if (endTupletTree.endIndex !== last.selector.tick) {\r\n return; // can't copy part of a tuplet.\r\n }\r\n }\r\n this._populateSelectArray(selections);\r\n }\r\n // ### _populateSelectArray\r\n // copy the selected notes into the paste buffer with their original locations.\r\n _populateSelectArray(selections: SmoSelection[]) {\r\n let selector: SmoSelector = SmoSelector.default;\r\n this.modifiers = [];\r\n selections.forEach((selection) => {\r\n selector = JSON.parse(JSON.stringify(selection.selector));\r\n const mod: StaffModifierBase[] = selection.staff.getModifiersAt(selector);\r\n if (mod.length) {\r\n mod.forEach((modifier: StaffModifierBase) => {\r\n const cp: StaffModifierBase = StaffModifierBase.deserialize(modifier.serialize());\r\n cp.attrs.id = getId().toString();\r\n this.modifiers.push(cp);\r\n });\r\n }\r\n\r\n if (selection.note) {\r\n // We store copy in concert pitch. The originalKey is the original key of the copy.\r\n // the destKey is the originalKey in concert pitch.\r\n const originalKey = selection.measure.keySignature;\r\n const keyOffset = -1 * selection.measure.transposeIndex;\r\n const destKey = SmoMusic.vexKeySignatureTranspose(originalKey, keyOffset).toLocaleLowerCase();\r\n const note = SmoNote.transpose(SmoNote.clone(selection.note),[], keyOffset, selection.measure.keySignature, destKey) as SmoNote;\r\n const pasteNote: PasteNote = {\r\n selector,\r\n note,\r\n originalKey: destKey,\r\n tupletStart: null\r\n };\r\n if (selection.note.isTuplet) {\r\n const tupletTree: SmoTupletTree | null = SmoTupletTree.getTupletTreeForNoteIndex(selection.measure.tupletTrees, selection.selector.voice, selection.selector.tick);\r\n //const index = tuplet.getIndexOfNote(selection.note);\r\n if (tupletTree && tupletTree.startIndex === selection.selector.tick) {\r\n pasteNote.tupletStart = SmoTupletTree.clone(tupletTree);\r\n }\r\n }\r\n\r\n this.notes.push(pasteNote);\r\n this.totalDuration += note.tickCount;\r\n }\r\n });\r\n this.notes.sort((a, b) =>\r\n SmoSelector.gt(a.selector, b.selector) ? 1 : -1\r\n );\r\n }\r\n\r\n clearSelections() {\r\n this.notes = [];\r\n }\r\n\r\n _findModifier(selector: SmoSelector) {\r\n const rv = this.modifiers.filter((mod) => SmoSelector.eq(selector, mod.startSelector));\r\n return (rv && rv.length) ? rv[0] : null;\r\n }\r\n _findPlacedModifier(selector: SmoSelector) {\r\n const rv = this.modifiers.filter((mod) => SmoSelector.eq(selector, mod.endSelector));\r\n return (typeof(rv) !== 'undefined' && rv.length) ? rv[0] : null;\r\n }\r\n\r\n _alignVoices(measure: SmoMeasure, voiceIndex: number) {\r\n while (measure.voices.length <= voiceIndex) {\r\n measure.populateVoice(measure.voices.length);\r\n }\r\n }\r\n\r\n // Before pasting, populate an array of existing measures from the paste destination\r\n // so we know how to place the notes.\r\n _populateMeasureArray(selector: SmoSelector) {\r\n let measureSelection = SmoSelection.measureSelection(this.score!, selector.staff, selector.measure);\r\n if (!measureSelection) {\r\n return;\r\n }\r\n const measure = measureSelection.measure;\r\n this._alignVoices(measure, selector.voice);\r\n this.measures = [];\r\n this.staffSelectors = [];\r\n const clonedMeasure = SmoMeasure.clone(measureSelection.measure);\r\n clonedMeasure.svg = measureSelection.measure.svg;\r\n this.measures.push(clonedMeasure);\r\n\r\n const firstMeasure = this.measures[0];\r\n const tickmapForFirstMeasure = firstMeasure.tickmapForVoice(selector.voice);\r\n\r\n let currentDuration = tickmapForFirstMeasure.durationMap[selector.tick];\r\n const measureTotalDuration = tickmapForFirstMeasure.totalDuration;\r\n for (let i: number = 0; i < this.notes.length; i++) {\r\n const selection: PasteNote = this.notes[i];\r\n if (selection.tupletStart) {\r\n // const tupletTree: SmoTupletTree | null = SmoTupletTree.getTupletTreeForNoteIndex(this.tupletNoteMap, selection.selector.voice, selection.selector.tick);\r\n if (currentDuration + selection.tupletStart.totalTicks > measureTotalDuration && measureSelection !== null) {\r\n //if tuplet does not fit in a measure as a whole we cannot paste it, it is ether the whole thing or nothing\r\n //reset everything that has been changed so far and return\r\n this.measures = [];\r\n this.staffSelectors = [];\r\n return;\r\n }\r\n }\r\n if (currentDuration + selection.note.tickCount > measureTotalDuration && measureSelection !== null) {\r\n // If this note will overlap the measure boundary, the note will be split in 2 with the\r\n // remainder going to the next measure. If they line up exactly, the remainder is 0.\r\n const remainder = (currentDuration + selection.note.tickCount) - measureTotalDuration;\r\n currentDuration = remainder;\r\n\r\n measureSelection = SmoSelection.measureSelection(this.score as SmoScore, measureSelection.selector.staff,measureSelection.selector.measure + 1);\r\n\r\n // If the paste buffer overlaps the end of the score, we can't paste (TODO: add a measure in this case)\r\n if (measureSelection != null) {\r\n const clonedMeasure = SmoMeasure.clone(measureSelection.measure);\r\n clonedMeasure.svg = measureSelection.measure.svg;\r\n this.measures.push(clonedMeasure);\r\n // firstMeasureTickmap = measureSelection.measure.tickmapForVoice(selector.voice);\r\n }\r\n } else if (measureSelection != null) {\r\n currentDuration += selection.note.tickCount;\r\n }\r\n }\r\n\r\n const lastMeasure = this.measures[this.measures.length - 1];\r\n\r\n //adjust the beginning of the paste\r\n //adjust this.destination if beginning of the paste is in the middle of a tuplet\r\n //set destination to have a tick index of the first note in the tuplet\r\n this.destination = selector;\r\n const firstTupletTree = SmoTupletTree.getTupletForNoteIndex(firstMeasure.tupletTrees, selector.voice, selector.tick);\r\n if (firstTupletTree) {\r\n this.destination.tick = firstTupletTree.startIndex;//use this as a new selector.tick\r\n }\r\n\r\n if (this.measures.length > 1) {\r\n this._removeOverlappingTuplets(firstMeasure, selector.tick, firstMeasure.voices[selector.voice].notes.length - 1, selector.voice);\r\n this._removeOverlappingTuplets(lastMeasure, 0, lastMeasure.getClosestIndexFromTickCount(selector.voice, currentDuration), selector.voice);\r\n } else {\r\n this._removeOverlappingTuplets(firstMeasure, selector.tick, lastMeasure.getClosestIndexFromTickCount(selector.voice, currentDuration), selector.voice);\r\n }\r\n\r\n //if there are more than 2 measures remove tuplets from all but first and last measure.\r\n if (this.measures.length > 2) {\r\n for(let i = 1; i < this.measures.length - 2; i++) {\r\n this.measures[i].tupletTrees = [];\r\n }\r\n }\r\n }\r\n\r\n // ### _populatePre\r\n // When we paste, we replace entire measures. Populate the first measure up until the start of pasting.\r\n _populatePre(voiceIndex: number, measure: SmoMeasure, startTick: number, tickmap: TickMap) {\r\n const voice: SmoVoice = {\r\n notes: []\r\n };\r\n\r\n for (let i = 0; i < startTick; i++) {\r\n const note = measure.voices[voiceIndex].notes[i];\r\n voice.notes.push(SmoNote.clone(note));\r\n }\r\n\r\n return voice;\r\n }\r\n\r\n /**\r\n *\r\n * @param voiceIndex\r\n */\r\n // ### _populateVoice\r\n // ### Description:\r\n // Create a new voice for a new measure in the paste destination\r\n _populateVoice(): SmoVoice[] {\r\n // this._populateMeasureArray();\r\n const measures = this.measures;\r\n let measure = measures[0];\r\n let tickmap = measure.tickmapForVoice(this.destination.voice);\r\n let voice = this._populatePre(this.destination.voice, measure, this.destination.tick, tickmap);\r\n let startSelector = JSON.parse(JSON.stringify(this.destination));\r\n this.measureIndex = 0;\r\n const measureVoices = [];\r\n measureVoices.push(voice);\r\n while (this.measureIndex < measures.length) {\r\n measure = measures[this.measureIndex];\r\n while (measure.voices.length <= this.destination.voice) {\r\n const nvoice = { notes : SmoMeasure.getDefaultNotes(measure) };\r\n measure.voices.push(nvoice);\r\n }\r\n tickmap = measure.tickmapForVoice(this.destination.voice);\r\n this._populateNew(voice, measure, tickmap, startSelector);\r\n if (this.noteIndex < this.notes.length && this.measureIndex < measures.length) {\r\n voice = {\r\n notes: []\r\n };\r\n measureVoices.push(voice);\r\n startSelector = {\r\n staff: startSelector.staff,\r\n measure: startSelector.measure,\r\n voice: this.destination.voice,\r\n tick: 0\r\n };\r\n this.measureIndex += 1;\r\n startSelector.measure += 1;\r\n } else {\r\n break;\r\n }\r\n }\r\n this._populatePost(voice, this.destination.voice, measure, tickmap);\r\n return measureVoices;\r\n }\r\n\r\n static _countTicks(voice: SmoVoice): number {\r\n let voiceTicks = 0;\r\n voice.notes.forEach((note) => {\r\n voiceTicks += note.tickCount;\r\n });\r\n return voiceTicks;\r\n }\r\n\r\n /**\r\n * If the source contains a staff modifier that ends on the source selection, copy the modifier\r\n * @param srcSelector \r\n * @param destSelector \r\n * @param staff \r\n * @returns \r\n */\r\n _populateModifier(srcSelector: SmoSelector, destSelector: SmoSelector, staff: SmoSystemStaff) {\r\n const mod = this._findPlacedModifier(srcSelector);\r\n if (mod && this.score) {\r\n // Don't copy modifiers that cross staff boundaries outside the source staff b/c it's not clear what\r\n // the dest staff should be\r\n if (mod.startSelector.staff !== mod.endSelector.staff && srcSelector.staff !== destSelector.staff) {\r\n return;\r\n }\r\n const repl = StaffModifierBase.deserialize(mod.serialize());\r\n repl.endSelector = JSON.parse(JSON.stringify(destSelector));\r\n const tickOffset = SmoSelection.countTicks(this.score, mod.startSelector, mod.endSelector);\r\n this.modifiersToPlace.push({\r\n modifier: repl,\r\n ticksToStart: tickOffset\r\n });\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param measure\r\n * @param startIndex\r\n * @param endIndex\r\n * @param voiceIndex\r\n * @private\r\n */\r\n private _removeOverlappingTuplets(measure: SmoMeasure, startIndex: number, endIndex: number, voiceIndex: number): void {\r\n const tupletsToDelete: SmoTupletTree[] = [];\r\n for (let i = 0; i < measure.tupletTrees.length; ++i) {\r\n const tupletTree = measure.tupletTrees[i];\r\n if (startIndex >= tupletTree.startIndex && startIndex <= tupletTree.endIndex) {\r\n tupletsToDelete.push(tupletTree);\r\n break;\r\n }\r\n if (endIndex >= tupletTree.startIndex && endIndex <= tupletTree.endIndex) {\r\n tupletsToDelete.push(tupletTree);\r\n break;\r\n }\r\n }\r\n\r\n //todo: check if we need to remove tuplets in descending order\r\n for (let i: number = 0; i < tupletsToDelete.length; i++) {\r\n const tupletTree: SmoTupletTree = tupletsToDelete[i];\r\n SmoUnmakeTupletActor.apply({\r\n startIndex: tupletTree.startIndex,\r\n endIndex: tupletTree.endIndex,\r\n measure: measure,\r\n voice: voiceIndex\r\n });\r\n }\r\n }\r\n /**\r\n * Start copying the paste buffer into the destination by copying the notes and working out\r\n * the measure overlap\r\n * \r\n * @param voice \r\n * @param measure \r\n * @param tickmap \r\n * @param startSelector \r\n * @returns \r\n */\r\n _populateNew(voice: SmoVoice, measure: SmoMeasure, tickmap: TickMap, startSelector: SmoSelector) {\r\n let currentDuration = tickmap.durationMap[startSelector.tick];\r\n let i = 0;\r\n let j = 0;\r\n const totalDuration = tickmap.totalDuration;\r\n while (currentDuration < totalDuration && this.noteIndex < this.notes.length) {\r\n if (!this.score) {\r\n return;\r\n }\r\n const selection: PasteNote = this.notes[this.noteIndex];\r\n const note: SmoNote = selection.note;\r\n if (note.noteType === 'n') {\r\n const pitchAr: number[] = [];\r\n note.pitches.forEach((pitch, ix) => {\r\n pitchAr.push(ix);\r\n });\r\n SmoNote.transpose(note, pitchAr, measure.transposeIndex, selection.originalKey, measure.keySignature);\r\n }\r\n this._populateModifier(selection.selector, startSelector, this.score.staves[selection.selector.staff]);\r\n\r\n if (currentDuration + note.tickCount <= totalDuration && this.remainder === 0) {\r\n // The whole note fits in the measure, paste it.\r\n //If this note is a tuplet, and specifically if it is the beginning of a tuplet, we need to handle it\r\n //NOTE: tuplets never cross measure boundary, we made sure this is handled here: @see this._populateMeasureArray()\r\n if (selection.tupletStart) {\r\n const tupletTree: SmoTupletTree = SmoTupletTree.clone(selection.tupletStart);\r\n const startIndex: number = voice.notes.length;\r\n const diff: number = startIndex - tupletTree.startIndex;\r\n SmoTupletTree.adjustTupletIndexes([tupletTree], selection.selector.voice,-1, diff);\r\n measure.tupletTrees.push(tupletTree);\r\n }\r\n\r\n const nnote: SmoNote = SmoNote.clone(note);\r\n nnote.clef = measure.clef;\r\n voice.notes.push(nnote);\r\n currentDuration += note.tickCount;\r\n this.noteIndex += 1;\r\n startSelector.tick += 1;\r\n } else if (this.remainder > 0) {\r\n // This is a note that spilled over the last measure\r\n const nnote = SmoNote.cloneWithDuration(note, {\r\n numerator: this.remainder,\r\n denominator: 1,\r\n remainder: 0\r\n });\r\n nnote.clef = measure.clef;\r\n voice.notes.push(nnote);\r\n currentDuration += this.remainder;\r\n this.remainder = 0;\r\n } else {\r\n // The note won't fit, so we split it in 2 and paste the remainder in the next measure.\r\n // TODO: tie the last note to this one.\r\n const partial = totalDuration - currentDuration;\r\n const dar = SmoMusic.gcdMap(partial);\r\n for (j = 0; j < dar.length; ++j) {\r\n const ddd = dar[j];\r\n const vnote = SmoNote.cloneWithDuration(note, {\r\n numerator: ddd,\r\n denominator: 1,\r\n remainder: 0\r\n });\r\n voice.notes.push(vnote);\r\n }\r\n currentDuration += partial;\r\n\r\n // Set the remaining length of the current note, this will be added to the\r\n // next measure with the previous note's pitches\r\n this.remainder = note.tickCount - partial;\r\n }\r\n }\r\n }\r\n\r\n // ### _populatePost\r\n // When we paste, we replace entire measures. Populate the last measure from the end of paste to the\r\n // end of the measure with notes in the existing measure.\r\n _populatePost(voice: SmoVoice, voiceIndex: number, measure: SmoMeasure, tickmap: TickMap) {\r\n let endOfPasteDuration = PasteBuffer._countTicks(voice);\r\n let existingIndex = measure.getClosestIndexFromTickCount(voiceIndex, endOfPasteDuration);\r\n if (existingIndex > tickmap.durationMap.length - 1) {\r\n return;\r\n }\r\n let existingDuration = tickmap.durationMap[existingIndex];\r\n let endOfExistingDuration = existingDuration + tickmap.deltaMap[existingIndex];\r\n\r\n let startIndexToAdjustRemainingTuplets = voice.notes.length;\r\n let diffToAdjustRemainingTuplets: number = startIndexToAdjustRemainingTuplets - existingIndex - 1;\r\n\r\n\r\n if (Math.round(endOfPasteDuration) < Math.round(endOfExistingDuration)) {\r\n //pasted notes ended somewhere in the middle of an existing note\r\n //we need to remove the existing note and fill in the difference between the end of our pasted note and beginning of the next one\r\n const note = measure.voices[voiceIndex].notes[existingIndex];\r\n const lmap = SmoMusic.gcdMap(endOfExistingDuration - endOfPasteDuration);\r\n lmap.forEach((stemTick) => {\r\n const nnote = SmoNote.cloneWithDuration(note, stemTick);\r\n voice.notes.push(nnote);\r\n });\r\n diffToAdjustRemainingTuplets += lmap.length;\r\n existingIndex++;\r\n }\r\n SmoTupletTree.adjustTupletIndexes(measure.tupletTrees, voiceIndex, startIndexToAdjustRemainingTuplets, diffToAdjustRemainingTuplets);\r\n\r\n for (let i = existingIndex; i < measure.voices[voiceIndex].notes.length - 1; i++) {\r\n voice.notes.push(SmoNote.clone(measure.voices[voiceIndex].notes[i]));\r\n }\r\n }\r\n\r\n _pasteVoiceSer(serializedMeasure: any, vobj: any, voiceIx: number) {\r\n const voices: any[] = [];\r\n let ix = 0;\r\n serializedMeasure.voices.forEach((vc: any) => {\r\n if (ix !== voiceIx) {\r\n voices.push(vc);\r\n } else {\r\n voices.push(vobj);\r\n }\r\n ix += 1;\r\n });\r\n // If we are pasting into a measure that doesn't contain this voice, add the voice\r\n if (serializedMeasure.voices.length <= voiceIx) {\r\n voices.push(vobj);\r\n }\r\n serializedMeasure.voices = voices;\r\n }\r\n\r\n pasteSelections(selector: SmoSelector) {\r\n let i = 0;\r\n if (this.notes.length < 1) {\r\n return;\r\n }\r\n if (!this.score) {\r\n return;\r\n }\r\n const maxCutVoice = this.notes.map((n) => n.selector.voice).reduce((a, b) => a > b ? a : b);\r\n const minCutVoice = this.notes.map((n) => n.selector.voice).reduce((a, b) => a > b ? a : b);\r\n const backupNotes: PasteNote[] = [];\r\n this.notes.forEach((bb) => {\r\n const note = (SmoNote.deserialize(bb.note.serialize()));\r\n const selector = JSON.parse(JSON.stringify(bb.selector));\r\n let tupletStart = bb.tupletStart;\r\n if (tupletStart) {\r\n tupletStart = SmoTupletTree.deserialize(bb.tupletStart!.serialize());\r\n }\r\n backupNotes.push({ note, selector, originalKey: bb.originalKey, tupletStart });\r\n });\r\n if (minCutVoice === maxCutVoice && minCutVoice > selector.voice) {\r\n selector.voice = minCutVoice;\r\n }\r\n this.modifiersToPlace = [];\r\n this.noteIndex = 0;\r\n this.measureIndex = -1;\r\n this.remainder = 0;\r\n this._populateMeasureArray(selector);\r\n if (this.measures.length === 0) {\r\n return;\r\n }\r\n\r\n const voices = this._populateVoice();\r\n const measureSel = JSON.parse(JSON.stringify(this.destination));\r\n const selectors: SmoSelector[] = [];\r\n for (i = 0; i < this.measures.length && i < voices.length; ++i) {\r\n const measure: SmoMeasure = this.measures[i];\r\n const nvoice: SmoVoice = voices[i];\r\n const ser: any = measure.serialize();\r\n // Make sure the key is concert pitch, it is what measure constructor expects\r\n ser.transposeIndex = measure.transposeIndex; // default values are undefined, make sure the transpose is valid\r\n ser.keySignature = SmoMusic.vexKeySigWithOffset(measure.keySignature, -1 * measure.transposeIndex);\r\n ser.timeSignature = measure.timeSignature.serialize();\r\n ser.tempo = measure.tempo.serialize();\r\n const vobj: any = {\r\n notes: []\r\n };\r\n nvoice.notes.forEach((note: SmoNote) => {\r\n vobj.notes.push(note.serialize());\r\n });\r\n\r\n // TODO: figure out how to do this with multiple voices\r\n this._pasteVoiceSer(ser, vobj, this.destination.voice);\r\n const nmeasure = SmoMeasure.deserialize(ser);\r\n // If this is the non-display buffer, don't try to reset the display rectangles.\r\n // Q: Is this even required since we are going to re-render?\r\n // A: yes, because until we do, the replaced measure needs the formatting info\r\n if (measure.svg.logicalBox && measure.svg.logicalBox.width > 0) {\r\n nmeasure.setBox(SvgHelpers.smoBox(measure.svg.logicalBox), 'copypaste');\r\n nmeasure.setX(measure.svg.logicalBox.x, 'copyPaste');\r\n nmeasure.setWidth(measure.svg.logicalBox.width, 'copypaste');\r\n nmeasure.setY(measure.svg.logicalBox.y, 'copypaste');\r\n nmeasure.svg.element = measure.svg.element;\r\n nmeasure.svg.tabElement = measure.svg.tabElement;\r\n }\r\n ['forceClef', 'forceKeySignature', 'forceTimeSignature', 'forceTempo'].forEach((flag) => {\r\n (nmeasure as any)[flag] = (measure.svg as any)[flag];\r\n });\r\n this.score.replaceMeasure(measureSel, nmeasure);\r\n measureSel.measure += 1;\r\n selectors.push(\r\n { staff: selector.staff, measure: nmeasure.measureNumber.measureIndex, voice: 0, tick: 0, pitches: [] }\r\n );\r\n }\r\n this.replacementMeasures = [];\r\n selectors.forEach((selector: SmoSelector) => {\r\n const nsel: SmoSelection | null = SmoSelection.measureSelection(this.score as SmoScore, selector.staff, selector.measure);\r\n if (nsel) {\r\n this.replacementMeasures.push(nsel);\r\n }\r\n });\r\n this.modifiersToPlace.forEach((mod) => {\r\n let selection = SmoSelection.selectionFromSelector(this.score!, mod.modifier.endSelector);\r\n while (selection && mod.ticksToStart !== 0) {\r\n if (mod.ticksToStart < 0) {\r\n selection = SmoSelection.nextNoteSelectionFromSelector(this.score!, selection.selector);\r\n } else {\r\n selection = SmoSelection.lastNoteSelectionFromSelector(this.score!, selection.selector);\r\n }\r\n mod.ticksToStart -= 1 * Math.sign(mod.ticksToStart);\r\n }\r\n if (selection) {\r\n mod.modifier.startSelector = JSON.parse(JSON.stringify(selection.selector));\r\n selection.staff.addStaffModifier(mod.modifier);\r\n }\r\n });\r\n this.notes = backupNotes;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Pitch, PitchLetter, Clef, getId } from '../data/common';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoMeasureParams, SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { SmoSystemStaff, SmoSystemStaffParams } from '../data/systemStaff';\r\nimport { SmoArticulation, SmoGraceNote, SmoLyric, SmoMicrotone, SmoOrnament,\r\n SmoDynamicText, \r\n SmoTabNote} from '../data/noteModifiers';\r\nimport {\r\n SmoRehearsalMark, SmoMeasureText, SmoVolta, SmoMeasureFormat, SmoTempoText, SmoBarline,\r\n TimeSignature, SmoRepeatSymbol\r\n} from '../data/measureModifiers';\r\nimport { SmoStaffHairpin, SmoSlur, SmoTie, StaffModifierBase, SmoTieParams, SmoInstrument, SmoStaffHairpinParams,\r\n SmoSlurParams, SmoInstrumentMeasure, SmoStaffTextBracket, SmoStaffTextBracketParams,\r\n SmoTabStave } from '../data/staffModifiers';\r\nimport { SmoSystemGroup } from '../data/scoreModifiers';\r\nimport { SmoTextGroup } from '../data/scoreText';\r\nimport { SmoSelection, SmoSelector, ModifierTab } from './selections';\r\nimport { SmoContractNoteActor, SmoStretchNoteActor, SmoMakeTupletActor, SmoUnmakeTupletActor, SmoStretchNoteParams, SmoContractNoteParams, SmoMakeTupletParams} from './tickDuration';\r\nimport { SmoBeamer } from './beamers';\r\nimport { SmoTupletTree } from '../data/tuplet';\r\n/**\r\n * supported operations for {@link SmoOperation.batchSelectionOperation} to change a note's duration\r\n */\r\nexport type BatchSelectionOperation = 'dotDuration' | 'undotDuration' | 'doubleDuration' | 'halveDuration' |\r\n 'doubleGraceNoteDuration' | 'halveGraceNoteDuration';\r\n\r\nexport type createStaffModifierType = (fromSelection: SmoSelection, toSelection: SmoSelection) => T;\r\n/**\r\n * SmoOperation is a collection of static methods that operate on/change/transform the music. Most methods\r\n * take the score, a selection or selection array, and the parameters of the operation.\r\n * @category SmoUtilities\r\n */\r\nexport class SmoOperation {\r\n static setMeasureFormat(score: SmoScore, selection: SmoSelection, value: SmoMeasureFormat) {\r\n if (!score.formattingManager) {\r\n return;\r\n }\r\n score.staves.forEach((staff: SmoSystemStaff) => {\r\n value.formatMeasure(staff.measures[selection.selector.measure]);\r\n });\r\n score.formattingManager.updateMeasureFormat(value);\r\n }\r\n\r\n static addKeySignature(score: SmoScore, selection: SmoSelection, keySignature: string) {\r\n score.addKeySignature(selection.selector.measure, keySignature);\r\n }\r\n static addConnectorDown(score: SmoScore, selections: SmoSelection[], parameters: SmoSystemGroup) {\r\n const msel = SmoSelection.getMeasureList(selections);\r\n const len = msel.length - 1;\r\n if (score.staves.length <= msel[len].selector.staff) {\r\n return;\r\n }\r\n const existing = score.getSystemGroupForStaff(msel[0]);\r\n if (existing && existing.endSelector.staff < selections[len].selector.staff) {\r\n existing.endSelector.staff = msel[len].selector.staff + 1;\r\n } else {\r\n parameters.startSelector = SmoSelector.default;\r\n parameters.startSelector.staff = msel[0].selector.staff;\r\n parameters.startSelector.measure = msel[0].selector.measure;\r\n parameters.endSelector = SmoSelector.default;\r\n parameters.endSelector.staff = msel[len].selector.staff + 1;\r\n parameters.endSelector.measure = msel[len].selector.measure;\r\n score.addOrReplaceSystemGroup(new SmoSystemGroup(parameters));\r\n }\r\n }\r\n static toggleBeamGroup(noteSelection: SmoSelection) {\r\n if (!noteSelection.note) {\r\n return;\r\n }\r\n noteSelection.note.endBeam = !(noteSelection.note.endBeam);\r\n }\r\n static setActiveVoice(score: SmoScore, voiceIx: number) {\r\n score.staves.forEach((staff) => {\r\n staff.measures.forEach((measure) => {\r\n measure.setActiveVoice(voiceIx);\r\n });\r\n });\r\n }\r\n static moveStaffUpDown(score: SmoScore, selection: SmoSelection, index: number) {\r\n const index1 = selection.selector.staff;\r\n const index2 = selection.selector.staff + index;\r\n if (index2 < score.staves.length && index2 >= 0) {\r\n score.swapStaves(index1, index2);\r\n }\r\n }\r\n\r\n static depopulateVoice(selection: SmoSelection, voiceIx: number) {\r\n let ix = 0;\r\n const voices: SmoVoice[] = [];\r\n const measure = selection.measure;\r\n measure.voices.forEach((voice) => {\r\n if (measure.voices.length < 2 || ix !== voiceIx) {\r\n voices.push(voice);\r\n }\r\n ix += 1;\r\n });\r\n measure.voices = voices;\r\n\r\n if (measure.getActiveVoice() >= measure.voices.length) {\r\n measure.setActiveVoice(0);\r\n }\r\n }\r\n\r\n static populateVoice(selection: SmoSelection, voiceIx: number) {\r\n selection.measure.populateVoice(voiceIx);\r\n }\r\n\r\n static setTabStave(score: SmoScore, tabStave: SmoTabStave) {\r\n score.staves[tabStave.startSelector.staff].updateTabStave(tabStave);\r\n }\r\n static removeTabStave(score: SmoScore, tabStaves: SmoTabStave[]) {\r\n if (tabStaves.length > 0) {\r\n score.staves[tabStaves[0].startSelector.staff].removeTabStaves(tabStaves);\r\n }\r\n }\r\n static setTimeSignature(score: SmoScore, selections: SmoSelection[], timeSignature: TimeSignature) {\r\n const selectors: SmoSelector[] = [];\r\n let i = 0;\r\n // change the time signature for each stave in the score\r\n selections.forEach((selection) => {\r\n for (i = 0; i < score.staves.length; ++i) {\r\n const measureSel: SmoSelector = SmoSelector.measureSelector(i, selection.selector.measure);\r\n selectors.push(measureSel);\r\n }\r\n });\r\n selectors.forEach((selector: SmoSelector) => {\r\n const rowSelection: SmoSelection = (SmoSelection.measureSelection(score, selector.staff, selector.measure) as SmoSelection);\r\n rowSelection.measure.timeSignature = new TimeSignature(timeSignature);\r\n rowSelection.measure.alignNotesWithTimeSignature();\r\n });\r\n }\r\n\r\n static batchSelectionOperation(score: SmoScore, selections: SmoSelection[], operation: BatchSelectionOperation) {\r\n var measureTicks: { selector: SmoSelector, tickOffset: number }[] = [];\r\n selections.forEach((selection) => {\r\n const tm = selection.measure.tickmapForVoice(selection.selector.voice);\r\n const tickOffset = tm.durationMap[selection.selector.tick];\r\n const selector = JSON.parse(JSON.stringify(selection.selector));\r\n measureTicks.push({\r\n selector,\r\n tickOffset\r\n });\r\n });\r\n measureTicks.forEach((measureTick) => {\r\n const selection = SmoSelection.measureSelection(score, measureTick.selector.staff, measureTick.selector.measure) as SmoSelection;\r\n const tickmap = selection.measure.tickmapForVoice(measureTick.selector.voice);\r\n const ix = tickmap.durationMap.indexOf(measureTick.tickOffset);\r\n if (ix >= 0) {\r\n const nsel = SmoSelection.noteSelection(score, measureTick.selector.staff, measureTick.selector.measure,\r\n measureTick.selector.voice, ix);\r\n (SmoOperation as any)[operation](nsel);\r\n }\r\n });\r\n }\r\n // ## doubleDuration\r\n // ## Description\r\n // double the duration of a note in a measure, at the expense of the following\r\n // note, if possible. Works on tuplets also.\r\n static doubleDuration(selection: SmoSelection) {\r\n const note = selection.note;\r\n const newStemTicks = note!.stemTicks * 2;\r\n\r\n SmoStretchNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure: selection.measure,\r\n voice: selection.selector.voice,\r\n newStemTicks: newStemTicks\r\n });\r\n\r\n return true;\r\n }\r\n\r\n // ## halveDuration\r\n // ## Description\r\n // Replace the note with 2 notes of 1/2 duration, if possible\r\n // Works on tuplets also.\r\n static halveDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n let divisor = 2;\r\n const measure = selection.measure;\r\n const newStemTicks = note.stemTicks / divisor;\r\n\r\n SmoContractNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure: measure,\r\n voice: selection.selector.voice,\r\n newStemTicks: newStemTicks\r\n });\r\n SmoBeamer.applyBeams(measure);\r\n return true;\r\n }\r\n\r\n // ## makeTuplet\r\n // ## Description\r\n // Makes a non-tuplet into a tuplet of equal value.\r\n static makeTuplet(selection: SmoSelection, numNotes: number) {\r\n SmoMakeTupletActor.apply({\r\n measure: selection.measure,\r\n numNotes: numNotes,\r\n voice: selection.selector.voice,\r\n index: selection.selector.tick\r\n });\r\n }\r\n static addStaffModifier(selection: SmoSelection, modifier: StaffModifierBase) {\r\n selection.staff.addStaffModifier(modifier);\r\n }\r\n static toggleRest(selection: SmoSelection) {\r\n selection.note?.toggleRest();\r\n }\r\n static toggleSlash(selection: SmoSelection) {\r\n selection.note?.toggleSlash();\r\n }\r\n\r\n static makeRest(selection: SmoSelection) {\r\n selection.note?.makeRest();\r\n }\r\n static makeNote(selection: SmoSelection) {\r\n selection.note?.makeNote();\r\n }\r\n static setNoteHead(selections: SmoSelection[], noteHead: string) {\r\n selections.forEach((selection: SmoSelection) => {\r\n selection.note?.setNoteHead(noteHead);\r\n });\r\n }\r\n\r\n static addGraceNote(selection: SmoSelection, g: SmoGraceNote, offset: number) {\r\n selection.note?.addGraceNote(g, offset);\r\n }\r\n\r\n static removeGraceNote(selection: SmoSelection, offset: number) {\r\n selection.note?.removeGraceNote(offset);\r\n }\r\n\r\n static doubleGraceNoteDuration(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.ticks.numerator = mm.ticks.numerator * 2;\r\n });\r\n }\r\n static halveGraceNoteDuration(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.ticks.numerator = mm.ticks.numerator / 2;\r\n });\r\n }\r\n\r\n static toggleGraceNoteCourtesy(selection: any, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm: SmoGraceNote) => {\r\n mm.pitches.forEach((pitch: Pitch) => {\r\n // eslint-disable-next-line\r\n pitch.cautionary = pitch.cautionary ? false : true;\r\n });\r\n });\r\n }\r\n static toggleGraceNoteEnharmonic(selection: SmoSelection, modifiers: SmoGraceNote[]) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm) => {\r\n mm.pitches.forEach((pitch) => {\r\n SmoNote.toggleEnharmonic(pitch);\r\n });\r\n });\r\n }\r\n\r\n static transposeGraceNotes(selection: SmoSelection, modifiers: SmoGraceNote[], offset: number) {\r\n if (!Array.isArray(modifiers)) {\r\n modifiers = [modifiers];\r\n }\r\n modifiers.forEach((mm: SmoGraceNote) => {\r\n const par: Pitch[] = [];\r\n if (!mm) {\r\n console.warn('bad modifier grace note');\r\n return;\r\n }\r\n mm.pitches.forEach((pitch) => {\r\n par.push(SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(pitch) + offset));\r\n });\r\n mm.pitches = par;\r\n });\r\n }\r\n\r\n static slashGraceNotes(selections: ModifierTab[] | ModifierTab) {\r\n if (!Array.isArray(selections)) {\r\n selections = [selections];\r\n }\r\n // TODO: modifiers on artifacts should be typed\r\n selections.forEach((mm: any) => {\r\n if (mm.modifier && mm.modifier.ctor === 'SmoGraceNote') {\r\n mm.modifier.slash = !mm.modifier.slash;\r\n }\r\n });\r\n }\r\n\r\n // ## unmakeTuplet\r\n // ## Description\r\n // Makes a tuplet into a single with the duration of the whole tuplet\r\n static unmakeTuplet(selection: SmoSelection) {\r\n const selector = selection.selector;\r\n const measure = selection.measure;\r\n\r\n const tuplets = SmoTupletTree.getTupletHierarchyForNoteIndex(measure.tupletTrees, selector.voice, selector.tick);\r\n if (!tuplets.length) {\r\n return;\r\n }\r\n const tuplet = tuplets[0];\r\n\r\n SmoUnmakeTupletActor.apply({\r\n startIndex: tuplet.startIndex,\r\n endIndex: tuplet.endIndex,\r\n measure: measure,\r\n voice: selector.voice\r\n });\r\n }\r\n\r\n // ## dotDuration\r\n // ## Description\r\n // Add a dot to a note, if possible, and make the note ahead of it shorter\r\n // to compensate.\r\n static dotDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n const measure = selection.measure;\r\n const newStemTicks = SmoMusic.getNextDottedLevel(note.stemTicks);\r\n if (newStemTicks === note.stemTicks) {\r\n return;\r\n }\r\n // Don't dot if the thing on the right of the . is too small\r\n const dotCount = SmoMusic.smoTicksToVexDots(newStemTicks);\r\n const multiplier = Math.pow(2, dotCount);\r\n const baseDot = SmoMusic.closestDurationTickLtEq(newStemTicks) / (multiplier * 2);\r\n if (baseDot <= 128) {\r\n return;\r\n }\r\n // If this is the ultimate note in the measure, we can't increase the length\r\n if (selection.selector.tick + 1 === selection.measure.voices[selection.selector.voice].notes.length) {\r\n return;\r\n }\r\n if (selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].stemTicks > note.stemTicks) {\r\n console.log('too long');\r\n return;\r\n }\r\n // is dot too short?\r\n if (!SmoMusic.validDurations[selection.measure.voices[selection.selector.voice].notes[selection.selector.tick + 1].stemTicks / 2]) {\r\n return;\r\n }\r\n\r\n SmoStretchNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure: measure,\r\n voice: selection.selector.voice,\r\n newStemTicks: newStemTicks\r\n });\r\n }\r\n\r\n // ## undotDuration\r\n // ## Description\r\n // Add the value of the last dot to the note, increasing length and\r\n // reducing the number of dots.\r\n static undotDuration(selection: SmoSelection) {\r\n const note = selection.note as SmoNote;\r\n const measure = selection.measure;\r\n const newStemTicks = SmoMusic.getPreviousDottedLevel(note.stemTicks);\r\n if (newStemTicks === note.stemTicks) {\r\n return;\r\n }\r\n\r\n SmoContractNoteActor.apply({\r\n startIndex: selection.selector.tick,\r\n measure: measure,\r\n voice: selection.selector.voice,\r\n newStemTicks: newStemTicks\r\n });\r\n }\r\n\r\n static transposeScore(score: SmoScore, offset: number) {\r\n score.staves.forEach((staff, staffIx) => {\r\n staff.measures.forEach((measure, measureIx) => {\r\n measure.voices.forEach((voice, voiceIx) => {\r\n voice.notes.forEach((note, tickIx) => {\r\n const selection = SmoSelection.noteSelection(\r\n score,staffIx, measureIx, voiceIx, tickIx);\r\n if (selection) {\r\n this.transpose(selection, offset);\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }\r\n static updateTabNote(selections: SmoSelection[], tabNote: SmoTabNote) {\r\n selections.forEach((sel) => {\r\n if (sel.note) {\r\n sel.note.setTabNote(tabNote);\r\n }\r\n });\r\n }\r\n static removeTabNote(selections: SmoSelection[]) {\r\n selections.forEach((sel) => {\r\n if (sel.note) {\r\n sel.note.clearTabNote();\r\n }\r\n });\r\n }\r\n // ## transpose\r\n // ## Description\r\n // Transpose the selected note, trying to find a key-signature friendly value\r\n static transpose(selection: SmoSelection, offset: number) {\r\n let trans: Pitch;\r\n let transInt: number = 0;\r\n let i: number = 0;\r\n if (typeof (selection.selector.pitches) === 'undefined') {\r\n selection.selector.pitches = [];\r\n }\r\n const measure = selection.measure;\r\n const note = selection.note;\r\n if (measure && note) {\r\n const pitchar: Pitch[] = [];\r\n const tabStave: SmoTabStave | undefined = selection.staff.getTabStaveForMeasure(selection.selector);\r\n note.pitches.forEach((opitch, pitchIx) => {\r\n // Only translate selected pitches\r\n const shouldXpose = selection.selector.pitches.length === 0 ||\r\n selection.selector.pitches.indexOf(pitchIx) >= 0;\r\n\r\n // Translate the pitch, ignoring enharmonic\r\n trans = shouldXpose ? SmoMusic.getKeyOffset(opitch, offset)\r\n : JSON.parse(JSON.stringify(opitch));\r\n if (shouldXpose) {\r\n trans = SmoMusic.getEnharmonicInKey(trans, measure.keySignature);\r\n if (!trans.accidental) {\r\n trans.accidental = 'n';\r\n }\r\n transInt = SmoMusic.smoPitchToInt(trans);\r\n\r\n // Look through the earlier notes in the measure and try\r\n // to find an equivalent note, and convert it if it exists.\r\n measure.voices.forEach((voice) => {\r\n for (i = 0; i < selection.selector.tick\r\n && i < voice.notes.length; ++i) {\r\n const prevNote = voice.notes[i];\r\n // eslint-disable-next-line\r\n prevNote.pitches.forEach((prevPitch: Pitch) => {\r\n const prevInt = SmoMusic.smoPitchToInt(prevPitch);\r\n if (prevInt === transInt) {\r\n trans = JSON.parse(JSON.stringify(prevPitch));\r\n }\r\n });\r\n }\r\n });\r\n }\r\n pitchar.push(trans as Pitch);\r\n });\r\n note.pitches = pitchar;\r\n // If this note has a tab stave, try to preserve the assigned string.\r\n // If not possible, find the default string/fret for the note\r\n if (note.tabNote) {\r\n note.tabNote.positions.forEach((pp, ix) => {\r\n if (pp.fret + offset > 0) {\r\n pp.fret = pp.fret + offset;\r\n } else if (tabStave && note.pitches.length > ix) {\r\n const position = SmoTabStave.getDefaultPositionForStaff(note.pitches[ix], tabStave.stringPitches, offset);\r\n pp.fret = position.fret;\r\n pp.string = position.string;\r\n } else {\r\n pp.fret = 0; \r\n }\r\n });\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // ## setPitch\r\n // ## Description:\r\n // pitches can be either an array, a single pitch, or a letter. In the latter case,\r\n // the letter value appropriate for the key signature is used, e.g. c in A major becomes\r\n // c#\r\n static setPitch(selection: SmoSelection, pitches: Pitch[]) {\r\n let i = 0;\r\n const measure = selection.measure;\r\n const note = selection.note as SmoNote;\r\n if (typeof (note) === 'undefined') {\r\n console.warn('set Pitch on invalid note');\r\n return;\r\n }\r\n note.makeNote();\r\n // TODO allow hint for octave\r\n const octave = note.pitches[0].octave;\r\n note.pitches = [];\r\n if (!Array.isArray(pitches)) {\r\n pitches = [pitches];\r\n }\r\n const earlierAccidental = (pitch: Pitch) => {\r\n selection.measure.voices.forEach((voice) => {\r\n for (i = 0; i < selection.selector.tick\r\n && i < voice.notes.length; ++i) {\r\n const prevNote = voice.notes[i];\r\n if (prevNote === null || prevNote.pitches === null) {\r\n console.log('this will die null');\r\n }\r\n prevNote.pitches.forEach((prevPitch: Pitch) => {\r\n if (prevNote.noteType === 'n' && prevPitch.letter === pitch.letter) {\r\n pitch.accidental = prevPitch.accidental;\r\n }\r\n });\r\n }\r\n });\r\n };\r\n pitches.forEach((pitch) => {\r\n if (typeof (pitch) === 'string') {\r\n const letter = SmoMusic.getKeySignatureKey(pitch[0], measure.keySignature);\r\n pitch = {\r\n letter: letter[0] as PitchLetter,\r\n accidental: letter.length > 1 ? letter.substring(1) : '',\r\n octave\r\n };\r\n }\r\n earlierAccidental(pitch);\r\n note.pitches.push(pitch);\r\n });\r\n }\r\n\r\n static toggleCourtesyAccidental(selection: SmoSelection) {\r\n let toBe: boolean = false;\r\n const note = selection.note as SmoNote;\r\n if (!selection.selector.pitches || selection.selector.pitches.length === 0) {\r\n const ps: Pitch[] = [];\r\n note.pitches.forEach((pitch) => {\r\n const p = JSON.parse(JSON.stringify(pitch));\r\n ps.push(p);\r\n p.cautionary = !(pitch.cautionary);\r\n });\r\n note.pitches = ps;\r\n } else {\r\n toBe = !(note.pitches[selection.selector.pitches[0]].cautionary);\r\n }\r\n SmoOperation.courtesyAccidental(selection, toBe);\r\n }\r\n\r\n static courtesyAccidental(pitchSelection: SmoSelection, toBe: boolean) {\r\n pitchSelection.selector.pitches.forEach((pitchIx) => {\r\n (pitchSelection.note as SmoNote).pitches[pitchIx].cautionary = toBe;\r\n });\r\n }\r\n\r\n static toggleEnharmonic(pitchSelection: SmoSelection) {\r\n if (pitchSelection.selector.pitches.length === 0) {\r\n pitchSelection.selector.pitches.push(0);\r\n }\r\n const pitch = (pitchSelection.note as SmoNote).pitches[pitchSelection.selector.pitches[0]];\r\n SmoNote.toggleEnharmonic(pitch);\r\n }\r\n\r\n static addDynamic(selection: SmoSelection, dynamic: SmoDynamicText) {\r\n (selection.note as SmoNote).addDynamic(dynamic);\r\n }\r\n\r\n static removeDynamic(selection: SmoSelection, dynamic: SmoDynamicText) {\r\n (selection.note as SmoNote).removeDynamic(dynamic);\r\n }\r\n\r\n static beamSelections(score: SmoScore, selections: SmoSelection[]) {\r\n const start = selections[0].selector;\r\n let cur = selections[0].selector;\r\n const beamGroup: SmoNote[] = [];\r\n let ticks = 0;\r\n selections.forEach((selection) => {\r\n const note = selection.note as SmoNote;\r\n if (SmoSelector.sameNote(start, selection.selector) ||\r\n (SmoSelector.sameMeasure(selection.selector, cur) &&\r\n cur.tick === selection.selector.tick - 1)) {\r\n ticks += note.tickCount;\r\n cur = selection.selector;\r\n beamGroup.push(note);\r\n }\r\n });\r\n if (beamGroup.length) {\r\n beamGroup.forEach((note) => {\r\n note.beamBeats = ticks;\r\n note.endBeam = false;\r\n });\r\n beamGroup[beamGroup.length - 1].endBeam = true;\r\n // Make sure the last note of the previous beam is the end of this beam group.\r\n if (selections[0].selector.tick > 0) {\r\n const ps = JSON.parse(JSON.stringify(selections[0].selector));\r\n ps.tick -= 1;\r\n const previous: SmoSelection | null = SmoSelection.noteFromSelector(score, ps);\r\n if (previous?.note && previous.note.tickCount < 4096) {\r\n previous.note.endBeam = true;\r\n }\r\n }\r\n }\r\n }\r\n static clearAllBeamGroups(score: SmoScore) { \r\n score.staves.forEach((ss) => {\r\n ss.measures.forEach((mm) => {\r\n mm.voices.forEach((vv) => {\r\n const triple = mm.timeSignature.actualBeats % 3 === 0;\r\n vv.notes.forEach((note) => {\r\n note.beamBeats = triple ? score.preferences.defaultTripleDuration : score.preferences.defaultDupleDuration;\r\n note.endBeam = false;\r\n });\r\n });\r\n });\r\n });\r\n }\r\n static clearBeamGroups(score: SmoScore, selections: SmoSelection[]) {\r\n selections.forEach((ss) => {\r\n if (ss.note) {\r\n const triple = ss.measure.timeSignature.actualBeats % 3 === 0;\r\n const note = ss.note;\r\n note.beamBeats = triple ? score.preferences.defaultTripleDuration : score.preferences.defaultDupleDuration;\r\n note.endBeam = false;\r\n }\r\n });\r\n }\r\n\r\n static toggleBeamDirection(selections: SmoSelection[]) {\r\n const note0 = selections[0].note as SmoNote;\r\n note0.toggleFlagState();\r\n selections.forEach((selection) => {\r\n const note = selection.note as SmoNote;\r\n note.flagState = note0.flagState;\r\n });\r\n }\r\n\r\n static addEnding(score: SmoScore, parameters: SmoVolta) {\r\n let m = 0;\r\n let s = 0;\r\n const startMeasure = parameters.startBar;\r\n const endMeasure = parameters.endBar;\r\n\r\n // Ending ID ties all the instances of an ending across staves\r\n parameters.endingId = getId().toString();\r\n score.staves.forEach((staff) => {\r\n m = 0;\r\n staff.measures.forEach((measure) => {\r\n if (m === startMeasure) {\r\n const pp = JSON.parse(JSON.stringify(parameters));\r\n pp.startSelector = {\r\n staff: s,\r\n measure: startMeasure\r\n };\r\n pp.endSelector = {\r\n staff: s,\r\n measure: endMeasure\r\n };\r\n const ending = new SmoVolta(pp);\r\n measure.addNthEnding(ending);\r\n }\r\n m += 1;\r\n });\r\n s += 1;\r\n });\r\n }\r\n\r\n static removeEnding(score: SmoScore, ending: SmoVolta) {\r\n let i = 0;\r\n score.staves.forEach((staff) => {\r\n // bug\r\n // Due to deleted measures, volta might not match up so look through all measures.\r\n for (i = 0; i < staff.measures.length; ++i) {\r\n staff.measures[i].removeNthEnding(ending);\r\n }\r\n });\r\n }\r\n\r\n static addTextGroup(score: SmoScore, textGroup: SmoTextGroup) {\r\n score.addTextGroup(textGroup);\r\n }\r\n\r\n static removeTextGroup(score: SmoScore, textGroup: SmoTextGroup) {\r\n score.removeTextGroup(textGroup);\r\n }\r\n\r\n static addMeasureText(score: SmoScore, selection: SmoSelection, measureText: SmoMeasureText) {\r\n const current = selection.measure.getMeasureText();\r\n // TODO: should we allow multiples per position\r\n current.forEach((mod) => {\r\n selection.measure.removeMeasureText(mod.attrs.id);\r\n });\r\n selection.measure.addMeasureText(measureText);\r\n }\r\n\r\n static removeMeasureText(score: SmoScore, selection: SmoSelection, mt: SmoMeasureText) {\r\n selection.measure.removeMeasureText(mt.attrs.id);\r\n }\r\n\r\n static removeRehearsalMark(score: SmoScore, selection: SmoSelection) {\r\n score.staves.forEach((staff) => {\r\n staff.removeRehearsalMark(selection.selector.measure);\r\n });\r\n }\r\n\r\n static addRehearsalMark(score: SmoScore, selection: SmoSelection, rehearsalMark: SmoRehearsalMark) {\r\n score.staves.forEach((staff) => {\r\n const mt = new SmoRehearsalMark(rehearsalMark.serialize());\r\n staff.addRehearsalMark(selection.selector.measure, mt);\r\n });\r\n }\r\n\r\n static addTempo(score: SmoScore, selection: SmoSelection, tempo: SmoTempoText) {\r\n score.staves.forEach((staff) => {\r\n staff.addTempo(tempo, selection.selector.measure);\r\n });\r\n }\r\n\r\n static setMeasureBarline(score: SmoScore, selection: SmoSelection, barline: SmoBarline) {\r\n const mm = selection.selector.measure;\r\n let ix = 0;\r\n score.staves.forEach(() => {\r\n const s2: SmoSelection | null = SmoSelection.measureSelection(score, ix, mm);\r\n s2?.measure.setBarline(barline);\r\n ix += 1;\r\n });\r\n }\r\n\r\n static setRepeatSymbol(score: SmoScore, selection: SmoSelection, sym: SmoRepeatSymbol) {\r\n let ix = 0;\r\n const mm = selection.selector.measure;\r\n score.staves.forEach(() => {\r\n const s2 = SmoSelection.measureSelection(score, ix, mm);\r\n s2?.measure.setRepeatSymbol(sym);\r\n ix += 1;\r\n });\r\n }\r\n\r\n // ## interval\r\n // Add a pitch at the specified interval to the chord in the selection.\r\n static interval(selection: SmoSelection, interval: number) {\r\n const measure = selection.measure;\r\n const note = selection.note as SmoNote;\r\n let pitch: Pitch = {} as Pitch;\r\n\r\n // TODO: figure out which pitch is selected\r\n pitch = note.pitches[0];\r\n if (interval > 0) {\r\n pitch = note.pitches[note.pitches.length - 1];\r\n }\r\n pitch = SmoMusic.getIntervalInKey(pitch, measure.keySignature, interval);\r\n if (pitch) {\r\n note.pitches.push(pitch);\r\n note.pitches.sort((x, y) =>\r\n SmoMusic.smoPitchToInt(x) - SmoMusic.smoPitchToInt(y)\r\n );\r\n return true;\r\n }\r\n return false;\r\n }\r\n static addOrReplaceBracket(modifier: SmoStaffTextBracket, fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n fromSelection.staff.addTextBracket(modifier);\r\n }\r\n static createRitardBracket(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.RITARD;\r\n const modifier = new SmoStaffTextBracket(params);\r\n return modifier;\r\n }\r\n static createAccelerandoBracket(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.ACCEL;\r\n const modifier = new SmoStaffTextBracket(params);\r\n return modifier;\r\n }\r\n static createCrescendoBracket(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.CRESCENDO;\r\n const modifier = new SmoStaffTextBracket(params);\r\n return modifier;\r\n }\r\n static createDimenuendoBracket(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffTextBracketParams = SmoStaffTextBracket.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.text = SmoStaffTextBracket.CRESCENDO;\r\n const modifier = new SmoStaffTextBracket(params);\r\n return modifier;\r\n }\r\n static createCrescendo(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffHairpinParams = SmoStaffHairpin.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.hairpinType = SmoStaffHairpin.types.CRESCENDO;\r\n const modifier = new SmoStaffHairpin(params);\r\n return modifier;\r\n }\r\n\r\n static createDecrescendo(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n const params: SmoStaffHairpinParams = SmoStaffHairpin.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(fromSelection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(toSelection.selector));\r\n params.hairpinType = SmoStaffHairpin.types.DECRESCENDO;\r\n const modifier = new SmoStaffHairpin(params);\r\n return modifier;\r\n }\r\n static createTie(fromSelection: SmoSelection, toSelection: SmoSelection) {\r\n // By default, just tie all the pitches to all the other pitches in order\r\n const lines = SmoTie.createLines(fromSelection.note as SmoNote, toSelection.note as SmoNote);\r\n const params: SmoTieParams = SmoTie.defaults;\r\n params.startSelector = fromSelection.selector;\r\n params.endSelector = toSelection.selector;\r\n params.lines = lines;\r\n const modifier = new SmoTie(params);\r\n return modifier;\r\n }\r\n\r\n static getSlurDefaultParameters(selections: SmoSelection[]) {\r\n const lastIndex = selections.length - 1;\r\n const note1 = selections[0].note;\r\n const note2 = selections[lastIndex].note;\r\n const inners = [];\r\n let minLine = -1;\r\n let maxLine = 0;\r\n if (selections.length > 2) {\r\n for (var i = 1; i < selections.length - 1; ++i) {\r\n inners.push(selections[i]);\r\n }\r\n }\r\n if (note1 === null || note2 === null) {\r\n throw('no note in slur selections');\r\n } \r\n }\r\n /**\r\n * Heuristically determine how a slur should be formatted based on the notes. Determine control points,\r\n * offset, and alignment\r\n * \r\n * ## Note: Vexflow slurs consider `top` to mean the furthest point from the note head, which could be the top\r\n * or the bottom of the note. It also considers yoffset to be negative if inverted is set. Head means close to the\r\n * note head.\r\n * @param score \r\n * @param fromSelection \r\n * @param toSelection \r\n * @returns \r\n */\r\n static getDefaultSlurDirection(score: SmoScore, fromSelector: SmoSelector, toSelector: SmoSelector):SmoSlurParams {\r\n const params: SmoSlurParams = SmoSlur.defaults;\r\n const sels = SmoSelector.order(fromSelector, toSelector);\r\n params.startSelector = JSON.parse(JSON.stringify(sels[0]));\r\n params.endSelector = JSON.parse(JSON.stringify(sels[1]));\r\n const fromSelection = SmoSelection.noteFromSelector(score, fromSelector);\r\n if (!fromSelection) {\r\n return params;\r\n }\r\n // Get all selections within the slur\r\n const selections = SmoSelection.innerSelections(score, sels[0], sels[1]).filter((ff) => ff.selector.voice === fromSelection.selector.voice);\r\n const dirs: Record = {};\r\n const beamGroups: Record = {};\r\n let startDir = SmoNote.flagStates.up;\r\n let mixed = false;\r\n let endDir = SmoNote.flagStates.up;\r\n let firstGap = 0;\r\n let lastGap = 0;\r\n if (selections.length < 1) {\r\n return new SmoSlur(params);\r\n }\r\n \r\n selections.forEach((selection, selectionIx) => {\r\n const note = selection.note!;\r\n if (note.beam_group) {\r\n beamGroups[note.beam_group.id] = true;\r\n } else {\r\n beamGroups[note.attrs.id] = true;\r\n }\r\n // Find the gap between the first and second note, and also between last 2. If they are far apart,\r\n // increase the control points so the slurs don't run into the notes\r\n if (selectionIx === 1) {\r\n const lastNote = selections[0].note!;\r\n firstGap = Math.abs(SmoMusic.pitchToStaffLine(note.clef as Clef, note.pitches[0]) - \r\n SmoMusic.pitchToStaffLine(lastNote.clef as Clef, lastNote.pitches[0]));\r\n }\r\n if (selectionIx === selections.length - 2 && selections.length > 2) {\r\n const nextNote = selections[selectionIx + 1].note!;\r\n lastGap = Math.abs(SmoMusic.pitchToStaffLine(note.clef as Clef, note.pitches[0]) - \r\n SmoMusic.pitchToStaffLine(nextNote.clef as Clef, nextNote.pitches[0]));\r\n }\r\n const fstate = SmoMusic.flagStateFromNote(note.clef as Clef, note);\r\n // Keep track of the number of stem directions, so we can determine if the flags are mixed direction\r\n // the rules are a little different for mixed - we always try to put the slur on (the real) top of the staff.\r\n dirs[fstate] = true;\r\n if (selectionIx === 0) {\r\n startDir = fstate;\r\n }\r\n if (selectionIx === selections.length - 1) {\r\n endDir = fstate;\r\n }\r\n });\r\n params.orientation = SmoSlur.orientations.AUTO;\r\n params.position = SmoSlur.positions.AUTO;\r\n params.position_end = SmoSlur.positions.AUTO;\r\n mixed = Object.keys(dirs).length > 1;\r\n // If the notes are beamed together, we assume the beams point in the same direction\r\n if (mixed) {\r\n // special case: slur 2 notes, note heads close, connect the note heads\r\n // to keep a flat arc\r\n if (selections.length === 2 && firstGap < 3) {\r\n params.xOffset = 5;\r\n } else {\r\n if (firstGap >= 3 || lastGap >= 3) {\r\n params.cp1y = 45;\r\n params.cp2y = 45;\r\n }\r\n }\r\n } else {\r\n if (firstGap >= 2 || lastGap >= 2) {\r\n params.cp1y = 45;\r\n params.cp2y = 45;\r\n params.yOffset += 10;\r\n } else {\r\n params.yOffset += 10;\r\n } \r\n }\r\n if (selections.length === 2) {\r\n params.xOffset = 0;\r\n }\r\n return params;\r\n }\r\n static createSlur(score: SmoScore, fromSelection: SmoSelection, toSelection: SmoSelection): SmoSlur {\r\n const params = SmoOperation.getDefaultSlurDirection(score, fromSelection.selector, toSelection.selector);\r\n const modifier: SmoSlur = new SmoSlur(params);\r\n return modifier;\r\n }\r\n static addStaff(score: SmoScore, parameters: SmoSystemStaffParams): SmoSystemStaff {\r\n return score.addStaff(parameters);\r\n }\r\n static removeStaff(score: SmoScore, index: number) {\r\n score.removeStaff(index);\r\n }\r\n\r\n static transposeChords(smoNote: SmoNote, offset: number, key: string) {\r\n const chords = smoNote.getModifiers('SmoLyric');\r\n chords.forEach((ll) => {\r\n const lyric = ll as SmoLyric;\r\n if (lyric.parser === SmoLyric.parsers.chord) {\r\n const tx = lyric.getText();\r\n // Look for something that looks like a key name\r\n if (tx.length >= 1 && (tx[0].toUpperCase() >= 'A'\r\n && tx[0].toUpperCase() <= 'G')) {\r\n // toffset is 2 if the key has b or # in it\r\n let toffset = 1;\r\n let newText = tx[0];\r\n if (tx.length > 0 && tx[1] === 'b' || tx[1] === '#') {\r\n newText += tx[1];\r\n toffset = 2;\r\n }\r\n // Transpose the key, as if it were a key signature (octave has no meaning)\r\n let nkey = SmoMusic.smoIntToPitch(SmoMusic.smoPitchToInt(\r\n SmoMusic.pitchKeyToPitch(SmoMusic.vexToSmoKey(newText))) + offset);\r\n nkey = JSON.parse(JSON.stringify(SmoMusic.getEnharmonicInKey(nkey, key)));\r\n newText = nkey.letter.toUpperCase();\r\n\r\n // new key may have different length, e.g. Bb to B natural\r\n if (nkey.accidental !== 'n') {\r\n newText += nkey.accidental;\r\n }\r\n newText += tx.substr(toffset, tx.length - toffset);\r\n lyric.setText(newText);\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * Compute new map based on current instrument selections, adjusting existing instruments as required\r\n * @param instrument\r\n * @param selections\r\n */\r\n static changeInstrument(instrument: SmoInstrument, selections: SmoSelection[]) {\r\n const measureSel = SmoSelection.getMeasureList(selections);\r\n const measureIndex = measureSel[0].selector.measure;\r\n const measureEnd = measureIndex + (measureSel.length - 1);\r\n instrument.startSelector = JSON.parse(JSON.stringify(measureSel[0].selector));\r\n instrument.endSelector = JSON.parse(JSON.stringify(measureSel[measureSel.length - 1].selector));\r\n const instMap: Record = {};\r\n const staffArray: SmoInstrumentMeasure[] = SmoSystemStaff.getStaffInstrumentArray(measureSel[0].staff.measureInstrumentMap);\r\n instMap[measureIndex] = instrument;\r\n staffArray.forEach((ar) => {\r\n if (ar.instrument.endSelector.measure < measureIndex || ar.instrument.startSelector.measure > measureEnd) {\r\n // No overlap, juse use the original instrument\r\n instMap[ar.instrument.startSelector.measure] = new SmoInstrument(ar.instrument);\r\n } else if (ar.instrument.startSelector.measure < measureIndex) {\r\n // overlap on left\r\n const split1 = new SmoInstrument(ar.instrument);\r\n split1.startSelector.measure = ar.instrument.startSelector.measure;\r\n instMap[split1.startSelector.measure] = split1;\r\n split1.endSelector.measure = measureIndex - 1;\r\n if (ar.instrument.endSelector.measure > measureEnd) {\r\n // overlap on left and right\r\n const split2 = new SmoInstrument(ar.instrument);\r\n split2.startSelector.measure = measureEnd + 1;\r\n split2.endSelector.measure = ar.instrument.endSelector.measure;\r\n instMap[split2.startSelector.measure] = split2;\r\n }\r\n instMap[ar.instrument.startSelector.measure] = new SmoInstrument(ar.instrument);\r\n } else if (ar.instrument.endSelector.measure > measureEnd) {\r\n // overlap on right only\r\n const split1 = new SmoInstrument(ar.instrument);\r\n split1.startSelector.measure = measureEnd + 1;\r\n instMap[split1.startSelector.measure] = split1;\r\n }\r\n });\r\n selections[0].staff.measureInstrumentMap = instMap;\r\n selections[0].staff.updateInstrumentOffsets();\r\n }\r\n static computeMultipartRest(score: SmoScore) {\r\n let i = 0;\r\n let j = 0;\r\n const measureRanges: Record = {};\r\n const measureCount = score.staves[0].measures.length;\r\n if (score.staves[0].partInfo.expandMultimeasureRests === true) {\r\n return;\r\n }\r\n while (i < measureCount) {\r\n let forceRest = score.staves[0].measures[i].format.forceRest;\r\n if (score.isMultimeasureRest(i, true, forceRest)) {\r\n for (j = i + 1; j < measureCount; ++j) {\r\n const restBreak = score.staves[0].measures[j].format.restBreak;\r\n forceRest = score.staves[0].measures[j].format.forceRest; \r\n if (!score.isMultimeasureRest(j, false, forceRest) || restBreak) {\r\n break; \r\n }\r\n }\r\n if (j - i >= 2) {\r\n measureRanges[i] = j;\r\n }\r\n i = j;\r\n } else {\r\n const startMeasure = i;\r\n score.staves.forEach((staff) => {\r\n staff.measures[startMeasure].svg.hideMultimeasure = false;\r\n });\r\n i += 1;\r\n }\r\n }\r\n const multiKeys = Object.keys(measureRanges).map((x) => parseInt(x, 10));\r\n multiKeys.forEach((key) => {\r\n const endMeasure = measureRanges[key];\r\n score.staves.forEach((staff) => {\r\n const mmLength = endMeasure - key;\r\n const svg = staff.measures[key].svg;\r\n svg.multimeasureLength = mmLength;\r\n if (svg.multimeasureLength > 1) {\r\n svg.multimeasureEndBarline = staff.measures[endMeasure - 1].getEndBarline().barline;\r\n }\r\n staff.measures[key].svg.hideMultimeasure = false;\r\n for (i = key + 1; i < endMeasure; ++i) {\r\n staff.measures[i].svg.hideMultimeasure = true;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Editing operations are performed on selections. A selection can be different things, from a single pitch\r\n * to many notes. These classes standardize some standard selection operations.\r\n * SmoSelector\r\n * @module /smo/xform/selections\r\n */\r\nimport { SmoScore, SmoModifier } from '../data/score';\r\nimport { SmoMeasure } from '../data/measure';\r\nimport { SmoNote } from '../data/note';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SvgBox, SvgPoint } from '../data/common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\n/**\r\n * Modifier tab is a modifier and its bounding box, that can be tabbed to with the keyboard\r\n */\r\n export interface ModifierTab {\r\n modifier: SmoModifier,\r\n selection: SmoSelection | null,\r\n box: SvgBox,\r\n index: number\r\n}\r\n\r\n/**\r\n * There are 2 parts to a selection: the actual musical bits that are selected, and the\r\n * indices that define what was selected. This is the latter. The actual object does not\r\n * have any methods so there is no constructor.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoSelector {\r\n static get default(): SmoSelector {\r\n return {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: -1,\r\n pitches: []\r\n };\r\n }\r\n staff: number = 0;\r\n measure: number = 0;\r\n voice: number = 0;\r\n tick: number = -1;\r\n pitches: number[] = [];\r\n\r\n static measureSelector(staff: number, measure: number): SmoSelector {\r\n return { staff, measure, voice: 0, tick: 0, pitches: [] };\r\n }\r\n static fromMeasure(measure: SmoMeasure) {\r\n return SmoSelector.measureSelector(measure.measureNumber.staffId, measure.measureNumber.localIndex);\r\n }\r\n // TODO: tick in selector s/b tickIndex\r\n static sameNote(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice === sel2.voice\r\n && sel1.tick === sel2.tick);\r\n }\r\n static sameMeasure(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.measure === sel2.measure);\r\n }\r\n\r\n static sameStaff(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return sel1.staff === sel2.staff;\r\n }\r\n /**\r\n * Return gt, not considering the voice (e.g. gt in time)\r\n * @param sel1 \r\n * @param sel2 \r\n */\r\n static gtInTime(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.measure > sel2.measure) ||\r\n (sel1.measure === sel2.measure && sel1.tick > sel2.tick);\r\n }\r\n\r\n // ## return true if sel1 > sel2.\r\n static gt(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n // Note: voice is not considered b/c it's more of a vertical component\r\n // Note further: sometimes we need to consider voice\r\n return (sel1.staff > sel2.staff) ||\r\n (sel1.staff === sel2.staff && sel1.measure > sel2.measure) ||\r\n (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice > sel2.voice) ||\r\n (sel1.staff === sel2.staff && sel1.measure === sel2.measure && sel1.voice === sel2.voice && sel1.tick > sel2.tick);\r\n }\r\n\r\n static eq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return (sel1.staff === sel2.staff && sel1.voice === sel2.voice && sel1.measure === sel2.measure && sel1.tick === sel2.tick);\r\n }\r\n static neq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return !(SmoSelector.eq(sel1, sel2));\r\n }\r\n\r\n static lt(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.gt(sel2, sel1);\r\n }\r\n\r\n static gteq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.gt(sel1, sel2) || SmoSelector.eq(sel1, sel2);\r\n }\r\n static lteq(sel1: SmoSelector, sel2: SmoSelector): boolean {\r\n return SmoSelector.lt(sel1, sel2) || SmoSelector.eq(sel1, sel2);\r\n }\r\n // Return 2 selectors in score order, rv[0] is first in time.\r\n static order(a: SmoSelector, b: SmoSelector): SmoSelector[] {\r\n if (SmoSelector.gtInTime(a, b)) {\r\n return [b, a];\r\n }\r\n return [a, b];\r\n }\r\n\r\n // ### getNoteKey\r\n // Get a key useful for a hash map of notes.\r\n static getNoteKey(selector: SmoSelector) {\r\n return '' + selector.staff + '-' + selector.measure + '-' + selector.voice + '-' + selector.tick;\r\n }\r\n\r\n static getMeasureKey(selector: SmoSelector) {\r\n return '' + selector.staff + '-' + selector.measure;\r\n }\r\n\r\n // return true if testSel is contained in the selStart to selEnd range.\r\n static contains(testSel: SmoSelector, selStart: SmoSelector, selEnd: SmoSelector) {\r\n const geStart =\r\n selStart.measure < testSel.measure ||\r\n (selStart.measure === testSel.measure && selStart.tick <= testSel.tick);\r\n const leEnd =\r\n selEnd.measure > testSel.measure ||\r\n (selEnd.measure === testSel.measure && testSel.tick <= selEnd.tick);\r\n\r\n return geStart && leEnd;\r\n }\r\n static overlaps(start1: SmoSelector, end1: SmoSelector, start2: SmoSelector, end2: SmoSelector) {\r\n if (SmoSelector.contains(start1, start2, end2)) {\r\n return true;\r\n }\r\n if (SmoSelector.contains(end1, start2, end2)) {\r\n return true;\r\n }\r\n if (SmoSelector.contains(start2, start1, end1)) {\r\n return true;\r\n }\r\n if (SmoSelector.contains(end2, start1, end1)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // create a hashmap key for a single note, used to organize modifiers\r\n static selectorNoteKey(selector: SmoSelector) {\r\n return 'staff-' + selector.staff + '-measure-' + selector.measure + '-voice-' + selector.voice + '-tick-' + selector.tick;\r\n }\r\n}\r\n/**\r\n * The fields in a selection. We have the 5 musical cardinal directions of staff, measure, note, pitches, \r\n * and a selector. The pitches are indices\r\n * */\r\nexport interface SmoSelectionParams {\r\n selector: SmoSelector,\r\n _staff: SmoSystemStaff,\r\n _measure: SmoMeasure,\r\n _note?: SmoNote,\r\n _pitches?: number[],\r\n type?: string,\r\n box?: SvgBox\r\n}\r\n\r\n/**\r\n * A selection is a {@link SmoSelector} and a set of references to musical elements, like measure etc.\r\n * The staff and measure are always a part of the selection, and possible a voice and note,\r\n * and one or more pitches. Selections can also be made from the UI by clicking on an element\r\n * or navigating to an element with the keyboard.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoSelection {\r\n selector: SmoSelector = {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: -1,\r\n pitches: []\r\n };\r\n _staff: SmoSystemStaff;\r\n _measure: SmoMeasure;\r\n _note: SmoNote | null;\r\n _pitches: number[] = [];\r\n box: SvgBox | null = null;\r\n scrollBox: SvgPoint | null = null;\r\n // ### measureSelection\r\n // A selection that does not contain a specific note\r\n static measureSelection(score: SmoScore, staffIndex: number, measureIndex: number): SmoSelection | null {\r\n staffIndex = staffIndex !== null ? staffIndex : score.activeStaff;\r\n const selector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n };\r\n if (score.staves.length <= staffIndex) {\r\n return null;\r\n }\r\n const staff = score.staves[staffIndex];\r\n if (staff.measures.length <= measureIndex) {\r\n return null;\r\n }\r\n const measure = staff.measures[measureIndex];\r\n\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n type: 'measure'\r\n });\r\n }\r\n\r\n static measuresInColumn(score: SmoScore, staffIndex: number): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n for (i = 0; i < score.staves.length; ++i) {\r\n const sel = SmoSelection.measureSelection(score, i, staffIndex);\r\n if (sel) {\r\n rv.push(sel);\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n // ### noteSelection\r\n // a selection that specifies a note in the score\r\n static noteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n staffIndex = staffIndex != null ? staffIndex : score.activeStaff;\r\n measureIndex = typeof (measureIndex) !== 'undefined' ? measureIndex : 0;\r\n voiceIndex = typeof (voiceIndex) !== 'undefined' ? voiceIndex : 0;\r\n const staff = score.staves[staffIndex];\r\n if (!staff) {\r\n return null;\r\n }\r\n const measure = staff.measures[measureIndex];\r\n if (!measure) {\r\n return null;\r\n }\r\n if (measure.voices.length <= voiceIndex) {\r\n return null;\r\n }\r\n if (measure.voices[voiceIndex].notes.length <= tickIndex) {\r\n return null;\r\n }\r\n const note = measure.voices[voiceIndex].notes[tickIndex];\r\n const selector: SmoSelector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: voiceIndex,\r\n tick: tickIndex,\r\n pitches: []\r\n };\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: [],\r\n type: 'note'\r\n });\r\n }\r\n\r\n // ### noteFromSelector\r\n // return a selection based on the passed-in selector\r\n static noteFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection| null {\r\n return SmoSelection.noteSelection(score,\r\n selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n\r\n // ### selectionsToEnd\r\n // Select all the measures from startMeasure to the end of the score in the given staff.\r\n static selectionsToEnd(score: SmoScore, staff: number, startMeasure: number): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n for (i = startMeasure; i < score.staves[staff].measures.length; ++i) {\r\n const selection = SmoSelection.measureSelection(score, staff, i);\r\n if (selection) {\r\n rv.push(selection);\r\n }\r\n }\r\n return rv;\r\n }\r\n\r\n // ### renderedNoteSelection\r\n // return the appropriate type of selection from the selector, based on the selector.\r\n static selectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n if (typeof (selector.pitches) !== 'undefined' && selector.pitches.length) {\r\n return SmoSelection.pitchSelection(score,\r\n selector.staff, selector.measure, selector.voice, selector.tick, selector.pitches);\r\n }\r\n if (typeof (selector.tick) === 'number') {\r\n return SmoSelection.noteFromSelector(score, selector);\r\n }\r\n return SmoSelection.measureSelection(score, selector.staff, selector.measure);\r\n }\r\n\r\n static pitchSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number, pitches: number[]) {\r\n staffIndex = staffIndex !== null ? staffIndex : score.activeStaff;\r\n measureIndex = typeof (measureIndex) !== 'undefined' ? measureIndex : 0;\r\n voiceIndex = typeof (voiceIndex) !== 'undefined' ? voiceIndex : 0;\r\n const staff = score.staves[staffIndex];\r\n const measure = staff.measures[measureIndex];\r\n const note = measure.voices[voiceIndex].notes[tickIndex];\r\n pitches = typeof (pitches) !== 'undefined' ? pitches : [];\r\n const pa: number[] = [];\r\n pitches.forEach((ix) => {\r\n pa.push(JSON.parse(JSON.stringify(note.pitches[ix])));\r\n });\r\n const selector = {\r\n staff: staffIndex,\r\n measure: measureIndex,\r\n voice: voiceIndex,\r\n tick: tickIndex,\r\n pitches\r\n };\r\n return new SmoSelection({\r\n selector,\r\n _staff: staff,\r\n _measure: measure,\r\n _note: note,\r\n _pitches: pa,\r\n type: 'pitches'\r\n });\r\n }\r\n /**\r\n * Return the selection that is tickCount ticks after the current selection.\r\n * @param score \r\n * @param selection \r\n * @param tickCount \r\n * @returns \r\n */\r\n static advanceTicks(score: SmoScore, selection: SmoSelection, tickCount: number): SmoSelection | null {\r\n let rv: SmoSelection | null = null;\r\n if (!selection.note) {\r\n return rv;\r\n }\r\n const staff = selection.staff;\r\n rv = SmoSelection.noteFromSelector(score, selection.selector);\r\n while (rv !== null && rv.note !== null && tickCount > 0) {\r\n const prevSelector = JSON.parse(JSON.stringify(rv.selector));\r\n const measureTicks = rv.measure.getMaxTicksVoice();\r\n const tickIx = rv.selector.tick;\r\n const voiceId = rv.measure.voices.length > rv.selector.voice ? rv.selector.voice : 0;\r\n // If the destination is more than a measure away, increment measure\r\n if (tickIx === 0 && tickCount >= measureTicks) {\r\n tickCount -= measureTicks;\r\n if (staff.measures.length > rv.selector.measure + 1) {\r\n rv.selector.measure += 1;\r\n rv.selector.tick = 0;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n }\r\n } else if (selection.measure.voices[voiceId].notes.length > tickIx + 1) {\r\n // else count the tick and advance to next tick\r\n tickCount -= rv.note.tickCount;\r\n rv.selector.tick += 1;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n } else if (staff.measures.length > rv.selector.measure + 1) {\r\n // else advance to next measure and start counting ticks there\r\n tickCount -= rv.note.tickCount;\r\n rv.selector.measure += 1;\r\n rv.selector.tick = 0;\r\n rv = SmoSelection.selectionFromSelector(score, rv.selector);\r\n }\r\n if (rv !== null && SmoSelector.eq(prevSelector, rv.selector)) {\r\n // No progress, start and end the same\r\n break;\r\n }\r\n }\r\n return rv;\r\n }\r\n /**\r\n * Count the number of tick indices between selector 1 and selector 2;\r\n * @param score \r\n * @param sel1 \r\n * @param sel2 \r\n * @returns \r\n */\r\n static countTicks(score: SmoScore, sel1: SmoSelector, sel2: SmoSelector): number {\r\n if (SmoSelector.eq(sel1, sel2)) {\r\n return 0;\r\n }\r\n const backwards = SmoSelector.gt(sel1, sel2);\r\n let ticks = 0;\r\n const startSelection = SmoSelection.selectionFromSelector(score, sel1);\r\n let endSelection = SmoSelection.selectionFromSelector(score, sel2);\r\n while (endSelection !== null && startSelection !== null) {\r\n if (SmoSelector.eq(startSelection.selector, endSelection.selector)) {\r\n break;\r\n }\r\n if (backwards) {\r\n endSelection = SmoSelection.nextNoteSelectionFromSelector(score, endSelection.selector);\r\n ticks -= 1;\r\n } else {\r\n endSelection = SmoSelection.lastNoteSelectionFromSelector(score, endSelection.selector);\r\n ticks += 1;\r\n }\r\n }\r\n return ticks;\r\n }\r\n\r\n // ## nextNoteSelection\r\n // ## Description:\r\n // Return the next note in this measure, or the first note of the next measure, if it exists.\r\n static nextNoteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n const nextTick = tickIndex + 1;\r\n const nextMeasure = measureIndex + 1;\r\n const staff = score.staves[staffIndex];\r\n const measure = staff.measures[measureIndex];\r\n if (measure.voices[voiceIndex].notes.length > nextTick) {\r\n return SmoSelection.noteSelection(score, staffIndex, measureIndex, voiceIndex, nextTick);\r\n }\r\n if (staff.measures.length > nextMeasure) {\r\n return SmoSelection.noteSelection(score, staffIndex, nextMeasure, voiceIndex, 0);\r\n }\r\n return null;\r\n }\r\n /**\r\n * \r\n * @param score \r\n * @param selector \r\n * @returns \r\n */\r\n static innerSelections(score: SmoScore, startSelector: SmoSelector, endSelector: SmoSelector) {\r\n const sels = SmoSelector.order(startSelector, endSelector);\r\n let start = JSON.parse(JSON.stringify(sels[0]));\r\n const rv: SmoSelection[] = [];\r\n let cur = SmoSelection.selectionFromSelector(score, start);\r\n if (cur) {\r\n rv.push(cur);\r\n }\r\n while (cur && SmoSelector.lt(start, sels[1])) {\r\n cur = SmoSelection.nextNoteSelection(score, start.staff, start.measure, start.voice, start.tick);\r\n if (cur) {\r\n start = JSON.parse(JSON.stringify(cur.selector));\r\n rv.push(cur);\r\n }\r\n }\r\n return rv;\r\n }\r\n static nextNoteSelectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n return SmoSelection.nextNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n static lastNoteSelectionFromSelector(score: SmoScore, selector: SmoSelector): SmoSelection | null {\r\n return SmoSelection.lastNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n\r\n static lastNoteSelection(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n const lastTick = tickIndex - 1;\r\n const lastMeasure = measureIndex - 1;\r\n const staff = score.staves[staffIndex];\r\n let measure = staff.measures[measureIndex];\r\n if (tickIndex > 0) {\r\n return SmoSelection.noteSelection(score, staffIndex, measureIndex, voiceIndex, lastTick);\r\n }\r\n if (lastMeasure >= 0) {\r\n measure = staff.measures[lastMeasure];\r\n if (voiceIndex >= measure.voices.length) {\r\n return null;\r\n }\r\n const noteIndex = measure.voices[voiceIndex].notes.length - 1;\r\n return SmoSelection.noteSelection(score, staffIndex, lastMeasure, voiceIndex, noteIndex);\r\n }\r\n if (measureIndex === 0 && voiceIndex === 0 && tickIndex === 0) {\r\n return null;\r\n }\r\n return SmoSelection.noteSelection(score, staffIndex, 0, 0, 0);\r\n }\r\n static lastNoteSelectionNonRest(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n let rv = SmoSelection.lastNoteSelection(score, staffIndex, measureIndex, voiceIndex, tickIndex);\r\n let best = rv;\r\n while (best !== null && best.note !== null) {\r\n if (!best.note.isRest()) {\r\n rv = best;\r\n break;\r\n }\r\n const selector = best.selector;\r\n best = SmoSelection.lastNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n return rv;\r\n }\r\n static nextNoteSelectionNonRest(score: SmoScore, staffIndex: number, measureIndex: number, voiceIndex: number, tickIndex: number): SmoSelection | null {\r\n let rv = SmoSelection.nextNoteSelection(score, staffIndex, measureIndex, voiceIndex, tickIndex);\r\n let best = rv;\r\n while (best !== null && best.note !== null) {\r\n if (!best.note.isRest()) {\r\n rv = best;\r\n break;\r\n }\r\n const selector = best.selector;\r\n best = SmoSelection.nextNoteSelection(score, selector.staff, selector.measure, selector.voice, selector.tick);\r\n }\r\n return rv;\r\n }\r\n // ### getMeasureList\r\n // Gets the list of measures in an array from the selections\r\n static getMeasureList(selections: SmoSelection[]): SmoSelection[] {\r\n let i = 0;\r\n let cur = {};\r\n const rv: SmoSelection[] = [];\r\n if (!selections.length) {\r\n return rv;\r\n }\r\n cur = selections[0].selector.measure;\r\n for (i = 0; i < selections.length; ++i) {\r\n const sel: SmoSelection = selections[i];\r\n if (i === 0 || (sel.selector.measure !== cur)) {\r\n const _staff: SmoSystemStaff = sel._staff;\r\n const _measure: SmoMeasure = sel._measure;\r\n rv.push(\r\n new SmoSelection({\r\n selector: {\r\n staff: sel.selector.staff,\r\n measure: sel.selector.measure,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n },\r\n _staff,\r\n _measure\r\n }));\r\n }\r\n cur = sel.selector.measure;\r\n }\r\n return rv;\r\n }\r\n static getMeasuresBetween(score: SmoScore, fromSelector: SmoSelector, toSelector: SmoSelector): SmoSelection[] {\r\n let i = 0;\r\n const rv: SmoSelection[] = [];\r\n if (fromSelector.staff !== toSelector.staff) {\r\n return rv;\r\n }\r\n for (i = fromSelector.measure; i <= toSelector.measure; ++i) {\r\n const sel = SmoSelection.measureSelection(score, fromSelector.staff, i);\r\n if (sel) {\r\n rv.push(sel);\r\n }\r\n }\r\n return rv;\r\n }\r\n // ### selectionsSameMeasure\r\n // Return true if the selections are all in the same measure. Used to determine what\r\n // type of undo we need.\r\n static selectionsSameMeasure(selections: SmoSelection[]) {\r\n let i = 0;\r\n if (selections.length < 2) {\r\n return true;\r\n }\r\n const sel1 = selections[0].selector;\r\n for (i = 1; i < selections.length; ++i) {\r\n if (!SmoSelector.sameMeasure(sel1, selections[i].selector)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n static selectionsSameStaff(selections: SmoSelection[]) {\r\n let i = 0;\r\n if (selections.length < 2) {\r\n return true;\r\n }\r\n const sel1 = selections[0].selector;\r\n for (i = 1; i < selections.length; ++i) {\r\n if (!SmoSelector.sameStaff(sel1, selections[i].selector)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n constructor(params: SmoSelectionParams) {\r\n this.selector = {\r\n staff: 0,\r\n measure: 0,\r\n voice: 0,\r\n tick: 0,\r\n pitches: []\r\n };\r\n this._staff = params._staff;\r\n this._measure = params._measure;\r\n this._note = null;\r\n this._pitches = [];\r\n smoSerialize.vexMerge(this, params);\r\n }\r\n\r\n get staff() {\r\n return this._staff;\r\n }\r\n get measure() {\r\n return this._measure;\r\n }\r\n\r\n get note() {\r\n return this._note;\r\n }\r\n get pitches() {\r\n return this.selector.pitches;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoNote, TupletInfo } from '../data/note';\r\nimport { SmoTuplet, SmoTupletTree } from '../data/tuplet';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoMeasure, SmoVoice } from '../data/measure';\r\nimport { Ticks } from '../data/common';\r\nimport { TickMap } from './tickMap';\r\n\r\n/**\r\n * Abstract class for classes that modifiy duration.\r\n * @param note the note we're iterating over\r\n * @param tickmap the tickmap for the measure\r\n * @param index the index into the tickmap\r\n * @returns the note or notes that replace this one. Null if this note is no longer in the measure\r\n */\r\nexport abstract class TickIteratorBase {\r\n // es\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number): SmoNote | SmoNote[] | null {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * SmoTickIterator\r\n * this is a local helper class that follows a pattern of iterating of the notes. Most of the\r\n * duration changers iterate over a selection, and return:\r\n * - A note, if the duration changes\r\n * - An array of notes, if the notes split\r\n * - null if the note stays the same\r\n * - empty array, remove the note from the group\r\n * @category SmoTransform\r\n */\r\nexport class SmoTickIterator {\r\n notes: SmoNote[] = [];\r\n newNotes: SmoNote[] = [];\r\n actor: TickIteratorBase;\r\n measure: SmoMeasure;\r\n voice: number = 0;\r\n keySignature: string;\r\n constructor(measure: SmoMeasure, actor: TickIteratorBase, voiceIndex: number) {\r\n this.notes = measure.voices[voiceIndex].notes;\r\n this.measure = measure;\r\n this.voice = typeof (voiceIndex) === 'number' ? voiceIndex : 0;\r\n this.newNotes = [];\r\n // eslint-disable-next-line\r\n this.actor = actor;\r\n this.keySignature = 'C';\r\n }\r\n static nullActor(note: SmoNote) {\r\n return note;\r\n }\r\n /**\r\n *\r\n * @param measure {SmoMeasure}\r\n * @param actor {}\r\n * @param voiceIndex\r\n */\r\n static iterateOverTicks(measure: SmoMeasure, actor: TickIteratorBase, voiceIndex: number) {\r\n measure.clearBeamGroups();\r\n const transformer = new SmoTickIterator(measure, actor, voiceIndex);\r\n transformer.run();\r\n measure.voices[voiceIndex].notes = transformer.notes;\r\n }\r\n // ### transformNote\r\n // call the actors for each note, and put the result in the note array.\r\n // The note from the original array is copied and sent to each actor.\r\n //\r\n // Because the resulting array can have a different number of notes than the existing\r\n // array, the actors communicate with the transformer in the following, jquery-ish\r\n // but somewhat unintuitive way:\r\n //\r\n // 1. if the actor returns null, the next actor is called and the results of that actor are used\r\n // 2. if all the actors return null, the copy is used.\r\n // 3. if a note object is returned, that is used for the current tick and no more actors are called.\r\n // 4. if an array of notes is returned, it is concatenated to the existing note array and no more actors are called.\r\n // Note that *return note;* and *return [note];* produce the same result.\r\n // 5. if an empty array [] is returned, that copy is not added to the result. The note is effectively deleted.\r\n iterateOverTick(tickmap: TickMap, index: number, note: SmoNote) {\r\n const actor: TickIteratorBase = this.actor;\r\n const newNote: SmoNote[] | SmoNote | null = actor.iterateOverTick(note, tickmap, index);\r\n if (newNote === null) {\r\n this.newNotes.push(note); // no change\r\n return note;\r\n }\r\n if (Array.isArray(newNote)) {\r\n if (newNote.length === 0) {\r\n return null;\r\n }\r\n this.newNotes = this.newNotes.concat(newNote);\r\n return null;\r\n }\r\n this.newNotes.push(newNote as SmoNote);\r\n return null;\r\n }\r\n\r\n run() {\r\n let i = 0;\r\n const tickmap = this.measure.tickmapForVoice(this.voice);\r\n for (i = 0; i < tickmap.durationMap.length; ++i) {\r\n this.iterateOverTick(tickmap, i, this.measure.voices[this.voice].notes[i]);\r\n }\r\n this.notes = this.newNotes;\r\n return this.newNotes;\r\n }\r\n}\r\n\r\n/**\r\n * used to create a contract/dilate operation on a note via {@link SmoContractNoteActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoContractNoteParams {\r\n startIndex: number,\r\n measure: SmoMeasure,\r\n voice: number,\r\n newStemTicks: number\r\n}\r\n/**\r\n * Contract the duration of a note, filling in the space with another note\r\n * or rest.\r\n * @category SmoTransform\r\n * */\r\nexport class SmoContractNoteActor extends TickIteratorBase {\r\n startIndex: number;\r\n newStemTicks: number;\r\n measure: SmoMeasure;\r\n voice: number;\r\n constructor(params: SmoContractNoteParams) {\r\n super();\r\n this.startIndex = params.startIndex;\r\n this.measure = params.measure;\r\n this.voice = params.voice;\r\n this.newStemTicks = params.newStemTicks;\r\n }\r\n static apply(params: SmoContractNoteParams) {\r\n const actor = new SmoContractNoteActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure,\r\n actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number): SmoNote | SmoNote[] | null {\r\n if (index === this.startIndex) {\r\n let newTicks: Ticks = { numerator: this.newStemTicks, denominator: 1, remainder: 0 };\r\n const multiplier = note.tickCount / note.stemTicks;\r\n\r\n if (note.isTuplet) {\r\n const numerator = this.newStemTicks * multiplier;\r\n newTicks = { numerator: Math.floor(numerator), denominator: 1, remainder: numerator % 1 };\r\n }\r\n\r\n const replacingNote = SmoNote.cloneWithDuration(note, newTicks, this.newStemTicks);\r\n const oldStemTicks = note.stemTicks;\r\n const notes = [];\r\n const remainderStemTicks = oldStemTicks - this.newStemTicks;\r\n\r\n notes.push(replacingNote);\r\n \r\n if (remainderStemTicks > 0) {\r\n if (remainderStemTicks < 128) {\r\n return null;\r\n }\r\n const lmap = SmoMusic.gcdMap(remainderStemTicks);\r\n\r\n lmap.forEach((stemTick) => {\r\n const numerator = stemTick * multiplier;\r\n const nnote = SmoNote.cloneWithDuration(note, {numerator: Math.floor(numerator), denominator: 1, remainder: numerator % 1}, stemTick);\r\n notes.push(nnote);\r\n });\r\n }\r\n //accumulate all remainders in the first note\r\n let remainder: number = 0;\r\n notes.forEach((note: SmoNote) => {\r\n if (note.ticks.remainder > 0) {\r\n remainder += note.ticks.remainder;\r\n note.ticks.remainder = 0;\r\n }\r\n });\r\n notes[0].ticks.numerator += Math.round(remainder);\r\n\r\n SmoTupletTree.adjustTupletIndexes(this.measure.tupletTrees, this.voice, index, notes.length - 1);\r\n return notes;\r\n }\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Constructor when we want to double or dot the duration of a note (stretch)\r\n * for {@link SmoStretchNoteActor}\r\n * @param startIndex tick index into the measure\r\n * @param measure the container measure\r\n * @param voice the voice index\r\n * @param newTicks the ticks the new note will take up\r\n * @category SmoTransform\r\n */\r\nexport interface SmoStretchNoteParams {\r\n startIndex: number,\r\n measure: SmoMeasure,\r\n voice: number,\r\n newStemTicks: number\r\n}\r\n/**\r\n * increase the length of a note, removing future notes in the measure as required\r\n * @category SmoTransform\r\n */\r\nexport class SmoStretchNoteActor extends TickIteratorBase {\r\n startIndex: number;\r\n newStemTicks: number;\r\n measure: SmoMeasure;\r\n voice: number;\r\n notes: SmoNote[];\r\n notesToInsert: SmoNote[] = [];\r\n numberOfNotesToDelete: number = 0;\r\n constructor(params: SmoStretchNoteParams) {\r\n super();\r\n this.startIndex = params.startIndex;\r\n this.measure = params.measure;\r\n this.voice = params.voice;\r\n this.newStemTicks = params.newStemTicks;\r\n this.notes = this.measure.voices[this.voice].notes;\r\n\r\n const originalNote: SmoNote = this.notes[this.startIndex];\r\n let newTicks: Ticks = { numerator: this.newStemTicks, denominator: 1, remainder: 0 };\r\n const multiplier = originalNote.tickCount / originalNote.stemTicks;\r\n if (originalNote.isTuplet) {\r\n const numerator = this.newStemTicks * multiplier;\r\n newTicks = { numerator: Math.floor(numerator), denominator: 1, remainder: numerator % 1 };\r\n } \r\n\r\n const replacingNote = SmoNote.cloneWithDuration(originalNote, newTicks, this.newStemTicks);\r\n\r\n let stemTicksUsed = originalNote.stemTicks;\r\n for (let i = this.startIndex + 1; i < this.notes.length; ++i) {\r\n const nnote = this.notes[i];\r\n //in case notes are part of the tuplet they need to belong to the same tuplet\r\n //this check is only temporarely here, it should never come to this\r\n if (nnote.isTuplet && !this.areNotesInSameTuplet(originalNote, nnote)) {\r\n break;\r\n }\r\n stemTicksUsed += nnote.stemTicks;\r\n ++this.numberOfNotesToDelete;\r\n if (stemTicksUsed >= this.newStemTicks) {\r\n break;\r\n }\r\n }\r\n const remainingAmount = stemTicksUsed - this.newStemTicks;\r\n if (remainingAmount >= 0) {\r\n this.notesToInsert.push(replacingNote);\r\n const lmap = SmoMusic.gcdMap(remainingAmount);\r\n lmap.forEach((stemTick) => {\r\n const numerator = stemTick * multiplier;\r\n const nnote = SmoNote.cloneWithDuration(originalNote, {numerator: Math.floor(numerator), denominator: 1, remainder: numerator % 1}, stemTick)\r\n this.notesToInsert.push(nnote);\r\n });\r\n const noteCountDiff = (this.notesToInsert.length - this.numberOfNotesToDelete) - 1;\r\n SmoTupletTree.adjustTupletIndexes(this.measure.tupletTrees, this.voice, this.startIndex, noteCountDiff);\r\n\r\n //accumulate all remainders in the first note\r\n let remainder: number = 0;\r\n this.notesToInsert.forEach((note: SmoNote) => {\r\n if (note.ticks.remainder > 0) {\r\n remainder += note.ticks.remainder;\r\n note.ticks.remainder = 0;\r\n }\r\n });\r\n this.notesToInsert[0].ticks.numerator += Math.round(remainder);\r\n\r\n }\r\n }\r\n static apply(params: SmoStretchNoteParams) {\r\n const actor = new SmoStretchNoteActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (this.startIndex === index && this.notesToInsert.length) {\r\n return this.notesToInsert;\r\n } else if (index > this.startIndex && this.numberOfNotesToDelete > 0) {\r\n --this.numberOfNotesToDelete;\r\n return [];\r\n } \r\n return null;\r\n }\r\n\r\n private areNotesInSameTuplet(noteOne: SmoNote, noteTwo: SmoNote): boolean {\r\n if (noteOne.isTuplet && noteTwo.isTuplet && noteOne.tupletId == noteTwo.tupletId) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * constructor parameters for {@link SmoMakeTupletActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoMakeTupletParams {\r\n measure: SmoMeasure,\r\n numNotes: number,\r\n voice: number,\r\n index: number\r\n}\r\n/**\r\n * Turn a tuplet into a non-tuplet of the same length\r\n * @category SmoTransform\r\n * \r\n * */\r\nexport class SmoMakeTupletActor extends TickIteratorBase {\r\n measure: SmoMeasure;\r\n numNotes: number;\r\n voice: number;\r\n index: number;\r\n \r\n constructor(params: SmoMakeTupletParams) {\r\n super();\r\n this.measure = params.measure;\r\n this.index = params.index;\r\n this.voice = params.voice;\r\n this.numNotes = params.numNotes;\r\n }\r\n static apply(params: SmoMakeTupletParams) {\r\n const actor = new SmoMakeTupletActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n \r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (this.measure === null) {\r\n return [];\r\n }\r\n if (index !== this.index) {\r\n return null;\r\n }\r\n\r\n this.measure.clearBeamGroups();\r\n const stemTicks = SmoTuplet.calculateStemTicks(note.stemTicks, this.numNotes);\r\n const notesOccupied = note.stemTicks / stemTicks;\r\n\r\n const tuplet = new SmoTuplet({\r\n numNotes: this.numNotes,\r\n notesOccupied: notesOccupied,\r\n stemTicks: stemTicks,\r\n totalTicks: note.tickCount,\r\n ratioed: false,\r\n bracketed: true,\r\n voice: this.voice,\r\n startIndex: this.index,\r\n endIndex: this.index,\r\n });\r\n\r\n const tupletNotes = this._generateNotesForTuplet(tuplet, note, stemTicks);\r\n tuplet.endIndex += tupletNotes.length - 1;\r\n\r\n SmoTupletTree.adjustTupletIndexes(this.measure.tupletTrees, this.voice, index, tupletNotes.length - 1);\r\n const parentTuplet: SmoTuplet | null = SmoTupletTree.getTupletForNoteIndex(this.measure.tupletTrees, this.voice, this.index);\r\n if (parentTuplet === null) {\r\n const tupletTree = new SmoTupletTree({tuplet: tuplet});\r\n this.measure.tupletTrees.push(tupletTree);\r\n } else {\r\n parentTuplet.childrenTuplets.push(tuplet);\r\n }\r\n\r\n return tupletNotes;\r\n }\r\n\r\n private _generateNotesForTuplet(tuplet: SmoTuplet, originalNote: SmoNote, stemTicks: number): SmoNote[] {\r\n const totalTicks = originalNote.tickCount;\r\n const tupletNotes: SmoNote[] = [];\r\n const numerator = totalTicks / this.numNotes;\r\n for (let i = 0; i < this.numNotes; ++i) {\r\n const note: SmoNote = SmoNote.cloneWithDuration(originalNote, { numerator: Math.floor(numerator), denominator: 1, remainder: 0 }, stemTicks);\r\n // Don't clone modifiers, except for first one.\r\n note.textModifiers = i === 0 ? note.textModifiers : [];\r\n note.tupletId = tuplet.attrs.id;\r\n tupletNotes.push(note);\r\n }\r\n if (numerator % 1) {\r\n tupletNotes[0].ticks.numerator += 1;\r\n }\r\n return tupletNotes;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Constructor params for {@link SmoUnmakeTupletActor}\r\n * @category SmoTransform\r\n */\r\nexport interface SmoUnmakeTupletParams {\r\n startIndex: number,\r\n endIndex: number,\r\n measure: SmoMeasure,\r\n voice: number\r\n}\r\n/**\r\n * Convert a tuplet into a single note that takes up the whole duration\r\n * @category SmoTransform\r\n */\r\nexport class SmoUnmakeTupletActor extends TickIteratorBase {\r\n startIndex: number = 0;\r\n endIndex: number = 0;\r\n measure: SmoMeasure;\r\n voice: number;\r\n constructor(parameters: SmoUnmakeTupletParams) {\r\n super();\r\n this.startIndex = parameters.startIndex;\r\n this.endIndex = parameters.endIndex;\r\n this.measure = parameters.measure;\r\n this.voice = parameters.voice;\r\n }\r\n static apply(params: SmoUnmakeTupletParams) {\r\n const actor = new SmoUnmakeTupletActor(params);\r\n SmoTickIterator.iterateOverTicks(actor.measure, actor, actor.voice);\r\n }\r\n iterateOverTick(note: SmoNote, tickmap: TickMap, index: number) {\r\n if (index < this.startIndex || index > this.endIndex) {\r\n return null;\r\n }\r\n if (index === this.startIndex) {\r\n const tuplet = SmoTupletTree.getTupletForNoteIndex(this.measure.tupletTrees, this.voice, index);\r\n if (tuplet === null) {\r\n return [];\r\n }\r\n\r\n const ticks = tuplet.totalTicks;\r\n const nn: SmoNote = SmoNote.cloneWithDuration(note, { numerator: ticks, denominator: 1, remainder: 0 });\r\n nn.tupletId = null;\r\n SmoTupletTree.removeTupletForNoteIndex(this.measure, this.voice, index);\r\n SmoTupletTree.adjustTupletIndexes(this.measure.tupletTrees, this.voice, this.startIndex, this.startIndex - this.endIndex);\r\n \r\n return [nn];\r\n }\r\n return [];\r\n }\r\n}\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMusic } from '../data/music';\r\nimport { TickMappable } from '../data/measure';\r\nimport { Pitch, IsPitchLetter, TickAccidental } from '../data/common';\r\nimport { SmoNote } from '../data/note';\r\n\r\n/**\r\n * create a map note durations at each index into the voice, including the accidentals at each duration.\r\n * return format:\r\n * ```\r\n tickmap = {\r\n totalDuration: 16384,\r\n durationMap:[2048,4096,..], // A running total per tick\r\n deltaMap:[2048,2048...], a map of deltas\r\n ```\r\n * @category SmoTransform\r\n */ \r\nexport class TickMap {\r\n keySignature: string;\r\n voice: number;\r\n notes: SmoNote[] = [];\r\n index: number = 0;\r\n startIndex: number = 0;\r\n endIndex: number = 0;\r\n // duration is the accumulated duraition over all the notes\r\n totalDuration: number = 0;\r\n // delta is the tick contribution of this note\r\n delta: number = 0;\r\n // the absolute tick start location of notes[x]\r\n durationMap: number[] = [];\r\n // the relative duration if each tick slot\r\n deltaMap: number[] = [];\r\n // An array of active accidentals for each tick index\r\n accidentalMap: Record[] = [];\r\n // a map of active accidentals, indexed by duration index\r\n durationAccidentalMap: Record> = {};\r\n constructor(measure: TickMappable, voiceIndex: number) {\r\n this.keySignature = measure.keySignature;\r\n this.voice = voiceIndex;\r\n if (measure.voices.length <= this.voice) {\r\n console.warn('tickmap for invalid voice');\r\n return;\r\n }\r\n this.notes = measure.voices[this.voice].notes;\r\n this.endIndex = this.notes.length;\r\n this.createMap();\r\n }\r\n // ### _getAccidentalsForKey\r\n // Update `map` with the correct accidental based on the key signature.\r\n _getAccidentalsForKey(map: Record) {\r\n const keys = SmoMusic.getScaleTonesForKey(this.keySignature);\r\n const keyKeys = Object.keys(keys);\r\n keyKeys.forEach((keyKey) => {\r\n const vexKey = keys[keyKey];\r\n if (vexKey.length > 1 && (vexKey[1] === 'b' || vexKey[1] === '#')) {\r\n if (IsPitchLetter(vexKey[0])) {\r\n const pitch = {\r\n letter: vexKey[0],\r\n accidental: vexKey[1],\r\n octave: 4\r\n };\r\n map[vexKey[0]] = {\r\n duration: 0,\r\n pitch\r\n };\r\n }\r\n }\r\n });\r\n }\r\n\r\n // ### updateAccidentalMap\r\n // Keep a running tally of the accidentals for this voice\r\n // based on the key and previous accidentals.\r\n updateAccidentalMap(note: SmoNote) {\r\n let i = 0;\r\n let sigObj: Record = {};\r\n const newObj: Record = {};\r\n if (this.index === 0) {\r\n this._getAccidentalsForKey(newObj);\r\n sigObj = newObj;\r\n } else {\r\n sigObj = this.accidentalMap[this.index - 1];\r\n }\r\n for (i = 0; i < note.pitches.length; ++i) {\r\n if (note.noteType !== 'n') {\r\n continue;\r\n }\r\n const pitch: Pitch = note.pitches[i];\r\n const pitchOctave = pitch.letter.toLowerCase() + '-' + pitch.octave;\r\n const sigLetter: string = pitchOctave + pitch.accidental;\r\n const sigKey = SmoMusic.getKeySignatureKey(pitch.letter, this.keySignature);\r\n if (sigObj && sigObj[pitchOctave]) {\r\n const curObj = sigObj[pitchOctave];\r\n const currentVal = curObj.pitch.letter.toLowerCase() + '-' + curObj.pitch.octave + curObj.pitch.accidental;\r\n if (sigLetter !== currentVal) {\r\n newObj[pitchOctave] = { pitch, duration: this.duration };\r\n }\r\n } else {\r\n if (sigLetter !== sigKey) {\r\n newObj[pitchOctave] = { pitch, duration: this.duration };\r\n }\r\n }\r\n }\r\n this.accidentalMap.push(newObj);\r\n // Mark the accidental with the start of this note.\r\n this.durationAccidentalMap[this.durationMap[this.index]] = newObj;\r\n }\r\n\r\n // ### getActiveAccidental\r\n // return the active accidental for the given note\r\n getActiveAccidental(pitch: Pitch, iteratorIndex: number, keySignature: string) {\r\n let defaultAccidental: string = SmoMusic.getKeySignatureKey(pitch.letter, keySignature);\r\n let i = 0;\r\n let j = 0;\r\n defaultAccidental = defaultAccidental.length > 1 ? defaultAccidental[1] : 'n';\r\n if (iteratorIndex === 0) {\r\n return defaultAccidental;\r\n }\r\n // Back up the accidental map until we have a match, or until we run out\r\n for (i = iteratorIndex; i > 0; --i) {\r\n const map: Record = this.accidentalMap[i - 1];\r\n const mapKeys = Object.keys(map);\r\n for (j = 0; j < mapKeys.length; ++j) {\r\n const mapKey: string = mapKeys[j];\r\n // The letter name + accidental in the map\r\n const mapPitch: Pitch = map[mapKey].pitch;\r\n const mapAcc = mapPitch.accidental ? mapPitch.accidental : 'n';\r\n\r\n // if the letters match and the accidental...\r\n if (mapPitch.letter.toLowerCase() === pitch.letter) {\r\n return mapAcc;\r\n }\r\n }\r\n }\r\n return defaultAccidental;\r\n }\r\n get duration() {\r\n return this.totalDuration;\r\n }\r\n createMap() {\r\n for (this.index = this.startIndex; this.index < this.endIndex; ++this.index) {\r\n const note = this.notes[this.index];\r\n // save the starting point, tickwise\r\n this.durationMap.push(this.totalDuration);\r\n // the number of ticks for this note\r\n this.delta = (note.ticks.numerator / note.ticks.denominator) + note.ticks.remainder;\r\n this.deltaMap.push(this.delta);\r\n // update the tick count for the whole array/measure\r\n this.totalDuration += this.delta;\r\n this.updateAccidentalMap(note);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoStaffTextBracket, StaffModifierBase } from '../data/staffModifiers';\r\nimport { SmoSystemStaff } from '../data/systemStaff';\r\nimport { SmoMusic } from '../data/music';\r\nimport { SmoOperation } from './operations';\r\nimport { SmoScore } from '../data/score';\r\nimport { SmoMeasure, SmoMeasureParamsSer } from '../data/measure';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SmoTextGroup, SmoTextGroupContainer } from '../data/scoreText';\r\nimport { SmoSelector } from './selections';\r\n\r\nexport interface UndoEntry {\r\n title: string,\r\n type: number,\r\n selector: SmoSelector,\r\n subtype: number,\r\n grouped: boolean,\r\n json?: any\r\n}\r\nexport function copyUndo(entry: UndoEntry): UndoEntry {\r\n const obj = { \r\n title: entry.title,\r\n type: entry.type,\r\n selector: entry.selector,\r\n subtype: entry.subtype,\r\n grouped: entry.grouped,\r\n json: undefined\r\n };\r\n if (entry.json) {\r\n obj.json = JSON.parse(JSON.stringify(entry.json));\r\n }\r\n return obj;\r\n}\r\nexport class UndoSet {\r\n buffers: UndoEntry[];\r\n constructor() {\r\n this.buffers = [];\r\n }\r\n get isEmpty() { \r\n return this.buffers.length === 0;\r\n }\r\n push(entry: UndoEntry) {\r\n this.buffers.push(entry);\r\n }\r\n pop(): UndoEntry | undefined {\r\n return this.buffers.pop();\r\n }\r\n get length(): number {\r\n return this.buffers.length;\r\n }\r\n};\r\n/**\r\n * manage a set of undo or redo operations on a score. The objects passed into\r\n * undo must implement serialize()/deserialize().\r\n * Only one undo buffer is kept for the score. Undo is always done on the stored\r\n * score and translated to the display score.\r\n * UndoBuffer contains an undoEntry array. An undoEntry might contain several\r\n * undo operations, if the were done together as a block. This happens often when \r\n * several changes are made while a dialog box is open.\r\n * an undoEntry is one of 7 things:\r\n * * A single measure,\r\n * * A single staff\r\n * * the whole score\r\n * * a score modifier (text)\r\n * * score attributes (layout, etc)\r\n * * column - all the measures at one index\r\n * * rectangle - a rectangle of measures\r\n * @category SmoTransform\r\n * */\r\nexport class UndoBuffer {\r\n static groupCount = 0;\r\n static get bufferMax() {\r\n return 100;\r\n }\r\n\r\n static get bufferTypes() {\r\n return {\r\n FIRST: 1,\r\n MEASURE: 1, STAFF: 2, SCORE: 3, SCORE_MODIFIER: 4, COLUMN: 5, RECTANGLE: 6,\r\n SCORE_ATTRIBUTES: 7, STAFF_MODIFIER: 8, PART_MODIFIER: 9, LAST: 9\r\n };\r\n }\r\n static get bufferSubtypes() {\r\n return {\r\n NONE: 0, ADD: 1, REMOVE: 2, UPDATE: 3\r\n };\r\n }\r\n static get bufferTypeLabel() {\r\n return ['INVALID', 'MEASURE', 'STAFF', 'SCORE', 'SCORE_MODIFIER', 'COLUMN', 'RECTANGLE',\r\n 'SCORE_ATTRIBUTES', 'STAFF_MODIFIER'];\r\n }\r\n // ### serializeMeasure\r\n // serialize a measure, preserving the column-mapped bits which aren't serialized on a full score save.\r\n static serializeMeasure(measure: SmoMeasure) {\r\n const json: SmoMeasureParamsSer = measure.serialize();\r\n const columnMapped : any = measure.serializeColumnMapped();\r\n Object.keys(columnMapped).forEach((key) => {\r\n (json as any)[key] = columnMapped[key];\r\n });\r\n return json;\r\n }\r\n buffer: UndoSet[] = [];\r\n reconcile: number = -1;\r\n opCount: number;\r\n _grouping: boolean;\r\n constructor() {\r\n this.buffer.push(new UndoSet());\r\n this.opCount = 0;\r\n this._grouping = false;\r\n }\r\n get grouping() {\r\n return this._grouping;\r\n }\r\n // Allows a set of operations to be bunched into a single group\r\n set grouping(val) {\r\n if (this._grouping === true && val === false) {\r\n const nbuf = new UndoSet();\r\n this.buffer.push(nbuf);\r\n }\r\n this._grouping = val;\r\n }\r\n reset() {\r\n this.buffer = [];\r\n }\r\n /**\r\n * return true if any of the last 2 buffers have undo operations.\r\n * @returns \r\n */\r\n buffersAvailable() {\r\n if (this.buffer.length < 1) {\r\n return false;\r\n }\r\n const lastIx = this.buffer.length - 1;\r\n const penIx = this.buffer.length - 2;\r\n if (lastIx >= 0 && this.buffer[lastIx].length > 0) {\r\n return true;\r\n }\r\n if (penIx >= 0 && this.buffer[penIx].length > 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Add the current state of the score required to undo the next operation we\r\n * are about to perform. For instance, if we are adding a crescendo, we back up the\r\n * staff the crescendo will go on.\r\n * @param title \r\n * @param type \r\n * @param selector \r\n * @param obj \r\n * @param subtype \r\n */\r\n addBuffer(title: string, type: number, selector: SmoSelector, obj: any, subtype: number) {\r\n this.checkNull();\r\n if (typeof(type) !== 'number' || type < UndoBuffer.bufferTypes.FIRST || type > UndoBuffer.bufferTypes.LAST) {\r\n throw 'Undo failure: illegal buffer type ' + type;\r\n }\r\n const undoObj: UndoEntry = {\r\n title,\r\n type,\r\n selector,\r\n subtype,\r\n grouped: this._grouping\r\n };\r\n if (type === UndoBuffer.bufferTypes.RECTANGLE) {\r\n // RECTANGLE obj is {score, topLeft, bottomRight}\r\n // where the last 2 are selectors\r\n const measures = [];\r\n for (let i = obj.topLeft.staff; i <= obj.bottomRight.staff; ++i) {\r\n for (let j = obj.topLeft.measure; j <= obj.bottomRight.measure; ++j) {\r\n measures.push(UndoBuffer.serializeMeasure(obj.score.staves[i].measures[j]));\r\n }\r\n }\r\n undoObj.json = { topLeft: JSON.parse(JSON.stringify(obj.topLeft)),\r\n bottomRight: JSON.parse(JSON.stringify(obj.bottomRight)),\r\n measures };\r\n } else if (type === UndoBuffer.bufferTypes.SCORE_ATTRIBUTES) {\r\n undoObj.json = {};\r\n smoSerialize.serializedMerge(SmoScore.preferences, obj, undoObj.json);\r\n } else if (type === UndoBuffer.bufferTypes.COLUMN) {\r\n // COLUMN obj is { score, measureIndex }\r\n const ix = obj.measureIndex;\r\n const measures: SmoMeasureParamsSer[] = [];\r\n obj.score.staves.forEach((staff: SmoSystemStaff) => {\r\n measures.push(UndoBuffer.serializeMeasure(staff.measures[ix]));\r\n });\r\n undoObj.json = { measureIndex: ix, measures };\r\n } else if (type === UndoBuffer.bufferTypes.MEASURE) {\r\n // If this is a measure, preserve the column-mapped attributes\r\n undoObj.json = UndoBuffer.serializeMeasure(obj);\r\n } else if (type === UndoBuffer.bufferTypes.SCORE_MODIFIER ||\r\n type === UndoBuffer.bufferTypes.STAFF_MODIFIER) {\r\n // score modifier, already serialized\r\n undoObj.json = obj;\r\n } else {\r\n // staff or score or staffModifier\r\n undoObj.json = obj.serialize();\r\n }\r\n if (this.buffer.length >= UndoBuffer.bufferMax) {\r\n this.buffer.splice(0, 1);\r\n }\r\n this.opCount += 1;\r\n const buff = this.buffer[this.buffer.length - 1];\r\n buff.push(undoObj);\r\n if (!this._grouping) {\r\n this.buffer.push(new UndoSet());\r\n }\r\n }\r\n\r\n /**\r\n * Make sure we always have a buffer to record undoable operations\r\n */\r\n checkNull() {\r\n if (this.buffer.length === 0) {\r\n this.buffer.push(new UndoSet());\r\n }\r\n }\r\n /**\r\n * Internal method to pop the top buffer off the stack.\r\n * @returns \r\n */\r\n popUndoSet(): UndoSet | null {\r\n this.checkNull();\r\n const lastBufIx = this.buffer.length - 1;\r\n if (!this.buffer[lastBufIx].isEmpty) {\r\n return this.buffer.pop() ?? null;\r\n } else if (lastBufIx >= 1) {\r\n const buf = this.buffer.splice(lastBufIx - 1, 1);\r\n return buf[0] ?? null;\r\n }\r\n return null;\r\n }\r\n /**\r\n * non-destructively get the top undo buffer.\r\n * @returns \r\n */\r\n peekUndoSet(): UndoSet | null {\r\n this.checkNull();\r\n const lastBufIx = this.buffer.length - 1;\r\n if (!this.buffer[lastBufIx].isEmpty) {\r\n return this.buffer[lastBufIx];\r\n }\r\n if (lastBufIx >= 1) {\r\n return this.buffer[lastBufIx - 1];\r\n }\r\n return null;\r\n }\r\n /**\r\n * return the type of the undo operation, so the view can know which\r\n * parts of the score are affected.\r\n * @param func \r\n * @returns \r\n */\r\n undoTypePeek(func: (buf: UndoEntry) => boolean) {\r\n const undoSet = this.peekUndoSet();\r\n if (!undoSet || undoSet.length === 0) {\r\n return false;\r\n }\r\n for (let i = 0; i < undoSet.buffers.length; ++i) {\r\n const buf = undoSet.buffers[i];\r\n if (func(buf)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n undoScorePeek(): boolean {\r\n return this.undoTypePeek((buf) => buf.type === UndoBuffer.bufferTypes.SCORE);\r\n }\r\n undoScoreTextGroupPeek(): boolean {\r\n return this.undoTypePeek((buf) => buf.type === UndoBuffer.bufferTypes.SCORE_MODIFIER &&\r\n buf.json && buf.json.ctor === 'SmoTextGroup');\r\n }\r\n undoPartTextGroupPeek(): boolean {\r\n return this.undoTypePeek((buf) => buf.type === UndoBuffer.bufferTypes.PART_MODIFIER &&\r\n buf.json && buf.json.ctor === 'SmoTextGroup');\r\n }\r\n\r\n /**\r\n * Get the range of measures affected by the next undo operation. Only\r\n * makes sense to call this if the undo type is MEASURE or COLUMN\r\n * @returns \r\n */\r\n getMeasureRange(): number[] {\r\n let min = -1;\r\n let max = 0;\r\n const undoSet = this.peekUndoSet();\r\n if (undoSet) {\r\n for (let i = 0; i < undoSet.buffers.length; ++i) {\r\n const buf = undoSet.buffers[i];\r\n if (buf.type === UndoBuffer.bufferTypes.STAFF_MODIFIER) {\r\n return [buf.json.startSelector.measure, buf.json.endSelector.measure];\r\n }\r\n if (buf.type === UndoBuffer.bufferTypes.COLUMN) {\r\n if (min < 0) {\r\n min = buf.json.measureIndex;\r\n } else {\r\n min = Math.min(min, buf.json.measureIndex);\r\n } \r\n buf.json.measures.forEach((mmjson: SmoMeasureParamsSer) => {\r\n max = Math.max(max, mmjson.measureNumber.measureIndex);\r\n });\r\n } else {\r\n if (min < 0) {\r\n min = buf.selector.measure;\r\n }\r\n max = Math.max(max, buf.selector.measure);\r\n min = Math.min(min, buf.selector.measure);\r\n }\r\n }\r\n }\r\n return [Math.max(0, min), max];\r\n }\r\n /**\r\n * Undo for text is different since text is not associated with a specific part of the\r\n * score (usually)\r\n * @param score \r\n * @param staffMap \r\n * @param buf \r\n */\r\n undoTextGroup(score: SmoTextGroupContainer, staffMap: Record, buf: UndoEntry) {\r\n const obj = SmoTextGroup.deserializePreserveId(buf.json);\r\n obj.attrs.id = buf.json.attrs.id;\r\n // undo of add is remove, undo of remove is add. Undo of update is remove and add older version\r\n if (buf.subtype === UndoBuffer.bufferSubtypes.ADD) {\r\n score.removeTextGroup(obj);\r\n } if (buf.subtype === UndoBuffer.bufferSubtypes.UPDATE || buf.subtype === UndoBuffer.bufferSubtypes.REMOVE) {\r\n score.addTextGroup(obj);\r\n }\r\n }\r\n /**\r\n * Undo the operation at the top of the undo stack. This is done by replacing\r\n * the music as it existed before the change was made.\r\n * @param score \r\n * @param staffMap \r\n * @param pop \r\n * @returns \r\n */\r\n undo(score: SmoScore, staffMap: Record, pop: boolean): SmoScore {\r\n let mix = 0;\r\n let bufset: UndoSet | null = this.popUndoSet();\r\n if (!bufset) {\r\n return score;\r\n }\r\n for (let i = 0; i < bufset.buffers.length; ++i) {\r\n const buf = bufset.buffers[bufset.buffers.length - (i + 1)];\r\n if (buf.type === UndoBuffer.bufferTypes.RECTANGLE) {\r\n for (let j = buf.json.topLeft.staff; j <= buf.json.bottomRight.staff; ++j) {\r\n for (let k = buf.json.topLeft.measure; k <= buf.json.bottomRight.measure; ++k) {\r\n const measure = SmoMeasure.deserialize(buf.json.measures[mix]);\r\n mix += 1;\r\n const selector = SmoSelector.default;\r\n if (typeof(staffMap[j]) === 'number') {\r\n selector.staff = staffMap[j];\r\n measure.measureNumber.staffId = staffMap[j];\r\n selector.measure = k;\r\n score.replaceMeasure(selector, measure);\r\n }\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.STAFF_MODIFIER) {\r\n const modifier: StaffModifierBase = StaffModifierBase.deserialize(buf.json);\r\n modifier.attrs.id = buf.json.attrs.id;\r\n if (typeof(staffMap[modifier.startSelector.staff]) === 'number') {\r\n const staff: SmoSystemStaff = score.staves[staffMap[modifier.startSelector.staff]];\r\n const existing: StaffModifierBase | undefined = staff.getModifier(modifier);\r\n if (existing) {\r\n staff.removeStaffModifier(existing);\r\n }\r\n // If we undo an add, we just remove it.\r\n if (buf.subtype !== UndoBuffer.bufferSubtypes.ADD) {\r\n if (modifier.ctor === 'SmoStaffTextBracket') {\r\n staff.addTextBracket(modifier as SmoStaffTextBracket);\r\n } else {\r\n staff.addStaffModifier(modifier);\r\n }\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE_ATTRIBUTES) {\r\n smoSerialize.serializedMerge(SmoScore.preferences, buf.json, score);\r\n } else if (buf.type === UndoBuffer.bufferTypes.COLUMN) {\r\n for (let j = 0; j < score.staves.length; ++j) {\r\n const measure = SmoMeasure.deserialize(buf.json.measures[j]);\r\n const selector = SmoSelector.default;\r\n if (typeof(staffMap[j]) === 'number') {\r\n selector.staff = staffMap[j];\r\n measure.measureNumber.staffId = staffMap[j];\r\n selector.measure = buf.json.measureIndex;\r\n score.replaceMeasure(selector, measure);\r\n }\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.MEASURE) {\r\n // measure expects key signature to be in concert key.\r\n if (typeof(staffMap[buf.selector.staff]) === 'number' ) {\r\n buf.selector.staff = staffMap[buf.selector.staff];\r\n const xpose = buf.json.transposeIndex ?? 0;\r\n const concertKey = SmoMusic.vexKeySigWithOffset(buf.json.keySignature, -1 * xpose);\r\n buf.json.keySignature = concertKey;\r\n const measure = SmoMeasure.deserialize(buf.json);\r\n measure.measureNumber.staffId = buf.selector.staff;\r\n score.replaceMeasure(buf.selector, measure);\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE) {\r\n // Score expects string, as deserialized score is how saving is done.\r\n score = SmoScore.deserialize(JSON.stringify(buf.json));\r\n } else if (buf.type === UndoBuffer.bufferTypes.SCORE_MODIFIER) {\r\n // Currently only one type like this: SmoTextGroup\r\n if (buf.json && buf.json.ctor === 'SmoTextGroup') {\r\n this.undoTextGroup(score, staffMap, buf);\r\n }\r\n } else if (buf.type === UndoBuffer.bufferTypes.PART_MODIFIER) {\r\n if (buf.json && buf.json.ctor === 'SmoTextGroup') {\r\n const part = score.staves[buf.selector.staff].partInfo;\r\n this.undoTextGroup(part, staffMap, buf);\r\n }\r\n } else {\r\n if (typeof(staffMap[buf.selector.staff]) === 'number') {\r\n buf.selector.staff = staffMap[buf.selector.staff];\r\n const staff = SmoSystemStaff.deserialize(buf.json);\r\n score.replaceStaff(buf.selector.staff, staff);\r\n }\r\n } \r\n }\r\n return score;\r\n }\r\n}\r\n\r\n","export const Commissioner_MediumFont = {\r\n smufl: false,\r\n name: \"CommissionerMedium\",\r\n spacing: 50,\r\n fontFamily: \"Commisioner\",\r\n description: \"Commisioner, a sans-serif font similar to Arial\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1212,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1314\r\n },\r\n \"1\": {\r\n \"xMin\": 56,\r\n \"xMax\": 676,\r\n \"yMin\": 0,\r\n \"yMax\": 1380,\r\n \"ha\": 1380,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 874\r\n },\r\n \"2\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1020,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1120\r\n },\r\n \"3\": {\r\n \"xMin\": 84,\r\n \"xMax\": 1056,\r\n \"yMin\": -23,\r\n \"yMax\": 1401,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1150\r\n },\r\n \"4\": {\r\n \"xMin\": 56,\r\n \"xMax\": 1157,\r\n \"yMin\": 0,\r\n \"yMax\": 1373,\r\n \"ha\": 1373,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 1209\r\n },\r\n \"5\": {\r\n \"xMin\": 84,\r\n \"xMax\": 1061,\r\n \"yMin\": -23,\r\n \"yMax\": 1373,\r\n \"ha\": 1396,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1155\r\n },\r\n \"6\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1127,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1221\r\n },\r\n \"7\": {\r\n \"xMin\": 50,\r\n \"xMax\": 998,\r\n \"yMin\": 0,\r\n \"yMax\": 1373,\r\n \"ha\": 1373,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 1072\r\n },\r\n \"8\": {\r\n \"xMin\": 94,\r\n \"xMax\": 1128,\r\n \"yMin\": -23,\r\n \"yMax\": 1401,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1222\r\n },\r\n \"9\": {\r\n \"xMin\": 94,\r\n \"xMax\": 1119,\r\n \"yMin\": -23,\r\n \"yMax\": 1400,\r\n \"ha\": 1423,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1221\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 382\r\n },\r\n \"!\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 1472,\r\n \"ha\": 1496,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 78,\r\n \"xMax\": 674,\r\n \"yMin\": 846,\r\n \"yMax\": 1489,\r\n \"ha\": 643,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 790\r\n },\r\n \"#\": {\r\n \"xMin\": 32,\r\n \"xMax\": 1344,\r\n \"yMin\": 0,\r\n \"yMax\": 1322,\r\n \"ha\": 1322,\r\n \"leftSideBearing\": 32,\r\n \"advanceWidth\": 1376\r\n },\r\n \"$\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1060,\r\n \"yMin\": -274,\r\n \"yMax\": 1606,\r\n \"ha\": 1880,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1133\r\n },\r\n \"%\": {\r\n \"xMin\": 64,\r\n \"xMax\": 1732,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 1804\r\n },\r\n \"&\": {\r\n \"xMin\": 89,\r\n \"xMax\": 1465,\r\n \"yMin\": -21,\r\n \"yMax\": 1453,\r\n \"ha\": 1474,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1490\r\n },\r\n \"'\": {\r\n \"xMin\": 78,\r\n \"xMax\": 305,\r\n \"yMin\": 846,\r\n \"yMax\": 1489,\r\n \"ha\": 643,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 421\r\n },\r\n \"(\": {\r\n \"xMin\": 108,\r\n \"xMax\": 718,\r\n \"yMin\": -250,\r\n \"yMax\": 1545,\r\n \"ha\": 1795,\r\n \"leftSideBearing\": 108,\r\n \"advanceWidth\": 790\r\n },\r\n \")\": {\r\n \"xMin\": 72,\r\n \"xMax\": 682,\r\n \"yMin\": -250,\r\n \"yMax\": 1545,\r\n \"ha\": 1795,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 790\r\n },\r\n \"*\": {\r\n \"xMin\": 52,\r\n \"xMax\": 908,\r\n \"yMin\": 578,\r\n \"yMax\": 1492,\r\n \"ha\": 914,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 960\r\n },\r\n \"+\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1068,\r\n \"yMin\": 113,\r\n \"yMax\": 1089,\r\n \"ha\": 976,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1184\r\n },\r\n \",\": {\r\n \"xMin\": 49,\r\n \"xMax\": 379,\r\n \"yMin\": -314,\r\n \"yMax\": 279,\r\n \"ha\": 593,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 474\r\n },\r\n \"-\": {\r\n \"xMin\": 116,\r\n \"xMax\": 732,\r\n \"yMin\": 503,\r\n \"yMax\": 691,\r\n \"ha\": 188,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 848\r\n },\r\n \".\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 272,\r\n \"ha\": 296,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \"/\": {\r\n \"xMin\": 49,\r\n \"xMax\": 848,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 897\r\n },\r\n \":\": {\r\n \"xMin\": 94,\r\n \"xMax\": 398,\r\n \"yMin\": -24,\r\n \"yMax\": 1019,\r\n \"ha\": 1043,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 493\r\n },\r\n \";\": {\r\n \"xMin\": 67,\r\n \"xMax\": 398,\r\n \"yMin\": -314,\r\n \"yMax\": 1019,\r\n \"ha\": 1333,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 493\r\n },\r\n \"<\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 132,\r\n \"yMax\": 1068,\r\n \"ha\": 936,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n },\r\n \"=\": {\r\n \"xMin\": 124,\r\n \"xMax\": 1020,\r\n \"yMin\": 277,\r\n \"yMax\": 925,\r\n \"ha\": 648,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 1144\r\n },\r\n \">\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 132,\r\n \"yMax\": 1068,\r\n \"ha\": 936,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n },\r\n \"?\": {\r\n \"xMin\": 76,\r\n \"xMax\": 782,\r\n \"yMin\": -24,\r\n \"yMax\": 1498,\r\n \"ha\": 1522,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 872\r\n },\r\n \"@\": {\r\n \"xMin\": 91.72000000000001,\r\n \"xMax\": 1680.1678341637535,\r\n \"yMin\": -272,\r\n \"yMax\": 1366,\r\n \"ha\": 1638,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1772\r\n },\r\n \"A\": {\r\n \"xMin\": 53,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 53,\r\n \"advanceWidth\": 1401\r\n },\r\n \"B\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1227,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1303\r\n },\r\n \"C\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1272,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1369\r\n },\r\n \"D\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1380,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1471\r\n },\r\n \"E\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1081,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1189\r\n },\r\n \"F\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1061,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1150\r\n },\r\n \"G\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1333,\r\n \"yMin\": -23,\r\n \"yMax\": 1453,\r\n \"ha\": 1476,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1463\r\n },\r\n \"H\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1331,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1500\r\n },\r\n \"I\": {\r\n \"xMin\": 173,\r\n \"xMax\": 412,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 173,\r\n \"advanceWidth\": 585\r\n },\r\n \"J\": {\r\n \"xMin\": 21,\r\n \"xMax\": 430,\r\n \"yMin\": -314,\r\n \"yMax\": 1426,\r\n \"ha\": 1740,\r\n \"leftSideBearing\": 21,\r\n \"advanceWidth\": 603\r\n },\r\n \"K\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1310,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1362\r\n },\r\n \"L\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1086,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1150\r\n },\r\n \"M\": {\r\n \"xMin\": 122,\r\n \"xMax\": 1798,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1920\r\n },\r\n \"N\": {\r\n \"xMin\": 169,\r\n \"xMax\": 1336,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 169,\r\n \"advanceWidth\": 1505\r\n },\r\n \"O\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1540,\r\n \"yMin\": -24,\r\n \"yMax\": 1453,\r\n \"ha\": 1477,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1632\r\n },\r\n \"P\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1194,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1271\r\n },\r\n \"Q\": {\r\n \"xMin\": 91,\r\n \"xMax\": 1540,\r\n \"yMin\": -341,\r\n \"yMax\": 1453,\r\n \"ha\": 1794,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 1632\r\n },\r\n \"R\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1304,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1356\r\n },\r\n \"S\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1110,\r\n \"yMin\": -23,\r\n \"yMax\": 1453,\r\n \"ha\": 1476,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1183\r\n },\r\n \"T\": {\r\n \"xMin\": 58,\r\n \"xMax\": 1227,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 1285\r\n },\r\n \"U\": {\r\n \"xMin\": 152,\r\n \"xMax\": 1306,\r\n \"yMin\": -24,\r\n \"yMax\": 1426,\r\n \"ha\": 1450,\r\n \"leftSideBearing\": 152,\r\n \"advanceWidth\": 1459\r\n },\r\n \"V\": {\r\n \"xMin\": 51,\r\n \"xMax\": 1338,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 1390\r\n },\r\n \"W\": {\r\n \"xMin\": 50,\r\n \"xMax\": 2010,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 2060\r\n },\r\n \"X\": {\r\n \"xMin\": 64,\r\n \"xMax\": 1316,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 1380\r\n },\r\n \"Y\": {\r\n \"xMin\": 50,\r\n \"xMax\": 1278,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 1325\r\n },\r\n \"Z\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1258,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1354\r\n },\r\n \"[\": {\r\n \"xMin\": 177,\r\n \"xMax\": 733,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 177,\r\n \"advanceWidth\": 770\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 49,\r\n \"xMax\": 848,\r\n \"yMin\": 0,\r\n \"yMax\": 1426,\r\n \"ha\": 1426,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 897\r\n },\r\n \"]\": {\r\n \"xMin\": 37,\r\n \"xMax\": 593,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 770\r\n },\r\n \"^\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1122,\r\n \"yMin\": 744,\r\n \"yMax\": 1373,\r\n \"ha\": 629,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1234\r\n },\r\n \"_\": {\r\n \"xMin\": -20,\r\n \"xMax\": 844,\r\n \"yMin\": -272,\r\n \"yMax\": -96,\r\n \"ha\": 176,\r\n \"leftSideBearing\": -20,\r\n \"advanceWidth\": 824\r\n },\r\n \"`\": {\r\n \"xMin\": 272,\r\n \"xMax\": 765,\r\n \"yMin\": 1146,\r\n \"yMax\": 1556,\r\n \"ha\": 410,\r\n \"leftSideBearing\": 272,\r\n \"advanceWidth\": 1200\r\n },\r\n \"a\": {\r\n \"xMin\": 94,\r\n \"xMax\": 922,\r\n \"yMin\": -21,\r\n \"yMax\": 1018,\r\n \"ha\": 1039,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 1053\r\n },\r\n \"b\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1093,\r\n \"yMin\": -24,\r\n \"yMax\": 1487,\r\n \"ha\": 1511,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1184\r\n },\r\n \"c\": {\r\n \"xMin\": 89,\r\n \"xMax\": 900,\r\n \"yMin\": -20,\r\n \"yMax\": 1018,\r\n \"ha\": 1038,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 982\r\n },\r\n \"d\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1030,\r\n \"yMin\": -24,\r\n \"yMax\": 1487,\r\n \"ha\": 1511,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1161\r\n },\r\n \"e\": {\r\n \"xMin\": 89,\r\n \"xMax\": 972,\r\n \"yMin\": -23,\r\n \"yMax\": 1018,\r\n \"ha\": 1041,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1054\r\n },\r\n \"f\": {\r\n \"xMin\": 44,\r\n \"xMax\": 794,\r\n \"yMin\": 0,\r\n \"yMax\": 1492,\r\n \"ha\": 1492,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 801\r\n },\r\n \"g\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1050,\r\n \"yMin\": -407,\r\n \"yMax\": 1018,\r\n \"ha\": 1425,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1089\r\n },\r\n \"h\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1018,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1150\r\n },\r\n \"i\": {\r\n \"xMin\": 119,\r\n \"xMax\": 408,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 119,\r\n \"advanceWidth\": 530\r\n },\r\n \"j\": {\r\n \"xMin\": 0,\r\n \"xMax\": 409,\r\n \"yMin\": -391,\r\n \"yMax\": 1472,\r\n \"ha\": 1863,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 526\r\n },\r\n \"k\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1075,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1108\r\n },\r\n \"l\": {\r\n \"xMin\": 154,\r\n \"xMax\": 368,\r\n \"yMin\": 0,\r\n \"yMax\": 1487,\r\n \"ha\": 1487,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 522\r\n },\r\n \"m\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1613,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1745\r\n },\r\n \"n\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1018,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1150\r\n },\r\n \"o\": {\r\n \"xMin\": 89,\r\n \"xMax\": 1106,\r\n \"yMin\": -24,\r\n \"yMax\": 1019,\r\n \"ha\": 1043,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 1195\r\n },\r\n \"p\": {\r\n \"xMin\": 154,\r\n \"xMax\": 1093,\r\n \"yMin\": -391,\r\n \"yMax\": 1019,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 1184\r\n },\r\n \"q\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1030,\r\n \"yMin\": -391,\r\n \"yMax\": 1019,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1172\r\n },\r\n \"r\": {\r\n \"xMin\": 154,\r\n \"xMax\": 766,\r\n \"yMin\": 0,\r\n \"yMax\": 1019,\r\n \"ha\": 1019,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 808\r\n },\r\n \"s\": {\r\n \"xMin\": 104,\r\n \"xMax\": 839,\r\n \"yMin\": -23,\r\n \"yMax\": 1018,\r\n \"ha\": 1041,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 918\r\n },\r\n \"t\": {\r\n \"xMin\": 44,\r\n \"xMax\": 774,\r\n \"yMin\": -24,\r\n \"yMax\": 1359,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 829\r\n },\r\n \"u\": {\r\n \"xMin\": 132,\r\n \"xMax\": 990,\r\n \"yMin\": -24,\r\n \"yMax\": 1002,\r\n \"ha\": 1026,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1126\r\n },\r\n \"v\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1006,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1048\r\n },\r\n \"w\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1581,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1623\r\n },\r\n \"x\": {\r\n \"xMin\": 51,\r\n \"xMax\": 1043,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 1090\r\n },\r\n \"y\": {\r\n \"xMin\": 42,\r\n \"xMax\": 1016,\r\n \"yMin\": -391,\r\n \"yMax\": 1002,\r\n \"ha\": 1393,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 1058\r\n },\r\n \"z\": {\r\n \"xMin\": 72,\r\n \"xMax\": 940,\r\n \"yMin\": 0,\r\n \"yMax\": 994,\r\n \"ha\": 994,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 1007\r\n },\r\n \"{\": {\r\n \"xMin\": 28,\r\n \"xMax\": 802,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 838\r\n },\r\n \"|\": {\r\n \"xMin\": 177,\r\n \"xMax\": 365,\r\n \"yMin\": -316,\r\n \"yMax\": 1564,\r\n \"ha\": 1880,\r\n \"leftSideBearing\": 177,\r\n \"advanceWidth\": 542\r\n },\r\n \"}\": {\r\n \"xMin\": 36,\r\n \"xMax\": 810,\r\n \"yMin\": -238,\r\n \"yMax\": 1538,\r\n \"ha\": 1776,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 838\r\n },\r\n \"~\": {\r\n \"xMin\": 116,\r\n \"xMax\": 1028,\r\n \"yMin\": 431,\r\n \"yMax\": 774,\r\n \"ha\": 343,\r\n \"leftSideBearing\": 116,\r\n \"advanceWidth\": 1144\r\n }\r\n },\r\n \"resolution\": 2000,\r\n \"generatedOn\": \"2020-10-16T17:54:48.712Z\"\r\n};","export const Concert_OneFont = {\r\n smufl: false,\r\n name: \"ConcertOne\",\r\n spacing: 50,\r\n fontFamily: \"ConcertOne\",\r\n description: \"Concert One, a sans-serif rounded title font\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1016,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1118\r\n },\r\n \"1\": {\r\n \"xMin\": 58,\r\n \"xMax\": 664,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 786\r\n },\r\n \"2\": {\r\n \"xMin\": 100,\r\n \"xMax\": 1022,\r\n \"yMin\": 0,\r\n \"yMax\": 1408,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 100,\r\n \"advanceWidth\": 1060\r\n },\r\n \"3\": {\r\n \"xMin\": 54,\r\n \"xMax\": 946,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 1026\r\n },\r\n \"4\": {\r\n \"xMin\": 74,\r\n \"xMax\": 906,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1002\r\n },\r\n \"5\": {\r\n \"xMin\": 76,\r\n \"xMax\": 968,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 1026\r\n },\r\n \"6\": {\r\n \"xMin\": 122,\r\n \"xMax\": 948,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 992\r\n },\r\n \"7\": {\r\n \"xMin\": 48,\r\n \"xMax\": 966,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 1012\r\n },\r\n \"8\": {\r\n \"xMin\": 90,\r\n \"xMax\": 930,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1020\r\n },\r\n \"9\": {\r\n \"xMin\": 46,\r\n \"xMax\": 870,\r\n \"yMin\": 0,\r\n \"yMax\": 1408,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 992\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 798\r\n },\r\n \"!\": {\r\n \"xMin\": 226,\r\n \"xMax\": 556,\r\n \"yMin\": -2,\r\n \"yMax\": 1398,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 226,\r\n \"advanceWidth\": 808\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 110,\r\n \"xMax\": 766,\r\n \"yMin\": 904,\r\n \"yMax\": 1404,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 110,\r\n \"advanceWidth\": 898\r\n },\r\n \"#\": {\r\n \"xMin\": 118,\r\n \"xMax\": 1170,\r\n \"yMin\": 160,\r\n \"yMax\": 1222,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 118,\r\n \"advanceWidth\": 1268\r\n },\r\n \"$\": {\r\n \"xMin\": 142,\r\n \"xMax\": 904,\r\n \"yMin\": 6,\r\n \"yMax\": 1384,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1052\r\n },\r\n \"%\": {\r\n \"xMin\": 98,\r\n \"xMax\": 1384,\r\n \"yMin\": -6,\r\n \"yMax\": 1400,\r\n \"ha\": 1406,\r\n \"leftSideBearing\": 98,\r\n \"advanceWidth\": 1484\r\n },\r\n \"&\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1178,\r\n \"yMin\": -2,\r\n \"yMax\": 1408,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1296\r\n },\r\n \"'\": {\r\n \"xMin\": 130,\r\n \"xMax\": 374,\r\n \"yMin\": 904,\r\n \"yMax\": 1404,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 130,\r\n \"advanceWidth\": 522\r\n },\r\n \"(\": {\r\n \"xMin\": 240,\r\n \"xMax\": 814,\r\n \"yMin\": -158,\r\n \"yMax\": 1562,\r\n \"ha\": 1720,\r\n \"leftSideBearing\": 240,\r\n \"advanceWidth\": 888\r\n },\r\n \")\": {\r\n \"xMin\": 74,\r\n \"xMax\": 648,\r\n \"yMin\": -158,\r\n \"yMax\": 1562,\r\n \"ha\": 1720,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 888\r\n },\r\n \"*\": {\r\n \"xMin\": 110,\r\n \"xMax\": 1084,\r\n \"yMin\": 164,\r\n \"yMax\": 1260,\r\n \"ha\": 1096,\r\n \"leftSideBearing\": 110,\r\n \"advanceWidth\": 1194\r\n },\r\n \"+\": {\r\n \"xMin\": 190,\r\n \"xMax\": 920,\r\n \"yMin\": 356,\r\n \"yMax\": 1086,\r\n \"ha\": 730,\r\n \"leftSideBearing\": 190,\r\n \"advanceWidth\": 1102\r\n },\r\n \",\": {\r\n \"xMin\": 134,\r\n \"xMax\": 464,\r\n \"yMin\": -164,\r\n \"yMax\": 330,\r\n \"ha\": 494,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 598\r\n },\r\n \"-\": {\r\n \"xMin\": 108,\r\n \"xMax\": 838,\r\n \"yMin\": 480,\r\n \"yMax\": 724,\r\n \"ha\": 244,\r\n \"leftSideBearing\": 108,\r\n \"advanceWidth\": 966\r\n },\r\n \".\": {\r\n \"xMin\": 134,\r\n \"xMax\": 464,\r\n \"yMin\": 0,\r\n \"yMax\": 330,\r\n \"ha\": 330,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 598\r\n },\r\n \"/\": {\r\n \"xMin\": 70,\r\n \"xMax\": 826,\r\n \"yMin\": -26,\r\n \"yMax\": 1408,\r\n \"ha\": 1434,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 906\r\n },\r\n \":\": {\r\n \"xMin\": 122,\r\n \"xMax\": 454,\r\n \"yMin\": 0,\r\n \"yMax\": 854,\r\n \"ha\": 854,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 572\r\n },\r\n \";\": {\r\n \"xMin\": 120,\r\n \"xMax\": 452,\r\n \"yMin\": -166,\r\n \"yMax\": 852,\r\n \"ha\": 1018,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 596\r\n },\r\n \"<\": {\r\n \"xMin\": 162,\r\n \"xMax\": 768,\r\n \"yMin\": 126,\r\n \"yMax\": 1074,\r\n \"ha\": 948,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 930\r\n },\r\n \"=\": {\r\n \"xMin\": 180,\r\n \"xMax\": 914,\r\n \"yMin\": 290,\r\n \"yMax\": 926,\r\n \"ha\": 636,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 1102\r\n },\r\n \">\": {\r\n \"xMin\": 162,\r\n \"xMax\": 768,\r\n \"yMin\": 126,\r\n \"yMax\": 1074,\r\n \"ha\": 948,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 930\r\n },\r\n \"?\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1012,\r\n \"yMin\": 0,\r\n \"yMax\": 1420,\r\n \"ha\": 1420,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1122\r\n },\r\n \"@\": {\r\n \"xMin\": 132,\r\n \"xMax\": 1306,\r\n \"yMin\": -96,\r\n \"yMax\": 1078,\r\n \"ha\": 1174,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1494\r\n },\r\n \"A\": {\r\n \"xMin\": 74,\r\n \"xMax\": 1030,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1104\r\n },\r\n \"B\": {\r\n \"xMin\": 120,\r\n \"xMax\": 1042,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 1104\r\n },\r\n \"C\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1046,\r\n \"yMin\": -6,\r\n \"yMax\": 1408,\r\n \"ha\": 1414,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1110\r\n },\r\n \"D\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1008,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1094\r\n },\r\n \"E\": {\r\n \"xMin\": 140,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 986\r\n },\r\n \"F\": {\r\n \"xMin\": 140,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 938\r\n },\r\n \"G\": {\r\n \"xMin\": 106,\r\n \"xMax\": 1072,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 106,\r\n \"advanceWidth\": 1156\r\n },\r\n \"H\": {\r\n \"xMin\": 146,\r\n \"xMax\": 1028,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 146,\r\n \"advanceWidth\": 1166\r\n },\r\n \"I\": {\r\n \"xMin\": 168,\r\n \"xMax\": 500,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 666\r\n },\r\n \"J\": {\r\n \"xMin\": 46,\r\n \"xMax\": 980,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 1126\r\n },\r\n \"K\": {\r\n \"xMin\": 140,\r\n \"xMax\": 1064,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 1142\r\n },\r\n \"L\": {\r\n \"xMin\": 178,\r\n \"xMax\": 906,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 178,\r\n \"advanceWidth\": 968\r\n },\r\n \"M\": {\r\n \"xMin\": 156,\r\n \"xMax\": 1430,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 156,\r\n \"advanceWidth\": 1594\r\n },\r\n \"N\": {\r\n \"xMin\": 148,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 148,\r\n \"advanceWidth\": 1360\r\n },\r\n \"O\": {\r\n \"xMin\": 104,\r\n \"xMax\": 1026,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1128\r\n },\r\n \"P\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1066,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1082\r\n },\r\n \"Q\": {\r\n \"xMin\": 122,\r\n \"xMax\": 1114,\r\n \"yMin\": -110,\r\n \"yMax\": 1408,\r\n \"ha\": 1518,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1156\r\n },\r\n \"R\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1062,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1142\r\n },\r\n \"S\": {\r\n \"xMin\": 88,\r\n \"xMax\": 950,\r\n \"yMin\": -8,\r\n \"yMax\": 1408,\r\n \"ha\": 1416,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1014\r\n },\r\n \"T\": {\r\n \"xMin\": 10,\r\n \"xMax\": 974,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 982\r\n },\r\n \"U\": {\r\n \"xMin\": 142,\r\n \"xMax\": 1070,\r\n \"yMin\": -8,\r\n \"yMax\": 1400,\r\n \"ha\": 1408,\r\n \"leftSideBearing\": 142,\r\n \"advanceWidth\": 1208\r\n },\r\n \"V\": {\r\n \"xMin\": 16,\r\n \"xMax\": 992,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 16,\r\n \"advanceWidth\": 1000\r\n },\r\n \"W\": {\r\n \"xMin\": 24,\r\n \"xMax\": 1658,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 1666\r\n },\r\n \"X\": {\r\n \"xMin\": 56,\r\n \"xMax\": 1094,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 56,\r\n \"advanceWidth\": 1146\r\n },\r\n \"Y\": {\r\n \"xMin\": -14,\r\n \"xMax\": 1022,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": -14,\r\n \"advanceWidth\": 1000\r\n },\r\n \"Z\": {\r\n \"xMin\": 70,\r\n \"xMax\": 982,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1042\r\n },\r\n \"[\": {\r\n \"xMin\": 240,\r\n \"xMax\": 736,\r\n \"yMin\": 2,\r\n \"yMax\": 1404,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 240,\r\n \"advanceWidth\": 836\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 70,\r\n \"xMax\": 826,\r\n \"yMin\": -26,\r\n \"yMax\": 1408,\r\n \"ha\": 1434,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 906\r\n },\r\n \"]\": {\r\n \"xMin\": 140,\r\n \"xMax\": 636,\r\n \"yMin\": 2,\r\n \"yMax\": 1404,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 836\r\n },\r\n \"^\": {\r\n \"xMin\": 174,\r\n \"xMax\": 782,\r\n \"yMin\": 762,\r\n \"yMax\": 1156,\r\n \"ha\": 394,\r\n \"leftSideBearing\": 174,\r\n \"advanceWidth\": 976\r\n },\r\n \"_\": {\r\n \"xMin\": 146,\r\n \"xMax\": 1254,\r\n \"yMin\": 2,\r\n \"yMax\": 246,\r\n \"ha\": 244,\r\n \"leftSideBearing\": 146,\r\n \"advanceWidth\": 1408\r\n },\r\n \"`\": {\r\n \"xMin\": 132,\r\n \"xMax\": 578,\r\n \"yMin\": 1102,\r\n \"yMax\": 1452,\r\n \"ha\": 350,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 698\r\n },\r\n \"a\": {\r\n \"xMin\": 84,\r\n \"xMax\": 912,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1020\r\n },\r\n \"b\": {\r\n \"xMin\": 120,\r\n \"xMax\": 948,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 120,\r\n \"advanceWidth\": 1042\r\n },\r\n \"c\": {\r\n \"xMin\": 84,\r\n \"xMax\": 930,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 1000\r\n },\r\n \"d\": {\r\n \"xMin\": 82,\r\n \"xMax\": 910,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 1020\r\n },\r\n \"e\": {\r\n \"xMin\": 92,\r\n \"xMax\": 936,\r\n \"yMin\": 0,\r\n \"yMax\": 1002,\r\n \"ha\": 1002,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1020\r\n },\r\n \"f\": {\r\n \"xMin\": 0,\r\n \"xMax\": 724,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 750\r\n },\r\n \"g\": {\r\n \"xMin\": 92,\r\n \"xMax\": 922,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1042\r\n },\r\n \"h\": {\r\n \"xMin\": 122,\r\n \"xMax\": 956,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 122,\r\n \"advanceWidth\": 1042\r\n },\r\n \"i\": {\r\n \"xMin\": 154,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 154,\r\n \"advanceWidth\": 626\r\n },\r\n \"j\": {\r\n \"xMin\": -44,\r\n \"xMax\": 480,\r\n \"yMin\": -400,\r\n \"yMax\": 1402,\r\n \"ha\": 1802,\r\n \"leftSideBearing\": -44,\r\n \"advanceWidth\": 626\r\n },\r\n \"k\": {\r\n \"xMin\": 150,\r\n \"xMax\": 920,\r\n \"yMin\": -2,\r\n \"yMax\": 1400,\r\n \"ha\": 1402,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1014\r\n },\r\n \"l\": {\r\n \"xMin\": 140,\r\n \"xMax\": 444,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 140,\r\n \"advanceWidth\": 586\r\n },\r\n \"m\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1486,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1604\r\n },\r\n \"n\": {\r\n \"xMin\": 132,\r\n \"xMax\": 966,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1082\r\n },\r\n \"o\": {\r\n \"xMin\": 78,\r\n \"xMax\": 912,\r\n \"yMin\": -8,\r\n \"yMax\": 1008,\r\n \"ha\": 1016,\r\n \"leftSideBearing\": 78,\r\n \"advanceWidth\": 990\r\n },\r\n \"p\": {\r\n \"xMin\": 132,\r\n \"xMax\": 960,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 1062\r\n },\r\n \"q\": {\r\n \"xMin\": 104,\r\n \"xMax\": 932,\r\n \"yMin\": -400,\r\n \"yMax\": 1000,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 1062\r\n },\r\n \"r\": {\r\n \"xMin\": 132,\r\n \"xMax\": 770,\r\n \"yMin\": 0,\r\n \"yMax\": 998,\r\n \"ha\": 998,\r\n \"leftSideBearing\": 132,\r\n \"advanceWidth\": 792\r\n },\r\n \"s\": {\r\n \"xMin\": 86,\r\n \"xMax\": 836,\r\n \"yMin\": -8,\r\n \"yMax\": 1008,\r\n \"ha\": 1016,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 910\r\n },\r\n \"t\": {\r\n \"xMin\": 60,\r\n \"xMax\": 786,\r\n \"yMin\": 0,\r\n \"yMax\": 1400,\r\n \"ha\": 1400,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 870\r\n },\r\n \"u\": {\r\n \"xMin\": 118,\r\n \"xMax\": 952,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 118,\r\n \"advanceWidth\": 1076\r\n },\r\n \"v\": {\r\n \"xMin\": 36,\r\n \"xMax\": 844,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 876\r\n },\r\n \"w\": {\r\n \"xMin\": 24,\r\n \"xMax\": 1372,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 1396\r\n },\r\n \"x\": {\r\n \"xMin\": 84,\r\n \"xMax\": 860,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 84,\r\n \"advanceWidth\": 938\r\n },\r\n \"y\": {\r\n \"xMin\": 20,\r\n \"xMax\": 892,\r\n \"yMin\": -400,\r\n \"yMax\": 1004,\r\n \"ha\": 1404,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 916\r\n },\r\n \"z\": {\r\n \"xMin\": 72,\r\n \"xMax\": 844,\r\n \"yMin\": 0,\r\n \"yMax\": 1000,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 916\r\n },\r\n \"{\": {\r\n \"xMin\": 188,\r\n \"xMax\": 932,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 188,\r\n \"advanceWidth\": 1012\r\n },\r\n \"|\": {\r\n \"xMin\": 180,\r\n \"xMax\": 424,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 604\r\n },\r\n \"}\": {\r\n \"xMin\": 80,\r\n \"xMax\": 824,\r\n \"yMin\": -160,\r\n \"yMax\": 1566,\r\n \"ha\": 1726,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 1012\r\n },\r\n \"~\": {\r\n \"xMin\": 112,\r\n \"xMax\": 802,\r\n \"yMin\": 84,\r\n \"yMax\": 398,\r\n \"ha\": 314,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 918\r\n }\r\n },\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-16T18:00:03.708Z\"\r\n};","export const MerriweatherFont = {\r\n name: \"Merriweather-Regular\",\r\n smufl: false,\r\n spacing: 50,\r\n fontFamily: \"Merriweather\",\r\n description: \"Merriweather, a serif web font by Sorkin Type\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 62,\r\n \"xMax\": 582,\r\n \"yMin\": -9,\r\n \"yMax\": 631,\r\n \"ha\": 640,\r\n \"leftSideBearing\": 62,\r\n \"advanceWidth\": 643\r\n },\r\n \"1\": {\r\n \"xMin\": 39,\r\n \"xMax\": 419,\r\n \"yMin\": 0,\r\n \"yMax\": 632,\r\n \"ha\": 632,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 440\r\n },\r\n \"2\": {\r\n \"xMin\": 47,\r\n \"xMax\": 565,\r\n \"yMin\": 0,\r\n \"yMax\": 632,\r\n \"ha\": 632,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 598\r\n },\r\n \"3\": {\r\n \"xMin\": 57,\r\n \"xMax\": 512,\r\n \"yMin\": -161,\r\n \"yMax\": 632,\r\n \"ha\": 793,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 560\r\n },\r\n \"4\": {\r\n \"xMin\": 37,\r\n \"xMax\": 625,\r\n \"yMin\": -161,\r\n \"yMax\": 680,\r\n \"ha\": 841,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 644\r\n },\r\n \"5\": {\r\n \"xMin\": 91,\r\n \"xMax\": 527,\r\n \"yMin\": -161,\r\n \"yMax\": 643,\r\n \"ha\": 804,\r\n \"leftSideBearing\": 91,\r\n \"advanceWidth\": 594\r\n },\r\n \"6\": {\r\n \"xMin\": 76,\r\n \"xMax\": 592,\r\n \"yMin\": -11,\r\n \"yMax\": 786,\r\n \"ha\": 797,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 664\r\n },\r\n \"7\": {\r\n \"xMin\": 48,\r\n \"xMax\": 546,\r\n \"yMin\": -173,\r\n \"yMax\": 624,\r\n \"ha\": 797,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 588\r\n },\r\n \"8\": {\r\n \"xMin\": 65,\r\n \"xMax\": 572,\r\n \"yMin\": -10,\r\n \"yMax\": 752,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 633\r\n },\r\n \"9\": {\r\n \"xMin\": 70,\r\n \"xMax\": 588,\r\n \"yMin\": -167,\r\n \"yMax\": 632,\r\n \"ha\": 799,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 660\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 237\r\n },\r\n \"!\": {\r\n \"xMin\": 107,\r\n \"xMax\": 248,\r\n \"yMin\": -10,\r\n \"yMax\": 883,\r\n \"ha\": 893,\r\n \"leftSideBearing\": 107,\r\n \"advanceWidth\": 354\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 124,\r\n \"xMax\": 489,\r\n \"yMin\": 456,\r\n \"yMax\": 827,\r\n \"ha\": 371,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 612\r\n },\r\n \"#\": {\r\n \"xMin\": 81,\r\n \"xMax\": 677,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 81,\r\n \"advanceWidth\": 744\r\n },\r\n \"$\": {\r\n \"xMin\": 94,\r\n \"xMax\": 575,\r\n \"yMin\": -126,\r\n \"yMax\": 860,\r\n \"ha\": 986,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 659\r\n },\r\n \"%\": {\r\n \"xMin\": 53,\r\n \"xMax\": 981,\r\n \"yMin\": 0,\r\n \"yMax\": 751,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 53,\r\n \"advanceWidth\": 1037\r\n },\r\n \"&\": {\r\n \"xMin\": 60,\r\n \"xMax\": 739,\r\n \"yMin\": -9,\r\n \"yMax\": 752,\r\n \"ha\": 761,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 756\r\n },\r\n \"'\": {\r\n \"xMin\": 124,\r\n \"xMax\": 230,\r\n \"yMin\": 456,\r\n \"yMax\": 827,\r\n \"ha\": 371,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 353\r\n },\r\n \"(\": {\r\n \"xMin\": 67,\r\n \"xMax\": 360,\r\n \"yMin\": -184,\r\n \"yMax\": 828,\r\n \"ha\": 1012,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 430\r\n },\r\n \")\": {\r\n \"xMin\": 70,\r\n \"xMax\": 363,\r\n \"yMin\": -183,\r\n \"yMax\": 829,\r\n \"ha\": 1012,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 430\r\n },\r\n \"*\": {\r\n \"xMin\": 76,\r\n \"xMax\": 568,\r\n \"yMin\": 310,\r\n \"yMax\": 823,\r\n \"ha\": 513,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 643\r\n },\r\n \"+\": {\r\n \"xMin\": 105,\r\n \"xMax\": 556,\r\n \"yMin\": 84,\r\n \"yMax\": 547,\r\n \"ha\": 463,\r\n \"leftSideBearing\": 105,\r\n \"advanceWidth\": 661\r\n },\r\n \",\": {\r\n \"xMin\": 99,\r\n \"xMax\": 250,\r\n \"yMin\": -224,\r\n \"yMax\": 150,\r\n \"ha\": 374,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 335\r\n },\r\n \"-\": {\r\n \"xMin\": 112,\r\n \"xMax\": 516,\r\n \"yMin\": 284,\r\n \"yMax\": 357,\r\n \"ha\": 73,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 628\r\n },\r\n \".\": {\r\n \"xMin\": 63,\r\n \"xMax\": 202,\r\n \"yMin\": -10,\r\n \"yMax\": 127,\r\n \"ha\": 137,\r\n \"leftSideBearing\": 63,\r\n \"advanceWidth\": 265\r\n },\r\n \"/\": {\r\n \"xMin\": 36,\r\n \"xMax\": 394,\r\n \"yMin\": -177,\r\n \"yMax\": 781,\r\n \"ha\": 958,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 431\r\n },\r\n \":\": {\r\n \"xMin\": 102,\r\n \"xMax\": 240,\r\n \"yMin\": -10,\r\n \"yMax\": 539,\r\n \"ha\": 549,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 344\r\n },\r\n \";\": {\r\n \"xMin\": 99,\r\n \"xMax\": 250,\r\n \"yMin\": -224,\r\n \"yMax\": 539,\r\n \"ha\": 763,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 344\r\n },\r\n \"<\": {\r\n \"xMin\": 82,\r\n \"xMax\": 555,\r\n \"yMin\": 27,\r\n \"yMax\": 575,\r\n \"ha\": 548,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 669\r\n },\r\n \"=\": {\r\n \"xMin\": 102,\r\n \"xMax\": 552,\r\n \"yMin\": 127,\r\n \"yMax\": 474,\r\n \"ha\": 347,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 653\r\n },\r\n \">\": {\r\n \"xMin\": 114,\r\n \"xMax\": 587,\r\n \"yMin\": 27,\r\n \"yMax\": 575,\r\n \"ha\": 548,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 669\r\n },\r\n \"?\": {\r\n \"xMin\": 42,\r\n \"xMax\": 452,\r\n \"yMin\": -10,\r\n \"yMax\": 906,\r\n \"ha\": 916,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 487\r\n },\r\n \"@\": {\r\n \"xMin\": 93,\r\n \"xMax\": 977,\r\n \"yMin\": -253,\r\n \"yMax\": 760,\r\n \"ha\": 1013,\r\n \"leftSideBearing\": 93,\r\n \"advanceWidth\": 1078\r\n },\r\n \"A\": {\r\n \"xMin\": -13,\r\n \"xMax\": 705,\r\n \"yMin\": 0,\r\n \"yMax\": 749,\r\n \"ha\": 749,\r\n \"leftSideBearing\": -13,\r\n \"advanceWidth\": 692\r\n },\r\n \"B\": {\r\n \"xMin\": 46,\r\n \"xMax\": 649,\r\n \"yMin\": -6,\r\n \"yMax\": 751,\r\n \"ha\": 757,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 685\r\n },\r\n \"C\": {\r\n \"xMin\": 33,\r\n \"xMax\": 617,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 653\r\n },\r\n \"D\": {\r\n \"xMin\": 46,\r\n \"xMax\": 725,\r\n \"yMin\": -8,\r\n \"yMax\": 751,\r\n \"ha\": 759,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 758\r\n },\r\n \"E\": {\r\n \"xMin\": 46,\r\n \"xMax\": 630,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 651\r\n },\r\n \"F\": {\r\n \"xMin\": 43,\r\n \"xMax\": 588,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 619\r\n },\r\n \"G\": {\r\n \"xMin\": 43,\r\n \"xMax\": 721,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 740\r\n },\r\n \"H\": {\r\n \"xMin\": 50,\r\n \"xMax\": 777,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 828\r\n },\r\n \"I\": {\r\n \"xMin\": 54,\r\n \"xMax\": 348,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 403\r\n },\r\n \"J\": {\r\n \"xMin\": -6,\r\n \"xMax\": 343,\r\n \"yMin\": -179,\r\n \"yMax\": 743,\r\n \"ha\": 922,\r\n \"leftSideBearing\": -6,\r\n \"advanceWidth\": 381\r\n },\r\n \"K\": {\r\n \"xMin\": 48,\r\n \"xMax\": 727,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 726\r\n },\r\n \"L\": {\r\n \"xMin\": 48,\r\n \"xMax\": 616,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 634\r\n },\r\n \"M\": {\r\n \"xMin\": 6,\r\n \"xMax\": 984,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 990\r\n },\r\n \"N\": {\r\n \"xMin\": 50,\r\n \"xMax\": 774,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 50,\r\n \"advanceWidth\": 799\r\n },\r\n \"O\": {\r\n \"xMin\": 34,\r\n \"xMax\": 689,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 722\r\n },\r\n \"P\": {\r\n \"xMin\": 48,\r\n \"xMax\": 624,\r\n \"yMin\": 0,\r\n \"yMax\": 750,\r\n \"ha\": 750,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 649\r\n },\r\n \"Q\": {\r\n \"xMin\": 36,\r\n \"xMax\": 904,\r\n \"yMin\": -198,\r\n \"yMax\": 751,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 727\r\n },\r\n \"R\": {\r\n \"xMin\": 46,\r\n \"xMax\": 705,\r\n \"yMin\": 0,\r\n \"yMax\": 751,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 704\r\n },\r\n \"S\": {\r\n \"xMin\": 62,\r\n \"xMax\": 556,\r\n \"yMin\": -11,\r\n \"yMax\": 751,\r\n \"ha\": 762,\r\n \"leftSideBearing\": 62,\r\n \"advanceWidth\": 594\r\n },\r\n \"T\": {\r\n \"xMin\": 17,\r\n \"xMax\": 669,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 17,\r\n \"advanceWidth\": 692\r\n },\r\n \"U\": {\r\n \"xMin\": 24,\r\n \"xMax\": 725,\r\n \"yMin\": -8,\r\n \"yMax\": 743,\r\n \"ha\": 751,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 740\r\n },\r\n \"V\": {\r\n \"xMin\": -16,\r\n \"xMax\": 689,\r\n \"yMin\": -8,\r\n \"yMax\": 743,\r\n \"ha\": 751,\r\n \"leftSideBearing\": -16,\r\n \"advanceWidth\": 670\r\n },\r\n \"W\": {\r\n \"xMin\": -19,\r\n \"xMax\": 1019,\r\n \"yMin\": -5,\r\n \"yMax\": 743,\r\n \"ha\": 748,\r\n \"leftSideBearing\": -19,\r\n \"advanceWidth\": 1000\r\n },\r\n \"X\": {\r\n \"xMin\": 7,\r\n \"xMax\": 710,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": 7,\r\n \"advanceWidth\": 712\r\n },\r\n \"Y\": {\r\n \"xMin\": -12,\r\n \"xMax\": 658,\r\n \"yMin\": 0,\r\n \"yMax\": 743,\r\n \"ha\": 743,\r\n \"leftSideBearing\": -12,\r\n \"advanceWidth\": 644\r\n },\r\n \"Z\": {\r\n \"xMin\": 34,\r\n \"xMax\": 616,\r\n \"yMin\": 0,\r\n \"yMax\": 746,\r\n \"ha\": 746,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 654\r\n },\r\n \"[\": {\r\n \"xMin\": 96,\r\n \"xMax\": 338,\r\n \"yMin\": -137,\r\n \"yMax\": 804,\r\n \"ha\": 941,\r\n \"leftSideBearing\": 96,\r\n \"advanceWidth\": 428\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 30,\r\n \"xMax\": 388,\r\n \"yMin\": -177,\r\n \"yMax\": 781,\r\n \"ha\": 958,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 431\r\n },\r\n \"]\": {\r\n \"xMin\": 90,\r\n \"xMax\": 332,\r\n \"yMin\": -137,\r\n \"yMax\": 804,\r\n \"ha\": 941,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 428\r\n },\r\n \"^\": {\r\n \"xMin\": 86,\r\n \"xMax\": 579,\r\n \"yMin\": 133,\r\n \"yMax\": 748,\r\n \"ha\": 615,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 666\r\n },\r\n \"_\": {\r\n \"xMin\": -10,\r\n \"xMax\": 845,\r\n \"yMin\": -183,\r\n \"yMax\": -122,\r\n \"ha\": 61,\r\n \"leftSideBearing\": -10,\r\n \"advanceWidth\": 835\r\n },\r\n \"`\": {\r\n \"xMin\": -7,\r\n \"xMax\": 227,\r\n \"yMin\": 653,\r\n \"yMax\": 884,\r\n \"ha\": 231,\r\n \"leftSideBearing\": -7,\r\n \"advanceWidth\": 333\r\n },\r\n \"a\": {\r\n \"xMin\": 45,\r\n \"xMax\": 536,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 561\r\n },\r\n \"b\": {\r\n \"xMin\": -2,\r\n \"xMax\": 565,\r\n \"yMin\": -11,\r\n \"yMax\": 819,\r\n \"ha\": 830,\r\n \"leftSideBearing\": -2,\r\n \"advanceWidth\": 607\r\n },\r\n \"c\": {\r\n \"xMin\": 33,\r\n \"xMax\": 471,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 513\r\n },\r\n \"d\": {\r\n \"xMin\": 42,\r\n \"xMax\": 586,\r\n \"yMin\": -11,\r\n \"yMax\": 819,\r\n \"ha\": 830,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 621\r\n },\r\n \"e\": {\r\n \"xMin\": 43,\r\n \"xMax\": 503,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 544\r\n },\r\n \"f\": {\r\n \"xMin\": 31,\r\n \"xMax\": 413,\r\n \"yMin\": 0,\r\n \"yMax\": 828,\r\n \"ha\": 828,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 400\r\n },\r\n \"g\": {\r\n \"xMin\": 41,\r\n \"xMax\": 597,\r\n \"yMin\": -270,\r\n \"yMax\": 571,\r\n \"ha\": 841,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 607\r\n },\r\n \"h\": {\r\n \"xMin\": 15,\r\n \"xMax\": 630,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 659\r\n },\r\n \"i\": {\r\n \"xMin\": 42,\r\n \"xMax\": 307,\r\n \"yMin\": 0,\r\n \"yMax\": 793,\r\n \"ha\": 793,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 333\r\n },\r\n \"j\": {\r\n \"xMin\": -11,\r\n \"xMax\": 238,\r\n \"yMin\": -243,\r\n \"yMax\": 793,\r\n \"ha\": 1036,\r\n \"leftSideBearing\": -11,\r\n \"advanceWidth\": 317\r\n },\r\n \"k\": {\r\n \"xMin\": 20,\r\n \"xMax\": 624,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 600\r\n },\r\n \"l\": {\r\n \"xMin\": 37,\r\n \"xMax\": 307,\r\n \"yMin\": 0,\r\n \"yMax\": 819,\r\n \"ha\": 819,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 333\r\n },\r\n \"m\": {\r\n \"xMin\": 33,\r\n \"xMax\": 970,\r\n \"yMin\": 0,\r\n \"yMax\": 568,\r\n \"ha\": 568,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 995\r\n },\r\n \"n\": {\r\n \"xMin\": 33,\r\n \"xMax\": 637,\r\n \"yMin\": 0,\r\n \"yMax\": 568,\r\n \"ha\": 568,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 664\r\n },\r\n \"o\": {\r\n \"xMin\": 45,\r\n \"xMax\": 562,\r\n \"yMin\": -11,\r\n \"yMax\": 570,\r\n \"ha\": 581,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 608\r\n },\r\n \"p\": {\r\n \"xMin\": 29,\r\n \"xMax\": 586,\r\n \"yMin\": -242,\r\n \"yMax\": 570,\r\n \"ha\": 812,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 628\r\n },\r\n \"q\": {\r\n \"xMin\": 42,\r\n \"xMax\": 597,\r\n \"yMin\": -242,\r\n \"yMax\": 570,\r\n \"ha\": 812,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 609\r\n },\r\n \"r\": {\r\n \"xMin\": 47,\r\n \"xMax\": 437,\r\n \"yMin\": 0,\r\n \"yMax\": 570,\r\n \"ha\": 570,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 458\r\n },\r\n \"s\": {\r\n \"xMin\": 55,\r\n \"xMax\": 460,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 505\r\n },\r\n \"t\": {\r\n \"xMin\": 31,\r\n \"xMax\": 391,\r\n \"yMin\": -10,\r\n \"yMax\": 699,\r\n \"ha\": 709,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 407\r\n },\r\n \"u\": {\r\n \"xMin\": 36,\r\n \"xMax\": 597,\r\n \"yMin\": -11,\r\n \"yMax\": 567,\r\n \"ha\": 578,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 632\r\n },\r\n \"v\": {\r\n \"xMin\": -1,\r\n \"xMax\": 575,\r\n \"yMin\": -8,\r\n \"yMax\": 555,\r\n \"ha\": 563,\r\n \"leftSideBearing\": -1,\r\n \"advanceWidth\": 568\r\n },\r\n \"w\": {\r\n \"xMin\": -7,\r\n \"xMax\": 853,\r\n \"yMin\": -8,\r\n \"yMax\": 555,\r\n \"ha\": 563,\r\n \"leftSideBearing\": -7,\r\n \"advanceWidth\": 839\r\n },\r\n \"x\": {\r\n \"xMin\": 6,\r\n \"xMax\": 591,\r\n \"yMin\": 0,\r\n \"yMax\": 555,\r\n \"ha\": 555,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 595\r\n },\r\n \"y\": {\r\n \"xMin\": -3,\r\n \"xMax\": 571,\r\n \"yMin\": -249,\r\n \"yMax\": 555,\r\n \"ha\": 804,\r\n \"leftSideBearing\": -3,\r\n \"advanceWidth\": 572\r\n },\r\n \"z\": {\r\n \"xMin\": 30,\r\n \"xMax\": 518,\r\n \"yMin\": 0,\r\n \"yMax\": 555,\r\n \"ha\": 555,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 554\r\n },\r\n \"{\": {\r\n \"xMin\": 57,\r\n \"xMax\": 431,\r\n \"yMin\": -137,\r\n \"yMax\": 806,\r\n \"ha\": 943,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 508\r\n },\r\n \"|\": {\r\n \"xMin\": 170,\r\n \"xMax\": 252,\r\n \"yMin\": -91,\r\n \"yMax\": 869,\r\n \"ha\": 960,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 422\r\n },\r\n \"}\": {\r\n \"xMin\": 77,\r\n \"xMax\": 450,\r\n \"yMin\": -137,\r\n \"yMax\": 806,\r\n \"ha\": 943,\r\n \"leftSideBearing\": 77,\r\n \"advanceWidth\": 508\r\n },\r\n \"~\": {\r\n \"xMin\": 107,\r\n \"xMax\": 584,\r\n \"yMin\": 218,\r\n \"yMax\": 379,\r\n \"ha\": 161,\r\n \"leftSideBearing\": 107,\r\n \"advanceWidth\": 692\r\n }\r\n },\r\n \"resolution\": 1000,\r\n \"generatedOn\": \"2020-10-16T18:04:00.805Z\"\r\n};","export const ArialFont = {\r\n smufl: false,\r\n name: \"Arial\",\r\n spacing: 50,\r\n Description: 'Built-in sans-serif font',\r\n bold: true,\r\n italic: true,\r\n monospaced: false,\r\n serifs: false,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1041,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \"1\": {\r\n \"xMin\": 223,\r\n \"xMax\": 763,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 223,\r\n \"advanceWidth\": 1139\r\n },\r\n \"2\": {\r\n \"xMin\": 61.840001123045234,\r\n \"xMax\": 1031,\r\n \"yMin\": 0,\r\n \"yMax\": 1472,\r\n \"ha\": 1472,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1139\r\n },\r\n \"3\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1046,\r\n \"yMin\": -26,\r\n \"yMax\": 1472,\r\n \"ha\": 1498,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1139\r\n },\r\n \"4\": {\r\n \"xMin\": 26,\r\n \"xMax\": 1040,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 1139\r\n },\r\n \"5\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1057,\r\n \"yMin\": -25,\r\n \"yMax\": 1446,\r\n \"ha\": 1471,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \"6\": {\r\n \"xMin\": 77,\r\n \"xMax\": 1045,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 77,\r\n \"advanceWidth\": 1139\r\n },\r\n \"7\": {\r\n \"xMin\": 97,\r\n \"xMax\": 1046,\r\n \"yMin\": 0,\r\n \"yMax\": 1447,\r\n \"ha\": 1447,\r\n \"leftSideBearing\": 97,\r\n \"advanceWidth\": 1139\r\n },\r\n \"8\": {\r\n \"xMin\": 83,\r\n \"xMax\": 1049,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 83,\r\n \"advanceWidth\": 1139\r\n },\r\n \"9\": {\r\n \"xMin\": 85,\r\n \"xMax\": 1049,\r\n \"yMin\": -25,\r\n \"yMax\": 1472,\r\n \"ha\": 1497,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 1139\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \"!\": {\r\n \"xMin\": 176,\r\n \"xMax\": 399,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 176,\r\n \"advanceWidth\": 569\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 94,\r\n \"xMax\": 631,\r\n \"yMin\": 947,\r\n \"yMax\": 1466,\r\n \"ha\": 519,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 727\r\n },\r\n \"#\": {\r\n \"xMin\": 21,\r\n \"xMax\": 1113,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 21,\r\n \"advanceWidth\": 1139\r\n },\r\n \"$\": {\r\n \"xMin\": 73,\r\n \"xMax\": 1043,\r\n \"yMin\": -211,\r\n \"yMax\": 1601,\r\n \"ha\": 1812,\r\n \"leftSideBearing\": 73,\r\n \"advanceWidth\": 1139\r\n },\r\n \"%\": {\r\n \"xMin\": 119,\r\n \"xMax\": 1695,\r\n \"yMin\": -54,\r\n \"yMax\": 1491,\r\n \"ha\": 1545,\r\n \"leftSideBearing\": 119,\r\n \"advanceWidth\": 1821\r\n },\r\n \"&\": {\r\n \"xMin\": 88,\r\n \"xMax\": 1319,\r\n \"yMin\": -34,\r\n \"yMax\": 1491,\r\n \"ha\": 1525,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1366\r\n },\r\n \"'\": {\r\n \"xMin\": 90,\r\n \"xMax\": 295,\r\n \"yMin\": 947,\r\n \"yMax\": 1466,\r\n \"ha\": 519,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 391\r\n },\r\n \"(\": {\r\n \"xMin\": 124,\r\n \"xMax\": 608,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 682\r\n },\r\n \")\": {\r\n \"xMin\": 124,\r\n \"xMax\": 608,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 124,\r\n \"advanceWidth\": 682\r\n },\r\n \"*\": {\r\n \"xMin\": 64,\r\n \"xMax\": 725,\r\n \"yMin\": 867,\r\n \"yMax\": 1491,\r\n \"ha\": 624,\r\n \"leftSideBearing\": 64,\r\n \"advanceWidth\": 797\r\n },\r\n \"+\": {\r\n \"xMin\": 114,\r\n \"xMax\": 1082,\r\n \"yMin\": 237,\r\n \"yMax\": 1206,\r\n \"ha\": 969,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 1196\r\n },\r\n \",\": {\r\n \"xMin\": 170,\r\n \"xMax\": 387,\r\n \"yMin\": -290,\r\n \"yMax\": 205,\r\n \"ha\": 495,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 569\r\n },\r\n \"-\": {\r\n \"xMin\": 65,\r\n \"xMax\": 618,\r\n \"yMin\": 440,\r\n \"yMax\": 621,\r\n \"ha\": 181,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 682\r\n },\r\n \".\": {\r\n \"xMin\": 186,\r\n \"xMax\": 391,\r\n \"yMin\": 0,\r\n \"yMax\": 205,\r\n \"ha\": 205,\r\n \"leftSideBearing\": 186,\r\n \"advanceWidth\": 569\r\n },\r\n \"/\": {\r\n \"xMin\": 0,\r\n \"xMax\": 569,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \":\": {\r\n \"xMin\": 185,\r\n \"xMax\": 390,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 185,\r\n \"advanceWidth\": 569\r\n },\r\n \";\": {\r\n \"xMin\": 170,\r\n \"xMax\": 387,\r\n \"yMin\": -290,\r\n \"yMax\": 1062,\r\n \"ha\": 1352,\r\n \"leftSideBearing\": 170,\r\n \"advanceWidth\": 569\r\n },\r\n \"<\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1083,\r\n \"yMin\": 226,\r\n \"yMax\": 1219,\r\n \"ha\": 993,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1196\r\n },\r\n \"=\": {\r\n \"xMin\": 114,\r\n \"xMax\": 1082,\r\n \"yMin\": 417,\r\n \"yMax\": 1030,\r\n \"ha\": 613,\r\n \"leftSideBearing\": 114,\r\n \"advanceWidth\": 1196\r\n },\r\n \">\": {\r\n \"xMin\": 112,\r\n \"xMax\": 1083,\r\n \"yMin\": 226,\r\n \"yMax\": 1219,\r\n \"ha\": 993,\r\n \"leftSideBearing\": 112,\r\n \"advanceWidth\": 1196\r\n },\r\n \"?\": {\r\n \"xMin\": 90,\r\n \"xMax\": 1036,\r\n \"yMin\": 0,\r\n \"yMax\": 1491,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1139\r\n },\r\n \"@\": {\r\n \"xMin\": 111,\r\n \"xMax\": 2005,\r\n \"yMin\": -431,\r\n \"yMax\": 1493,\r\n \"ha\": 1924,\r\n \"leftSideBearing\": 111,\r\n \"advanceWidth\": 2079\r\n },\r\n \"A\": {\r\n \"xMin\": -3,\r\n \"xMax\": 1369,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": -3,\r\n \"advanceWidth\": 1366\r\n },\r\n \"B\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1257,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1366\r\n },\r\n \"C\": {\r\n \"xMin\": 102,\r\n \"xMax\": 1398,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 102,\r\n \"advanceWidth\": 1479\r\n },\r\n \"D\": {\r\n \"xMin\": 158,\r\n \"xMax\": 1370,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 158,\r\n \"advanceWidth\": 1479\r\n },\r\n \"E\": {\r\n \"xMin\": 162,\r\n \"xMax\": 1256,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 162,\r\n \"advanceWidth\": 1366\r\n },\r\n \"F\": {\r\n \"xMin\": 168,\r\n \"xMax\": 1157,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 168,\r\n \"advanceWidth\": 1251\r\n },\r\n \"G\": {\r\n \"xMin\": 109,\r\n \"xMax\": 1465,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 109,\r\n \"advanceWidth\": 1593\r\n },\r\n \"H\": {\r\n \"xMin\": 164,\r\n \"xMax\": 1314,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 164,\r\n \"advanceWidth\": 1479\r\n },\r\n \"I\": {\r\n \"xMin\": 191,\r\n \"xMax\": 385,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 191,\r\n \"advanceWidth\": 569\r\n },\r\n \"J\": {\r\n \"xMin\": 58.84976474807333,\r\n \"xMax\": 865,\r\n \"yMin\": -25,\r\n \"yMax\": 1466,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 1024\r\n },\r\n \"K\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1362,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1366\r\n },\r\n \"L\": {\r\n \"xMin\": 150,\r\n \"xMax\": 1066,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 150,\r\n \"advanceWidth\": 1139\r\n },\r\n \"M\": {\r\n \"xMin\": 152,\r\n \"xMax\": 1551,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 152,\r\n \"advanceWidth\": 1706\r\n },\r\n \"N\": {\r\n \"xMin\": 156,\r\n \"xMax\": 1311,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 156,\r\n \"advanceWidth\": 1479\r\n },\r\n \"O\": {\r\n \"xMin\": 99,\r\n \"xMax\": 1501,\r\n \"yMin\": -25,\r\n \"yMax\": 1492,\r\n \"ha\": 1517,\r\n \"leftSideBearing\": 99,\r\n \"advanceWidth\": 1593\r\n },\r\n \"P\": {\r\n \"xMin\": 158,\r\n \"xMax\": 1277,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 158,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Q\": {\r\n \"xMin\": 88,\r\n \"xMax\": 1518,\r\n \"yMin\": -114,\r\n \"yMax\": 1492,\r\n \"ha\": 1606,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1593\r\n },\r\n \"R\": {\r\n \"xMin\": 161,\r\n \"xMax\": 1453,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 161,\r\n \"advanceWidth\": 1479\r\n },\r\n \"S\": {\r\n \"xMin\": 92,\r\n \"xMax\": 1259,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 1366\r\n },\r\n \"T\": {\r\n \"xMin\": 48,\r\n \"xMax\": 1210,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 1251\r\n },\r\n \"U\": {\r\n \"xMin\": 161,\r\n \"xMax\": 1314,\r\n \"yMin\": -25,\r\n \"yMax\": 1466,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 161,\r\n \"advanceWidth\": 1479\r\n },\r\n \"V\": {\r\n \"xMin\": 9,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 1366\r\n },\r\n \"W\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1910,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1933\r\n },\r\n \"X\": {\r\n \"xMin\": 9,\r\n \"xMax\": 1353,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Y\": {\r\n \"xMin\": 6,\r\n \"xMax\": 1350,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1366\r\n },\r\n \"Z\": {\r\n \"xMin\": 41,\r\n \"xMax\": 1200,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 1251\r\n },\r\n \"[\": {\r\n \"xMin\": 139,\r\n \"xMax\": 536,\r\n \"yMin\": -407,\r\n \"yMax\": 1466,\r\n \"ha\": 1873,\r\n \"leftSideBearing\": 139,\r\n \"advanceWidth\": 569\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 0,\r\n \"xMax\": 569,\r\n \"yMin\": -25,\r\n \"yMax\": 1491,\r\n \"ha\": 1516,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 569\r\n },\r\n \"]\": {\r\n \"xMin\": 39,\r\n \"xMax\": 436,\r\n \"yMin\": -407,\r\n \"yMax\": 1466,\r\n \"ha\": 1873,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 569\r\n },\r\n \"^\": {\r\n \"xMin\": 54,\r\n \"xMax\": 907,\r\n \"yMin\": 690,\r\n \"yMax\": 1491,\r\n \"ha\": 801,\r\n \"leftSideBearing\": 54,\r\n \"advanceWidth\": 961\r\n },\r\n \"_\": {\r\n \"xMin\": -31,\r\n \"xMax\": 1162,\r\n \"yMin\": -407,\r\n \"yMax\": -277,\r\n \"ha\": 130,\r\n \"leftSideBearing\": -31,\r\n \"advanceWidth\": 1139\r\n },\r\n \"`\": {\r\n \"xMin\": 89,\r\n \"xMax\": 465,\r\n \"yMin\": 1194,\r\n \"yMax\": 1474,\r\n \"ha\": 280,\r\n \"leftSideBearing\": 89,\r\n \"advanceWidth\": 682\r\n },\r\n \"a\": {\r\n \"xMin\": 74,\r\n \"xMax\": 1052,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 1139\r\n },\r\n \"b\": {\r\n \"xMin\": 134,\r\n \"xMax\": 1055,\r\n \"yMin\": -24,\r\n \"yMax\": 1466,\r\n \"ha\": 1490,\r\n \"leftSideBearing\": 134,\r\n \"advanceWidth\": 1139\r\n },\r\n \"c\": {\r\n \"xMin\": 80,\r\n \"xMax\": 1005,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 1024\r\n },\r\n \"d\": {\r\n \"xMin\": 70,\r\n \"xMax\": 991,\r\n \"yMin\": -24,\r\n \"yMax\": 1466,\r\n \"ha\": 1490,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1139\r\n },\r\n \"e\": {\r\n \"xMin\": 75,\r\n \"xMax\": 1054,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 1139\r\n },\r\n \"f\": {\r\n \"xMin\": 19,\r\n \"xMax\": 640,\r\n \"yMin\": 0,\r\n \"yMax\": 1491,\r\n \"ha\": 1491,\r\n \"leftSideBearing\": 19,\r\n \"advanceWidth\": 569\r\n },\r\n \"g\": {\r\n \"xMin\": 66,\r\n \"xMax\": 1002,\r\n \"yMin\": -431,\r\n \"yMax\": 1086,\r\n \"ha\": 1517,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1139\r\n },\r\n \"h\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1000,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"i\": {\r\n \"xMin\": 136,\r\n \"xMax\": 316,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 136,\r\n \"advanceWidth\": 455\r\n },\r\n \"j\": {\r\n \"xMin\": -94,\r\n \"xMax\": 314,\r\n \"yMin\": -431,\r\n \"yMax\": 1466,\r\n \"ha\": 1897,\r\n \"leftSideBearing\": -94,\r\n \"advanceWidth\": 455\r\n },\r\n \"k\": {\r\n \"xMin\": 136,\r\n \"xMax\": 1016,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 136,\r\n \"advanceWidth\": 1024\r\n },\r\n \"l\": {\r\n \"xMin\": 131,\r\n \"xMax\": 311,\r\n \"yMin\": 0,\r\n \"yMax\": 1466,\r\n \"ha\": 1466,\r\n \"leftSideBearing\": 131,\r\n \"advanceWidth\": 455\r\n },\r\n \"m\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1574,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1706\r\n },\r\n \"n\": {\r\n \"xMin\": 135,\r\n \"xMax\": 998,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"o\": {\r\n \"xMin\": 68,\r\n \"xMax\": 1063,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 68,\r\n \"advanceWidth\": 1139\r\n },\r\n \"p\": {\r\n \"xMin\": 135,\r\n \"xMax\": 1057,\r\n \"yMin\": -407,\r\n \"yMax\": 1086,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 135,\r\n \"advanceWidth\": 1139\r\n },\r\n \"q\": {\r\n \"xMin\": 72,\r\n \"xMax\": 992,\r\n \"yMin\": -407,\r\n \"yMax\": 1086,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 72,\r\n \"advanceWidth\": 1139\r\n },\r\n \"r\": {\r\n \"xMin\": 133,\r\n \"xMax\": 710,\r\n \"yMin\": 0,\r\n \"yMax\": 1086,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 133,\r\n \"advanceWidth\": 682\r\n },\r\n \"s\": {\r\n \"xMin\": 63,\r\n \"xMax\": 945,\r\n \"yMin\": -24,\r\n \"yMax\": 1086,\r\n \"ha\": 1110,\r\n \"leftSideBearing\": 63,\r\n \"advanceWidth\": 1024\r\n },\r\n \"t\": {\r\n \"xMin\": 36,\r\n \"xMax\": 554,\r\n \"yMin\": -14,\r\n \"yMax\": 1433,\r\n \"ha\": 1447,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 569\r\n },\r\n \"u\": {\r\n \"xMin\": 131,\r\n \"xMax\": 992,\r\n \"yMin\": -24,\r\n \"yMax\": 1062,\r\n \"ha\": 1086,\r\n \"leftSideBearing\": 131,\r\n \"advanceWidth\": 1139\r\n },\r\n \"v\": {\r\n \"xMin\": 26,\r\n \"xMax\": 1000,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 1024\r\n },\r\n \"w\": {\r\n \"xMin\": 6,\r\n \"xMax\": 1463,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1479\r\n },\r\n \"x\": {\r\n \"xMin\": 15,\r\n \"xMax\": 1009,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 1024\r\n },\r\n \"y\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1006,\r\n \"yMin\": -431,\r\n \"yMax\": 1062,\r\n \"ha\": 1493,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1024\r\n },\r\n \"z\": {\r\n \"xMin\": 40,\r\n \"xMax\": 980,\r\n \"yMin\": 0,\r\n \"yMax\": 1062,\r\n \"ha\": 1062,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 1024\r\n },\r\n \"{\": {\r\n \"xMin\": 57,\r\n \"xMax\": 636,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 684\r\n },\r\n \"|\": {\r\n \"xMin\": 188,\r\n \"xMax\": 345,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 188,\r\n \"advanceWidth\": 532\r\n },\r\n \"}\": {\r\n \"xMin\": 47,\r\n \"xMax\": 626,\r\n \"yMin\": -431,\r\n \"yMax\": 1491,\r\n \"ha\": 1922,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 684\r\n },\r\n \"~\": {\r\n \"xMin\": 87,\r\n \"xMax\": 1110,\r\n \"yMin\": 557,\r\n \"yMax\": 885,\r\n \"ha\": 328,\r\n \"leftSideBearing\": 87,\r\n \"advanceWidth\": 1196\r\n }\r\n },\r\n \"fontFamily\": \"Arial\",\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-18T18:48:11.823Z\"\r\n};","export const SourceSansProFont = {\r\n smufl: false,\r\n name: \"Sans\",\r\n spacing: 50,\r\n description: \"Open-source Sans font from Adobe\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"fontFamily\": \"Source Sans Pro\",\r\n \"resolution\": 1000,\r\n \"generatedOn\": \"2020-11-01T21:31:30.347Z\",\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 44,\r\n \"xMax\": 453,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 497\r\n },\r\n \"1\": {\r\n \"xMin\": 79,\r\n \"xMax\": 439,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 497\r\n },\r\n \"2\": {\r\n \"xMin\": 36,\r\n \"xMax\": 452,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 497\r\n },\r\n \"3\": {\r\n \"xMin\": 26,\r\n \"xMax\": 446,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 26,\r\n \"advanceWidth\": 497\r\n },\r\n \"4\": {\r\n \"xMin\": 17,\r\n \"xMax\": 469,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 17,\r\n \"advanceWidth\": 497\r\n },\r\n \"5\": {\r\n \"xMin\": 25,\r\n \"xMax\": 449,\r\n \"yMin\": -12,\r\n \"yMax\": 638,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 497\r\n },\r\n \"6\": {\r\n \"xMin\": 48,\r\n \"xMax\": 457,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 48,\r\n \"advanceWidth\": 497\r\n },\r\n \"7\": {\r\n \"xMin\": 44,\r\n \"xMax\": 455,\r\n \"yMin\": 0,\r\n \"yMax\": 638,\r\n \"ha\": 638,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 497\r\n },\r\n \"8\": {\r\n \"xMin\": 41,\r\n \"xMax\": 456,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 497\r\n },\r\n \"9\": {\r\n \"xMin\": 40,\r\n \"xMax\": 448,\r\n \"yMin\": -12,\r\n \"yMax\": 650,\r\n \"ha\": 662,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 497\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 200\r\n },\r\n \"!\": {\r\n \"xMin\": 85,\r\n \"xMax\": 204,\r\n \"yMin\": -12,\r\n \"yMax\": 670,\r\n \"ha\": 682,\r\n \"leftSideBearing\": 85,\r\n \"advanceWidth\": 289\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 80,\r\n \"xMax\": 344,\r\n \"yMin\": 431,\r\n \"yMax\": 690,\r\n \"ha\": 259,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 425\r\n },\r\n \"#\": {\r\n \"xMin\": 35,\r\n \"xMax\": 467,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 497\r\n },\r\n \"$\": {\r\n \"xMin\": 52,\r\n \"xMax\": 437,\r\n \"yMin\": -110,\r\n \"yMax\": 748,\r\n \"ha\": 858,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 497\r\n },\r\n \"%\": {\r\n \"xMin\": 35,\r\n \"xMax\": 790,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 824\r\n },\r\n \"&\": {\r\n \"xMin\": 32,\r\n \"xMax\": 594,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 32,\r\n \"advanceWidth\": 609\r\n },\r\n \"'\": {\r\n \"xMin\": 80,\r\n \"xMax\": 168,\r\n \"yMin\": 431,\r\n \"yMax\": 690,\r\n \"ha\": 259,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 249\r\n },\r\n \"(\": {\r\n \"xMin\": 82,\r\n \"xMax\": 265,\r\n \"yMin\": -176,\r\n \"yMax\": 732,\r\n \"ha\": 908,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 303\r\n },\r\n \")\": {\r\n \"xMin\": 38,\r\n \"xMax\": 221,\r\n \"yMin\": -176,\r\n \"yMax\": 732,\r\n \"ha\": 908,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 303\r\n },\r\n \"*\": {\r\n \"xMin\": 58,\r\n \"xMax\": 360,\r\n \"yMin\": 420,\r\n \"yMax\": 712,\r\n \"ha\": 292,\r\n \"leftSideBearing\": 58,\r\n \"advanceWidth\": 418\r\n },\r\n \"+\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 104,\r\n \"yMax\": 556,\r\n \"ha\": 452,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \",\": {\r\n \"xMin\": 47,\r\n \"xMax\": 198,\r\n \"yMin\": -170,\r\n \"yMax\": 114,\r\n \"ha\": 284,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 249\r\n },\r\n \"-\": {\r\n \"xMin\": 41,\r\n \"xMax\": 271,\r\n \"yMin\": 219,\r\n \"yMax\": 282,\r\n \"ha\": 63,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 311\r\n },\r\n \".\": {\r\n \"xMin\": 65,\r\n \"xMax\": 184,\r\n \"yMin\": -12,\r\n \"yMax\": 114,\r\n \"ha\": 126,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 249\r\n },\r\n \"/\": {\r\n \"xMin\": 10,\r\n \"xMax\": 337,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 350\r\n },\r\n \":\": {\r\n \"xMin\": 65,\r\n \"xMax\": 184,\r\n \"yMin\": -12,\r\n \"yMax\": 475,\r\n \"ha\": 487,\r\n \"leftSideBearing\": 65,\r\n \"advanceWidth\": 249\r\n },\r\n \";\": {\r\n \"xMin\": 47,\r\n \"xMax\": 198,\r\n \"yMin\": -170,\r\n \"yMax\": 475,\r\n \"ha\": 645,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 249\r\n },\r\n \"<\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 131,\r\n \"yMax\": 533,\r\n \"ha\": 402,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \"=\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 193,\r\n \"yMax\": 468,\r\n \"ha\": 275,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \">\": {\r\n \"xMin\": 34,\r\n \"xMax\": 463,\r\n \"yMin\": 131,\r\n \"yMax\": 533,\r\n \"ha\": 402,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 497\r\n },\r\n \"?\": {\r\n \"xMin\": 38,\r\n \"xMax\": 377,\r\n \"yMin\": -12,\r\n \"yMax\": 682,\r\n \"ha\": 694,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 425\r\n },\r\n \"@\": {\r\n \"xMin\": 51,\r\n \"xMax\": 796,\r\n \"yMin\": -155,\r\n \"yMax\": 646,\r\n \"ha\": 801,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 847\r\n },\r\n \"A\": {\r\n \"xMin\": 3,\r\n \"xMax\": 541,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 3,\r\n \"advanceWidth\": 544\r\n },\r\n \"B\": {\r\n \"xMin\": 90,\r\n \"xMax\": 548,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 588\r\n },\r\n \"C\": {\r\n \"xMin\": 52,\r\n \"xMax\": 539,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 571\r\n },\r\n \"D\": {\r\n \"xMin\": 90,\r\n \"xMax\": 564,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 615\r\n },\r\n \"E\": {\r\n \"xMin\": 90,\r\n \"xMax\": 478,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 527\r\n },\r\n \"F\": {\r\n \"xMin\": 90,\r\n \"xMax\": 468,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 494\r\n },\r\n \"G\": {\r\n \"xMin\": 52,\r\n \"xMax\": 550,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 617\r\n },\r\n \"H\": {\r\n \"xMin\": 90,\r\n \"xMax\": 562,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 652\r\n },\r\n \"I\": {\r\n \"xMin\": 90,\r\n \"xMax\": 173,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 263\r\n },\r\n \"J\": {\r\n \"xMin\": 31,\r\n \"xMax\": 393,\r\n \"yMin\": -12,\r\n \"yMax\": 656,\r\n \"ha\": 668,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 480\r\n },\r\n \"K\": {\r\n \"xMin\": 90,\r\n \"xMax\": 575,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 579\r\n },\r\n \"L\": {\r\n \"xMin\": 90,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 486\r\n },\r\n \"M\": {\r\n \"xMin\": 90,\r\n \"xMax\": 637,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 727\r\n },\r\n \"N\": {\r\n \"xMin\": 90,\r\n \"xMax\": 557,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 647\r\n },\r\n \"O\": {\r\n \"xMin\": 52,\r\n \"xMax\": 613,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 664\r\n },\r\n \"P\": {\r\n \"xMin\": 90,\r\n \"xMax\": 523,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 566\r\n },\r\n \"Q\": {\r\n \"xMin\": 52,\r\n \"xMax\": 627,\r\n \"yMin\": -165,\r\n \"yMax\": 668,\r\n \"ha\": 833,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 664\r\n },\r\n \"R\": {\r\n \"xMin\": 90,\r\n \"xMax\": 544,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 569\r\n },\r\n \"S\": {\r\n \"xMin\": 42,\r\n \"xMax\": 495,\r\n \"yMin\": -12,\r\n \"yMax\": 668,\r\n \"ha\": 680,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 534\r\n },\r\n \"T\": {\r\n \"xMin\": 28,\r\n \"xMax\": 508,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 536\r\n },\r\n \"U\": {\r\n \"xMin\": 87,\r\n \"xMax\": 558,\r\n \"yMin\": -12,\r\n \"yMax\": 656,\r\n \"ha\": 668,\r\n \"leftSideBearing\": 87,\r\n \"advanceWidth\": 645\r\n },\r\n \"V\": {\r\n \"xMin\": 0,\r\n \"xMax\": 515,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 515\r\n },\r\n \"W\": {\r\n \"xMin\": 23,\r\n \"xMax\": 762,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 23,\r\n \"advanceWidth\": 786\r\n },\r\n \"X\": {\r\n \"xMin\": 15,\r\n \"xMax\": 498,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 513\r\n },\r\n \"Y\": {\r\n \"xMin\": -1,\r\n \"xMax\": 477,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": -1,\r\n \"advanceWidth\": 476\r\n },\r\n \"Z\": {\r\n \"xMin\": 45,\r\n \"xMax\": 497,\r\n \"yMin\": 0,\r\n \"yMax\": 656,\r\n \"ha\": 656,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 539\r\n },\r\n \"[\": {\r\n \"xMin\": 94,\r\n \"xMax\": 273,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 94,\r\n \"advanceWidth\": 303\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 14,\r\n \"xMax\": 340,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 350\r\n },\r\n \"]\": {\r\n \"xMin\": 31,\r\n \"xMax\": 209,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 303\r\n },\r\n \"^\": {\r\n \"xMin\": 60,\r\n \"xMax\": 437,\r\n \"yMin\": 284,\r\n \"yMax\": 670,\r\n \"ha\": 386,\r\n \"leftSideBearing\": 60,\r\n \"advanceWidth\": 497\r\n },\r\n \"_\": {\r\n \"xMin\": 12,\r\n \"xMax\": 488,\r\n \"yMin\": -126,\r\n \"yMax\": -71,\r\n \"ha\": 55,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 500\r\n },\r\n \"`\": {\r\n \"xMin\": 128,\r\n \"xMax\": 327,\r\n \"yMin\": 573,\r\n \"yMax\": 781,\r\n \"ha\": 208,\r\n \"leftSideBearing\": 128,\r\n \"advanceWidth\": 542\r\n },\r\n \"a\": {\r\n \"xMin\": 52,\r\n \"xMax\": 433,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 52,\r\n \"advanceWidth\": 504\r\n },\r\n \"b\": {\r\n \"xMin\": 82,\r\n \"xMax\": 507,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 553\r\n },\r\n \"c\": {\r\n \"xMin\": 46,\r\n \"xMax\": 431,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 456\r\n },\r\n \"d\": {\r\n \"xMin\": 47,\r\n \"xMax\": 473,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 555\r\n },\r\n \"e\": {\r\n \"xMin\": 46,\r\n \"xMax\": 458,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 496\r\n },\r\n \"f\": {\r\n \"xMin\": 30,\r\n \"xMax\": 319,\r\n \"yMin\": 0,\r\n \"yMax\": 724,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 292\r\n },\r\n \"g\": {\r\n \"xMin\": 45,\r\n \"xMax\": 492,\r\n \"yMin\": -224,\r\n \"yMax\": 498,\r\n \"ha\": 722,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 504\r\n },\r\n \"h\": {\r\n \"xMin\": 82,\r\n \"xMax\": 471,\r\n \"yMin\": 0,\r\n \"yMax\": 712,\r\n \"ha\": 712,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 544\r\n },\r\n \"i\": {\r\n \"xMin\": 67,\r\n \"xMax\": 181,\r\n \"yMin\": 0,\r\n \"yMax\": 692,\r\n \"ha\": 692,\r\n \"leftSideBearing\": 67,\r\n \"advanceWidth\": 246\r\n },\r\n \"j\": {\r\n \"xMin\": -40,\r\n \"xMax\": 181,\r\n \"yMin\": -217,\r\n \"yMax\": 692,\r\n \"ha\": 909,\r\n \"leftSideBearing\": -40,\r\n \"advanceWidth\": 247\r\n },\r\n \"k\": {\r\n \"xMin\": 82,\r\n \"xMax\": 486,\r\n \"yMin\": 0,\r\n \"yMax\": 712,\r\n \"ha\": 712,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 495\r\n },\r\n \"l\": {\r\n \"xMin\": 82,\r\n \"xMax\": 216,\r\n \"yMin\": -12,\r\n \"yMax\": 712,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 255\r\n },\r\n \"m\": {\r\n \"xMin\": 82,\r\n \"xMax\": 753,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 829\r\n },\r\n \"n\": {\r\n \"xMin\": 82,\r\n \"xMax\": 471,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 547\r\n },\r\n \"o\": {\r\n \"xMin\": 46,\r\n \"xMax\": 496,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 46,\r\n \"advanceWidth\": 542\r\n },\r\n \"p\": {\r\n \"xMin\": 82,\r\n \"xMax\": 507,\r\n \"yMin\": -205,\r\n \"yMax\": 498,\r\n \"ha\": 703,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 555\r\n },\r\n \"q\": {\r\n \"xMin\": 47,\r\n \"xMax\": 473,\r\n \"yMin\": -205,\r\n \"yMax\": 498,\r\n \"ha\": 703,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 555\r\n },\r\n \"r\": {\r\n \"xMin\": 82,\r\n \"xMax\": 350,\r\n \"yMin\": 0,\r\n \"yMax\": 498,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 347\r\n },\r\n \"s\": {\r\n \"xMin\": 28,\r\n \"xMax\": 387,\r\n \"yMin\": -12,\r\n \"yMax\": 498,\r\n \"ha\": 510,\r\n \"leftSideBearing\": 28,\r\n \"advanceWidth\": 419\r\n },\r\n \"t\": {\r\n \"xMin\": 24,\r\n \"xMax\": 325,\r\n \"yMin\": -12,\r\n \"yMax\": 622,\r\n \"ha\": 634,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 338\r\n },\r\n \"u\": {\r\n \"xMin\": 75,\r\n \"xMax\": 462,\r\n \"yMin\": -12,\r\n \"yMax\": 486,\r\n \"ha\": 498,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 544\r\n },\r\n \"v\": {\r\n \"xMin\": 12,\r\n \"xMax\": 455,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 467\r\n },\r\n \"w\": {\r\n \"xMin\": 24,\r\n \"xMax\": 694,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 718\r\n },\r\n \"x\": {\r\n \"xMin\": 14,\r\n \"xMax\": 432,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 446\r\n },\r\n \"y\": {\r\n \"xMin\": 12,\r\n \"xMax\": 455,\r\n \"yMin\": -209,\r\n \"yMax\": 486,\r\n \"ha\": 695,\r\n \"leftSideBearing\": 12,\r\n \"advanceWidth\": 467\r\n },\r\n \"z\": {\r\n \"xMin\": 31,\r\n \"xMax\": 399,\r\n \"yMin\": 0,\r\n \"yMax\": 486,\r\n \"ha\": 486,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 425\r\n },\r\n \"{\": {\r\n \"xMin\": 34,\r\n \"xMax\": 273,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 303\r\n },\r\n \"|\": {\r\n \"xMin\": 92,\r\n \"xMax\": 150,\r\n \"yMin\": -250,\r\n \"yMax\": 750,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 92,\r\n \"advanceWidth\": 241\r\n },\r\n \"}\": {\r\n \"xMin\": 31,\r\n \"xMax\": 269,\r\n \"yMin\": -152,\r\n \"yMax\": 708,\r\n \"ha\": 860,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 303\r\n },\r\n \"~\": {\r\n \"xMin\": 36,\r\n \"xMax\": 461,\r\n \"yMin\": 257,\r\n \"yMax\": 403,\r\n \"ha\": 146,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 497\r\n }\r\n },\r\n};","export const SourceSerifProFont = {\r\n smufl: false,\r\n name: \"Serif\",\r\n spacing: 50,\r\n description: \"Open-source Serif font from Adobe\",\r\n serifs: true,\r\n monospaced: false,\r\n superscriptOffset: 0.66,\r\n subscriptOffset: 0.66,\r\n maxSizeGlyph: 'H',\r\n \"fontFamily\": \"Source Serif Pro\",\r\n \"resolution\": 1000,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 41,\r\n \"xMax\": 460,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 500\r\n },\r\n \"1\": {\r\n \"xMin\": 74,\r\n \"xMax\": 445,\r\n \"yMin\": 0,\r\n \"yMax\": 654,\r\n \"ha\": 654,\r\n \"leftSideBearing\": 74,\r\n \"advanceWidth\": 500\r\n },\r\n \"2\": {\r\n \"xMin\": 44,\r\n \"xMax\": 460,\r\n \"yMin\": 0,\r\n \"yMax\": 659,\r\n \"ha\": 659,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"3\": {\r\n \"xMin\": 44,\r\n \"xMax\": 460,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"4\": {\r\n \"xMin\": 24,\r\n \"xMax\": 484,\r\n \"yMin\": 0,\r\n \"yMax\": 655,\r\n \"ha\": 655,\r\n \"leftSideBearing\": 24,\r\n \"advanceWidth\": 500\r\n },\r\n \"5\": {\r\n \"xMin\": 38,\r\n \"xMax\": 458,\r\n \"yMin\": -13,\r\n \"yMax\": 646,\r\n \"ha\": 659,\r\n \"leftSideBearing\": 38,\r\n \"advanceWidth\": 500\r\n },\r\n \"6\": {\r\n \"xMin\": 40,\r\n \"xMax\": 457,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 500\r\n },\r\n \"7\": {\r\n \"xMin\": 51,\r\n \"xMax\": 464,\r\n \"yMin\": 0,\r\n \"yMax\": 646,\r\n \"ha\": 646,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 500\r\n },\r\n \"8\": {\r\n \"xMin\": 44,\r\n \"xMax\": 455,\r\n \"yMin\": -13,\r\n \"yMax\": 659,\r\n \"ha\": 672,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 500\r\n },\r\n \"9\": {\r\n \"xMin\": 29,\r\n \"xMax\": 450,\r\n \"yMin\": -20,\r\n \"yMax\": 659,\r\n \"ha\": 679,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 500\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 233\r\n },\r\n \"!\": {\r\n \"xMin\": 80,\r\n \"xMax\": 209,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 289\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 40,\r\n \"xMax\": 315,\r\n \"yMin\": 429,\r\n \"yMax\": 737,\r\n \"ha\": 308,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 356\r\n },\r\n \"#\": {\r\n \"xMin\": 25,\r\n \"xMax\": 502,\r\n \"yMin\": 0,\r\n \"yMax\": 650,\r\n \"ha\": 650,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 526\r\n },\r\n \"$\": {\r\n \"xMin\": 51,\r\n \"xMax\": 464,\r\n \"yMin\": -115,\r\n \"yMax\": 749,\r\n \"ha\": 864,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 500\r\n },\r\n \"%\": {\r\n \"xMin\": 69,\r\n \"xMax\": 792,\r\n \"yMin\": -25,\r\n \"yMax\": 669,\r\n \"ha\": 694,\r\n \"leftSideBearing\": 69,\r\n \"advanceWidth\": 861\r\n },\r\n \"&\": {\r\n \"xMin\": 27,\r\n \"xMax\": 675,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 27,\r\n \"advanceWidth\": 720\r\n },\r\n \"'\": {\r\n \"xMin\": 40,\r\n \"xMax\": 143,\r\n \"yMin\": 429,\r\n \"yMax\": 737,\r\n \"ha\": 308,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 183\r\n },\r\n \"(\": {\r\n \"xMin\": 80,\r\n \"xMax\": 314,\r\n \"yMin\": -192,\r\n \"yMax\": 748,\r\n \"ha\": 940,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 339\r\n },\r\n \")\": {\r\n \"xMin\": 25,\r\n \"xMax\": 259,\r\n \"yMin\": -192,\r\n \"yMax\": 748,\r\n \"ha\": 940,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 339\r\n },\r\n \"*\": {\r\n \"xMin\": 20,\r\n \"xMax\": 420,\r\n \"yMin\": 363,\r\n \"yMax\": 747,\r\n \"ha\": 384,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 439\r\n },\r\n \"+\": {\r\n \"xMin\": 29,\r\n \"xMax\": 502,\r\n \"yMin\": 77,\r\n \"yMax\": 577,\r\n \"ha\": 500,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 531\r\n },\r\n \",\": {\r\n \"xMin\": 6,\r\n \"xMax\": 213,\r\n \"yMin\": -224,\r\n \"yMax\": 130,\r\n \"ha\": 354,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 300\r\n },\r\n \"-\": {\r\n \"xMin\": 40,\r\n \"xMax\": 272,\r\n \"yMin\": 218,\r\n \"yMax\": 284,\r\n \"ha\": 66,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 312\r\n },\r\n \".\": {\r\n \"xMin\": 79,\r\n \"xMax\": 221,\r\n \"yMin\": -13,\r\n \"yMax\": 130,\r\n \"ha\": 143,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 300\r\n },\r\n \"/\": {\r\n \"xMin\": 2,\r\n \"xMax\": 328,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 2,\r\n \"advanceWidth\": 330\r\n },\r\n \":\": {\r\n \"xMin\": 79,\r\n \"xMax\": 221,\r\n \"yMin\": -13,\r\n \"yMax\": 493,\r\n \"ha\": 506,\r\n \"leftSideBearing\": 79,\r\n \"advanceWidth\": 300\r\n },\r\n \";\": {\r\n \"xMin\": 6,\r\n \"xMax\": 221,\r\n \"yMin\": -224,\r\n \"yMax\": 493,\r\n \"ha\": 717,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 300\r\n },\r\n \"<\": {\r\n \"xMin\": 57,\r\n \"xMax\": 474,\r\n \"yMin\": 81,\r\n \"yMax\": 578,\r\n \"ha\": 497,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 531\r\n },\r\n \"=\": {\r\n \"xMin\": 29,\r\n \"xMax\": 502,\r\n \"yMin\": 201,\r\n \"yMax\": 458,\r\n \"ha\": 257,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 531\r\n },\r\n \">\": {\r\n \"xMin\": 57,\r\n \"xMax\": 474,\r\n \"yMin\": 81,\r\n \"yMax\": 578,\r\n \"ha\": 497,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 531\r\n },\r\n \"?\": {\r\n \"xMin\": 66,\r\n \"xMax\": 350,\r\n \"yMin\": -13,\r\n \"yMax\": 684,\r\n \"ha\": 697,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 416\r\n },\r\n \"@\": {\r\n \"xMin\": 36,\r\n \"xMax\": 800,\r\n \"yMin\": -155,\r\n \"yMax\": 660,\r\n \"ha\": 815,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 835\r\n },\r\n \"A\": {\r\n \"xMin\": 5,\r\n \"xMax\": 653,\r\n \"yMin\": 0,\r\n \"yMax\": 674,\r\n \"ha\": 674,\r\n \"leftSideBearing\": 5,\r\n \"advanceWidth\": 664\r\n },\r\n \"B\": {\r\n \"xMin\": 44,\r\n \"xMax\": 586,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 629\r\n },\r\n \"C\": {\r\n \"xMin\": 47,\r\n \"xMax\": 592,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 631\r\n },\r\n \"D\": {\r\n \"xMin\": 44,\r\n \"xMax\": 663,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 710\r\n },\r\n \"E\": {\r\n \"xMin\": 44,\r\n \"xMax\": 569,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 603\r\n },\r\n \"F\": {\r\n \"xMin\": 44,\r\n \"xMax\": 549,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 579\r\n },\r\n \"G\": {\r\n \"xMin\": 47,\r\n \"xMax\": 667,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 682\r\n },\r\n \"H\": {\r\n \"xMin\": 44,\r\n \"xMax\": 744,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 789\r\n },\r\n \"I\": {\r\n \"xMin\": 44,\r\n \"xMax\": 327,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 371\r\n },\r\n \"J\": {\r\n \"xMin\": -43,\r\n \"xMax\": 340,\r\n \"yMin\": -163,\r\n \"yMax\": 669,\r\n \"ha\": 832,\r\n \"leftSideBearing\": -43,\r\n \"advanceWidth\": 374\r\n },\r\n \"K\": {\r\n \"xMin\": 44,\r\n \"xMax\": 662,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 667\r\n },\r\n \"L\": {\r\n \"xMin\": 44,\r\n \"xMax\": 552,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 596\r\n },\r\n \"M\": {\r\n \"xMin\": 39,\r\n \"xMax\": 857,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 902\r\n },\r\n \"N\": {\r\n \"xMin\": 39,\r\n \"xMax\": 695,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 735\r\n },\r\n \"O\": {\r\n \"xMin\": 47,\r\n \"xMax\": 660,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 707\r\n },\r\n \"P\": {\r\n \"xMin\": 44,\r\n \"xMax\": 567,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 589\r\n },\r\n \"Q\": {\r\n \"xMin\": 47,\r\n \"xMax\": 660,\r\n \"yMin\": -216,\r\n \"yMax\": 684,\r\n \"ha\": 900,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 707\r\n },\r\n \"R\": {\r\n \"xMin\": 44,\r\n \"xMax\": 637,\r\n \"yMin\": -10,\r\n \"yMax\": 669,\r\n \"ha\": 679,\r\n \"leftSideBearing\": 44,\r\n \"advanceWidth\": 651\r\n },\r\n \"S\": {\r\n \"xMin\": 40,\r\n \"xMax\": 472,\r\n \"yMin\": -15,\r\n \"yMax\": 684,\r\n \"ha\": 699,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 512\r\n },\r\n \"T\": {\r\n \"xMin\": 20,\r\n \"xMax\": 584,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 604\r\n },\r\n \"U\": {\r\n \"xMin\": 39,\r\n \"xMax\": 693,\r\n \"yMin\": -15,\r\n \"yMax\": 669,\r\n \"ha\": 684,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 727\r\n },\r\n \"V\": {\r\n \"xMin\": 15,\r\n \"xMax\": 665,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 674\r\n },\r\n \"W\": {\r\n \"xMin\": 15,\r\n \"xMax\": 953,\r\n \"yMin\": -7,\r\n \"yMax\": 669,\r\n \"ha\": 676,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 962\r\n },\r\n \"X\": {\r\n \"xMin\": 10,\r\n \"xMax\": 639,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 648\r\n },\r\n \"Y\": {\r\n \"xMin\": 15,\r\n \"xMax\": 623,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 15,\r\n \"advanceWidth\": 633\r\n },\r\n \"Z\": {\r\n \"xMin\": 20,\r\n \"xMax\": 531,\r\n \"yMin\": 0,\r\n \"yMax\": 669,\r\n \"ha\": 669,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 551\r\n },\r\n \"[\": {\r\n \"xMin\": 100,\r\n \"xMax\": 291,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 100,\r\n \"advanceWidth\": 320\r\n },\r\n \"\\\\\": {\r\n \"xMin\": 2,\r\n \"xMax\": 328,\r\n \"yMin\": -160,\r\n \"yMax\": 710,\r\n \"ha\": 870,\r\n \"leftSideBearing\": 2,\r\n \"advanceWidth\": 330\r\n },\r\n \"]\": {\r\n \"xMin\": 29,\r\n \"xMax\": 220,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 320\r\n },\r\n \"^\": {\r\n \"xMin\": 88,\r\n \"xMax\": 446,\r\n \"yMin\": 208,\r\n \"yMax\": 481,\r\n \"ha\": 273,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 531\r\n },\r\n \"_\": {\r\n \"xMin\": 40,\r\n \"xMax\": 472,\r\n \"yMin\": -66,\r\n \"yMax\": 0,\r\n \"ha\": 66,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 512\r\n },\r\n \"`\": {\r\n \"xMin\": 75,\r\n \"xMax\": 256,\r\n \"yMin\": 557,\r\n \"yMax\": 758,\r\n \"ha\": 201,\r\n \"leftSideBearing\": 75,\r\n \"advanceWidth\": 400\r\n },\r\n \"a\": {\r\n \"xMin\": 45,\r\n \"xMax\": 503,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 509\r\n },\r\n \"b\": {\r\n \"xMin\": 25,\r\n \"xMax\": 532,\r\n \"yMin\": -13,\r\n \"yMax\": 739,\r\n \"ha\": 752,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 577\r\n },\r\n \"c\": {\r\n \"xMin\": 42,\r\n \"xMax\": 453,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 42,\r\n \"advanceWidth\": 488\r\n },\r\n \"d\": {\r\n \"xMin\": 45,\r\n \"xMax\": 551,\r\n \"yMin\": -13,\r\n \"yMax\": 739,\r\n \"ha\": 752,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 567\r\n },\r\n \"e\": {\r\n \"xMin\": 45,\r\n \"xMax\": 461,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 510\r\n },\r\n \"f\": {\r\n \"xMin\": 34,\r\n \"xMax\": 426,\r\n \"yMin\": 0,\r\n \"yMax\": 749,\r\n \"ha\": 749,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 354\r\n },\r\n \"g\": {\r\n \"xMin\": 36,\r\n \"xMax\": 495,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 36,\r\n \"advanceWidth\": 518\r\n },\r\n \"h\": {\r\n \"xMin\": 25,\r\n \"xMax\": 571,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 601\r\n },\r\n \"i\": {\r\n \"xMin\": 29,\r\n \"xMax\": 267,\r\n \"yMin\": 0,\r\n \"yMax\": 726,\r\n \"ha\": 726,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 298\r\n },\r\n \"j\": {\r\n \"xMin\": -83,\r\n \"xMax\": 220,\r\n \"yMin\": -249,\r\n \"yMax\": 726,\r\n \"ha\": 975,\r\n \"leftSideBearing\": -83,\r\n \"advanceWidth\": 277\r\n },\r\n \"k\": {\r\n \"xMin\": 25,\r\n \"xMax\": 547,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 547\r\n },\r\n \"l\": {\r\n \"xMin\": 25,\r\n \"xMax\": 273,\r\n \"yMin\": 0,\r\n \"yMax\": 739,\r\n \"ha\": 739,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 298\r\n },\r\n \"m\": {\r\n \"xMin\": 34,\r\n \"xMax\": 872,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 901\r\n },\r\n \"n\": {\r\n \"xMin\": 34,\r\n \"xMax\": 576,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 606\r\n },\r\n \"o\": {\r\n \"xMin\": 45,\r\n \"xMax\": 504,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 549\r\n },\r\n \"p\": {\r\n \"xMin\": 35,\r\n \"xMax\": 538,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 583\r\n },\r\n \"q\": {\r\n \"xMin\": 45,\r\n \"xMax\": 556,\r\n \"yMin\": -239,\r\n \"yMax\": 488,\r\n \"ha\": 727,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 557\r\n },\r\n \"r\": {\r\n \"xMin\": 34,\r\n \"xMax\": 416,\r\n \"yMin\": 0,\r\n \"yMax\": 488,\r\n \"ha\": 488,\r\n \"leftSideBearing\": 34,\r\n \"advanceWidth\": 423\r\n },\r\n \"s\": {\r\n \"xMin\": 47,\r\n \"xMax\": 395,\r\n \"yMin\": -13,\r\n \"yMax\": 488,\r\n \"ha\": 501,\r\n \"leftSideBearing\": 47,\r\n \"advanceWidth\": 434\r\n },\r\n \"t\": {\r\n \"xMin\": 9,\r\n \"xMax\": 323,\r\n \"yMin\": -13,\r\n \"yMax\": 611,\r\n \"ha\": 624,\r\n \"leftSideBearing\": 9,\r\n \"advanceWidth\": 325\r\n },\r\n \"u\": {\r\n \"xMin\": 25,\r\n \"xMax\": 549,\r\n \"yMin\": -13,\r\n \"yMax\": 481,\r\n \"ha\": 494,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 583\r\n },\r\n \"v\": {\r\n \"xMin\": 0,\r\n \"xMax\": 496,\r\n \"yMin\": -6,\r\n \"yMax\": 475,\r\n \"ha\": 481,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 505\r\n },\r\n \"w\": {\r\n \"xMin\": 0,\r\n \"xMax\": 754,\r\n \"yMin\": -6,\r\n \"yMax\": 475,\r\n \"ha\": 481,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 764\r\n },\r\n \"x\": {\r\n \"xMin\": 10,\r\n \"xMax\": 516,\r\n \"yMin\": 0,\r\n \"yMax\": 475,\r\n \"ha\": 475,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 526\r\n },\r\n \"y\": {\r\n \"xMin\": 0,\r\n \"xMax\": 512,\r\n \"yMin\": -249,\r\n \"yMax\": 475,\r\n \"ha\": 724,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 512\r\n },\r\n \"z\": {\r\n \"xMin\": 29,\r\n \"xMax\": 431,\r\n \"yMin\": 0,\r\n \"yMax\": 475,\r\n \"ha\": 475,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 456\r\n },\r\n \"{\": {\r\n \"xMin\": 40,\r\n \"xMax\": 314,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 40,\r\n \"advanceWidth\": 344\r\n },\r\n \"|\": {\r\n \"xMin\": 96,\r\n \"xMax\": 155,\r\n \"yMin\": -250,\r\n \"yMax\": 750,\r\n \"ha\": 1000,\r\n \"leftSideBearing\": 96,\r\n \"advanceWidth\": 251\r\n },\r\n \"}\": {\r\n \"xMin\": 30,\r\n \"xMax\": 304,\r\n \"yMin\": -159,\r\n \"yMax\": 715,\r\n \"ha\": 874,\r\n \"leftSideBearing\": 30,\r\n \"advanceWidth\": 344\r\n },\r\n \"~\": {\r\n \"xMin\": 49,\r\n \"xMax\": 482,\r\n \"yMin\": 268,\r\n \"yMax\": 422,\r\n \"ha\": 154,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 531\r\n }\r\n },\r\n \"generatedOn\": \"2020-11-01T21:35:39.674Z\"\r\n};","export const TimesFont = {\r\n smufl: false,\r\n name: \"Times New Roman\",\r\n spacing: 50,\r\n Description: 'Built-in serif font',\r\n bold: true,\r\n italic: true,\r\n monospaced: false,\r\n serifs: true,\r\n \"glyphs\": {\r\n \"0\": {\r\n \"xMin\": 49,\r\n \"xMax\": 975,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 1024\r\n },\r\n \"1\": {\r\n \"xMin\": 227,\r\n \"xMax\": 811,\r\n \"yMin\": 0,\r\n \"yMax\": 1383,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 227,\r\n \"advanceWidth\": 1024\r\n },\r\n \"2\": {\r\n \"xMin\": 61,\r\n \"xMax\": 965,\r\n \"yMin\": 0,\r\n \"yMax\": 1383,\r\n \"ha\": 1383,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1024\r\n },\r\n \"3\": {\r\n \"xMin\": 88,\r\n \"xMax\": 883,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 88,\r\n \"advanceWidth\": 1024\r\n },\r\n \"4\": {\r\n \"xMin\": 25,\r\n \"xMax\": 967,\r\n \"yMin\": 0,\r\n \"yMax\": 1384,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1024\r\n },\r\n \"5\": {\r\n \"xMin\": 66,\r\n \"xMax\": 898,\r\n \"yMin\": -27,\r\n \"yMax\": 1409,\r\n \"ha\": 1436,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1024\r\n },\r\n \"6\": {\r\n \"xMin\": 70,\r\n \"xMax\": 958,\r\n \"yMin\": -27,\r\n \"yMax\": 1401,\r\n \"ha\": 1428,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1024\r\n },\r\n \"7\": {\r\n \"xMin\": 41,\r\n \"xMax\": 920,\r\n \"yMin\": -16,\r\n \"yMax\": 1356,\r\n \"ha\": 1372,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 1024\r\n },\r\n \"8\": {\r\n \"xMin\": 115,\r\n \"xMax\": 911,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": 115,\r\n \"advanceWidth\": 1024\r\n },\r\n \"9\": {\r\n \"xMin\": 61,\r\n \"xMax\": 940,\r\n \"yMin\": -41,\r\n \"yMax\": 1383,\r\n \"ha\": 1424,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1024\r\n },\r\n \" \": {\r\n \"xMin\": 0,\r\n \"xMax\": 0,\r\n \"yMin\": 0,\r\n \"yMax\": 0,\r\n \"ha\": 0,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 512\r\n },\r\n \"!\": {\r\n \"xMin\": 266,\r\n \"xMax\": 488,\r\n \"yMin\": -22,\r\n \"yMax\": 1383,\r\n \"ha\": 1405,\r\n \"leftSideBearing\": 266,\r\n \"advanceWidth\": 682\r\n },\r\n \"\\\"\": {\r\n \"xMin\": 157.2000021972655,\r\n \"xMax\": 678.2500021457677,\r\n \"yMin\": 881,\r\n \"yMax\": 1385,\r\n \"ha\": 504,\r\n \"leftSideBearing\": 157,\r\n \"advanceWidth\": 836\r\n },\r\n \"#\": {\r\n \"xMin\": 10,\r\n \"xMax\": 1016,\r\n \"yMin\": -1,\r\n \"yMax\": 1356,\r\n \"ha\": 1357,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1024\r\n },\r\n \"$\": {\r\n \"xMin\": 90,\r\n \"xMax\": 936,\r\n \"yMin\": -180,\r\n \"yMax\": 1492,\r\n \"ha\": 1672,\r\n \"leftSideBearing\": 90,\r\n \"advanceWidth\": 1024\r\n },\r\n \"%\": {\r\n \"xMin\": 125,\r\n \"xMax\": 1581,\r\n \"yMin\": -30,\r\n \"yMax\": 1388,\r\n \"ha\": 1418,\r\n \"leftSideBearing\": 125,\r\n \"advanceWidth\": 1706\r\n },\r\n \"&\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1536,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1593\r\n },\r\n \"'\": {\r\n \"xMin\": 97.20000219726548,\r\n \"xMax\": 273.2500021457677,\r\n \"yMin\": 881,\r\n \"yMax\": 1385,\r\n \"ha\": 504,\r\n \"leftSideBearing\": 97,\r\n \"advanceWidth\": 369\r\n },\r\n \"(\": {\r\n \"xMin\": 98,\r\n \"xMax\": 623,\r\n \"yMin\": -363,\r\n \"yMax\": 1383,\r\n \"ha\": 1746,\r\n \"leftSideBearing\": 98,\r\n \"advanceWidth\": 682\r\n },\r\n \")\": {\r\n \"xMin\": 59,\r\n \"xMax\": 584,\r\n \"yMin\": -363,\r\n \"yMax\": 1383,\r\n \"ha\": 1746,\r\n \"leftSideBearing\": 59,\r\n \"advanceWidth\": 682\r\n },\r\n \"*\": {\r\n \"xMin\": 137.96078522291893,\r\n \"xMax\": 886.039214777081,\r\n \"yMin\": 543,\r\n \"yMax\": 1383,\r\n \"ha\": 840,\r\n \"leftSideBearing\": 137,\r\n \"advanceWidth\": 1024\r\n },\r\n \"+\": {\r\n \"xMin\": 61,\r\n \"xMax\": 1093,\r\n \"yMin\": 2,\r\n \"yMax\": 1034,\r\n \"ha\": 1032,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1155\r\n },\r\n \",\": {\r\n \"xMin\": 115,\r\n \"xMax\": 399,\r\n \"yMin\": -291,\r\n \"yMax\": 208,\r\n \"ha\": 499,\r\n \"leftSideBearing\": 115,\r\n \"advanceWidth\": 512\r\n },\r\n \"-\": {\r\n \"xMin\": 80,\r\n \"xMax\": 584,\r\n \"yMin\": 396,\r\n \"yMax\": 525,\r\n \"ha\": 129,\r\n \"leftSideBearing\": 80,\r\n \"advanceWidth\": 682\r\n },\r\n \".\": {\r\n \"xMin\": 143,\r\n \"xMax\": 371,\r\n \"yMin\": -22,\r\n \"yMax\": 205,\r\n \"ha\": 227,\r\n \"leftSideBearing\": 143,\r\n \"advanceWidth\": 512\r\n },\r\n \"/\": {\r\n \"xMin\": -17,\r\n \"xMax\": 586,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": -17,\r\n \"advanceWidth\": 569\r\n },\r\n \":\": {\r\n \"xMin\": 166,\r\n \"xMax\": 394,\r\n \"yMin\": -22,\r\n \"yMax\": 943,\r\n \"ha\": 965,\r\n \"leftSideBearing\": 166,\r\n \"advanceWidth\": 569\r\n },\r\n \";\": {\r\n \"xMin\": 164,\r\n \"xMax\": 448,\r\n \"yMin\": -290,\r\n \"yMax\": 943,\r\n \"ha\": 1233,\r\n \"leftSideBearing\": 164,\r\n \"advanceWidth\": 569\r\n },\r\n \"<\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1098,\r\n \"yMin\": -15,\r\n \"yMax\": 1051,\r\n \"ha\": 1066,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1155\r\n },\r\n \"=\": {\r\n \"xMin\": 61,\r\n \"xMax\": 1093,\r\n \"yMin\": 246,\r\n \"yMax\": 791,\r\n \"ha\": 545,\r\n \"leftSideBearing\": 61,\r\n \"advanceWidth\": 1155\r\n },\r\n \">\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1098,\r\n \"yMin\": -15,\r\n \"yMax\": 1051,\r\n \"ha\": 1066,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1155\r\n },\r\n \"?\": {\r\n \"xMin\": 139,\r\n \"xMax\": 848,\r\n \"yMin\": -15,\r\n \"yMax\": 1383,\r\n \"ha\": 1398,\r\n \"leftSideBearing\": 139,\r\n \"advanceWidth\": 909\r\n },\r\n \"@\": {\r\n \"xMin\": 238,\r\n \"xMax\": 1657,\r\n \"yMin\": -29,\r\n \"yMax\": 1386,\r\n \"ha\": 1415,\r\n \"leftSideBearing\": 238,\r\n \"advanceWidth\": 1886\r\n },\r\n \"A\": {\r\n \"xMin\": 31,\r\n \"xMax\": 1445,\r\n \"yMin\": 0,\r\n \"yMax\": 1380,\r\n \"ha\": 1380,\r\n \"leftSideBearing\": 31,\r\n \"advanceWidth\": 1479\r\n },\r\n \"B\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1214,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1366\r\n },\r\n \"C\": {\r\n \"xMin\": 57,\r\n \"xMax\": 1296,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1366\r\n },\r\n \"D\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1403,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1479\r\n },\r\n \"E\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1251\r\n },\r\n \"F\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1119,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1139\r\n },\r\n \"G\": {\r\n \"xMin\": 66,\r\n \"xMax\": 1452,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 66,\r\n \"advanceWidth\": 1479\r\n },\r\n \"H\": {\r\n \"xMin\": 39,\r\n \"xMax\": 1438,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 1479\r\n },\r\n \"I\": {\r\n \"xMin\": 37,\r\n \"xMax\": 642,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 37,\r\n \"advanceWidth\": 682\r\n },\r\n \"J\": {\r\n \"xMin\": 20,\r\n \"xMax\": 758,\r\n \"yMin\": -28,\r\n \"yMax\": 1356,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 797\r\n },\r\n \"K\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1479,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"L\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1224,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1251\r\n },\r\n \"M\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1768,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1821\r\n },\r\n \"N\": {\r\n \"xMin\": 25,\r\n \"xMax\": 1450,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 25,\r\n \"advanceWidth\": 1479\r\n },\r\n \"O\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1409,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"P\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1110,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1139\r\n },\r\n \"Q\": {\r\n \"xMin\": 70,\r\n \"xMax\": 1435,\r\n \"yMin\": -364.28571588721996,\r\n \"yMax\": 1383,\r\n \"ha\": 1747.28571588722,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 1479\r\n },\r\n \"R\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1347,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1366\r\n },\r\n \"S\": {\r\n \"xMin\": 86,\r\n \"xMax\": 1006,\r\n \"yMin\": -28,\r\n \"yMax\": 1383,\r\n \"ha\": 1411,\r\n \"leftSideBearing\": 86,\r\n \"advanceWidth\": 1139\r\n },\r\n \"T\": {\r\n \"xMin\": 35,\r\n \"xMax\": 1214,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1251\r\n },\r\n \"U\": {\r\n \"xMin\": 29,\r\n \"xMax\": 1444,\r\n \"yMin\": -28,\r\n \"yMax\": 1356,\r\n \"ha\": 1384,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 1479\r\n },\r\n \"V\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1428,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1479\r\n },\r\n \"W\": {\r\n \"xMin\": 10,\r\n \"xMax\": 1906,\r\n \"yMin\": -22,\r\n \"yMax\": 1356,\r\n \"ha\": 1378,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1933\r\n },\r\n \"X\": {\r\n \"xMin\": 20,\r\n \"xMax\": 1449,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 20,\r\n \"advanceWidth\": 1479\r\n },\r\n \"Y\": {\r\n \"xMin\": 45,\r\n \"xMax\": 1441,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 45,\r\n \"advanceWidth\": 1479\r\n },\r\n \"Z\": {\r\n \"xMin\": 18,\r\n \"xMax\": 1222,\r\n \"yMin\": 0,\r\n \"yMax\": 1356,\r\n \"ha\": 1356,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1251\r\n },\r\n \"[\": {\r\n \"xMin\": 180,\r\n \"xMax\": 612,\r\n \"yMin\": -319,\r\n \"yMax\": 1355,\r\n \"ha\": 1674,\r\n \"leftSideBearing\": 180,\r\n \"advanceWidth\": 682\r\n },\r\n \"\\\\\": {\r\n \"xMin\": -17,\r\n \"xMax\": 586,\r\n \"yMin\": -27,\r\n \"yMax\": 1383,\r\n \"ha\": 1410,\r\n \"leftSideBearing\": -17,\r\n \"advanceWidth\": 569\r\n },\r\n \"]\": {\r\n \"xMin\": 70,\r\n \"xMax\": 502,\r\n \"yMin\": -319,\r\n \"yMax\": 1355,\r\n \"ha\": 1674,\r\n \"leftSideBearing\": 70,\r\n \"advanceWidth\": 682\r\n },\r\n \"^\": {\r\n \"xMin\": 49,\r\n \"xMax\": 914,\r\n \"yMin\": 608,\r\n \"yMax\": 1355,\r\n \"ha\": 747,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 961\r\n },\r\n \"_\": {\r\n \"xMin\": 0,\r\n \"xMax\": 1024,\r\n \"yMin\": -255,\r\n \"yMax\": -153,\r\n \"ha\": 102,\r\n \"leftSideBearing\": 0,\r\n \"advanceWidth\": 1024\r\n },\r\n \"`\": {\r\n \"xMin\": 39,\r\n \"xMax\": 499,\r\n \"yMin\": 1037,\r\n \"yMax\": 1392.509803639748,\r\n \"ha\": 355.50980363974804,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 682\r\n },\r\n \"a\": {\r\n \"xMin\": 76,\r\n \"xMax\": 905,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 76,\r\n \"advanceWidth\": 909\r\n },\r\n \"b\": {\r\n \"xMin\": 6,\r\n \"xMax\": 958,\r\n \"yMin\": -20,\r\n \"yMax\": 1399,\r\n \"ha\": 1419,\r\n \"leftSideBearing\": 6,\r\n \"advanceWidth\": 1024\r\n },\r\n \"c\": {\r\n \"xMin\": 51,\r\n \"xMax\": 843,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 909\r\n },\r\n \"d\": {\r\n \"xMin\": 55,\r\n \"xMax\": 1006,\r\n \"yMin\": -20,\r\n \"yMax\": 1399,\r\n \"ha\": 1419,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 1024\r\n },\r\n \"e\": {\r\n \"xMin\": 51,\r\n \"xMax\": 868,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 51,\r\n \"advanceWidth\": 909\r\n },\r\n \"f\": {\r\n \"xMin\": 41,\r\n \"xMax\": 783,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 41,\r\n \"advanceWidth\": 682\r\n },\r\n \"g\": {\r\n \"xMin\": 57,\r\n \"xMax\": 963,\r\n \"yMin\": -446,\r\n \"yMax\": 942,\r\n \"ha\": 1388,\r\n \"leftSideBearing\": 57,\r\n \"advanceWidth\": 1024\r\n },\r\n \"h\": {\r\n \"xMin\": 18,\r\n \"xMax\": 997,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1024\r\n },\r\n \"i\": {\r\n \"xMin\": 33,\r\n \"xMax\": 516,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 569\r\n },\r\n \"j\": {\r\n \"xMin\": -142,\r\n \"xMax\": 397,\r\n \"yMin\": -446,\r\n \"yMax\": 1399,\r\n \"ha\": 1845,\r\n \"leftSideBearing\": -142,\r\n \"advanceWidth\": 569\r\n },\r\n \"k\": {\r\n \"xMin\": 14,\r\n \"xMax\": 1029,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 14,\r\n \"advanceWidth\": 1024\r\n },\r\n \"l\": {\r\n \"xMin\": 39,\r\n \"xMax\": 523,\r\n \"yMin\": 0,\r\n \"yMax\": 1399,\r\n \"ha\": 1399,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 569\r\n },\r\n \"m\": {\r\n \"xMin\": 33,\r\n \"xMax\": 1587,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1593\r\n },\r\n \"n\": {\r\n \"xMin\": 33,\r\n \"xMax\": 993,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 33,\r\n \"advanceWidth\": 1024\r\n },\r\n \"o\": {\r\n \"xMin\": 59,\r\n \"xMax\": 963,\r\n \"yMin\": -20,\r\n \"yMax\": 942,\r\n \"ha\": 962,\r\n \"leftSideBearing\": 59,\r\n \"advanceWidth\": 1024\r\n },\r\n \"p\": {\r\n \"xMin\": 10,\r\n \"xMax\": 964,\r\n \"yMin\": -443,\r\n \"yMax\": 944,\r\n \"ha\": 1387,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 1024\r\n },\r\n \"q\": {\r\n \"xMin\": 49,\r\n \"xMax\": 999,\r\n \"yMin\": -443,\r\n \"yMax\": 942.0135137169275,\r\n \"ha\": 1385.0135137169275,\r\n \"leftSideBearing\": 49,\r\n \"advanceWidth\": 1024\r\n },\r\n \"r\": {\r\n \"xMin\": 10,\r\n \"xMax\": 685,\r\n \"yMin\": 0,\r\n \"yMax\": 944,\r\n \"ha\": 944,\r\n \"leftSideBearing\": 10,\r\n \"advanceWidth\": 682\r\n },\r\n \"s\": {\r\n \"xMin\": 104,\r\n \"xMax\": 713,\r\n \"yMin\": -20,\r\n \"yMax\": 942.0263161804552,\r\n \"ha\": 962.0263161804552,\r\n \"leftSideBearing\": 104,\r\n \"advanceWidth\": 797\r\n },\r\n \"t\": {\r\n \"xMin\": 27,\r\n \"xMax\": 572,\r\n \"yMin\": -18,\r\n \"yMax\": 1186,\r\n \"ha\": 1204,\r\n \"leftSideBearing\": 27,\r\n \"advanceWidth\": 569\r\n },\r\n \"u\": {\r\n \"xMin\": 18,\r\n \"xMax\": 981,\r\n \"yMin\": -21,\r\n \"yMax\": 921,\r\n \"ha\": 942,\r\n \"leftSideBearing\": 18,\r\n \"advanceWidth\": 1024\r\n },\r\n \"v\": {\r\n \"xMin\": 39,\r\n \"xMax\": 976,\r\n \"yMin\": -28,\r\n \"yMax\": 921,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 39,\r\n \"advanceWidth\": 1024\r\n },\r\n \"w\": {\r\n \"xMin\": 43,\r\n \"xMax\": 1423,\r\n \"yMin\": -28,\r\n \"yMax\": 921,\r\n \"ha\": 949,\r\n \"leftSideBearing\": 43,\r\n \"advanceWidth\": 1479\r\n },\r\n \"x\": {\r\n \"xMin\": 35,\r\n \"xMax\": 989,\r\n \"yMin\": 0,\r\n \"yMax\": 921,\r\n \"ha\": 921,\r\n \"leftSideBearing\": 35,\r\n \"advanceWidth\": 1024\r\n },\r\n \"y\": {\r\n \"xMin\": 29,\r\n \"xMax\": 976,\r\n \"yMin\": -445,\r\n \"yMax\": 921,\r\n \"ha\": 1366,\r\n \"leftSideBearing\": 29,\r\n \"advanceWidth\": 1024\r\n },\r\n \"z\": {\r\n \"xMin\": 55,\r\n \"xMax\": 855,\r\n \"yMin\": 0,\r\n \"yMax\": 921,\r\n \"ha\": 921,\r\n \"leftSideBearing\": 55,\r\n \"advanceWidth\": 909\r\n },\r\n \"{\": {\r\n \"xMin\": 205,\r\n \"xMax\": 717,\r\n \"yMin\": -377,\r\n \"yMax\": 1397,\r\n \"ha\": 1774,\r\n \"leftSideBearing\": 205,\r\n \"advanceWidth\": 983\r\n },\r\n \"|\": {\r\n \"xMin\": 137,\r\n \"xMax\": 273,\r\n \"yMin\": -512,\r\n \"yMax\": 1535,\r\n \"ha\": 2047,\r\n \"leftSideBearing\": 137,\r\n \"advanceWidth\": 410\r\n },\r\n \"}\": {\r\n \"xMin\": 266,\r\n \"xMax\": 778,\r\n \"yMin\": -377,\r\n \"yMax\": 1397,\r\n \"ha\": 1774,\r\n \"leftSideBearing\": 266,\r\n \"advanceWidth\": 983\r\n },\r\n \"~\": {\r\n \"xMin\": 82,\r\n \"xMax\": 1028,\r\n \"yMin\": 380,\r\n \"yMax\": 666,\r\n \"ha\": 286,\r\n \"leftSideBearing\": 82,\r\n \"advanceWidth\": 1108\r\n }\r\n },\r\n \"fontFamily\": \"Times\",\r\n \"resolution\": 2048,\r\n \"generatedOn\": \"2020-10-18T19:03:12.514Z\"\r\n};","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoArticulation, SmoOrnament } from '../../smo/data/noteModifiers';\r\ndeclare var $: any;\r\n\r\n\r\nexport class ArticulationButtons extends SuiButton {\r\n static get articulationIdMap(): Record {\r\n return {\r\n accentButton: SmoArticulation.articulations.accent,\r\n tenutoButton: SmoArticulation.articulations.tenuto,\r\n staccatoButton: SmoArticulation.articulations.staccato,\r\n marcatoButton: SmoArticulation.articulations.marcato,\r\n pizzicatoButton: SmoArticulation.articulations.pizzicato,\r\n fermataButton: SmoArticulation.articulations.fermata,\r\n mordentButton: SmoOrnament.ornaments.mordent,\r\n mordentInvertedButton: SmoOrnament.ornaments.mordent_inverted,\r\n trillButton: SmoOrnament.ornaments.trill,\r\n turnButton: SmoOrnament.ornaments.turn,\r\n turnInvertedButton: SmoOrnament.ornaments.turn_inverted,\r\n breathButton: 'breath',\r\n caesuraButton: 'caesura',\r\n pedalOpenButton: 'pedalOpen',\r\n pedalClosedButton: 'pedalClosed',\r\n scoopButton: SmoOrnament.ornaments.scoop,\r\n dropButton: SmoOrnament.ornaments.fall,\r\n dropLongButton: SmoOrnament.ornaments.fallLong,\r\n doitButton: SmoOrnament.ornaments.doit,\r\n doitLongButton: SmoOrnament.ornaments.doitLong,\r\n flipButton: SmoOrnament.ornaments.flip,\r\n smearButton: SmoOrnament.ornaments.smear,\r\n muteOpen: SmoOrnament.ornaments.plungerOpen,\r\n muteClosed: SmoOrnament.ornaments.plungerClosed,\r\n bend: SmoOrnament.ornaments.bend\r\n };\r\n }\r\n static get constructors(): Record {\r\n return {\r\n accentButton: 'SmoArticulation',\r\n tenutoButton: 'SmoArticulation',\r\n staccatoButton: 'SmoArticulation',\r\n marcatoButton: 'SmoArticulation',\r\n pizzicatoButton: 'SmoArticulation',\r\n fermataButton: 'SmoArticulation',\r\n mordentButton: 'SmoOrnament',\r\n mordentInvertedButton: 'SmoOrnament',\r\n trillButton: 'SmoOrnament',\r\n breathButton: 'SmoOrnament',\r\n pedalOpenButton: 'SmoOrnament',\r\n pedalClosedButton: 'SmoOrnament',\r\n caesuraButton: 'SmoOrnament',\r\n scoopButton: 'SmoOrnament',\r\n dropButton: 'SmoOrnament',\r\n dropLongButton: 'SmoOrnament',\r\n doitButton: 'SmoOrnament',\r\n doitLongButton: 'SmoOrnament',\r\n flipButton: 'SmoOrnament',\r\n smearButton: 'SmoOrnament',\r\n muteOpen: 'SmoOrnament',\r\n muteClosed: 'SmoOrnament',\r\n bend: 'SmoOrnament'\r\n };\r\n }\r\n articulation: string;\r\n ctor: string;\r\n showState: boolean = false;\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.articulation = ArticulationButtons.articulationIdMap[this.buttonData.id];\r\n this.ctor = ArticulationButtons.constructors[this.buttonData.id];\r\n }\r\n _toggleArticulation() {\r\n this.showState = !this.showState;\r\n this.view.toggleArticulation(this.articulation, this.ctor);\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, '_toggleArticulation', null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class BeamButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n operation() {\r\n if (this.buttonData.id === 'breakBeam') {\r\n this.view.toggleBeamGroup();\r\n } else if (this.buttonData.id === 'beamSelections') {\r\n this.view.beamSelections();\r\n } else if (this.buttonData.id === 'toggleBeamDirection') {\r\n this.view.toggleBeamDirection();\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.operation();\r\n });\r\n }\r\n }","import { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { CompleteNotifier } from '../common';\r\n\r\n/**\r\n * Button actions are one of the following. \r\n * - collapse... buttons are used to expand/collapse button groups in a ribbon.\r\n * all buttons with these classes have 'ctor' constructor, and perform actions based on \r\n * their bind method\r\n * - menu brings up a modal menu with class 'ctor'\r\n * - modal brings up a modal dialog with class 'ctor'\r\n * - collapseChildMenu brings up a modal menu, and is also collapsable.\r\n */\r\nexport type ButtonAction = 'menu' | 'modal' | 'collapseChild' | 'collapseChildMenu' | 'collapseParent' | 'collapseGrandchild' | 'collapseMore';\r\n/**\r\n * structure of a button object.\r\n * @param leftText - can be used in place of an icon for display\r\n * @param rightText - usually used to represent a keyboard shortcut\r\n * @param classes - to control button display\r\n * @param icon - icon for the button face\r\n * @param action - indicates to the button the action to perform\r\n * @param ctor - the constructor of the button object\r\n * @param group - the logical group, used to group the ribbon buttons\r\n * @param id - unique ID for DOM selector\r\n * @param dataElements - can be used to give buttons in a group basic parameters\r\n */\r\nexport interface ButtonDefinition {\r\n leftText: string,\r\n rightText: string,\r\n classes: string,\r\n icon: string,\r\n action: ButtonAction,\r\n ctor: string,\r\n group: string,\r\n id: string,\r\n hotKey?: string,\r\n dataElements?: {\r\n interval: string,\r\n direction: string\r\n }\r\n }\r\n \r\n// Button labels are translatable \r\nexport interface ButtonLabel {\r\n buttonId: string,\r\n buttonText: string\r\n}\r\n\r\n// Buttons perform any variety of functions, so they need access to all the rendering logic\r\n// as well as all the event sources.\r\n// Sometimes they invoke menus which invoke modals, etc.\r\nexport interface SuiButtonParams {\r\n ctor: string,\r\n buttonId: string,\r\n buttonElement: string,\r\n buttonData: ButtonDefinition,\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier\r\n }\r\n export abstract class SuiButton {\r\n buttonId: string;\r\n buttonElement: string;\r\n view: SuiScoreViewOperations;\r\n buttonData: ButtonDefinition;\r\n eventSource: BrowserEventSource;\r\n menus: SuiMenuManager;\r\n completeNotifier: CompleteNotifier | null;\r\n constructor(params: SuiButtonParams) {\r\n this.buttonId = params.buttonId;\r\n this.buttonElement = params.buttonElement;\r\n this.view = params.view;\r\n this.buttonData = params.buttonData;\r\n this.eventSource = params.eventSource;\r\n this.menus = params.menus;\r\n this.completeNotifier = params.completeNotifier;\r\n }\r\n abstract bind(): void;\r\n }\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class ChordButtons extends SuiButton {\r\n interval: number;\r\n direction: number;\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.interval = parseInt($(this.buttonElement).attr('data-interval'), 10);\r\n this.direction = parseInt($(this.buttonElement).attr('data-direction'), 10);\r\n }\r\n collapseChord() {\r\n this.view.collapseChord();\r\n }\r\n setInterval() {\r\n this.view.setInterval(this.interval * this.direction);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n if ($(this.buttonElement).attr('id') === 'CollapseChordButton') {\r\n this.collapseChord();\r\n return;\r\n }\r\n this.setInterval();\r\n });\r\n }\r\n}","import { ButtonDefinition, SuiButton, SuiButtonParams } from './button';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { CompleteNotifier } from '../common';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nimport { SuiMenuParams } from '../menus/menu';\r\ndeclare var $: any;\r\n\r\n\r\nexport interface SuiCollapsableButtonParams {\r\n ctor: string,\r\n buttonId: string,\r\n buttonElement: string,\r\n buttonData: ButtonDefinition,\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n menus: SuiMenuManager,\r\n completeNotifier: CompleteNotifier\r\n buttons: ButtonDefinition[]\r\n}\r\n\r\nexport function buttonIsCollapsible(action: string): boolean {\r\n return ['collapseChild', 'collapseChildMenu', 'collapseGrandchild', 'collapseMore'].indexOf(action) >= 0;\r\n}\r\n\r\nexport function buttonIsBindable(action: string): boolean {\r\n return ['collapseChildMenu', 'menu', 'modal'].indexOf(action) >= 0;\r\n}\r\nexport class CollapseRibbonControl extends SuiButton {\r\n static get paramArray() {\r\n return ['ribbonButtons', 'keyCommands', 'controller', 'view', 'menus', 'buttonData', 'buttonElement',\r\n 'eventSource'];\r\n }\r\n childButtons: ButtonDefinition[];\r\n constructor(parameters: SuiCollapsableButtonParams) {\r\n super(parameters);\r\n smoSerialize.filteredMerge(CollapseRibbonControl.paramArray, parameters, this);\r\n this.childButtons = parameters.buttons.filter((cb) =>\r\n cb.group === this.buttonData.group &&\r\n buttonIsCollapsible(cb.action)\r\n );\r\n }\r\n _toggleExpand() {\r\n this.childButtons.forEach((cb) => {\r\n const el = $('#' + cb.id);\r\n $(el).toggleClass('collapsed');\r\n $(el).toggleClass('expanded');\r\n });\r\n\r\n $(this.buttonElement).closest('div').toggleClass('expanded');\r\n $(this.buttonElement).toggleClass('expandedChildren');\r\n if ($(this.buttonElement).hasClass('expandedChildren')) {\r\n const leftSpan = $(this.buttonElement).find('.ribbon-button-text');\r\n $(leftSpan).text('');\r\n $(leftSpan).removeClass(this.buttonData.icon);\r\n $(this.buttonElement).addClass('icon icon-circle-left');\r\n } else {\r\n $(this.buttonElement).removeClass('icon-circle-left');\r\n const leftSpan = $(this.buttonElement).find('.ribbon-button-text');\r\n $(leftSpan).addClass(this.buttonData.icon);\r\n $(leftSpan).text(this.buttonData.leftText);\r\n }\r\n // Expand may change music dom, redraw\r\n $('body').trigger('forceScrollEvent');\r\n }\r\n bind() {\r\n $(this.buttonElement).closest('div').addClass('collapseContainer');\r\n this.eventSource.domClick(this.buttonElement, this, '_toggleExpand', null);\r\n this.childButtons.forEach((cb) => {\r\n const ctor = eval('globalThis.Smo.' + cb.ctor);\r\n if ((typeof (ctor) === 'function') && this.completeNotifier) {\r\n const el = $('#' + cb.id);\r\n const params: SuiButtonParams = {\r\n ctor: cb.ctor,\r\n buttonId: cb.id,\r\n buttonData: cb,\r\n buttonElement: el,\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n eventSource: this.eventSource,\r\n menus: this.menus\r\n }\r\n const btn = new ctor(params);\r\n if (typeof (btn.bind) === 'function') {\r\n btn.bind();\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\n// ## ExtendedCollapseParent\r\n// Muse-style '...' buttons for less-common operations\r\nexport class ExtendedCollapseParent extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n $(this.buttonElement).closest('.collapseContainer').toggleClass('expanded-more');\r\n });\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiKeySignatureDialog } from '../dialogs/keySignature';\r\nimport { SuiTimeSignatureDialog } from '../dialogs/timeSignature';\r\nimport { SuiTempoDialog } from '../dialogs/tempo';\r\nimport { KeyEvent } from '../../smo/data/common';\r\ndeclare var $: any;\r\n\r\n/**\r\n * These are the quick-buttons that show up on the left of the button ribbon.\r\n * @category SuiButton\r\n */\r\nexport class DisplaySettings extends SuiButton {\r\n hotKey: string | undefined;\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.hotKey = parameters.buttonData.hotKey;\r\n if (this.buttonData.id === 'selectPart') {\r\n this.eventSource.bindScoreChangeHandler(this, 'handleScoreChange');\r\n this.enablePartSelection();\r\n }\r\n if (this.hotKey) {\r\n this.eventSource.bindKeydownHandler(this, 'handleKeyDown');\r\n }\r\n }\r\n handleKeyDown(ev: KeyEvent) {\r\n if (ev.altKey && this.buttonData.hotKey && this.buttonData.hotKey === ev.key) {\r\n $('#' + this.buttonData.id).trigger('click');\r\n }\r\n } \r\n enablePartSelection() {\r\n const partMap = this.view.getPartMap();\r\n const disable = partMap.keys.length < 1;\r\n $(this.buttonElement[0]).prop('disabled', disable);\r\n }\r\n handleScoreChange(ev: any) {\r\n if (this.view.isPartExposed()) {\r\n this.buttonData.rightText = this.view.score.staves[0].partInfo.partName;\r\n } else {\r\n this.buttonData.rightText = 'Select Part';\r\n }\r\n $(this.buttonElement[0]).find('.ribbon-button-hotkey').text(this.buttonData.rightText);\r\n this.enablePartSelection();\r\n }\r\n\r\n refresh() {\r\n this.view.refreshViewport();\r\n }\r\n zoomout() {\r\n const globalLayout = this.view.score.layoutManager!.getGlobalLayout();\r\n globalLayout.zoomScale *= 1.1;\r\n this.view.updateZoom(globalLayout.zoomScale);\r\n }\r\n zoomin() {\r\n const globalLayout = this.view.score.layoutManager!.getGlobalLayout();\r\n globalLayout.zoomScale = globalLayout.zoomScale / 1.1;\r\n this.view.updateZoom(globalLayout.zoomScale);\r\n }\r\n playButton2() {\r\n this.view.playFromSelection();\r\n }\r\n stopButton2() {\r\n this.view.stopPlayer();\r\n }\r\n keySignature() {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n createAndDisplayDialog(SuiKeySignatureDialog, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: null,\r\n eventSource: this.eventSource,\r\n tracker: this.view.tracker,\r\n ctor: 'SuiKeySignatureDialog',\r\n id: 'key-signature-dialog',\r\n modifier: null\r\n });\r\n }\r\n ribbonTime() {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n createAndDisplayDialog(SuiTimeSignatureDialog, {\r\n completeNotifier: this.completeNotifier,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'staffGroups',\r\n ctor: 'SuiStaffGroupDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: null\r\n });\r\n }\r\n ribbonTempo() {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n const tempo = this.view.tracker.selections[0].measure.getTempo();\r\n createAndDisplayDialog(SuiTempoDialog,\r\n {\r\n id: 'tempoDialog',\r\n ctor: 'SuiTempoDialog',\r\n completeNotifier: this.completeNotifier,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: tempo\r\n }\r\n );\r\n }\r\n async selectPart() {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n await this.view.renderPromise();\r\n this.menus.createMenu('SuiPartSelectionMenu', this.completeNotifier);\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class DurationButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n this.buttonData = parameters.buttonData;\r\n }\r\n setDuration() {\r\n if (this.buttonData.id === 'GrowDuration') {\r\n this.view.batchDurationOperation('doubleDuration');\r\n } else if (this.buttonData.id === 'LessDuration') {\r\n this.view.batchDurationOperation('halveDuration');\r\n } else if (this.buttonData.id === 'GrowDurationDot') {\r\n this.view.batchDurationOperation('dotDuration');\r\n } else if (this.buttonData.id === 'LessDurationDot') {\r\n this.view.batchDurationOperation('undotDuration');\r\n } else if (this.buttonData.id === 'TripletButton') {\r\n this.view.makeTuplet(3);\r\n } else if (this.buttonData.id === 'QuintupletButton') {\r\n this.view.makeTuplet(5);\r\n } else if (this.buttonData.id === 'SeptupletButton') {\r\n this.view.makeTuplet(7);\r\n } else if (this.buttonData.id === 'NoTupletButton') {\r\n this.view.unmakeTuplet();\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.setDuration();\r\n });\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoBarline, SmoRepeatSymbol } from '../../smo/data/measureModifiers';\r\ndeclare var $: any;\r\n\r\n\r\nexport class MeasureButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n endRepeat() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.endRepeat);\r\n }\r\n startRepeat() {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.startRepeat);\r\n }\r\n singleBarStart() {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.singleBar);\r\n }\r\n singleBarEnd() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.singleBar);\r\n }\r\n doubleBar() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.doubleBar);\r\n }\r\n endBar() {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.endBar);\r\n }\r\n coda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Coda);\r\n }\r\n toCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.ToCoda);\r\n }\r\n segno() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Segno);\r\n }\r\n dsAlCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DsAlCoda);\r\n }\r\n dcAlCoda() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DcAlCoda);\r\n }\r\n dsAlFine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DsAlFine);\r\n }\r\n dcAlFine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DcAlFine);\r\n }\r\n fine() {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Fine);\r\n }\r\n nthEnding() {\r\n this.view.addEnding();\r\n }\r\n handleEvent(event: any, method: string) {\r\n (this as any)[method]();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, 'handleEvent', this.buttonData.id);\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class NavigationButtons extends SuiButton {\r\n static get directionsTrackerMap(): Record {\r\n return {\r\n navLeftButton: 'moveSelectionLeft',\r\n navRightButton: 'moveSelectionRight',\r\n navUpButton: 'moveSelectionUp',\r\n navDownButton: 'moveSelectionDown',\r\n navFastForward: 'moveSelectionRightMeasure',\r\n navRewind: 'moveSelectionLeftMeasure',\r\n navGrowLeft: 'growSelectionLeft',\r\n navGrowRight: 'growSelectionRight'\r\n };\r\n }\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n _moveTracker() {\r\n (this.view.tracker as any)[NavigationButtons.directionsTrackerMap[this.buttonData.id]]();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, '_moveTracker', null);\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { IsPitchLetter } from '../../smo/data/common';\r\ndeclare var $: any;\r\n\r\nexport class NoteButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n setPitch() {\r\n if (this.buttonData.id === 'UpNoteButton') {\r\n this.view.transposeSelections(1);\r\n } else if (this.buttonData.id === 'DownNoteButton') {\r\n this.view.transposeSelections(-1);\r\n } else if (this.buttonData.id === 'UpOctaveButton') {\r\n this.view.transposeSelections(12);\r\n } else if (this.buttonData.id === 'DownOctaveButton') {\r\n this.view.transposeSelections(-12);\r\n } else if (this.buttonData.id === 'ToggleAccidental') {\r\n this.view.toggleEnharmonic();\r\n } else if (this.buttonData.id === 'ToggleCourtesy') {\r\n this.view.toggleCourtesyAccidentals();\r\n } else if (this.buttonData.id === 'ToggleRestButton') {\r\n this.view.makeRest();\r\n } else if (this.buttonData.id === 'ToggleSlashButton') {\r\n this.view.toggleSlash();\r\n } else if (this.buttonData.id === 'AddGraceNote') {\r\n this.view.addGraceNote();\r\n } else if (this.buttonData.id === 'SlashGraceNote') {\r\n this.view.slashGraceNotes();\r\n } else if (this.buttonData.id === 'RemoveGraceNote') {\r\n this.view.removeGraceNote();\r\n } else if (this.buttonData.id === 'XNoteHead') {\r\n this.view.setNoteHead('x2');\r\n } else if (this.buttonData.id === 'TriUpNoteHead') {\r\n this.view.setNoteHead('T2');\r\n } else if (this.buttonData.id === 'CircleXNoteHead') {\r\n this.view.setNoteHead('X3');\r\n } else if (this.buttonData.id === 'DiamondNoteHead') {\r\n this.view.setNoteHead('D2');\r\n } else {\r\n if (IsPitchLetter(this.buttonData.rightText)) {\r\n this.view.setPitch(this.buttonData.rightText);\r\n }\r\n }\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.setPitch();\r\n });\r\n }\r\n}","import { SuiButton, ButtonDefinition, SuiButtonParams } from './button';\r\nimport { SuiAudioPlayer } from '../../render/audio/player';\r\ndeclare var $: any;\r\n\r\nexport class PlayerButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n playButton() {\r\n this.view.playFromSelection();\r\n }\r\n stopButton() {\r\n this.view.stopPlayer();\r\n }\r\n pauseButton() {\r\n this.view.pausePlayer();\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, getDomContainer } from '../../common/htmlHelpers';\r\nimport { KeyEvent } from '../../smo/data/common';\r\nimport { ButtonDefinition, ButtonAction } from './button';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { CompleteNotifier, RibbonLayout } from '../common';\r\nexport { RibbonLayout } from '../common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SuiMenuManager } from '../menus/manager';\r\nimport { SuiLibraryDialog } from '../dialogs/library';\r\nimport { SuiTempoDialog } from '../dialogs/tempo';\r\nimport { ButtonLabel } from './button';\r\nimport { CollapseRibbonControl } from './collapsable';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiHelp } from '../help';\r\nimport { SmoUiConfiguration } from '../configuration';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SuiModalButtonTypes = 'SuiLibraryDialog' | 'SuiTempoDialog';\r\nexport var SuiModalButtonStrings = ['SuiLibraryDialog', 'SuiTempoDialog'];\r\nexport function isModalButtonType(but: string | SuiModalButtonTypes): but is SuiModalButtonTypes {\r\n return SuiModalButtonStrings.indexOf(but) >= 0;\r\n}\r\n\r\n/**\r\n * Parameters for creating the global button ribbon object. The button ribbon supports a \r\n * button panel in 'top' and 'left' areas, with support for R-to-L languages. \r\n * Button groups in left and display menus are not collapsible. They are just a ButtonDefinition\r\n * capsule but are not actually buttons - event handling is done by this 'ribbon' object.\r\n * Button groups (mostly obsolete) are collapsible and are first-class button objects and\r\n * are collapsible. The content of ribbonButtons determines which buttons show up. \r\n * ribbon layout determines which show up top vs. left\r\n * @param {BrowserEventSource} eventSource - buttons will use this to bind click events\r\n * @param {CompleteNotifier} completeNotifier - buttons that bring up menus and dialogs will pass this to the dialogs\r\n * @param {SuiTracker} tracker - some buttons act on the current selection\r\n * @param {SuiMenuManager} menus - some buttons invoke a menu\r\n * @param {ButtonDefinition[]} - the buttons\r\n * @param {RibbonLayout} ribbons - where the buttons appear\r\n * @see {ButtonDefinition} for how to create/modify buttons\r\n * @see {defaultRibbonLayout} for buttons supported from the demo application\r\n */\r\nexport interface SuiRibbonParams {\r\n config: SmoUiConfiguration\r\n eventSource: BrowserEventSource,\r\n view: SuiScoreViewOperations,\r\n completeNotifier: CompleteNotifier,\r\n tracker: SuiTracker,\r\n menus: SuiMenuManager,\r\n ribbonButtons: ButtonDefinition[],\r\n ribbons: RibbonLayout\r\n}\r\n// ## RibbonButtons\r\n// Render the ribbon buttons based on group, function, and underlying UI handler.\r\n// Also handles UI events.\r\n// ### RibbonButton methods\r\n// ---\r\nexport class RibbonButtons {\r\n static get paramArray() {\r\n return ['ribbonButtons', 'ribbons', 'keyCommands', 'controller', 'menus', 'eventSource', 'view'];\r\n }\r\n static _buttonHtml(containerClass: string, buttonId: string, buttonClass: string, buttonText: string, buttonIcon: string, buttonKey: string) {\r\n const b = buildDom;\r\n const r = b('div').classes(containerClass).append(b('button').attr('id', buttonId).classes(buttonClass).append(\r\n b('span').classes('left-text').append(\r\n b('span').classes('text-span').text(buttonText)).append(\r\n b('span').classes('ribbon-button-text icon ' + buttonIcon))).append(\r\n b('span').classes('ribbon-button-hotkey').text(buttonKey)));\r\n return r.dom();\r\n }\r\n static _buttonSidebarHtml(buttonId: string, buttonClass: string, buttonText: string, buttonIcon: string, buttonKey: string) {\r\n const b = buildDom;\r\n const r = b('li').classes('nav-item')\r\n .append(b('button').classes(buttonClass).attr('id', buttonId).classes('nav-link').append(\r\n b('span').classes('left-text').append(\r\n b('span').classes('text-span').text(buttonText))).append(\r\n b('span').classes('ribbon-button-text icon ' + buttonIcon)).append(\r\n b('span').classes('ribbon-button-hotkey').text(buttonKey)));\r\n return r.dom();\r\n }\r\n static translateButtons: ButtonLabel[] = [];\r\n controller: CompleteNotifier;\r\n config: SmoUiConfiguration;\r\n eventSource: BrowserEventSource;\r\n view: SuiScoreViewOperations;\r\n menus: SuiMenuManager;\r\n ribbons: RibbonLayout;\r\n ribbonButtons: ButtonDefinition[];\r\n collapsables: CollapseRibbonControl[] = [];\r\n collapseChildren: any[] = [];\r\n\r\n constructor(params: SuiRibbonParams) {\r\n this.controller = params.completeNotifier;\r\n this.config = params.config;\r\n this.eventSource = params.eventSource;\r\n this.view = params.view;\r\n this.menus = params.menus;\r\n this.ribbonButtons = params.ribbonButtons;\r\n this.ribbons = params.ribbons;\r\n this.collapsables = [];\r\n this.collapseChildren = [];\r\n }\r\n async _executeButtonModal(buttonElement: string, buttonData: ButtonDefinition) {\r\n if (isModalButtonType(buttonData.ctor)) {\r\n const params = {\r\n eventSource: this.eventSource,\r\n completeNotifier: this.controller,\r\n view: this.view,\r\n ctor: buttonData.ctor,\r\n id: buttonData.id,\r\n startPromise: null,\r\n tracker: this.view.tracker\r\n };\r\n if (buttonData.ctor === 'SuiLibraryDialog') {\r\n await SuiLibraryDialog.createAndDisplay(params, this.config);\r\n } else {\r\n createAndDisplayDialog(SuiTempoDialog, params);\r\n }\r\n } else if (buttonData.ctor === 'helpModal') {\r\n SuiHelp.displayHelp();\r\n }\r\n }\r\n _executeButtonMenu(buttonElement: string, buttonData: ButtonDefinition) {\r\n this.menus.createMenu(buttonData.ctor, this.controller);\r\n }\r\n\r\n async _executeButton(buttonElement: string, buttonData: ButtonDefinition) {\r\n if (buttonData.action === 'modal') {\r\n this._executeButtonModal(buttonElement, buttonData);\r\n return;\r\n }\r\n if (buttonData.action === 'menu' || buttonData.action === 'collapseChildMenu') {\r\n this._executeButtonMenu(buttonElement, buttonData);\r\n }\r\n }\r\n\r\n _bindButton(buttonElement: string, buttonData: ButtonDefinition) {\r\n this.eventSource.domClick(buttonElement, this, '_executeButton', buttonData);\r\n }\r\n _createCollapsibleButtonGroups(selector: string | HTMLElement) {\r\n let containerClass: string = '';\r\n // Now all the button elements have been bound. Join child and parent buttons\r\n // For all the children of a button group, add it to the parent group\r\n this.collapseChildren.forEach((b) => {\r\n containerClass = 'ribbonButtonContainer';\r\n if (b.action === 'collapseGrandchild') {\r\n containerClass = 'ribbonButtonContainerMore';\r\n }\r\n const buttonHtml = RibbonButtons._buttonHtml(\r\n containerClass, b.id, b.classes, b.leftText, b.icon, b.rightText);\r\n if (b.dataElements) {\r\n const bkeys = Object.keys(b.dataElements);\r\n bkeys.forEach((bkey) => {\r\n var de = b.dataElements[bkey];\r\n $(buttonHtml).find('button').attr('data-' + bkey, de);\r\n });\r\n }\r\n // Bind the child button actions\r\n const parent = $(selector).find('.collapseContainer[data-group=\"' + b.group + '\"]');\r\n $(parent).append(buttonHtml);\r\n const el = $(selector).find('#' + b.id);\r\n this._bindButton(el, b);\r\n });\r\n\r\n this.collapsables.forEach((cb) => {\r\n // Bind the events of the parent button\r\n cb.bind();\r\n });\r\n }\r\n _createSidebarButtonGroups(selector: string | HTMLElement) {\r\n let containerClass: string = '';\r\n // Now all the button elements have been bound. Join child and parent buttons\r\n // For all the children of a button group, add it to the parent group\r\n this.collapseChildren.forEach((b) => {\r\n containerClass = 'ribbonButtonContainer';\r\n if (b.action === 'collapseGrandchild') {\r\n containerClass = 'ribbonButtonContainerMore';\r\n }\r\n const buttonHtml = RibbonButtons._buttonHtml(\r\n containerClass, b.id, b.classes, b.leftText, b.icon, b.rightText);\r\n if (b.dataElements) {\r\n const bkeys = Object.keys(b.dataElements);\r\n bkeys.forEach((bkey) => {\r\n var de = b.dataElements[bkey];\r\n $(buttonHtml).find('button').attr('data-' + bkey, de);\r\n });\r\n }\r\n // Bind the child button actions\r\n const parent = $(selector).find('.collapseContainer[data-group=\"' + b.group + '\"]');\r\n $(parent).append(buttonHtml);\r\n const el = $(selector).find('#' + b.id);\r\n this._bindButton(el, b);\r\n });\r\n\r\n this.collapsables.forEach((cb) => {\r\n // Bind the events of the parent button\r\n cb.bind();\r\n });\r\n }\r\n static isCollapsible(action: ButtonAction) {\r\n return ['collapseChild', 'collapseChildMenu', 'collapseGrandchild', 'collapseMore'].indexOf(action) >= 0;\r\n }\r\n\r\n // ### _createButtonHtml\r\n // For each button, create the html and bind the events based on\r\n // the button's configured action.\r\n _createRibbonHtml(buttonAr: string[], selector: string | HTMLElement) {\r\n let buttonClass = '';\r\n buttonAr.forEach((buttonId) => {\r\n const buttonData = this.ribbonButtons.find((e) =>\r\n e.id === buttonId\r\n );\r\n if (buttonData) {\r\n if (buttonData.leftText) {\r\n RibbonButtons.translateButtons.push({ buttonId: buttonData.id, buttonText: buttonData.leftText });\r\n }\r\n // collapse child is hidden until the parent button is selected, exposing the button group\r\n if (RibbonButtons.isCollapsible(buttonData.action)) {\r\n this.collapseChildren.push(buttonData);\r\n }\r\n if (buttonData.action !== 'collapseChild') {\r\n // else the button has a specific action, such as a menu or dialog, or a parent button\r\n // for translation, add the menu name to the button class\r\n buttonClass = buttonData.classes;\r\n if (buttonData.action === 'menu' || buttonData.action === 'modal') {\r\n buttonClass += ' ' + buttonData.ctor;\r\n }\r\n const buttonHtml = RibbonButtons._buttonHtml('ribbonButtonContainer',\r\n buttonData.id, buttonClass, buttonData.leftText, buttonData.icon, buttonData.rightText);\r\n $(buttonHtml).attr('data-group', buttonData.group);\r\n $(selector).append(buttonHtml);\r\n const buttonElement = $('#' + buttonData.id);\r\n // If this is a collabsable button, create it, otherwise bind its execute function.\r\n if (buttonData.action === 'collapseParent') {\r\n $(buttonHtml).addClass('collapseContainer');\r\n // collapseParent\r\n this.collapsables.push(new CollapseRibbonControl({\r\n ctor: buttonData.ctor,\r\n buttons: this.ribbonButtons,\r\n view: this.view,\r\n menus: this.menus,\r\n eventSource: this.eventSource,\r\n completeNotifier: this.controller,\r\n buttonId: buttonData.id,\r\n buttonElement,\r\n buttonData\r\n }));\r\n } else {\r\n this.eventSource.domClick(buttonElement, this, '_executeButton', buttonData);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n // ### _createButtonHtml\r\n // For each button, create the html and bind the events based on\r\n // the button's configured action.\r\n _createSidebarHtml(buttonAr: string[], selector: string | HTMLElement) {\r\n let buttonClass = '';\r\n buttonAr.forEach((buttonId) => {\r\n const buttonData = this.ribbonButtons.find((e) =>\r\n e.id === buttonId\r\n );\r\n if (buttonData) {\r\n if (buttonData.leftText) {\r\n RibbonButtons.translateButtons.push({ buttonId: buttonData.id, buttonText: buttonData.leftText });\r\n }\r\n // collapse child is hidden until the parent button is selected, exposing the button group\r\n if (RibbonButtons.isCollapsible(buttonData.action)) {\r\n this.collapseChildren.push(buttonData);\r\n }\r\n if (buttonData.action !== 'collapseChild') {\r\n // else the button has a specific action, such as a menu or dialog, or a parent button\r\n // for translation, add the menu name to the button class\r\n buttonClass = buttonData.classes;\r\n if (buttonData.action === 'menu' || buttonData.action === 'modal') {\r\n buttonClass += ' ' + buttonData.ctor;\r\n }\r\n const buttonHtml = RibbonButtons._buttonSidebarHtml(\r\n buttonData.id, buttonClass, buttonData.leftText, buttonData.icon, buttonData.rightText);\r\n $(buttonHtml).attr('data-group', buttonData.group);\r\n $(selector).append(buttonHtml);\r\n const buttonElement = $('#' + buttonData.id);\r\n // If this is a collabsable button, create it, otherwise bind its execute function.\r\n if (buttonData.action === 'collapseParent') {\r\n $(buttonHtml).addClass('collapseContainer');\r\n // collapseParent\r\n this.collapsables.push(new CollapseRibbonControl({\r\n ctor: buttonData.ctor,\r\n buttons: this.ribbonButtons,\r\n view: this.view,\r\n menus: this.menus,\r\n eventSource: this.eventSource,\r\n completeNotifier: this.controller,\r\n buttonId: buttonData.id,\r\n buttonElement,\r\n buttonData\r\n }));\r\n } else {\r\n this.eventSource.domClick(buttonElement, this, '_executeButton', buttonData);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n createRibbon(buttonDataArray: string[], parentElement: string | HTMLElement) {\r\n this._createRibbonHtml(buttonDataArray, parentElement);\r\n this._createCollapsibleButtonGroups(parentElement);\r\n }\r\n createSidebarRibbon(buttonDataArray: string[], parentElement: string | HTMLElement, containerClasses: string) {\r\n this._createSidebarHtml(buttonDataArray, parentElement);\r\n this._createCollapsibleButtonGroups(parentElement);\r\n }\r\n handleKeyDown(ev: KeyEvent) {\r\n if (ev.altKey) {\r\n const keyButton = this.ribbonButtons.find((bb) => bb.hotKey && bb.hotKey === ev.key);\r\n if (keyButton) {\r\n const element = '#' + keyButton.id;\r\n this._executeButton(element, keyButton);\r\n }\r\n }\r\n }\r\n display() {\r\n if (this.config.leftControls) {\r\n const leftControl = getDomContainer(this.config.leftControls);\r\n if (leftControl) {\r\n $(leftControl).html('');\r\n const lbuttons = this.ribbons.left;\r\n this.createSidebarRibbon(lbuttons, leftControl, 'nav-item');\r\n }\r\n }\r\n if (this.config.topControls) {\r\n const topControl = getDomContainer(this.config.topControls);\r\n if (topControl) {\r\n const tbuttons = this.ribbons.top;\r\n this.createRibbon(tbuttons, topControl); \r\n }\r\n }\r\n this.eventSource.bindKeydownHandler(this, 'handleKeyDown');\r\n }\r\n}\r\n\r\n\r\n","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SmoInstrument } from '../../smo/data/staffModifiers';\r\nimport { Clef } from '../../smo/data/common';\r\n\r\ndeclare var $: any;\r\n\r\nexport class StaveButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n addClef(clef: Clef, clefName: string) {\r\n var instrument: SmoInstrument = new SmoInstrument(SmoInstrument.defaults);\r\n instrument.instrumentName = clefName;\r\n instrument.keyOffset = 0;\r\n instrument.clef = clef;\r\n this.view.changeInstrument(instrument, this.view.tracker.selections);\r\n }\r\n clefTreble() {\r\n this.addClef('treble', 'Treble Instrument');\r\n }\r\n clefBass() {\r\n this.addClef('bass', 'Bass Instrument');\r\n }\r\n clefAlto() {\r\n this.addClef('alto', 'Alto Instrument');\r\n }\r\n clefTenor() {\r\n this.addClef('tenor', 'Tenor Instrument');\r\n }\r\n clefPercussion() {\r\n this.addClef('percussion', 'Tenor Instrument');\r\n }\r\n _clefMove(index: number) {\r\n this.view.moveStaffUpDown(index);\r\n }\r\n clefMoveUp() {\r\n this._clefMove(-1);\r\n }\r\n clefMoveDown() {\r\n this._clefMove(1);\r\n }\r\n bind() {\r\n const self = this;\r\n $(this.buttonElement).off('click').on('click', () => {\r\n const id = self.buttonData.id;\r\n if (typeof ((this as any)[id]) === 'function') {\r\n (this as any)[id]();\r\n }\r\n });\r\n }\r\n}","import { SuiButton, SuiButtonParams } from './button';\r\nimport { SuiTextBlockDialog } from '../dialogs/textBlock';\r\nimport { SuiLyricDialog } from '../dialogs/lyric';\r\nimport { SuiChordChangeDialog } from '../dialogs/chordChange';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\ndeclare var $: any;\r\n\r\nexport class TextButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n lyrics() {\r\n const sel = this.view.tracker.selections[0];\r\n const note = sel.note;\r\n if (!note) {\r\n return;\r\n }\r\n const lyrics = note.getTrueLyrics();\r\n const lyric = lyrics.length > 0 ? lyrics[0] : null;\r\n\r\n createAndDisplayDialog(SuiLyricDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'lyricDialog',\r\n ctor: 'SuiLyricDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: lyric\r\n }\r\n );\r\n // tracker, selection, controller\r\n }\r\n chordChanges() {\r\n const sel = this.view.tracker.selections[0];\r\n const note = sel.note;\r\n if (!note) {\r\n return;\r\n }\r\n const lyrics = note.getChords();\r\n const lyric = lyrics.length > 0 ? null : lyrics[0];\r\n createAndDisplayDialog(SuiChordChangeDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'chordDialog',\r\n ctor: 'SuiChordChangeDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: lyric\r\n }\r\n );\r\n }\r\n rehearsalMark() {\r\n this.view.toggleRehearsalMark();\r\n }\r\n _invokeMenu(cmd: string) {\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n this.menus.createMenu(cmd, this.completeNotifier);\r\n }\r\n\r\n addTextMenu() {\r\n createAndDisplayDialog(SuiTextBlockDialog, {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'chordDialog',\r\n ctor: 'SuiChordChangeDialog',\r\n tracker: this.view.tracker,\r\n startPromise: null,\r\n modifier: null\r\n });\r\n }\r\n addDynamicsMenu() {\r\n this._invokeMenu('SuiDynamicsMenu');\r\n }\r\n bind() {\r\n this.eventSource.domClick(this.buttonElement, this, this.buttonData.id, null);\r\n }\r\n}\r\n","import { SuiButton, SuiButtonParams } from './button';\r\ndeclare var $: any;\r\n\r\nexport class VoiceButtons extends SuiButton {\r\n constructor(parameters: SuiButtonParams) {\r\n super(parameters);\r\n }\r\n doAction() {\r\n let voiceIx = 0;\r\n if (this.buttonData.id === 'V2Button') {\r\n voiceIx = 1;\r\n } else if (this.buttonData.id === 'V3Button') {\r\n voiceIx = 2;\r\n } else if (this.buttonData.id === 'V4Button') {\r\n voiceIx = 3;\r\n } else if (this.buttonData.id === 'VXButton') {\r\n this.view.depopulateVoice();\r\n return;\r\n }\r\n this.view.populateVoice(voiceIx);\r\n }\r\n bind() {\r\n $(this.buttonElement).off('click').on('click', () => {\r\n this.doAction();\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Support for converting Smo object model to MIDI\r\n * @module /ui/dialog/adapter\r\n */\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { CompleteNotifier } from '../common';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { DialogDefinition, SuiDialogBase } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\ndeclare var $: any;\r\n\r\n/**\r\n * An adapter is the glue logic between UI components and the score view.\r\n * An adapter consists mostly of accessors (get/set) for the component data. The \r\n * components have their initial values set from the adapter get, and changes to components\r\n * result in sets to the adapter. The adapter can then update the score.\r\n * For dialogs that use this pattern,\r\n * the dialog automatically creates the components and binds their values with the \r\n * adapter. \r\n * @method commit - called when OK button of dialog is clicked\r\n * @method cancel - called when cancel button of dialog is clicked\r\n * @method remove - optional. Called when 'remove' button is clicked, for artifacts like dynamics that can be removed.\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentAdapter {\r\n view: SuiScoreViewOperations;\r\n constructor(view: SuiScoreViewOperations) {\r\n this.view = view;\r\n }\r\n abstract commit(): Promise;\r\n abstract cancel(): Promise;\r\n remove(): Promise {\r\n return PromiseHelpers.emptyPromise();\r\n };\r\n}\r\n\r\n/** \r\n * A dialog that uses the adapter pattern takes the adapter as argument.\r\n * Other than that it's the same as normal dialog parameters\r\n * The adapter type is a generic, so that the specific dialog can reference the \r\n * specific adapter class\r\n * @param ctor constructor for reflection\r\n * @param id ID for dom placement\r\n * @param tracker\r\n * @param completeNotifier UI component to notify when dialog is complete\r\n * @param startProise UI component that notifies us when to display\r\n * @param view\r\n * @param eventSource where to register for KB and mouse events\r\n * @param undoBuffer where to undo things we change\r\n * @param adapter an adapter which has getters and setters for all of the dialog components. The adapter should\r\n * read the values from the actual score, and update the score with the component values.\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDialogAdapterParams {\r\n ctor: string,\r\n id: string,\r\n tracker: SuiTracker,\r\n completeNotifier: CompleteNotifier,\r\n startPromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n undoBuffer?: UndoBuffer,\r\n // definition: DialogDefinition,\r\n adapter: T\r\n}\r\n\r\n/**\r\n * SuiDialogAdapterBase is the base class for dialogs that use the adapter pattern\r\n * (almost all of them). \r\n * @typeParam T a class that implements the Adapter interface and fulfills the \r\n * adapter data contract, with getters and setters from the components\r\n * @category SuiDialog\r\n */\r\nexport class SuiDialogAdapterBase extends SuiDialogBase {\r\n adapter: T;\r\n constructor(def: DialogDefinition, params: SuiDialogAdapterParams) {\r\n super(def, params);\r\n this.adapter = params.adapter;\r\n }\r\n /**\r\n * Call the components bind() methods to activate them. Also, verify that each \r\n * adapter meets the contract with the components\r\n */\r\n bindComponents() {\r\n this.components.forEach((component) => {\r\n // do some runtime validation of the adapter\r\n if (!component.noProperty) {\r\n if (typeof((this.adapter as any)[component.smoName]) === 'undefined') {\r\n throw ('Dialog ' + this.label + ' has component ' + component.smoName + ' but no setter in the adapter ');\r\n }\r\n }\r\n component.bind();\r\n });\r\n }\r\n /**\r\n * Called before dialog is displayed.\r\n * components that interface (bind) with the adapter are called 'bound' components.\r\n * On initialize, update the component with the score value, as told by the adapter.\r\n */\r\n initialValue() {\r\n this.components.forEach((comp) => {\r\n (comp as any).setValue((this.adapter as any)[comp.smoName]);\r\n });\r\n }\r\n /**\r\n * When a component changes, it notifies the parent dialog. Usually, we just\r\n * proxy the call to the adapter. The specific dialog can override this method if \r\n * something in the UI needs to change as a result of the component state (e.g. \r\n * show or hide another component)\r\n */\r\n async changed() {\r\n this.components.forEach((comp) => {\r\n if (comp.changeFlag) {\r\n (this.adapter as any)[comp.smoName] = (comp as any).getValue();\r\n }\r\n });\r\n await this.view.updatePromise();\r\n }\r\n /**\r\n * If there is any 'saving' to be done when the dialog clicks OK, \r\n * that is handled by the adapter. Else it can be a noop.\r\n */\r\n async commit(): Promise {\r\n await this.adapter.commit();\r\n }\r\n /**\r\n * If there is any undo or restore to be done when the dialog clicks OK, \r\n * that is handled by the adapter. Else it can be a noop.\r\n */\r\n async cancel(): Promise {\r\n await this.adapter.cancel();\r\n }\r\n /**\r\n * For score artifacts that can be removed, \r\n */\r\n async remove() {\r\n await this.adapter.remove();\r\n }\r\n /**\r\n * Binds the main dialog buttons. For OK/Cancel/remove, the logic calls the appropriate \r\n * derived function, which calls the appropriate adapter method, then calls complete()\r\n * to restore the event handling loop to the application\r\n */\r\n bindElements() {\r\n var dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.commit();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.cancel();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.remove();\r\n this.complete();\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiToggleComponent } from './components/toggle';\r\n\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Insert some number of measures\r\n * @category SuiDialog\r\n */\r\nexport class SuiInsertMeasures extends SuiDialogBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Insert Measures',\r\n elements:\r\n [{\r\n smoName: 'measureCount',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Measures to Insert'\r\n }, {\r\n smoName: 'append',\r\n control: 'SuiToggleComponent',\r\n label: 'Append to Selection'\r\n }],\r\n staticText: []\r\n };\r\n measure: SmoMeasure;\r\n selection: SmoSelection;\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiInsertMeasures.dialogElements,\r\n parameters);\r\n this.selection = this.view.tracker.selections[0];\r\n const selection = parameters.view.tracker.selections[0];\r\n const measure = selection.measure;\r\n this.measure = measure;\r\n if (!this.startPromise) {\r\n this.startPromise = new Promise((resolve) => {\r\n resolve();\r\n });\r\n }\r\n }\r\n async commit() { \r\n await this.view.addMeasures(this.appendCtrl.getValue(), this.measureCountCtrl.getValue());\r\n }\r\n\r\n get measureCountCtrl(): SuiRockerComponent {\r\n return this.cmap.measureCountCtrl as SuiRockerComponent;\r\n }\r\n get appendCtrl(): SuiToggleComponent {\r\n return this.cmap.appendCtrl as SuiToggleComponent;\r\n }\r\n populateInitial() {\r\n this.measureCountCtrl.setValue(1);\r\n }\r\n // noop\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoArpeggio, SmoArpeggioType, isArpeggioType } from '../../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport class SuiArpeggioAdapter extends SuiComponentAdapter {\r\n arpeggio: SmoArpeggio;\r\n backup: SmoArpeggio;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.arpeggio = new SmoArpeggio({ type: 'none' });\r\n this.backup = new SmoArpeggio({ type: 'none' });\r\n const selections = view.tracker.selections;\r\n if (selections.length && selections[0].note) {\r\n if (selections[0].note.arpeggio) {\r\n this.arpeggio = new SmoArpeggio({ type: selections[0].note.arpeggio.typeString });\r\n }\r\n this.backup = new SmoArpeggio({ type: this.arpeggio.typeString });\r\n }\r\n this.view = view;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addRemoveArpeggio(this.backup.typeString);\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get arpeggioType() {\r\n return this.arpeggio.typeString;\r\n }\r\n set arpeggioType(value: SmoArpeggioType) {\r\n if (isArpeggioType(value)) {\r\n this.view.addRemoveArpeggio(value);\r\n this.changed = true;\r\n }\r\n }\r\n}\r\n/**\r\n * export const SmoArpeggioTypes = ['directionless', 'rasquedo_up', 'rasquedo_down',\r\n 'roll_up', 'roll_down', 'brush_up', 'brush_down', 'none'];\r\n */\r\nexport class SuiArpeggioDialog extends SuiDialogAdapterBase {\r\n /**\r\n * The template used to create the dialog components\r\n */\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Arpeggio', elements:\r\n [{\r\n smoName: 'arpeggioType',\r\n control: 'SuiDropdownComponent',\r\n label: 'Arpeggio Type',\r\n options: [{\r\n value: 'directionless',\r\n label: 'Plain'\r\n }, {\r\n value: 'rasquedo_up',\r\n label: 'Rasquedo Up'\r\n }, {\r\n value: 'rasquedo_down',\r\n label: 'Rasquedo Down'\r\n }, {\r\n value: 'roll_up',\r\n label: 'Roll Up'\r\n }, {\r\n value: 'roll_down',\r\n label: 'Roll Down'\r\n }, {\r\n value: 'brush_up',\r\n label: 'Brush Up'\r\n }, {\r\n value: 'brush_down',\r\n label: 'Brush Down'\r\n }, { \r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiArpeggioDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiArpeggioAdapter(params.view);\r\n super(SuiArpeggioDialog.dialogElements, { adapter, ...params });\r\n this.modifier = params.modifier;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { getButtonsFcn, SuiButtonArrayMSComponent, SuiButtonArrayParameters } from './components/buttonArray';\r\nimport { SuiDialogNotifier, SuiBaseComponentParams } from './components/baseComponent';\r\nimport { SmoArticulation, SmoOrnament } from '../../smo/data/noteModifiers';\r\nimport { reverseStaticMap } from '../../smo/data/common';\r\n\r\nconst articulationButtonFactory: getButtonsFcn = () => {\r\n const params: SuiButtonArrayParameters = {\r\n label: 'Articulations',\r\n rows: [{\r\n label: 'Articulations',\r\n classes: 'pad-span',\r\n buttons: [\r\n {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-fermataBelow',\r\n id: 'fermataBelowButton',\r\n label: 'Fermata',\r\n smoName: 'fermataButton'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-articAccentBelow',\r\n id: 'accentButton',\r\n label: 'Accent',\r\n smoName: 'accentButton'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-articTenutoBelow',\r\n id: 'tenutoButton',\r\n label: 'Tenuto',\r\n smoName: 'tenutoButton'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-articStaccatoBelow',\r\n id: 'staccatoButton',\r\n label: 'Staccato',\r\n smoName: 'staccatoButton'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-articMarcatoBelow',\r\n id: 'marcatoButton',\r\n label: 'Marcato',\r\n smoName: 'marcatoButton'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-top icon-pluckedSnapPizzicatoBelow',\r\n id: 'pizzicatoButton',\r\n label: 'Pizzicato',\r\n smoName: 'pizzicatoButton'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-top icon-stringsDownBow',\r\n id: 'downBowButton',\r\n label: 'Down Bow',\r\n smoName: 'downBowButton'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-top icon-stringsUpBow',\r\n id: 'upBowButton',\r\n label: 'Up Bow',\r\n smoName: 'upBowButton'\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n return params;\r\n}\r\n\r\nexport class SuiArticulationButtonComponent extends SuiButtonArrayMSComponent {\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter, articulationButtonFactory);\r\n }\r\n}\r\nexport class SuiArticulationAdapter extends SuiComponentAdapter {\r\n static get articulationIdMap(): Record {\r\n return {\r\n accentButton: SmoArticulation.articulations.accent,\r\n tenutoButton: SmoArticulation.articulations.tenuto,\r\n staccatoButton: SmoArticulation.articulations.staccato,\r\n marcatoButton: SmoArticulation.articulations.marcato,\r\n pizzicatoButton: SmoArticulation.articulations.pizzicato,\r\n fermataButton: SmoArticulation.articulations.fermata,\r\n downBowButton: SmoArticulation.articulations.downStroke,\r\n upBowButton: SmoArticulation.articulations.upStroke\r\n };\r\n }\r\n static get articulationIdMapRvs(): Record {\r\n return reverseStaticMap('SuiArticulationAdapter.articulationIdMap', SuiArticulationAdapter.articulationIdMap);\r\n }\r\n codes: string[] = [];\r\n positionCode: string = 'auto';\r\n setValues: Record = {};\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selections = this.view.tracker.selections.filter((ss) => ss.note);\r\n this.view.groupUndo(true);\r\n const setForAll: Record = {};\r\n const positionForAll: Record = {};\r\n let notesCount = 0;\r\n selections.forEach((sel) => {\r\n const articulations = sel.note!.getArticulations();\r\n notesCount += 1;\r\n articulations.forEach((art) => {\r\n if (!setForAll[art.articulation]) {\r\n setForAll[art.articulation] = 0;\r\n }\r\n if (!positionForAll[art.position]) {\r\n positionForAll[art.position] = 0;\r\n }\r\n positionForAll[art.position] += 1;\r\n setForAll[art.articulation] = setForAll[art.articulation] + 1;\r\n });\r\n });\r\n const keys = Object.keys(setForAll);\r\n keys.forEach((key) => {\r\n if (setForAll[key] === notesCount) {\r\n const btnId = SuiArticulationAdapter.articulationIdMapRvs[key];\r\n if (btnId) {\r\n this.setValues[btnId] = true;\r\n this.codes.push(btnId);\r\n }\r\n } \r\n });\r\n if (typeof(positionForAll['above']) === 'number') {\r\n this.position = 'above;'\r\n }\r\n if (typeof(positionForAll['below']) === 'number') {\r\n this.position = 'below;'\r\n }\r\n }\r\n get position() {\r\n return this.positionCode;\r\n }\r\n set position(value: string) {\r\n this.positionCode = value;\r\n const selections = this.view.tracker.selections.filter((ss) => ss.note);\r\n selections.forEach((selection) => {\r\n const articulations = selection.note!.getArticulations();\r\n articulations.forEach((art) => {\r\n this.view.modifySelectionNoWait('articulation pos', selection, (score, sel) => {\r\n const nart = new SmoArticulation({ articulation: art.articulation, position: this.positionCode});\r\n sel.note!.setArticulation(art, false);\r\n sel.note!.setArticulation(nart, true);\r\n });\r\n });\r\n });\r\n }\r\n get articulations() {\r\n return this.codes;\r\n }\r\n set articulations(value: string[]) {\r\n this.codes = value;\r\n const selections = this.view.tracker.selections.filter((ss) => ss.note);\r\n const oldCodes = Object.keys(this.setValues);\r\n // for each selection\r\n selections.forEach((selection) => {\r\n const note = selection.note;\r\n // make sure any existing codes are set\r\n this.codes.forEach((code) => {\r\n const smoCode = SuiArticulationAdapter.articulationIdMap[code];\r\n this.setValues[code] = true;\r\n this.view.modifySelectionNoWait('articulation dialog', selection, (score, sel) => {\r\n sel.note!.setArticulation(new SmoArticulation({ articulation: smoCode }), true);\r\n });\r\n // only turn off the code if this value was set initially for all selections\r\n });\r\n oldCodes.forEach((oldCode) => {\r\n if (this.setValues[oldCode] && this.codes.indexOf(oldCode) < 0) {\r\n const smoCode = SuiArticulationAdapter.articulationIdMap[oldCode];\r\n const articulation = note!.getArticulation(smoCode);\r\n if (articulation) {\r\n this.view.modifySelectionNoWait('articulation dialog', selection, (score, sel) => {\r\n sel.note!.setArticulation(articulation, false);\r\n });\r\n this.setValues[oldCode] = false;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n get textMessage() {\r\n return '';\r\n }\r\n set textMessage(value: string) {\r\n // ignore\r\n }\r\n async commit() { \r\n }\r\n async cancel() {\r\n await this.view.undo();\r\n }\r\n async remove() {\r\n }\r\n}\r\nexport class SuiArticulationDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Articulations',\r\n elements:\r\n [{\r\n smoName: 'articulations',\r\n control: 'SuiArticulationButtonComponent',\r\n label: 'Articulations'\r\n }, {\r\n smoName: 'position',\r\n control: 'SuiDropdownComponent',\r\n label: 'Position',\r\n options: [\r\n {\r\n value: SmoArticulation.positions.above,\r\n label: 'Above'\r\n }, {\r\n value: SmoArticulation.positions.below,\r\n label: 'Below'\r\n }, {\r\n value: SmoArticulation.positions.auto,\r\n label: 'Auto'\r\n } \r\n ]\r\n }, {\r\n smoName: 'textMessage',\r\n control: 'SuiTextInputComponent',\r\n label: 'Use keys h,i,j,k,l to toggle common articulations.',\r\n classes: 'hide-input'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiArticulationAdapter(parameters.view);\r\n super(SuiArticulationDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE'];\r\n }\r\n async changed() {\r\n this.view.undoTrackerMeasureSelections('articulation dialog');\r\n await super.changed();\r\n }\r\n\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoAudioPlayerSettings, SmoAudioPlayerType, IsOscillatorType } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiAudioSettingsAdapter extends SuiComponentAdapter {\r\n settings: SmoAudioPlayerSettings;\r\n backup: SmoAudioPlayerSettings;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.settings = new SmoAudioPlayerSettings(view.score.audioSettings);\r\n this.backup = new SmoAudioPlayerSettings(view.score.audioSettings);\r\n }\r\n get enableReverb(): boolean {\r\n return this.settings.reverbEnable;\r\n }\r\n set enableReverb(value: boolean) {\r\n this.settings.reverbEnable = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get playerType(): string {\r\n return this.settings.playerType;\r\n }\r\n set playerType(value: string) {\r\n if (value !== 'sampler') {\r\n this.settings.playerType = 'synthesizer';\r\n } else {\r\n this.settings.playerType = 'sampler';\r\n }\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get waveform(): string {\r\n return this.settings.waveform;\r\n }\r\n set waveform(value: string) {\r\n if (IsOscillatorType(value)) {\r\n this.settings.waveform = value;\r\n }\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get reverbDelay(): number {\r\n return this.settings.reverbDelay;\r\n }\r\n set reverbDelay(value: number) {\r\n this.settings.reverbDelay = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n get reverbDecay(): number {\r\n return this.settings.reverbDecay;\r\n } \r\n set reverbDecay(value: number) {\r\n this.settings.reverbDecay = value;\r\n this.view.updateAudioSettings(this.settings);\r\n }\r\n async cancel() {\r\n await this.view.updateAudioSettings(this.backup);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiAudioSettingsDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Audio Settings',\r\n elements: [{\r\n smoName: 'enableReverb',\r\n control: 'SuiToggleComponent',\r\n label: 'Enable Reverb'\r\n }, {\r\n smoName: 'playerType',\r\n control: 'SuiDropdownComponent',\r\n label: 'Audio Playback Engine',\r\n options: [{\r\n value: 'sampler', label: 'Sampler'\r\n }, {\r\n value: 'synthesizer', label: 'Analog SoftSynth'\r\n }]\r\n }, {\r\n smoName: 'waveform',\r\n control: 'SuiDropdownComponent',\r\n label: 'Waveform (Synth only)',\r\n options: [{\r\n value: 'sine', label: 'Sine'\r\n }, {\r\n value: 'sawtooth', label: 'sawtooth'\r\n }, {\r\n value: 'square', label: 'square'\r\n }, {\r\n value: 'triangle', label: 'triangle'\r\n }, {\r\n value: 'custom', label: 'custom'\r\n }]\r\n }, {\r\n smoName: 'reverbDelay',\r\n control: 'SuiRockerComponent',\r\n label: 'Delay Time (if reverb) in seconds',\r\n dataType: 'float'\r\n }, {\r\n smoName: 'reverbDecay',\r\n control: 'SuiRockerComponent',\r\n label: 'Decay Time (if reverb) in seconds',\r\n dataType: 'float'\r\n }],\r\n staticText: []\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiAudioSettingsAdapter(params.view);\r\n super(SuiAudioSettingsDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiChordComponent } from './components/noteText';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport {KeyEvent } from '../../smo/data/common';\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SuiInlineText } from '../../render/sui/textRender';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { EventHandler } from '../eventSource';\r\n\r\ndeclare var $: any;\r\n/**\r\n * Dialog for running a chord change editing session.\r\n * @category SuiDialog\r\n */\r\nexport class SuiChordChangeDialog extends SuiDialogBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Edit Chord Symbol', elements:\r\n [{\r\n smoName: 'verse',\r\n defaultValue: 0,\r\n control: 'SuiDropdownComponent',\r\n label: 'Ordinality',\r\n classes: 'hide-when-editing',\r\n startRow: true,\r\n options: [{\r\n value: 0,\r\n label: '1'\r\n }, {\r\n value: 1,\r\n label: '2'\r\n }, {\r\n value: 2,\r\n label: '3'\r\n }]\r\n }, {\r\n smoName: 'translateY',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing',\r\n control: 'SuiRockerComponent',\r\n label: 'Y Adjustment (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'chordEditor',\r\n defaultValue: 0,\r\n classes: 'show-always',\r\n control: 'SuiChordComponent',\r\n label: 'Edit Text',\r\n options: []\r\n }, {\r\n smoName: 'chordSymbol',\r\n defaultValue: '',\r\n classes: 'show-when-editing',\r\n control: 'SuiDropdownComponent',\r\n label: 'Chord Symbol',\r\n startRow: true,\r\n options: [{\r\n value: 'csymDiminished',\r\n label: 'Dim'\r\n }, {\r\n value: 'csymHalfDiminished',\r\n label: 'Half dim'\r\n }, {\r\n value: 'csymDiagonalArrangementSlash',\r\n label: 'Slash'\r\n }, {\r\n value: 'csymMajorSeventh',\r\n label: 'Maj7'\r\n }]\r\n }, {\r\n smoName: 'textPosition',\r\n defaultValue: SuiInlineText.textTypes.normal,\r\n classes: 'show-when-editing',\r\n control: 'SuiDropdownComponent',\r\n label: 'Text Position',\r\n startRow: true,\r\n options: [{\r\n value: SuiInlineText.textTypes.superScript,\r\n label: 'Superscript'\r\n }, {\r\n value: SuiInlineText.textTypes.subScript,\r\n label: 'Subscript'\r\n }, {\r\n value: SuiInlineText.textTypes.normal,\r\n label: 'Normal'\r\n }]\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Font'\r\n }, {\r\n smoName: 'adjustWidth',\r\n classes: 'hide-when-editing',\r\n control: 'SuiToggleComponent',\r\n label: 'Adjust Note Width',\r\n options: []\r\n }],\r\n staticText: [\r\n { label: 'Edit Chord Symbol' },\r\n { undo: 'Undo Chord Symbols' },\r\n { doneEditing: 'Done Editing Chord Symbols' }\r\n ]\r\n };\r\n lyric: SmoLyric | null = null;\r\n selector: SmoSelector | null = null;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiChordChangeDialog.dialogElements, parameters);\r\n parameters.ctor = 'SuiChordChangeDialog';\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'SELECTIONPOS'];\r\n }\r\n get chordEditorCtrl(): SuiChordComponent {\r\n return this.cmap.chordEditorCtrl as SuiChordComponent;\r\n }\r\n get chordSymbolCtrl(): SuiDropdownComponent {\r\n return this.cmap.chordSymbolCtrl as SuiDropdownComponent;\r\n }\r\n get translateYCtrl(): SuiRockerComponent {\r\n return this.cmap.translateYCtrl as SuiRockerComponent;\r\n }\r\n get textPositionCtrl(): SuiRockerComponent {\r\n return this.cmap.textPositionCtrl as SuiRockerComponent;\r\n }\r\n get adjustWidthCtrl(): SuiToggleComponent {\r\n return this.cmap.adjustWidthCtrl as SuiToggleComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n changed() {\r\n let val = '';\r\n if (this.chordSymbolCtrl.changeFlag && this.chordEditorCtrl.running) {\r\n val = '@' + this.chordSymbolCtrl.getValue() + '@';\r\n var kv:KeyEvent;\r\n /* type: string, shiftKey: boolean, ctrlKey: boolean, altKey: boolean, key: string, keyCode: string,\r\n code: string*/\r\n this.chordEditorCtrl.evKey({\r\n type: 'keydown',\r\n shiftKey: false,\r\n ctrlKey: false,\r\n altKey: false,\r\n key: val,\r\n code: val,\r\n event: null,\r\n keyCode: 0\r\n });\r\n // Move focus outside the element so it doesn't intercept keys\r\n this.chordSymbolCtrl.unselect();\r\n }\r\n if (this.translateYCtrl.changeFlag) {\r\n if (this.lyric && this.selector) {\r\n this.lyric.translateY = this.translateYCtrl.getValue();\r\n this.view.addOrUpdateLyric(this.selector, this.lyric);\r\n }\r\n }\r\n if (this.textPositionCtrl.changeFlag) {\r\n this.chordEditorCtrl.setTextType(this.textPositionCtrl.getValue());\r\n $(this.textPositionCtrl._getInputElement())[0].selectedIndex = -1;\r\n $(this.textPositionCtrl._getInputElement()).blur();\r\n }\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.view.setChordFont(fontInfo);\r\n }\r\n if (this.adjustWidthCtrl.changeFlag) {\r\n this.view.score.setChordAdjustWidth(this.adjustWidthCtrl.getValue());\r\n }\r\n }\r\n setLyric(selector: SmoSelector, lyric: SmoLyric) {\r\n this.selector = selector;\r\n this.lyric = lyric;\r\n this.translateYCtrl.setValue(lyric.translateY);\r\n }\r\n\r\n display() {\r\n super.display();\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.session && this.chordEditorCtrl.session.lyric) {\r\n const lyric = this.chordEditorCtrl.session.lyric;\r\n this.adjustWidthCtrl.setValue(lyric.adjustNoteWidthChord);\r\n this.fontCtrl.setValue({\r\n family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size, weight: 'normal'\r\n });\r\n }\r\n }\r\n\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').remove();\r\n // this.chordEditorCtrl.setView(this.eventSource, this.view);\r\n this.chordEditorCtrl.startEditSession();\r\n }\r\n\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n async evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n if (!this.chordEditorCtrl.running) {\r\n return;\r\n }\r\n const edited = await this.chordEditorCtrl.evKey(evdata);\r\n if (edited) {\r\n evdata.stopPropagation();\r\n }\r\n }\r\n }\r\n\r\n _complete() {\r\n if (this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.endSession();\r\n }\r\n this.view.renderer.setDirty();\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.complete();\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.chordEditorCtrl && this.chordEditorCtrl.running) {\r\n this.chordEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoClefChange } from '../../smo/data/noteModifiers';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { IsClef }from '../../smo/data/common';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\n\r\nexport class SuiClefChangeAdapter extends SuiComponentAdapter {\r\n clefChange: SmoClefChange;\r\n backup: SmoClefChange;\r\n smoNote: SmoNote | null = null;\r\n changed: boolean = false;\r\n\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.clefChange = new SmoClefChange(SmoClefChange.defaults);\r\n this.backup = new SmoClefChange(SmoClefChange.defaults);\r\n const selections = view.tracker.selections;\r\n if (selections.length && selections[0].note) {\r\n this.smoNote = selections[0].note;\r\n if (selections[0].note.clefNote) {\r\n const params = SmoClefChange.defaults;\r\n params.clef = selections[0].note.clefNote.clef;\r\n this.clefChange = new SmoClefChange(params);\r\n this.backup = new SmoClefChange(params);\r\n } else if (IsClef(this.smoNote.clef)) {\r\n this.clefChange.clef = this.smoNote.clef;\r\n this.backup.clef = this.smoNote.clef;\r\n }\r\n }\r\n this.view = view;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addRemoveClefChange(this.backup);\r\n }\r\n }\r\n async commit() {\r\n return;\r\n }\r\n get clefType() {\r\n return this.clefChange.clef;\r\n }\r\n set clefType(value: string) { \r\n if (IsClef(value)) {\r\n // this.view.addRemoveArpeggio(value);\r\n this.changed = true;\r\n this.clefChange.clef = value;\r\n this.view.addRemoveClefChange(this.clefChange);\r\n }\r\n }\r\n}\r\n/**\r\n * clefs same as new part\r\n */\r\nexport class SuiClefChangeDialog extends SuiDialogAdapterBase {\r\n /**\r\n * The template used to create the dialog components\r\n */\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Change Clef', elements:\r\n [ {\r\n smoName: 'clefType',\r\n control: 'SuiDropdownComponent',\r\n label: 'Clef',\r\n options: [ {\r\n label: 'Treble Clef Staff',\r\n value: 'treble'\r\n }, {\r\n label: 'Bass Clef Staff',\r\n value: 'bass'\r\n }, {\r\n label: 'Alto Clef Staff',\r\n value: 'alto'\r\n }, {\r\n label: 'Tenor',\r\n value: 'tenor'\r\n }, {\r\n label: 'Percussion',\r\n value: 'percussion'\r\n }] \r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiClefChangeDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiClefChangeAdapter(params.view);\r\n super(SuiClefChangeDialog.dialogElements, { adapter, ...params });\r\n this.modifier = params.modifier;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoModifier } from '../../../smo/data/score';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../../eventSource';\r\n/**\r\n * A component is a part of a dialog box that accepts some input.\r\n */\r\ndeclare var $: any;\r\n/**\r\n * Dialogs controls options, like dropdowns\r\n * @category SuiDialogParams\r\n */\r\nexport interface DialogDefinitionOption {\r\n css?: string,\r\n label: string,\r\n value: number | string\r\n}\r\n/**\r\n * DialogDefinition is a JSON-like structure that each dialog has\r\n * to define the components. Specific components can define\r\n * additional params by extending this, these are the basics.\r\n * @param {smoName} - the name the dialog uses to reference it \r\n * @param {control} - constructor of the control\r\n * @param {label} - label of the element, can be translated\r\n * @param {increment} - used by components that have increment arrows\r\n * @param {defaultValue} - thinking of removing this\r\n * @param {dataType} - used to narrow the type by some components\r\n * @param {classes} - can be used in rendering\r\n * @category SuiDialogParams\r\n */\r\nexport interface DialogDefinitionElement {\r\n smoName: string,\r\n control: string,\r\n label: string,\r\n startRow?: boolean,\r\n options?: DialogDefinitionOption[]\r\n increment?: number,\r\n defaultValue?: number | string,\r\n dataType?: string,\r\n classes?: string,\r\n}\r\n\r\n/**\r\n * for base component constructors\r\n * @param {id} - unique ID for the control DOM\r\n * @param {classes} - additional classes for styling added to DOM\r\n * @param {label} - default label for the component\r\n * @param {smoName} - the variable in the dialog that the componenet maps to\r\n * @param {control} - the constructor of the UI control\r\n * @param {parentComponent} - for composite components, the top-level\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiBaseComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n noProperty?: boolean,\r\n parentComponent?: SuiComponentParent\r\n}\r\n/**\r\n * components know about their parent dialog via the \r\n * DialogNotifier interface. It allows a component to \r\n * notify parent of changing contents.\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiDialogNotifier {\r\n /**\r\n * Called by the component when the state is changed. Dialog\r\n * will then query the component (getValue()) and set the \r\n * correct score value.\r\n */\r\n abstract changed(): void;\r\n /**\r\n * returns the DOM id of the dialog.\r\n */\r\n abstract getId(): string;\r\n /**\r\n * returns the top DOM node for the dialog\r\n */\r\n abstract get dgDom(): any;\r\n /**\r\n * gets the view from the parent\r\n */\r\n abstract getView(): SuiScoreViewOperations;\r\n /**\r\n * gets the 'modifier' from parent dialog, used by \r\n * text editors. Most components won't need this.\r\n */\r\n abstract getModifier(): SmoModifier | null;\r\n /**\r\n * Gets the static text for the current language.\r\n * this is used by components that have different text labels for different states.\r\n */\r\n abstract getStaticText(): Record;\r\n /**\r\n * Used by text editing components that are also event sinks\r\n */\r\n abstract getEventSource(): BrowserEventSource;\r\n}\r\n/**\r\n * base class for Dialog components. Notifies parent \r\n * dialog of state change via `change()`\r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentBase {\r\n changeFlag: boolean = false;\r\n css: string;\r\n dialog: SuiDialogNotifier;\r\n id: string;\r\n noProperty: boolean;\r\n label: string;\r\n control: string;\r\n smoName: string;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiBaseComponentParams) {\r\n this.changeFlag = false;\r\n this.css = parameters.classes;\r\n this.dialog = dialog;\r\n this.id = parameters.id;\r\n this.label = parameters.label;\r\n this.control = parameters.control;\r\n this.smoName = parameters.smoName;\r\n this.noProperty = parameters.noProperty ?? false;\r\n }\r\n /**\r\n * Called by the dialog after rendering, so the derived class can \r\n * bind the html controls\r\n */\r\n abstract bind(): void;\r\n /**\r\n * Return the html that lives in side the component DOM. Implemented by the\r\n * base class.\r\n */\r\n abstract get html(): any;\r\n\r\n /**\r\n * Called by the derived class when the value changes. The change flag is set to true, so the dialog will \r\n * know which component changed.\r\n */\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.dialog.changed();\r\n this.changeFlag = false;\r\n }\r\n /**\r\n * combine component classes with string, used for composites\r\n * @param classes string ot append\r\n * @returns combined strings\r\n */\r\n makeClasses(classes: string) {\r\n if (this.css) {\r\n return classes + ' ' + this.css;\r\n }\r\n return classes;\r\n }\r\n get parameterId() {\r\n return this.dialog.getId() + '-' + this.smoName;\r\n }\r\n show() {\r\n $('#' + this.parameterId).removeClass('hide');\r\n }\r\n hide() {\r\n $('#' + this.parameterId).addClass('hide');\r\n }\r\n}\r\n\r\n/**\r\n * Parent components are really containers for other components\r\n * For instance, FontComponent has size, family, weight, etc.\r\n * \r\n * @category SuiDialog\r\n */\r\nexport abstract class SuiComponentParent extends SuiComponentBase {\r\n /**\r\n * For parent component, their changed method is called by child, and then the \r\n * parent calls the dialog changed()\r\n */\r\n abstract changed(): void;\r\n}\r\n\r\nexport abstract class SuiCompositeBase extends SuiComponentBase {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, params: SuiBaseComponentParams) {\r\n super(dialog, params);\r\n if (!params.parentComponent) {\r\n throw ('invalid parent component');\r\n }\r\n this.parentControl = params.parentComponent;\r\n }\r\n}\r\n\r\n","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * \r\n */\r\nexport interface SuiButtonComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n text?: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n icon: string\r\n}\r\n\r\n// ## SuiToggleComponent\r\n// Simple on/off behavior. No value just used to notifiy parent dialog\r\nexport class SuiButtonComponent extends SuiComponentBase {\r\n icon: string;\r\n text?: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiButtonComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.icon = parameter.icon;\r\n this.text = parameter.text;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n this.icon = typeof(this.icon) === 'undefined' ? '' : this.icon;\r\n if (!this.text) {\r\n const r = b('div').classes(this.makeClasses('buttonControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'button').classes(this.icon)\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').attr('aria-label',this.label).text(this.label));\r\n return r;\r\n } else {\r\n const r = b('div').classes(this.makeClasses('buttonControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'button').classes(this.icon)\r\n .attr('id', id + '-input').append(\r\n b('span').classes('button-text').text(this.text)\r\n )).append(\r\n b('label').attr('for', id + '-input').attr('aria-label',this.label).text(this.label));\r\n return r;\r\n }\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n setValue() {\r\n }\r\n getValue() {\r\n return null;\r\n }\r\n bind() {\r\n const input = this._getInputElement();\r\n $(input).off('click').on('click',\r\n () => {\r\n this.handleChanged();\r\n });\r\n }\r\n}\r\n\r\nexport interface SuiButtonCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n text?: string,\r\n control: string,\r\n icon: string,\r\n parentControl: SuiComponentParent\r\n}\r\n// ### SuiButtonComposite\r\n// Dropdown component that can be part of a composite control.\r\nexport class SuiButtonComposite extends SuiButtonComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiButtonCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent, SuiBaseComponentParams } from '../components/baseComponent';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SuiButtonComponentParams } from './button';\r\n\r\ndeclare var $: any;\r\nexport interface SuiButtonComponentRowParameters {\r\n label: string,\r\n classes: string\r\n buttons: SuiButtonComponentParams[]\r\n}\r\nexport interface SuiButtonArrayParameters {\r\n label: string,\r\n rows: SuiButtonComponentRowParameters[] \r\n}\r\ndeclare interface SuiButtonCompositeParams extends SuiButtonComponentParams {\r\n parentControl: SuiComponentParent\r\n}\r\nexport class SuiButtonArrayButton extends SuiComponentBase {\r\n icon: string;\r\n classes: string;\r\n position?: string;\r\n text?: string;\r\n iButtonState: number = SuiButtonArrayButton.buttonState.initial;\r\n parentControl: SuiComponentParent;\r\n static buttonStateString: string[] = ['initial', 'pushed', 'disabled'];\r\n static buttonState: Record = {\r\n 'initial': 0, 'pushed': 1 , 'disabled': 2\r\n }\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiButtonCompositeParams) {\r\n super(dialog, parameters);\r\n this.id = `${dialog.getId()}-${parameters.id}`;\r\n this.dialog = dialog;\r\n this.text = parameters.text;\r\n this.icon = parameters.icon;\r\n this.classes = parameters.classes;\r\n this.parentControl = parameters.parentControl; \r\n }\r\n get buttonStateString() {\r\n return SuiButtonArrayButton.buttonStateString[this.buttonState];\r\n }\r\n get buttonState() {\r\n return this.iButtonState;\r\n }\r\n set buttonState(value: number) {\r\n this.iButtonState = value;\r\n this.clearState();\r\n $(`#${this.id}`).addClass(this.buttonStateString);\r\n }\r\n clearState() {\r\n SuiButtonArrayButton.buttonStateString.forEach((ss) => $(`#${this.id}`).removeClass(ss));\r\n }\r\n get iconHtml() {\r\n const b = buildDom;\r\n const state: string = SuiButtonArrayButton.buttonStateString[this.iButtonState];\r\n const classes = `${this.classes} ${state}`;\r\n const q = b('button').attr('id', this.id).classes(classes).append(\r\n b('span').classes(this.icon).attr('aria-label',this.label)\r\n );\r\n return q;\r\n }\r\n get textHtml() {\r\n const b = buildDom;\r\n const state: string = SuiButtonArrayButton.buttonStateString[this.iButtonState];\r\n const text = this.text ?? '';\r\n const classes = `${this.classes} ${state}`;\r\n const q = b('button').attr('id', this.id).classes(classes).append(\r\n b('span').classes(this.icon).attr('aria-label',this.label)).append(\r\n b('span').classes('button-text').text(text)\r\n );\r\n return q;\r\n }\r\n get html() {\r\n const q = this.text?.length ? this.textHtml : this.iconHtml;\r\n return q;\r\n }\r\n updateControls() {\r\n const updateEl = $('#' + this.parameterId);\r\n $(updateEl).html('');\r\n $(updateEl).append(this.html.dom());\r\n this.bind();\r\n }\r\n bind() {\r\n $(`#${this.id}`).off('click').on('click', \r\n (ev: any) => {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n });\r\n }\r\n}\r\nexport interface SuiButtonComponentRow {\r\n label: string,\r\n classes: string,\r\n buttons: SuiButtonArrayButton[]\r\n}\r\nexport type getButtonsFcn = () => SuiButtonArrayParameters;\r\nexport abstract class SuiButtonArrayBase extends SuiComponentParent {\r\n view: SuiScoreViewOperations;\r\n buttonRows: SuiButtonComponentRow[] = [];\r\n pressed: string = '';\r\n shellCreated: boolean = false;\r\n\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams, buttonFactory: getButtonsFcn) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n const rowParams = buttonFactory();\r\n rowParams.rows.forEach((bparams) => {\r\n const row: SuiButtonComponentRow = {\r\n label: bparams.label,\r\n classes: bparams.classes,\r\n buttons: []\r\n };\r\n this.buttonRows.push(row);\r\n bparams.buttons.forEach((bp) => {\r\n const param = {\r\n parentControl: this, ...bp\r\n }\r\n row.buttons.push(new SuiButtonArrayButton(dialog, param));\r\n });\r\n });\r\n\r\n this.view = this.dialog.getView();\r\n }\r\n updateControls() {\r\n const updateEl = $('#' + this.parameterId);\r\n $(updateEl).html('');\r\n $(updateEl).append(this.html.dom());\r\n this.bind();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n if (!this.shellCreated) {\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl buttonArray'))\r\n .attr('id', this.parameterId);\r\n this.shellCreated = true;\r\n return q;\r\n }\r\n const q = b('div').classes('button-row-container');\r\n for (let i = 0; i < this.buttonRows.length; ++i) {\r\n const buttonRow = this.buttonRows[i];\r\n const r = b('div').classes(`button-array-row`);\r\n const s = b('div').classes('button-array-label')\r\n .append(b('span').classes(`${buttonRow.classes}`).text(buttonRow.label));\r\n const t = b('div').classes('button-array-buttons');\r\n buttonRow.buttons.forEach((bb) => {\r\n t.append(bb.html);\r\n });\r\n r.append(s);\r\n r.append(t);\r\n q.append(r);\r\n }\r\n return q;\r\n }\r\n\r\n abstract changed(): void;\r\n abstract bind():void;\r\n}\r\n\r\nexport class SuiButtonArrayComponent extends SuiButtonArrayBase {\r\n pressed: string = '';\r\n shellCreated: boolean = false;\r\n initialValue: boolean = true;\r\n\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams, buttonFactory: getButtonsFcn) {\r\n super(dialog, parameter, buttonFactory);\r\n }\r\n getValue(): string { \r\n return this.pressed;\r\n }\r\n updateValues() {\r\n const rowKeys = Object.keys(this.buttonRows);\r\n for (let i = 0; i < rowKeys.length; ++i) {\r\n const buttonRow = this.buttonRows[i];\r\n buttonRow.buttons.forEach((bb) => {\r\n // If the button is being pressed by the user\r\n if (bb.changeFlag) {\r\n // toggle button state.\r\n if (bb.buttonState === SuiButtonArrayButton.buttonState.pushed) {\r\n bb.buttonState = SuiButtonArrayButton.buttonState.initial;\r\n this.pressed = '';\r\n } else {\r\n this.pressed = bb.smoName;\r\n bb.buttonState = SuiButtonArrayButton.buttonState.pushed;\r\n }\r\n } else if (this.initialValue) {\r\n // if the condition was met when the dialog was created\r\n if (this.pressed === bb.smoName) {\r\n bb.buttonState = SuiButtonArrayButton.buttonState.pushed;\r\n }\r\n } else {\r\n bb.buttonState = SuiButtonArrayButton.buttonState.initial;\r\n }\r\n });\r\n }\r\n }\r\n setValue(val: string) {\r\n this.pressed = val;\r\n this.updateValues();\r\n this.updateControls();\r\n this.initialValue = false;\r\n }\r\n changed() {\r\n this.changeFlag = true;\r\n this.updateValues();\r\n this.updateControls();\r\n this.handleChanged();\r\n this.changeFlag = false;\r\n }\r\n bind() {\r\n const rowKeys = Object.keys(this.buttonRows);\r\n for (let i = 0; i < rowKeys.length; ++i) { \r\n const buttonRow = this.buttonRows[i];\r\n buttonRow.buttons.forEach((bb) => {\r\n bb.bind();\r\n });\r\n }\r\n }\r\n}\r\nexport class SuiButtonArrayMSComponent extends SuiButtonArrayBase {\r\n pressedArray: string[] = [];\r\n initialValue: boolean = true;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams, buttonFactory: getButtonsFcn) {\r\n super(dialog, parameter, buttonFactory);\r\n }\r\n getValue(): string[] { \r\n return this.pressedArray;\r\n }\r\n setValue(val: string[]) {\r\n this.pressedArray = val;\r\n this.updateValues();\r\n this.updateControls();\r\n this.initialValue = false;\r\n }\r\n updateValues() {\r\n const rowKeys = Object.keys(this.buttonRows);\r\n const pressed: string[] = [];\r\n for (let i = 0; i < rowKeys.length; ++i) {\r\n const buttonRow = this.buttonRows[i];\r\n buttonRow.buttons.forEach((bb) => {\r\n // If this button was just pressed\r\n if (bb.changeFlag) {\r\n if (this.pressedArray.indexOf(bb.smoName) >= 0) {\r\n bb.buttonState = SuiButtonArrayButton.buttonState.initial;\r\n } else {\r\n bb.buttonState = SuiButtonArrayButton.buttonState.pushed;\r\n pressed.push(bb.smoName);\r\n }\r\n } else if (this.initialValue) { // or if the initial value is being set\r\n if (this.pressedArray.indexOf(bb.smoName) >= 0) {\r\n bb.buttonState = SuiButtonArrayButton.buttonState.pushed;\r\n pressed.push(bb.smoName);\r\n }\r\n } else if (bb.buttonState === SuiButtonArrayButton.buttonState.pushed) {\r\n // if the button was not changed, but pressed already\r\n pressed.push(bb.smoName);\r\n }\r\n });\r\n }\r\n this.pressedArray = pressed;\r\n }\r\n changed() {\r\n this.changeFlag = true;\r\n this.updateValues();\r\n this.updateControls();\r\n this.handleChanged();\r\n this.changeFlag = false;\r\n }\r\n bind() {\r\n const rowKeys = Object.keys(this.buttonRows);\r\n for (let i = 0; i < rowKeys.length; ++i) { \r\n const buttonRow = this.buttonRows[i];\r\n buttonRow.buttons.forEach((bb) => {\r\n bb.bind();\r\n });\r\n }\r\n }\r\n}\r\n","import { SuiDialogNotifier, DialogDefinitionElement, SuiComponentParent } from '../components/baseComponent';\r\nimport { SuiToggleCompositeParams, SuiToggleComposite } from '../components/toggle';\r\nimport { SuiDropdownCompositeParams, SuiDropdownComposite } from '../components/dropdown';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n \r\nexport interface CheckboxDropdownComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n toggleElement: DialogDefinitionElement,\r\n dropdownElement: DialogDefinitionElement\r\n}\r\n\r\n// ## CheckboxDropdownComponent\r\n// A checkbox that enables a dropdown component, for optional or dependent parameter\r\nexport class CheckboxDropdownComponent extends SuiComponentParent {\r\n // { dropdownElement: {...}, toggleElement: }\r\n toggleCtrl: SuiToggleComposite;\r\n dropdownCtrl: SuiDropdownComposite;\r\n constructor(dialog: SuiDialogNotifier, parameter: CheckboxDropdownComponentParams) {\r\n super(dialog, parameter);\r\n const toggleParams: SuiToggleCompositeParams = {\r\n id: this.id + parameter.toggleElement.smoName,\r\n classes: '',\r\n parentControl: this,\r\n ...parameter.toggleElement\r\n }\r\n const dropdownParams: SuiDropdownCompositeParams = {\r\n id: this.id + parameter.dropdownElement.smoName,\r\n classes: '',\r\n defaultValue: '',\r\n parentControl: this,\r\n ...parameter.dropdownElement\r\n }\r\n this.toggleCtrl = new SuiToggleComposite(this.dialog, toggleParams);\r\n this.dropdownCtrl = new SuiDropdownComposite(this.dialog, dropdownParams);\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl checkboxDropdown'))\r\n .attr('id', this.parameterId);\r\n q.append(this.toggleCtrl.html);\r\n q.append(this.dropdownCtrl.html);\r\n return q;\r\n }\r\n\r\n bind() {\r\n this.toggleCtrl.bind();\r\n this.dropdownCtrl.bind();\r\n }\r\n changed() {\r\n if (this.toggleCtrl.getValue()) {\r\n $('#' + this.parameterId).addClass('checked');\r\n } else {\r\n $('#' + this.parameterId).removeClass('checked');\r\n }\r\n this.handleChanged();\r\n }\r\n}\r\n","import { SuiDialogNotifier, SuiComponentBase, SuiBaseComponentParams } from './baseComponent';\r\nimport { SuiDragSession } from '../../../render/sui/textEdit';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n// ## SuiDragText\r\n// A component that lets you drag the text you are editing to anywhere on the score.\r\n// The text is not really part of the dialog but the location of the text appears\r\n// in other dialog fields.\r\nexport class SuiDragText extends SuiComponentBase {\r\n dragging: boolean = false;\r\n running: boolean = false;\r\n staticText: Record;\r\n altLabel: string;\r\n value: string = '';\r\n session: SuiDragSession | null = null;\r\n view: SuiScoreViewOperations;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter);\r\n this.dragging = false;\r\n this.running = false;\r\n this.staticText = this.dialog.getStaticText();\r\n this.altLabel = this.staticText.draggerLabel;\r\n this.value = '';\r\n this.view = this.dialog.getView();\r\n }\r\n\r\n get html() {\r\n var b = buildDom;\r\n var id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('cbDragTextDialog smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'checkbox').classes('toggleTextEdit')\r\n .attr('id', id + '-input').append(\r\n b('span').classes('icon icon-move'))\r\n .append(\r\n b('label').attr('for', id + '-input').text(this.label)));\r\n return r;\r\n }\r\n show(){}\r\n hide(){}\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n stopEditSession() {\r\n $('body').removeClass('text-move');\r\n $(this._getInputElement()).find('span.icon').removeClass('icon-checkmark').addClass('icon-move');\r\n if (this.session && this.session.dragging) {\r\n this.session.dragging = false;\r\n this.session.endDrag();\r\n }\r\n if (this.session) {\r\n this.session.unrender();\r\n }\r\n this.handleChanged();\r\n this.running = false;\r\n }\r\n startEditSession() {\r\n $('body').addClass('text-move');\r\n this.session = new SuiDragSession({\r\n textGroup: (this.dialog as any).modifier,\r\n context: this.view.renderer.pageMap,\r\n scroller: this.view.tracker.scroller\r\n });\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n $(this._getInputElement()).find('span.icon').removeClass('icon-enlarge').addClass('icon-checkmark');\r\n this.running = true;\r\n }\r\n mouseMove(e: any) {\r\n if (this.session && this.session.dragging) {\r\n this.session.mouseMove(e);\r\n }\r\n }\r\n mouseDown(e: any) {\r\n if (this.session && !this.session.dragging) {\r\n this.session.startDrag(e);\r\n this.dragging = true;\r\n }\r\n }\r\n mouseUp(e: any) {\r\n if (this.session && this.session.dragging) {\r\n this.session.endDrag();\r\n this.dragging = false;\r\n }\r\n }\r\n\r\n bind() {\r\n const self = this;\r\n $(this._getInputElement()).off('click').on('click', () => {\r\n if (self.running) {\r\n self.stopEditSession();\r\n } else {\r\n self.startEditSession();\r\n }\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * Classes to support dropdown compontents\r\n * @module /ui/dialogs/components/dropdown\r\n */\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent, DialogDefinitionOption } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * constructor params for {@link SuiDropdownComponent}\r\n * @param id id in DOM\r\n * @param classes\r\n * @param type indicates the data type of the value\r\n * @param increment not used\r\n * @param label\r\n * @param smoName variable name in dialog/adapter\r\n * @param control name of constructor\r\n * @param disabledOption\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDropdownComponentParams {\r\n id: string,\r\n classes: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n dataType?: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\n/**\r\n * single-select dropdown list\r\n * @category SuiDialog\r\n */\r\nexport class SuiDropdownComponent extends SuiComponentBase {\r\n options: DialogDefinitionOption[];\r\n disabledOption: string;\r\n dataType: string;\r\n value: string = '';\r\n \r\n optionIds: string[] = [];\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiDropdownComponentParams) {\r\n super(dialog, parameter);\r\n this.options = parameter.options!;\r\n this.disabledOption = parameter.disabledOption ?? '';\r\n this.dataType = parameter.dataType ?? 'string';\r\n }\r\n checkDefault(s: any, b: any) {\r\n if (this.disabledOption.length) {\r\n s.prop('required', true).append(b('option').attr('selected', 'selected').prop('disabled', true).text(this.disabledOption));\r\n }\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.id;\r\n const label = this.value.length > 0 ? this.value : this.label;\r\n this.optionIds = [];\r\n const menuId = `${id}-menu`;\r\n const r = b('div').classes(this.makeClasses('dropdownControl smoControl')).attr('id', id).attr('data-param', this.smoName)\r\n .append(b('button').classes('btn dropdown-toggle btn-primary').text(label));\r\n const s = b('ul').attr('role', 'menu').classes('dropdown-menu rounded-3 shadow w-220px').attr('id', menuId);\r\n this.checkDefault(s, b);\r\n this.options.forEach((option, ix) => {\r\n const optionId = `${this.parameterId}-${ix}`;\r\n s.append(\r\n b('li').attr('id', optionId).attr('role','presentation').\r\n append(b('a').attr('role', 'menuItem').attr('href', '#').attr('data-value', option.value.toString())\r\n .classes('dropdown-item').text(option.label)));\r\n });\r\n r.append(s).append(\r\n b('label').attr('for', menuId).text(this.label));\r\n return r;\r\n }\r\n updateControls() {\r\n const updateEl = this._getInputElement();\r\n $(updateEl).html('');\r\n $(updateEl).append(this.html.dom());\r\n this.bind();\r\n }\r\n unselect() {\r\n $(this._getInputElement())[0].selectedIndex = -1;\r\n $(this._getInputElement()).blur();\r\n }\r\n\r\n _getInputElement() {\r\n var pid = this.id;\r\n return $(this.dialog.dgDom.element).find('#' + pid);\r\n }\r\n getValue(): string | number {\r\n let val: string | number = this.value;\r\n if (['int', 'float'].indexOf(this.dataType) >= 0) {\r\n val = (this.dataType.toLowerCase() === 'int') ? parseInt(val, 10) : val;\r\n val = (this.dataType.toLowerCase() === 'float') ? parseFloat(val as string) : val;\r\n if (isNaN(val as number)) {\r\n val = -1;\r\n }\r\n }\r\n return val;\r\n }\r\n getValueLabel() {\r\n let label = this.value;\r\n const selection = this.options.find((ff) => ff.value.toString() === this.value.toString());\r\n if (selection) {\r\n label = selection.label;\r\n }\r\n return label;\r\n }\r\n setValue(value: string | number) {\r\n this.value = value.toString();\r\n if (this.value.length) {\r\n $(this._getInputElement()).find('button.dropdown-toggle').text(this.getValueLabel());\r\n }\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n $(input).find('button.dropdown-toggle').off('click').on('click', () => {\r\n $(input).find('ul.dropdown-menu').toggleClass('show');\r\n });\r\n $(input).find('ul li a.dropdown-item').off('click').on('click',\r\n (elem: any) => {\r\n this.value = $(elem.target).attr('data-value');\r\n $(input).find('ul.dropdown-menu').removeClass('show');\r\n if (this.value.length) {\r\n $(this._getInputElement()).find('button.dropdown-toggle').text(this.getValueLabel());\r\n } \r\n this.handleChanged();\r\n });\r\n }\r\n}\r\n/**\r\n * constructor params for {@link SuiDropdownComposite}\r\n * element, often a checkbox\r\n * @param {id} - unique ID for the control DOM\r\n * @param {classes} - additional classes for styling added to DOM\r\n * @param {label} - default label for the component\r\n * @param {smoName} - the variable in the dialog that the componenet maps to\r\n * @param {control} - the constructor of the UI control\r\n * @param {parentComponent} - for composite components, the top-level\r\n * @category SuiDialogParams\r\n * */\r\nexport interface SuiDropdownCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n dataType?: string,\r\n options?: DialogDefinitionOption[],\r\n parentControl: SuiComponentParent\r\n}\r\n/**\r\n * A dropdown composite mixes a dropdown with some other \r\n * @category SuiDialog\r\n */\r\nexport class SuiDropdownComposite extends SuiDropdownComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiDropdownCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\nimport { SuiFileInput } from '../../fileio/fileInput';\r\ndeclare var $: any;\r\nexport interface SuiFileDownloadComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n// ## SuiFileDownloadComponent\r\n// Download a test file using the file input.\r\nexport class SuiFileDownloadComponent extends SuiComponentBase {\r\n defaultValue: string;\r\n value: any = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiFileDownloadComponentParams) {\r\n super(dialog, parameter);\r\n this.defaultValue = parameter.defaultValue ?? '';\r\n this.dialog = dialog;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('select-file')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'file').classes('file-button')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n async _handleUploadedFiles(evt: any) {\r\n const localFile = new SuiFileInput(evt);\r\n await localFile.loadAsync();\r\n this.value = localFile.value;\r\n this.handleChanged();\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(value: any) {\r\n this.value = value;\r\n }\r\n bind() {\r\n const self = this;\r\n $('#' + this.parameterId).find('input').off('change').on('change', async (e: any) => {\r\n await self._handleUploadedFiles(e);\r\n });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\nimport { SuiDropdownComposite } from './dropdown';\r\nimport { SuiRockerComposite } from './rocker';\r\nimport { SuiToggleComposite } from './toggle';\r\nimport { SmoScoreText } from '../../../smo/data/scoreText';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SourceSerifProFont } from '../../../styles/font_metrics/ssp-serif-metrics';\r\nimport { SourceSansProFont } from '../../../styles/font_metrics/ssp-sans-metrics';\r\nimport { FontInfo } from '../../../common/vex';\r\ndeclare var $: any;\r\n\r\nexport interface SuiFontComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n// ## SuiFontComponent\r\n// Dialog component that lets user choose and customize fonts.\r\nexport class SuiFontComponent extends SuiComponentBase {\r\n familyPart: SuiDropdownComposite;\r\n sizePart: SuiRockerComposite;\r\n italicsCtrl: SuiToggleComposite;\r\n boldCtrl: SuiToggleComposite;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiFontComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n const familyId = this.id + 'fontFamily';\r\n const sizeId = this.id + 'fontSize';\r\n\r\n this.familyPart = new SuiDropdownComposite(this.dialog,\r\n {\r\n id: familyId,\r\n smoName: 'fontFamily',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Font Family',\r\n parentControl: this,\r\n options: [\r\n { label: 'Arial', value: 'Arial' },\r\n { label: 'Times New Roman', value: 'Times New Roman' },\r\n { label: 'Serif', value: SourceSerifProFont.fontFamily },\r\n { label: 'Sans', value: SourceSansProFont.fontFamily },\r\n { label: 'Roboto Slab', value: 'Roboto Slab' },\r\n { label: 'Petaluma', value: 'Petaluma Script' },\r\n { label: 'Commissioner', value: 'Commissioner' },\r\n { label: 'Concert One', value: 'ConcertOne' },\r\n { label: 'Merriweather', value: 'Merriweather' }\r\n ]\r\n });\r\n this.sizePart = new SuiRockerComposite(\r\n this.dialog,\r\n {\r\n id: sizeId,\r\n smoName: 'fontSize',\r\n defaultValue: 1,\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Font Size',\r\n dataType: 'float',\r\n increment: 0.1\r\n },\r\n );\r\n this.italicsCtrl = new SuiToggleComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'italic',\r\n smoName: 'italic',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Italics'\r\n }\r\n );\r\n this.boldCtrl = new SuiToggleComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'bold',\r\n smoName: 'bold',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Bold'\r\n }\r\n );\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl')).attr('id', this.id);\r\n if (this.label) {\r\n q.append(b('h3').classes('font-purpose').text(this.label));\r\n }\r\n q.append(this.familyPart.html);\r\n q.append(this.sizePart.html);\r\n q.append(this.boldCtrl.html);\r\n q.append(this.italicsCtrl.html);\r\n\r\n return q;\r\n }\r\n\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('select');\r\n }\r\n getValue(): FontInfo {\r\n return {\r\n family: this.familyPart.getValue().toString(),\r\n size: this.sizePart.getValue(),\r\n weight: this.boldCtrl.getValue() ? 'bold' : 'normal',\r\n style: this.italicsCtrl.getValue() ? 'italic' : 'normal'\r\n };\r\n }\r\n setValue(value: FontInfo) {\r\n let italics = false;\r\n // upconvert font size, all font sizes now in points.\r\n if (typeof(value.size) !== 'number') {\r\n value.size = SmoScoreText.fontPointSize(value.size);\r\n }\r\n if (value.style && value.style === 'italic') {\r\n italics = true;\r\n }\r\n const boldString = SmoScoreText.weightString(value.weight);\r\n const bold = boldString === 'bold';\r\n this.boldCtrl.setValue(bold);\r\n this.italicsCtrl.setValue(italics);\r\n this.familyPart.setValue(value.family ?? 'Arial');\r\n this.sizePart.setValue(value.size);\r\n }\r\n\r\n bind() {\r\n this.familyPart.bind();\r\n this.sizePart.bind();\r\n this.boldCtrl.bind();\r\n this.italicsCtrl.bind();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiLyricSession, SuiChordSession } from '../../../render/sui/textEdit';\r\nimport { SuiInlineText } from '../../../render/sui/textRender';\r\nimport { KeyEvent } from '../../../smo/data/common';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SmoSelection, SmoSelector } from '../../../smo/xform/selections';\r\nimport { BrowserEventSource } from '../../eventSource';\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { SmoLyric } from '../../../smo/data/noteModifiers';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * This has the text editing dialog components for notes, such as lyrics. \r\n * Unlike components that are\r\n * actual dialog controls, these actually run a text editing session of some kind.\r\n * \r\n * \r\n *\r\n*\r\n* The heirarchy of text editing objects goes:\r\n* dialog -> component -> session -> editor\r\n*\r\n* ### editor\r\n* handles low-level events and renders the preview using one\r\n* of the text layout objects.\r\n*\r\n* ### session\r\n* creates and destroys editors, e.g. for lyrics that have a Different\r\n* editor instance for each note.\r\n*\r\n* ### component\r\n* is defined in the dialog, and creates/destroys the session based on input from\r\n* the dialog\r\n*\r\n* ### dialog\r\n* manages the coponent session, as well as other components of the text like font etc.\r\n */\r\n\r\n\r\nexport interface SuiNoteTextParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n verse?: number\r\n}\r\n/**\r\n * Base class for text editor components that navigate to\r\n * different notes.\r\n * */\r\nexport abstract class SuiNoteTextComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n selection: SmoSelection;\r\n selector: SmoSelector;\r\n eventSource: BrowserEventSource;\r\n session: SuiLyricSession | null = null;\r\n value: SmoLyric | null = null;\r\n started: boolean = false;\r\n staticText: Record;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.view = this.dialog.getView();\r\n this.eventSource = this.dialog.getEventSource();\r\n this.selection = this.view.tracker.selections[0];\r\n this.selector = JSON.parse(JSON.stringify(this.selection.selector));\r\n this.staticText = this.dialog.getStaticText();\r\n }\r\n abstract startEditSession(): void;\r\n abstract endSession(): void;\r\n mouseMove(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n show() {}\r\n hide() {}\r\n\r\n mouseClick(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n get running() {\r\n return this.session && this.session.isRunning;\r\n }\r\n async evKey(evdata: KeyEvent): Promise {\r\n if (this.session) {\r\n return await this.session.evKey(evdata);\r\n }\r\n return false;\r\n }\r\n setDialogLyric() {\r\n if (this.session && this.session.lyric) {\r\n (this.dialog as any).setLyric(this.selector, this.session.lyric);\r\n }\r\n }\r\n\r\n async moveSelectionRight() {\r\n if (this.session) {\r\n await this.session.advanceSelection(false);\r\n this.setDialogLyric();\r\n }\r\n }\r\n async moveSelectionLeft() {\r\n if (this.session) {\r\n this.session.advanceSelection(true);\r\n this.setDialogLyric();\r\n }\r\n }\r\n async removeText() {\r\n if (this.session) {\r\n await this.session.removeLyric();\r\n }\r\n }\r\n\r\n async _bind() {\r\n $(this._getInputElement()).off('click').on('click', async () => {\r\n if (this.session && this.session.isRunning) {\r\n this.endSession();\r\n } else {\r\n this.startEditSession();\r\n }\r\n });\r\n $('#' + this.parameterId + '-left').off('click').on('click', async () => {\r\n await this.moveSelectionLeft();\r\n });\r\n $('#' + this.parameterId + '-right').off('click').on('click', async () => {\r\n await this.moveSelectionRight();\r\n });\r\n $('#' + this.parameterId + '-remove').off('click').on('click', async () => {\r\n await this.removeText();\r\n });\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n}\r\n\r\n/** \r\n * manage a lyric session that moves from note to note and adds lyrics.\r\n * @category SuiDialog\r\n**/\r\nexport class SuiLyricComponent extends SuiNoteTextComponent {\r\n altLabel: string;\r\n verse: number;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.altLabel = this.staticText.doneEditing;\r\n this.started = false;\r\n this.verse = parameter.verse ?? 0;\r\n }\r\n get html() {\r\n var b = buildDom;\r\n var id = this.parameterId;\r\n var r = b('div').classes(this.makeClasses('cbLyricEdit smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('div').classes('toggleEdit')\r\n .append(b('button').classes('toggleTextEdit')\r\n .attr('id', id + '-toggleInput').append(\r\n b('span').classes('icon icon-pencil'))).append(\r\n b('label').attr('for', id + '-toggleInput').text(this.label)))\r\n .append(b('div').classes('show-when-editing')\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-left').classes('icon-arrow-left buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-right').classes('icon-arrow-right buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-remove').classes('icon-cross buttonComponent')))\r\n );\r\n return r;\r\n }\r\n\r\n async endSession() {\r\n this.started = false;\r\n console.log('ending text session');\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n if (this.session) {\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n }\r\n\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n console.log('starting text session');\r\n if (this.started) {\r\n return;\r\n }\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiLyricSession({\r\n renderer: this.view.renderer,\r\n selector: this.selector,\r\n scroller: this.view.tracker.scroller,\r\n verse: this.verse,\r\n score: this.view.score,\r\n view: this.view\r\n }\r\n );\r\n this.started = true;\r\n $('body').addClass('text-edit');\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n this.session.startSession();\r\n this.setDialogLyric();\r\n }\r\n\r\n bind() {\r\n this._bind();\r\n }\r\n}\r\n\r\n// ## SuiChordComponent\r\n// manage a chord editing session that moves from note to note and adds chord symbols.\r\nexport class SuiChordComponent extends SuiNoteTextComponent {\r\n altLabel: string;\r\n verse: number;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiNoteTextParams) {\r\n super(dialog, parameter);\r\n this.session = null;\r\n this.dialog = dialog;\r\n this.selection = this.view.tracker.selections[0];\r\n this.selector = JSON.parse(JSON.stringify(this.selection.selector));\r\n this.altLabel = this.staticText.doneEditing;\r\n this.verse = 0;\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('cbChordEdit smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('div').classes('toggleEdit')\r\n .append(b('button').classes('toggleTextEdit')\r\n .attr('id', id + '-toggleInput').append(\r\n b('span').classes('icon icon-pencil'))).append(\r\n b('label').attr('for', id + '-toggleInput').text(this.label)))\r\n\r\n .append(b('div').classes('show-when-editing')\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-left').classes('icon-arrow-left buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-right').classes('icon-arrow-right buttonComponent')))\r\n .append(b('span')\r\n .append(\r\n b('button').attr('id', id + '-remove').classes('icon-cross buttonComponent')))\r\n );\r\n return r;\r\n }\r\n\r\n endSession() {\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n\r\n if (this.session) {\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n }\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiChordSession({\r\n renderer: this.view.renderer,\r\n selector: this.selector,\r\n scroller: this.view.tracker.scroller,\r\n verse: 0,\r\n view: this.view,\r\n score: this.view.score\r\n }\r\n );\r\n $('body').addClass('text-edit');\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n this.session.startSession();\r\n this.setDialogLyric();\r\n }\r\n bind() {\r\n this._bind();\r\n }\r\n setTextType(type: string | number) {\r\n if (this.session) {\r\n this.session.textType = parseInt(type.toString(), 10);\r\n }\r\n }\r\n getTextType() {\r\n if (this.session) {\r\n return this.session.textType;\r\n }\r\n return SuiInlineText.textTypes.normal;\r\n }\r\n}\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent, SuiBaseComponentParams } from '../components/baseComponent';\r\nimport { Pitch, PitchLetter } from '../../../smo/data/common';\r\nimport { SmoMusic } from '../../../smo/data/music';\r\nimport { DomBuilder, buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SuiDropdownComposite } from './dropdown';\r\nimport { SuiRockerComposite } from './rocker';\r\nimport { SuiButtonComposite } from './button';\r\nimport { SmoTabStave } from '../../../smo/data/staffModifiers';\r\ndeclare var $: any;\r\nexport interface SuiPitchComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n\r\nexport class SuiPitchComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n staticText: Record;\r\n letterCtrl: SuiDropdownComposite;\r\n accidentalCtrl: SuiDropdownComposite;\r\n octaveCtrl: SuiRockerComposite;\r\n defaultValue: Pitch;\r\n\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.view = this.dialog.getView();\r\n this.defaultValue = { letter: 'c', accidental: 'n', octave: 4 };\r\n const letterName = this.smoName + 'Letter';\r\n const accidentalName = this.smoName + 'Accidental';\r\n const octaveName = this.smoName + 'Octave';\r\n this.staticText = this.dialog.getStaticText();\r\n this.letterCtrl = new SuiDropdownComposite(this.dialog, {\r\n smoName: letterName,\r\n control: 'SuiDropdownComposite',\r\n label: ' ',\r\n parentControl: this,\r\n classes: '',\r\n id: letterName,\r\n options: [\r\n { value: 'a', label: 'A' },\r\n { value: 'b', label: 'B' },\r\n { value: 'c', label: 'C' },\r\n { value: 'd', label: 'D' },\r\n { value: 'e', label: 'E' },\r\n { value: 'f', label: 'F' },\r\n { value: 'g', label: 'G' }\r\n ]\r\n });\r\n\r\n this.accidentalCtrl = new SuiDropdownComposite(this.dialog, {\r\n smoName: accidentalName,\r\n control: 'SuiDropdownComposite',\r\n label: ' ',\r\n parentControl: this,\r\n classes: '',\r\n id: accidentalName,\r\n options: [\r\n { value: 'n', label: '' },\r\n { value: 'n', label: '#' },\r\n { value: 'n', label: 'b' },\r\n ]\r\n });\r\n this.octaveCtrl = new SuiRockerComposite(this.dialog, {\r\n id: octaveName,\r\n classes: '',\r\n dataType: 'int',\r\n increment: 1,\r\n defaultValue: 4,\r\n label: 'Octave',\r\n smoName: octaveName,\r\n control: 'SuiRockerComposite',\r\n parentControl: this\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl pitchContainer'))\r\n .attr('id', this.parameterId);\r\n q.append(this.letterCtrl.html);\r\n q.append(this.accidentalCtrl.html);\r\n q.append(this.octaveCtrl.html);\r\n return q;\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n getValue(): Pitch {\r\n return {\r\n letter: this.letterCtrl.getValue() as PitchLetter,\r\n accidental: this.accidentalCtrl.getValue().toString(),\r\n octave: this.octaveCtrl.getValue()\r\n };\r\n }\r\n setValue(val: Pitch) {\r\n this.letterCtrl.setValue(val.letter);\r\n this.accidentalCtrl.setValue(val.accidental);\r\n this.octaveCtrl.setValue(val.octave);\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n bind() {\r\n this.letterCtrl.bind();\r\n this.accidentalCtrl.bind();\r\n this.octaveCtrl.bind();\r\n }\r\n}\r\nexport interface SuiPitchCompositeParams extends SuiPitchComponentParams {\r\n parentControl: SuiComponentParent\r\n}\r\nexport class SuiPitchComposite extends SuiPitchComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiPitchCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\nexport interface SuiPitchArrayItem {\r\n buttonCtrl: SuiButtonComposite,\r\n pitchCtrl: SuiPitchComposite,\r\n pitch: Pitch\r\n}\r\nexport interface SuiPitchArrayParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n pitches?: Pitch[]\r\n}\r\n\r\n// this allows us to use the pitch array for different purposes, to support reset\r\nexport type getDefaultPitchesFcn = () => Pitch[];\r\nexport const getTabNotePitchesFcn: getDefaultPitchesFcn = () => { return SmoTabStave.defaultStringPitches };\r\n\r\nexport class SuiPitchArrayComponent extends SuiComponentParent {\r\n getButtonControlName(index: number) {\r\n return `${this.id}-delButton-${index}`;\r\n }\r\n getPitchControlName(index: number) {\r\n return `${this.id}-pitchCtrl-${index}`;\r\n }\r\n resetButton: SuiButtonComposite;\r\n pitchControls: SuiPitchArrayItem[] = [];\r\n pitches: Pitch[];\r\n createdShell: boolean = false;\r\n defaultPitchFinder: getDefaultPitchesFcn;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiBaseComponentParams, def: getDefaultPitchesFcn) {\r\n super(dialog, parameters);\r\n this.defaultPitchFinder = def;\r\n this.pitches = this.defaultPitchFinder();\r\n this.setPitchControls(); \r\n this.resetButton = new SuiButtonComposite(this.dialog, {\r\n id: `${this.id}-resetButton`,\r\n classes: '',\r\n label: 'Reset Pitches',\r\n smoName: `${this.id}-resetButton`,\r\n control: 'SuiButtonComposite',\r\n icon: 'icon-cross',\r\n parentControl: this\r\n });\r\n }\r\n setPitchControls() {\r\n this.pitchControls = [];\r\n for (var i = 0; i < this.pitches.length; ++i) {\r\n const pitch = this.pitches[i];\r\n const buttonControlName = this.getButtonControlName(i);\r\n const pitchControlName = this.getPitchControlName(i);\r\n const buttonCtrl: SuiButtonComposite = new SuiButtonComposite(this.dialog, {\r\n id: buttonControlName,\r\n classes: '',\r\n label: 'Delete',\r\n smoName: buttonControlName,\r\n control: 'SuiButtonComposite',\r\n icon: 'icon-cross',\r\n parentControl: this\r\n });\r\n const pitchCtrl: SuiPitchComposite = new SuiPitchComposite(this.dialog, {\r\n id: pitchControlName,\r\n classes: '',\r\n label: ' ',\r\n smoName: pitchControlName,\r\n control: 'SuiPitchComposite',\r\n parentControl: this\r\n });\r\n this.pitchControls.push({\r\n buttonCtrl, pitchCtrl, pitch\r\n });\r\n }\r\n }\r\n bind() {\r\n this.resetButton.bind();\r\n this.pitchControls.forEach((pc) => {\r\n pc.buttonCtrl.bind();\r\n pc.pitchCtrl.bind();\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n if (!this.createdShell) {\r\n // First time, create shell for component.\r\n this.createdShell = true; \r\n const q = b('div').classes(this.makeClasses('multiControl smoControl pitch-array-parent')).\r\n attr('id', this.parameterId);\r\n return q;\r\n } \r\n const q = b('div').classes('pitch-array-container').append(b('div').append(this.resetButton.html));\r\n this.pitchControls.forEach((row) => {\r\n q.append(b('div').classes('pitch-array-item').append(row.buttonCtrl.html).append(row.pitchCtrl.html));\r\n });\r\n return q;\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n setValue(pitches: Pitch[]) {\r\n this.pitches = pitches;\r\n this.setPitchControls();\r\n this.updateControls();\r\n for (var i = 0; i < this.pitchControls.length; ++i) {\r\n const pc = this.pitchControls[i];\r\n pc.pitchCtrl.setValue(pitches[i]);\r\n }\r\n }\r\n getValue() {\r\n const rv: Pitch[] = [];\r\n for (var i = 0; i < this.pitchControls.length; ++i) {\r\n const pc = this.pitchControls[i];\r\n rv.push(pc.pitchCtrl.getValue());\r\n }\r\n return rv;\r\n }\r\n updateControls() {\r\n const updateEl = this.getInputElement();\r\n $(updateEl).html('');\r\n $(updateEl).append(this.html.dom());\r\n $(updateEl).find('input').prop('disabled', false);\r\n $(updateEl).find('.toggle-disabled input').prop('checked', true);\r\n $(updateEl).find('.toggle-remove-row input').prop('checked', true);\r\n $(updateEl).find('.toggle-add-row input').prop('checked', false);\r\n $(updateEl).find('.toggle-disabled input').prop('disabled', true);\r\n this.bind();\r\n }\r\n changed() {\r\n let removed = false;\r\n const pitches: Pitch[] = [];\r\n this.pitchControls.forEach((pc) => {\r\n if (pc.buttonCtrl.changeFlag) {\r\n removed = true;\r\n } else {\r\n pitches.push(pc.pitchCtrl.getValue());\r\n }\r\n }); \r\n if (removed && this.pitchControls.length < 2) {\r\n return; // don't let user delete all the strings\r\n }\r\n // If the user asked to reset, update the pitches to default\r\n // then reset.\r\n if (this.resetButton.changeFlag) {\r\n this.pitches = this.defaultPitchFinder();\r\n this.pitches.sort((a, b) => SmoMusic.smoPitchToInt(a) > SmoMusic.smoPitchToInt(b) ? -1 : 1);\r\n } else {\r\n this.pitches = pitches;\r\n }\r\n this.setValue(this.pitches);\r\n this.handleChanged();\r\n }\r\n}\r\nexport class SuiPitchArrayComponentTab extends SuiPitchArrayComponent {\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiBaseComponentParams, def: getDefaultPitchesFcn) {\r\n super(dialog, parameters, getTabNotePitchesFcn);\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n/**\r\n * @module /ui/dialog/components/rocker\r\n * **/\r\n import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\n\r\ndeclare var $: any;\r\n\r\n/**\r\n * Basic dialog component info.\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiRockerComponentParams {\r\n id: string,\r\n classes: string,\r\n dataType?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n\r\n/**\r\n * A numeric input box with +- buttons. Adjustable type and scale\r\n * */\r\nexport class SuiRockerComponent extends SuiComponentBase {\r\n static get dataTypes() {\r\n return ['int', 'float', 'percent'];\r\n }\r\n static get increments(): Record {\r\n return { 'int': 1, 'float': 0.1, 'percent': 10 };\r\n }\r\n static get parsers(): Record {\r\n return { 'int': '_getIntValue', 'float': '_getFloatValue', 'percent': '_getPercentValue' };\r\n }\r\n initialValue: number = 0;\r\n dataType: string;\r\n increment: number = 1;\r\n parser: string;\r\n constructor(dialog: SuiDialogNotifier, params: SuiRockerComponentParams) {\r\n super(dialog, params);\r\n this.dataType = params.dataType ?? 'int';\r\n this.increment = params.increment ?? SuiRockerComponent.increments[this.dataType];\r\n if (SuiRockerComponent.dataTypes.indexOf(this.dataType) < 0) {\r\n throw new Error('dialog element invalid type ' + this.dataType);\r\n }\r\n if (this.dataType === 'int' && this.increment < 1) {\r\n throw new Error('int component with decimal increment');\r\n }\r\n this.parser = SuiRockerComponent.parsers[this.dataType];\r\n this.dialog = dialog;\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('rockerControl smoControl')).attr('id', id).attr('data-param', this.smoName)\r\n .append(\r\n b('button').classes('increment').append(\r\n b('span').classes('icon icon-circle-up'))).append(\r\n b('button').classes('decrement').append(\r\n b('span').classes('icon icon-circle-down'))).append(\r\n b('input').attr('type', 'text').classes('rockerInput')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n\r\n get parameterId() {\r\n return this.id;\r\n }\r\n handleChange() {\r\n this.changeFlag = true;\r\n this.dialog.changed();\r\n this.changeFlag = false;\r\n }\r\n\r\n bind() {\r\n const pid = this.parameterId;\r\n const input = this._getInputElement();\r\n let val = 0;\r\n $('#' + pid).find('button.increment').off('click').on('click',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (this.dataType === 'percent') {\r\n val = 100 * val;\r\n }\r\n $(input).val(val + this.increment);\r\n this.handleChanged();\r\n }\r\n );\r\n $('#' + pid).find('button.decrement').off('click').on('click',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (this.dataType === 'percent') {\r\n val = 100 * val;\r\n }\r\n $(input).val(val - this.increment);\r\n this.handleChanged();\r\n }\r\n );\r\n $(input).off('blur').on('blur',\r\n () => {\r\n val = (this as any)[this.parser]();\r\n if (val !== this.initialValue) {\r\n this.initialValue = val;\r\n this.handleChanged();\r\n }\r\n }\r\n );\r\n }\r\n\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n _getIntValue() {\r\n let val:number = parseInt(this._getInputElement().val(), 10);\r\n val = isNaN(val) ? 0 : val;\r\n return val;\r\n }\r\n _getFloatValue() {\r\n let val = parseFloat(this._getInputElement().val());\r\n val = isNaN(val) ? 1.0 : val;\r\n return val;\r\n }\r\n _getPercentValue() {\r\n let val = parseFloat(this._getInputElement().val());\r\n val = isNaN(val) ? 1 : val;\r\n return val / 100;\r\n }\r\n _setIntValue(val: string | number) {\r\n this._getInputElement().val(val);\r\n }\r\n setValue(value: number) {\r\n if (this.dataType === 'percent') {\r\n value = value * 100;\r\n }\r\n this._setIntValue(value);\r\n this.initialValue = value;\r\n }\r\n getValue() {\r\n return (this as any)[this.parser]();\r\n }\r\n}\r\n/**\r\n * Create rocker composite\r\n * @param{id}\r\n */\r\nexport interface SuiRockerCompositeParams {\r\n id: string,\r\n classes: string,\r\n dataType?: string,\r\n increment?: number,\r\n defaultValue: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n parentControl: SuiComponentParent\r\n}\r\nexport class SuiRockerComposite extends SuiRockerComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiRockerCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { SuiToggleCompositeParams, SuiToggleComposite } from './toggle';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SmoSystemGroup } from '../../../smo/data/scoreModifiers';\r\ndeclare var $: any;\r\nexport interface StaffAddControlRow {\r\n showCtrl: SuiToggleComposite\r\n}\r\nexport interface StaffAddRemoveComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport class StaffAddRemoveComponent extends SuiComponentBase {\r\n staffRows: StaffAddControlRow[] = [];\r\n view: SuiScoreViewOperations;\r\n createdShell: boolean = false;\r\n staticText: Record;\r\n modifier: SmoSystemGroup | null = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: StaffAddRemoveComponentParams) {\r\n super(dialog, parameter);\r\n this.view = this.dialog.getView();\r\n this.staticText = dialog.getStaticText();\r\n this.label = this.staticText['includeStaff'];\r\n }\r\n setControlRows() {\r\n const mod = this.modifier!;\r\n let i = mod.startSelector.staff;\r\n this.staffRows = [];\r\n this.view.storeScore.staves.forEach((staff) => {\r\n const name = this.label + ' ' + (staff.staffId + 1);\r\n const id = 'show-' + i;\r\n const elementParams: SuiToggleCompositeParams = {\r\n smoName: id,\r\n classes: 'toggle-add-row',\r\n control: 'SuiToggleComponent',\r\n label: name,\r\n parentControl: this,\r\n id: id\r\n } \r\n // Toggle add of last row + 1\r\n if (staff.staffId === mod.endSelector.staff + 1) {\r\n\r\n const rowElement = new SuiToggleComposite(this.dialog, elementParams);\r\n rowElement.parentControl = this;\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n } else if (staff.staffId > mod.startSelector.staff &&\r\n staff.staffId === mod.endSelector.staff) {\r\n elementParams.classes = 'toggle-remove-row';\r\n // toggle remove of ultimate row, other than first row\r\n const rowElement = new SuiToggleComposite(this.dialog, elementParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n } else if ((staff.staffId <= mod.endSelector.staff) &&\r\n (staff.staffId >= mod.startSelector.staff)) {\r\n // toggle remove of ultimate row, other than first row\r\n elementParams.classes = 'toggle-disabled';\r\n const rowElement = new SuiToggleComposite(this.dialog,elementParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n }\r\n i += 1;\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n // a little hacky. The first time we create an empty html shell for the control\r\n // subsequent times, we fill the html with the row information\r\n if (!this.createdShell) {\r\n this.createdShell = true;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl staffContainer')).attr('id', this.parameterId);\r\n return q;\r\n } else {\r\n const q = b('div').classes(this.makeClasses('smoControl'));\r\n this.staffRows.forEach((row) => {\r\n q.append(row.showCtrl.html);\r\n });\r\n return q;\r\n }\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n getValue() {\r\n if (!this.modifier) {\r\n throw 'No staff groups set for staff group component';\r\n }\r\n const mod = this.modifier;\r\n let nextStaff = mod.startSelector.staff;\r\n const maxMeasure = mod.endSelector.measure;\r\n mod.endSelector = JSON.parse(JSON.stringify(mod.startSelector));\r\n this.staffRows.forEach((staffRow) => {\r\n if (staffRow.showCtrl.getValue()) {\r\n mod.endSelector = { staff: nextStaff, measure: maxMeasure, voice: 0, tick: 0, pitches: [] };\r\n nextStaff += 1;\r\n }\r\n });\r\n return this.modifier;\r\n }\r\n setValue(staffGroup: SmoSystemGroup) {\r\n this.modifier = staffGroup;\r\n this.updateGroupMembership();\r\n }\r\n changed() {\r\n this.getValue(); // update modifier\r\n this.handleChanged();\r\n this.updateGroupMembership();\r\n }\r\n bind() {\r\n if (!this.modifier) {\r\n return;\r\n }\r\n // Can't bind before initial set of modifier\r\n this.staffRows.forEach((row) => {\r\n row.showCtrl.bind();\r\n });\r\n }\r\n updateGroupMembership() {\r\n const updateEl = this.getInputElement();\r\n this.setControlRows();\r\n $(updateEl).html('');\r\n $(updateEl).append(this.html.dom());\r\n $(updateEl).find('input').prop('disabled', false);\r\n $(updateEl).find('.toggle-disabled input').prop('checked', true);\r\n $(updateEl).find('.toggle-remove-row input').prop('checked', true);\r\n $(updateEl).find('.toggle-add-row input').prop('checked', false);\r\n $(updateEl).find('.toggle-disabled input').prop('disabled', true);\r\n this.bind();\r\n }\r\n}\r\nexport interface StaffCheckComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface StaffCheckControlRow {\r\n showCtrl: SuiToggleComposite\r\n}\r\nexport interface StaffCheckValue {\r\n show: boolean;\r\n}\r\nexport class StaffCheckComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n staffRows: StaffCheckControlRow[];\r\n constructor(dialog: SuiDialogNotifier, parameter: StaffCheckComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.view = this.dialog.getView();\r\n this.staffRows = [];\r\n let previousStaff: string | null = null;\r\n this.view.storeScore.staves.forEach((staff) => {\r\n ;\r\n let name = 'View ' + staff.partInfo.partName;\r\n if (staff.partInfo.stavesBefore > 0 && previousStaff) {\r\n name = previousStaff + ' (2)';\r\n }\r\n previousStaff = name;\r\n const id = 'show-' + staff.staffId;\r\n const toggleParams: SuiToggleCompositeParams = {\r\n smoName: id,\r\n classes: 'hide-when-editing',\r\n control: 'SuiToggleComponent',\r\n label: name,\r\n id: id,\r\n parentControl: this\r\n }\r\n const rowElement = new SuiToggleComposite(this.dialog, toggleParams);\r\n this.staffRows.push({\r\n showCtrl: rowElement\r\n });\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl staffContainer'));\r\n this.staffRows.forEach((row) => {\r\n q.append(row.showCtrl.html);\r\n });\r\n return q;\r\n }\r\n // Is this used for compound controls?\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('.staffContainer');\r\n }\r\n /* export interface StaffCheckValue {\r\n show: boolean;\r\n}*/\r\n getValue(): StaffCheckValue[] {\r\n const rv = [];\r\n let i = 0;\r\n for (i = 0; i < this.staffRows.length; ++i) {\r\n const show = this.staffRows[i].showCtrl.getValue();\r\n rv.push({ show });\r\n }\r\n return rv;\r\n }\r\n setValue(rows: StaffCheckValue[]) {\r\n let i = 0;\r\n rows.forEach((row) => {\r\n this.staffRows[i].showCtrl.setValue(row.show);\r\n i += 1;\r\n });\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n bind() {\r\n this.staffRows.forEach((row) => {\r\n row.showCtrl.bind();\r\n });\r\n }\r\n}\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from '../components/baseComponent';\r\nimport { SuiToggleComposite } from '../components/toggle';\r\nimport { SuiTextInputComposite } from '../components/textInput';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\ndeclare var $: any;\r\nexport interface TextCheckComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface TextCheckPair {\r\n checked: boolean,\r\n text: string\r\n}\r\nexport class TextCheckComponent extends SuiComponentBase {\r\n view: SuiScoreViewOperations;\r\n staticText: Record;\r\n toggleCtrl: SuiToggleComposite;\r\n textCtrl: SuiTextInputComposite;\r\n defaultValue: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: TextCheckComponentParams) {\r\n super(dialog, parameter);\r\n this.dialog = dialog;\r\n this.view = this.dialog.getView();\r\n this.defaultValue = '';\r\n const toggleName = this.smoName + 'Toggle';\r\n const textName = this.smoName + 'Text';\r\n this.staticText = this.dialog.getStaticText();\r\n const label = this.staticText[textName];\r\n const show = this.staticText.show;\r\n this.toggleCtrl = new SuiToggleComposite(this.dialog, {\r\n smoName: toggleName,\r\n control: 'SuiToggleComposite',\r\n label: show,\r\n parentControl: this,\r\n classes: '',\r\n id: toggleName\r\n });\r\n this.textCtrl = new SuiTextInputComposite(this.dialog, {\r\n smoName: textName,\r\n defaultValue: this.defaultValue,\r\n control: 'SuiTextInputComposite',\r\n label,\r\n parentControl: this,\r\n classes: '',\r\n id: toggleName\r\n });\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl textCheckContainer'))\r\n .attr('id', this.parameterId);\r\n q.append(this.textCtrl.html);\r\n q.append(this.toggleCtrl.html);\r\n return q;\r\n }\r\n getInputElement() {\r\n var pid = this.parameterId;\r\n return $('#' + pid);\r\n }\r\n getValue(): TextCheckPair {\r\n return {\r\n checked: this.toggleCtrl.getValue(),\r\n text: this.textCtrl.getValue()\r\n };\r\n }\r\n setValue(val: TextCheckPair) {\r\n this.toggleCtrl.setValue(val.checked);\r\n this.textCtrl.setValue(val.text);\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n bind() {\r\n this.toggleCtrl.bind();\r\n this.textCtrl.bind();\r\n }\r\n}\r\n","import { SmoScoreText, SmoTextGroup } from '../../../smo/data/scoreText';\r\nimport { KeyEvent } from '../../../smo/data/common';\r\nimport { SuiTextSession } from '../../../render/sui/textEdit';\r\nimport { SuiScroller } from '../../../render/sui/scroller';\r\nimport { SuiScoreViewOperations } from '../../../render/sui/scoreViewOperations';\r\nimport { SuiDialogNotifier, SuiComponentBase, SuiComponentParent } from './baseComponent';\r\nimport { SuiButtonComposite } from './button';\r\nimport { SuiRockerComposite } from './rocker';\r\nimport { SuiDropdownComposite } from './dropdown';\r\nimport { SuiInlineText } from '../../../render/sui/textRender';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\n\r\ndeclare var $: any;\r\n\r\n// ## SuiTextInPlace\r\n// Edit the text in an SVG element, in the same scale etc. as the text in the score SVG DOM.\r\n// This component just manages the text editing component of hte renderer.\r\nexport interface SuiTextInPlaceParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport class SuiTextInPlace extends SuiComponentBase {\r\n scroller: SuiScroller;\r\n editMode: boolean = false;\r\n value: SmoTextGroup;\r\n staticText: Record;\r\n altLabel: string;\r\n view: SuiScoreViewOperations;\r\n session: SuiTextSession | null = null;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextInPlaceParams) {\r\n super(dialog, parameter);\r\n this.scroller = dialog.getView().scroller;\r\n this.value = new SmoTextGroup(SmoTextGroup.defaults);\r\n this.view = this.dialog.getView();\r\n const modifier = this.dialog.getModifier();\r\n if (modifier && SmoTextGroup.isTextGroup(modifier)) {\r\n this.value = modifier;\r\n }\r\n this.staticText = this.dialog.getStaticText();\r\n this.altLabel = this.staticText.editorLabel;\r\n }\r\n show() {}\r\n hide() {}\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('cbTextInPlace smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('button').attr('type', 'checkbox').classes('toggleTextEdit')\r\n .attr('id', id + '-input').append(\r\n b('span').classes('icon icon-pencil'))\r\n .append(\r\n b('label').attr('for', id + '-input').text(this.label)));\r\n return r;\r\n }\r\n endSession() {\r\n $(this._getInputElement()).find('label').text(this.label);\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-checkmark').addClass('icon-pencil');\r\n this.value.skipRender = false;\r\n\r\n if (this.session) {\r\n this.session.textGroup.tryParseUnicode();\r\n this.value = this.session.textGroup;\r\n this.session.stopSession();\r\n }\r\n $('body').removeClass('text-edit');\r\n this.handleChanged();\r\n }\r\n get isRunning() {\r\n return this.session && this.session.isRunning;\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('button');\r\n }\r\n mouseMove(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.session && this.session.isRunning) {\r\n this.session.handleMouseEvent(ev);\r\n }\r\n }\r\n _renderInactiveBlocks() {\r\n const modifier = this.value;\r\n const context = this.view.renderer.pageMap.getRendererFromModifier(this.value).getContext();\r\n context.save();\r\n context.setFillStyle('#ddd');\r\n const svgPage = this.view.renderer.pageMap.getRendererFromModifier(this.value);\r\n modifier.textBlocks.forEach((block) => {\r\n const st = block.text;\r\n if (st.attrs.id !== this.value.getActiveBlock().attrs.id && svgPage) {\r\n const svgText = SuiInlineText.fromScoreText(st, svgPage, this.view.renderer.pageMap, this.scroller);\r\n if (st.logicalBox) {\r\n svgText.startX += st.logicalBox.x - st.x;\r\n svgText.startY += (st.y - st.logicalBox.y) - st.logicalBox.height / 2;\r\n }\r\n const sgrp = context.openGroup();\r\n sgrp.classList.add('inactive-text');\r\n sgrp.classList.add('suiInlineText');\r\n svgText.render();\r\n context.closeGroup();\r\n }\r\n });\r\n context.restore();\r\n }\r\n startEditSession() {\r\n $(this._getInputElement()).find('label').text(this.altLabel);\r\n const modifier = this.value;\r\n modifier.skipRender = true;\r\n let pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.value);\r\n $(pageContext.svg).find('#' + modifier.attrs.id).remove();\r\n this._renderInactiveBlocks();\r\n const ul = modifier.ul();\r\n\r\n // this.textElement=$(this.dialog.layout.svg).find('.'+modifier.attrs.id)[0];\r\n this.session = new SuiTextSession({\r\n renderer: this.view.renderer,\r\n scroller: this.scroller,\r\n x: ul.x,\r\n y: ul.y,\r\n textGroup: modifier,\r\n text: modifier.getActiveBlock().text,\r\n scoreText: modifier.getActiveBlock()\r\n });\r\n $('body').addClass('text-edit');\r\n this.value = this.session.textGroup;\r\n const button = document.getElementById(this.parameterId);\r\n $(button).find('span.icon').removeClass('icon-pencil').addClass('icon-checkmark');\r\n // Erase the original since we are going to edit it now.\r\n if (this.value) {\r\n this.value.elements.forEach((el) => {\r\n el.remove();\r\n });\r\n this.value.elements = [];\r\n }\r\n this.session.startSession();\r\n // blur the button so key events don't get passed to it.\r\n $(this._getInputElement()).blur();\r\n }\r\n evKey(evdata: KeyEvent) {\r\n if (this.session) {\r\n this.session.evKey(evdata);\r\n }\r\n }\r\n bind() {\r\n $(this._getInputElement()).off('click').on('click', () => {\r\n if (this.session && this.session.isRunning) {\r\n this.endSession();\r\n } else {\r\n this.startEditSession();\r\n }\r\n });\r\n }\r\n}\r\n\r\n\r\nexport interface SuiTextBlockComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\nexport interface SuiTextBlockValue {\r\n modifier: SmoTextGroup,\r\n activeScoreText: SmoScoreText\r\n}\r\nexport class SuiTextBlockComponent extends SuiComponentParent {\r\n addBlockCtrl: SuiButtonComposite;\r\n toggleBlockCtrl: SuiButtonComposite;\r\n removeBlockCtrl: SuiButtonComposite;\r\n relativePositionCtrl: SuiDropdownComposite;\r\n justificationCtrl: SuiDropdownComposite;\r\n spacingCtrl: SuiRockerComposite;\r\n modifier: SmoTextGroup;\r\n activeScoreText: SmoScoreText;\r\n\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextBlockComponentParams) {\r\n super(dialog, parameter);\r\n this.addBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'addBlock',\r\n smoName: 'addBlock',\r\n parentControl: this,\r\n icon: 'icon-plus',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Add Text Block'\r\n });\r\n\r\n this.toggleBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'toggleBlock',\r\n smoName: 'toggleBlock',\r\n parentControl: this,\r\n icon: 'icon-arrow-right',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Next Block'\r\n });\r\n\r\n this.removeBlockCtrl = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'removeBlock',\r\n smoName: 'removeBlock',\r\n parentControl: this,\r\n icon: 'icon-minus',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiButtonComponent',\r\n label: 'Remove Block'\r\n });\r\n this.relativePositionCtrl = new SuiDropdownComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'relativePosition',\r\n smoName: 'relativePosition',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Block Positions',\r\n options: [{\r\n value: SmoTextGroup.relativePositions.ABOVE,\r\n label: 'Above'\r\n }, {\r\n value: SmoTextGroup.relativePositions.BELOW,\r\n label: 'Below'\r\n }, {\r\n value: SmoTextGroup.relativePositions.LEFT,\r\n label: 'Left'\r\n }, {\r\n value: SmoTextGroup.relativePositions.RIGHT,\r\n label: 'Right'\r\n }]\r\n }\r\n );\r\n this.justificationCtrl = new SuiDropdownComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'justification',\r\n smoName: 'justification',\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Justification',\r\n options: [{\r\n value: SmoTextGroup.justifications.LEFT,\r\n label: 'Left'\r\n }, {\r\n value: SmoTextGroup.justifications.RIGHT,\r\n label: 'Right'\r\n }, {\r\n value: SmoTextGroup.justifications.CENTER,\r\n label: 'Center'\r\n }]\r\n });\r\n this.spacingCtrl = new SuiRockerComposite(\r\n this.dialog,\r\n {\r\n id: this.id + 'spacing',\r\n smoName: 'spacing',\r\n defaultValue: 0,\r\n parentControl: this,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Spacing',\r\n dataType: 'float',\r\n increment: 0.1\r\n },\r\n );\r\n const mod = this.dialog.getModifier();\r\n if (mod && SmoTextGroup.isTextGroup(mod)) {\r\n this.modifier = mod;\r\n } else {\r\n this.modifier = new SmoTextGroup(SmoTextGroup.defaults);\r\n }\r\n this.activeScoreText = this.modifier.textBlocks[0].text;\r\n }\r\n changed() {\r\n if (this.addBlockCtrl.changeFlag && this.modifier) {\r\n const nt = new SmoScoreText(this.activeScoreText);\r\n this.modifier.addScoreText(nt);\r\n this.activeScoreText = nt;\r\n this.modifier.setActiveBlock(nt);\r\n this._updateMultiiFields();\r\n }\r\n if (this.relativePositionCtrl.changeFlag) {\r\n this.modifier.setRelativePosition(parseInt(this.relativePositionCtrl.getValue().toString(), 10));\r\n }\r\n if (this.justificationCtrl.changeFlag) {\r\n this.modifier.justification = parseInt(this.justificationCtrl.getValue().toString(), 10);\r\n }\r\n if (this.removeBlockCtrl.changeFlag) {\r\n this.modifier.removeBlock(this.activeScoreText);\r\n this.activeScoreText = this.modifier.firstBlock();\r\n this._updateMultiiFields();\r\n }\r\n if (this.toggleBlockCtrl.changeFlag) {\r\n const curIx = this.modifier.indexOf(this.activeScoreText);\r\n const newIx = (curIx + 1) % this.modifier.textBlocks.length;\r\n this.activeScoreText = this.modifier.textBlocks[newIx].text;\r\n this.modifier.setActiveBlock(this.activeScoreText);\r\n }\r\n if (this.spacingCtrl.changeFlag) {\r\n const val = this.spacingCtrl.getValue();\r\n if (val >= 0) {\r\n this.modifier.spacing = val;\r\n }\r\n }\r\n this.handleChanged();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl'));\r\n q.append(this.addBlockCtrl.html);\r\n q.append(this.removeBlockCtrl.html);\r\n q.append(this.toggleBlockCtrl.html);\r\n q.append(this.relativePositionCtrl.html);\r\n q.append(this.justificationCtrl.html);\r\n q.append(this.spacingCtrl.html);\r\n\r\n return q;\r\n }\r\n\r\n _getInputElement() {\r\n return $(this.dialog.dgDom.element).find('#' + this.parameterId);\r\n }\r\n getValue() {\r\n return {\r\n activeScoreText: this.activeScoreText,\r\n modifier: this.modifier\r\n };\r\n }\r\n _updateMultiiFields() {\r\n const fields = [this.justificationCtrl, this.relativePositionCtrl,\r\n this.removeBlockCtrl, this.toggleBlockCtrl, this.spacingCtrl];\r\n fields.forEach((field) => {\r\n if (this.modifier.textBlocks.length < 2) {\r\n $('#' + field.parameterId).addClass('hide');\r\n } else {\r\n $('#' + field.parameterId).removeClass('hide');\r\n }\r\n });\r\n }\r\n setValue(value: SuiTextBlockValue) {\r\n this.activeScoreText = value.activeScoreText;\r\n this.modifier = value.modifier;\r\n this.relativePositionCtrl.setValue(this.modifier.relativePosition);\r\n this._updateMultiiFields();\r\n this.justificationCtrl.setValue(this.modifier.justification);\r\n this.spacingCtrl.setValue(this.modifier.spacing);\r\n }\r\n\r\n bind() {\r\n this.addBlockCtrl.bind();\r\n this.relativePositionCtrl.bind();\r\n this.justificationCtrl.bind();\r\n this.removeBlockCtrl.bind();\r\n this.toggleBlockCtrl.bind();\r\n this.spacingCtrl.bind();\r\n }\r\n}\r\n\r\n","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * parameters for text input component (simple text entry, not SVG text)\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiTextInputComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n/**\r\n * Simple text input, like for a filename. Not the text editing component.\r\n */\r\nexport class SuiTextInputComponent extends SuiComponentBase {\r\n defaultValue: string = '';\r\n value: string = '';\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextInputComponentParams) {\r\n super(dialog, parameter);\r\n\r\n this.dialog = dialog;\r\n this.value = '';\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('text-input smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'text').classes('file-name')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(val: string) {\r\n this.value = val;\r\n $('#' + this.parameterId).find('input').val(val);\r\n }\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n bind() {\r\n const self = this;\r\n $('#' + this.parameterId).find('input').off('change').on('change', () => {\r\n self.value = $(this._getInputElement()).val();\r\n self.handleChanged();\r\n });\r\n }\r\n}\r\nexport interface SuiTextInputCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n defaultValue: string,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n parentControl: SuiComponentParent\r\n}\r\nexport class SuiTextInputComposite extends SuiTextInputComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiTextInputCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\nexport class SuiReadOnlyTextComponent extends SuiTextInputComponent {\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTextInputComponentParams) {\r\n super(dialog, parameter);\r\n this.noProperty = true;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiDialogNotifier, DialogDefinitionElement, SuiComponentParent } from '../components/baseComponent';\r\nimport { SuiDropdownCompositeParams, SuiDropdownComposite } from '../components/dropdown';\r\n\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\nimport { SmoSelection } from '../../../smo/xform/selections';\r\nimport { SmoTie, TieLine } from '../../../smo/data/staffModifiers';\r\nimport { SmoNote } from '../../../smo/data/note';\r\ndeclare var $: any;\r\n\r\nexport interface PitchTieControlRow {\r\n leftControl: SuiDropdownComposite,\r\n rightControl: SuiDropdownComposite\r\n}\r\nexport interface TieMappingComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n toggleElement: DialogDefinitionElement,\r\n dropdownElement: DialogDefinitionElement\r\n}\r\n// ## TieMappingComponent\r\n// Represent the pitches in 2 notes that can be individually tied together\r\nexport class TieMappingComponent extends SuiComponentParent {\r\n // { dropdownElement: {...}, toggleElement: }\r\n startSelection: SmoSelection | null;\r\n endSelection: SmoSelection | null;\r\n modifier: SmoTie;\r\n controlRows: PitchTieControlRow[] = [];\r\n constructor(dialog: SuiDialogNotifier, parameter: TieMappingComponentParams) {\r\n super(dialog, parameter);\r\n let i = 0;\r\n const modifier = this.dialog.getModifier();\r\n if (modifier && SmoTie.isTie(modifier)) {\r\n this.modifier = modifier;\r\n } else { // should not happen\r\n this.modifier = new SmoTie(SmoTie.defaults);\r\n }\r\n this.startSelection = SmoSelection.noteFromSelector(\r\n this.dialog.getView().score, this.modifier.startSelector);\r\n this.endSelection = SmoSelection.noteFromSelector(\r\n this.dialog.getView().score, this.modifier.endSelector);\r\n if (this.startSelection === null || this.startSelection.note === null ||\r\n this.endSelection === null || this.endSelection.note === null) {\r\n return;\r\n }\r\n const pitchCount = Math.max(this.startSelection.note.pitches.length, this.endSelection.note.pitches.length);\r\n\r\n this.controlRows = [];\r\n for (i = 0; i < pitchCount; ++i) {\r\n const smoName = 'Line-' + (i + 1);\r\n const defaultValue = -1;\r\n const leftParams: SuiDropdownCompositeParams = {\r\n id: this.id + smoName + '-left',\r\n smoName: smoName + '-left',\r\n classes: 'leftControl',\r\n control: 'SuiDropdownComposite',\r\n label: dialog.getStaticText()['fromNote'],\r\n options: this._generateOptions(this.startSelection.note),\r\n parentControl: this\r\n }\r\n const leftControl = new SuiDropdownComposite(this.dialog, leftParams);\r\n const rightParams: SuiDropdownCompositeParams = {\r\n id: this.id + smoName + '-right',\r\n smoName: smoName + '-right',\r\n classes: 'rightControl',\r\n control: 'SuiDropdownComposite',\r\n label: dialog.getStaticText()['toNote'],\r\n options: this._generateOptions(this.endSelection.note),\r\n parentControl: this\r\n\r\n }\r\n const rightControl = new SuiDropdownComposite(this.dialog, rightParams);\r\n this.controlRows.push({ leftControl, rightControl });\r\n }\r\n }\r\n bind() {\r\n this.controlRows.forEach((row) => {\r\n row.rightControl.bind();\r\n row.leftControl.bind();\r\n });\r\n }\r\n\r\n _generateOptions(note: SmoNote) {\r\n const options = [];\r\n let index = 0;\r\n let label = '';\r\n options.push({ value: -1, label: 'No Line' });\r\n note.pitches.forEach((pitch) => {\r\n const value = index;\r\n label = pitch.letter.toUpperCase();\r\n if (pitch.accidental !== 'n') {\r\n label += pitch.accidental;\r\n }\r\n label += pitch.octave;\r\n options.push({ value, label });\r\n index += 1;\r\n });\r\n return options;\r\n }\r\n getValue() {\r\n const lines: TieLine[] = [];\r\n this.controlRows.forEach((row) => {\r\n const left: number = parseInt(row.leftControl.getValue().toString(), 10);\r\n const right: number = parseInt(row.rightControl.getValue().toString(), 10);\r\n if (left >= 0 && right >= 0) {\r\n lines.push({ from: left, to: right });\r\n }\r\n });\r\n return lines;\r\n }\r\n setValue(modifier: TieLine[]) {\r\n let i = 0;\r\n for (i = 0; i < this.controlRows.length; ++i) {\r\n const row = this.controlRows[i];\r\n if (modifier.length > i) {\r\n row.leftControl.setValue(modifier[i].from);\r\n row.rightControl.setValue(modifier[i].to);\r\n }\r\n }\r\n }\r\n changed() {\r\n this.handleChanged();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl dropdownPair'))\r\n .attr('id', this.parameterId);\r\n this.controlRows.forEach((row) => {\r\n q.append(row.leftControl.html).append(row.rightControl.html);\r\n });\r\n return q;\r\n }\r\n}","import { buildDom } from '../../../common/htmlHelpers';\r\nimport { SuiComponentBase, SuiDialogNotifier, SuiComponentParent } from './baseComponent';\r\ndeclare var $: any;\r\n\r\n/**\r\n * parameters for simple on-off toggle\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiToggleComponentParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string\r\n}\r\n/**\r\n * Simple boolean checkbox component\r\n */\r\nexport class SuiToggleComponent extends SuiComponentBase {\r\n defaultValue: boolean = false;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiToggleComponentParams) {\r\n super(dialog, parameter);\r\n this.defaultValue = false;\r\n this.dialog = dialog;\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('toggleControl smoControl')).attr('id', this.parameterId).attr('data-param', this.smoName)\r\n .append(b('input').attr('type', 'checkbox').classes('toggleInput')\r\n .attr('id', id + '-input')).append(\r\n b('label').attr('for', id + '-input').text(this.label));\r\n return r;\r\n }\r\n _getInputElement() {\r\n const pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid).find('input');\r\n }\r\n setValue(value: boolean) {\r\n $(this._getInputElement()).prop('checked', value);\r\n }\r\n getValue() {\r\n return $(this._getInputElement()).prop('checked');\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n $(input).off('change').on('change',\r\n () => {\r\n this.handleChanged();\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Params for toggle combined with another component\r\n */\r\nexport interface SuiToggleCompositeParams {\r\n id: string,\r\n classes: string,\r\n type?: string,\r\n increment?: number,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n disabledOption?: string,\r\n defaultValue?: string | number,\r\n dataType?: string,\r\n parentControl: SuiComponentParent\r\n}\r\n// ### SuiToggleComposite\r\n// Dropdown component that can be part of a composite control.\r\nexport class SuiToggleComposite extends SuiToggleComponent {\r\n parentControl: SuiComponentParent;\r\n constructor(dialog: SuiDialogNotifier, parameters: SuiToggleCompositeParams) {\r\n super(dialog, parameters);\r\n this.parentControl = parameters.parentControl;\r\n }\r\n\r\n handleChanged() {\r\n this.changeFlag = true;\r\n this.parentControl.changed();\r\n this.changeFlag = false;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiComponentBase, SuiDialogNotifier } from './baseComponent';\r\nimport { buildDom } from '../../../common/htmlHelpers';\r\ndeclare var $: any;\r\n\r\nexport interface TreeComponentOption {\r\n label: string,\r\n value: string | undefined, \r\n parent: string | undefined,\r\n format: string,\r\n expanded: boolean\r\n}\r\n\r\nexport interface SuiTreeComponentParams {\r\n id: string,\r\n classes: string,\r\n label: string,\r\n smoName: string,\r\n control: string,\r\n root: string,\r\n options: TreeComponentOption[]\r\n}\r\n// ### SuiDropdownComponent\r\n// simple dropdown select list.\r\nexport class SuiTreeComponent extends SuiComponentBase {\r\n persistControls: boolean = false;\r\n tree: Record = {};\r\n options: TreeComponentOption[] = [];\r\n root: string;\r\n value: string;\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiTreeComponentParams) {\r\n super(dialog, parameter);\r\n this.root = parameter.root;\r\n this.value = this.root;\r\n this.options = parameter.options;\r\n this.calculateOptionTree();\r\n }\r\n calculateOptionTree() {\r\n this.tree = {};\r\n this.options.forEach((option) => {\r\n if (option.parent) {\r\n if (!(this.tree[option.parent])) {\r\n this.tree[option.parent] = [];\r\n }\r\n this.tree[option.parent].push(option);\r\n }\r\n });\r\n }\r\n getNodesWithParent(parent: string | undefined) {\r\n return this.options.filter((oo) => oo.parent === parent);\r\n }\r\n appendOptionRecurse(b: any, option: TreeComponentOption, level: number) {\r\n const children = this.getNodesWithParent(option.value);\r\n let treeClass = 'tree-branch';\r\n let buttonClass = 'expander';\r\n if (option.format === 'library' && children.length > 0) {\r\n if (this.persistControls && option.expanded) {\r\n buttonClass += ' expanded icon-minus';\r\n }\r\n if (this.persistControls && !option.expanded) {\r\n buttonClass += ' collapsed icon-plus';\r\n treeClass += ' collapsed';\r\n }\r\n }\r\n const current = b('li').classes(treeClass).attr('data-value', option.value).attr('data-level', level);\r\n current.append(b('button').classes(buttonClass));\r\n current.append(b('a').classes('tree-link').text(option.label));\r\n if (option.format === 'library') {\r\n current.append(b('span').classes('file-type icon-book'));\r\n } else {\r\n current.append(b('span').classes('file-type icon-file-music'));\r\n }\r\n children.forEach((child) => {\r\n current.append(b('ul').append(this.appendOptionRecurse(b, child, level + 1)));\r\n });\r\n return current;\r\n }\r\n _createTree(builder: any, ul: any) {\r\n // this.checkDefault(s, b);\r\n const options = this.getNodesWithParent(this.root);\r\n options.forEach((option) => {\r\n ul.append(this.appendOptionRecurse(builder, option, 0));\r\n });\r\n }\r\n\r\n get html() {\r\n const b = buildDom;\r\n const id = this.parameterId;\r\n const r = b('div').classes(this.makeClasses('dropdownControl smoControl')).attr('id', id).attr('data-param', this.smoName);\r\n const ul = b('ul').classes('tree tree-root');\r\n this._createTree(b, ul);\r\n r.append(ul);\r\n this.persistControls = true;\r\n return r;\r\n }\r\n updateOptions(options: TreeComponentOption[]) {\r\n this.options = options;\r\n this.calculateOptionTree();\r\n const parentEl = $(this._getInputElement());\r\n const oldUl = $(parentEl).find('ul.tree-root');\r\n $(oldUl).remove();\r\n const b = buildDom;\r\n const ul = b('ul').classes('tree tree-root');\r\n this._createTree(b, ul);\r\n $(parentEl).append(ul.dom());\r\n this.bind();\r\n }\r\n _getInputElement() {\r\n var pid = this.parameterId;\r\n return $(this.dialog.dgDom.element).find('#' + pid);\r\n }\r\n getValue() {\r\n return this.value;\r\n }\r\n setValue(value: string) {\r\n $('ul.tree li').removeClass('selected');\r\n const option = this.options.find((o) => o.value === value);\r\n const input = this._getInputElement();\r\n const li = $(input).find('li[data-value=\"' + value + '\"]');\r\n $(li).addClass('selected');\r\n if (option && option.format === 'library') {\r\n $(li).find('button').first().addClass('expanded icon-minus');\r\n }\r\n this.bindTreeControls();\r\n }\r\n bindTreeControls() {\r\n $('ul.tree button.expanded').off('click').on('click', (evt: any) => {\r\n const button = evt.currentTarget;\r\n $(button).removeClass('expanded').removeClass('icon-minus').addClass('icon-plus').addClass('collapsed');\r\n $(button).closest('li').addClass('collapsed');\r\n this.bindTreeControls();\r\n });\r\n $('ul.tree button.collapsed').off('click').on('click', (evt: any) => {\r\n const button = evt.currentTarget;\r\n $(button).addClass('expanded').addClass('icon-minus').removeClass('icon-plus').removeClass('collapsed');\r\n $(button).closest('li').removeClass('collapsed');\r\n this.bindTreeControls();\r\n });\r\n }\r\n\r\n bind() {\r\n const input = this._getInputElement();\r\n this.bindTreeControls();\r\n $(input).find('a.tree-link').each((ix: number, el: any) => {\r\n $(el).removeClass('selected');\r\n $(el).off('click').on('click', (ev: any) => {\r\n $(this._getInputElement()).find('li').removeClass('selected');\r\n const li = $(ev.currentTarget).closest('li.tree-branch');\r\n $(li).addClass('selected');\r\n this.value = $(li).attr('data-value');\r\n this.handleChanged();\r\n });\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SvgHelpers } from '../../render/sui/svgHelpers';\r\nimport { buildDom, InputTrapper, draggable, createTopDomContainer } from '../../common/htmlHelpers';\r\n// import { SmoTranslator } from '../i18n/language';\r\nimport { SmoModifier } from '../../smo/data/score';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { CompleteNotifier } from '../common';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SuiDialogNotifier, DialogDefinitionElement, \r\n SuiComponentBase, DialogDefinitionOption, SuiBaseComponentParams } from './components/baseComponent';\r\nimport { SuiScroller } from '../../render/sui/scroller';\r\nimport { SmoNote } from '../../smo/data/note';\r\nimport { EventHandler } from '../eventSource';\r\nimport { SmoUiConfiguration } from '../configuration';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n/**\r\n * The JSON dialog template is a declaritive structore for the html of the dialog\r\n * and components. \r\n * @param label for the dialog itself\r\n * @param elements a series of elements that define the component\r\n * @param staticText a hash of text for the dialog and components to use\r\n * @category SuiDialog\r\n */\r\nexport interface DialogDefinition {\r\n label: string,\r\n elements: DialogDefinitionElement[],\r\n staticText: Record[]\r\n}\r\n/**\r\n * A translation of the labels in DialogDefintionElement\r\n * @param label the component label\r\n * @param id used as a key in translation tool\r\n * @param options options for dropdown and other array components\r\n * @category SuiDialog\r\n */\r\nexport interface DialogTranslationElement {\r\n label: string,\r\n id: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\n/**\r\n * A translation of all the strings in the dialog itself, used \r\n * when switching languages.\r\n * @param ctor the constructor for the dialog class, used to call static methods\r\n * @param label the translated label\r\n * @param dialogElements the translated component json\r\n * @param staticText translated misc text \r\n * @category SuiDialog\r\n */\r\nexport interface DialogTranslation {\r\n ctor: string,\r\n label: string,\r\n dialogElements: DialogTranslationElement[],\r\n staticText: Record\r\n}\r\n\r\n/**\r\n * Dialog params always contain basic information about the runtime\r\n * for modal functionality\r\n * @param ctor dialog constructor\r\n * @param id DOM id for the dialog\r\n * @param tracker to get and set selections\r\n * @param completeNotifier used to take over key/mouse control\r\n * @param startPromise used if this is called from another modal element\r\n * @param view the MVVM object to change the score\r\n * @param eventSource event source to register for additional events like mouseup\r\n * @param undoBuffer used to create undo\r\n * @category SuiDialogParams\r\n */\r\nexport interface SuiDialogParams {\r\n ctor: string,\r\n id: string,\r\n tracker: SuiTracker,\r\n completeNotifier: CompleteNotifier,\r\n startPromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n // definition: DialogDefinition,\r\n modifier?: any,\r\n config?: SmoUiConfiguration\r\n}\r\n\r\n/**\r\n * internal interface used to create the DOM\r\n * @internal\r\n */\r\nexport interface SuiDomParams {\r\n id: string,\r\n top: number,\r\n left: number,\r\n label: string\r\n}\r\n/**\r\n * DOM interface for the dialog\r\n * @param element parent element\r\n * @param trapper used to trap focus events for the dialog\r\n */\r\nexport interface DialogDom {\r\n element: any,\r\n trapper: any\r\n}\r\n\r\n/**\r\n * Note: Most dialogs will inherit from SuiDialogAdapter, not SuiDialogBase.\r\n * You will only want to inherit from SuiDialogBase under 2 conditions:\r\n * 1. the dialog is triviailly simple, like an alert box that makes no changes to the score, or\r\n * 2. the dialog is extremely complicated in how it interacts with the user, such that a form-based approach won't work\r\n * @category SuiDialog\r\n */\r\n export abstract class SuiDialogBase extends SuiDialogNotifier {\r\n static get displayOptions(): Record {\r\n return {\r\n BINDCOMPONENTS: 'bindComponents', DRAGGABLE: 'makeDraggable',\r\n KEYBOARD_CAPTURE: 'captureKeyboardPromise', GLOBALPOS: 'positionGlobally',\r\n SELECTIONPOS: 'positionFromSelection', MODIFIERPOS: 'positionFromModifier',\r\n HIDEREMOVE: 'hideRemoveButton'\r\n };\r\n }\r\n // ### printXlate\r\n // print json with string labels to use as a translation file seed.\r\n static printTranslate(_class: string): DialogTranslation {\r\n const output: DialogTranslationElement[] = [];\r\n const xx: any = eval('globalThis.Smo.' + _class);\r\n xx.dialogElements.elements.forEach((element: DialogDefinitionElement) => {\r\n const component: Partial = {};\r\n if (element.label) {\r\n component.label = element.label ?? '';\r\n component.id = element.smoName;\r\n if (element.options) {\r\n component.options = [];\r\n\r\n element.options.forEach((option) => {\r\n component.options!.push({ value: option.value, label: option.label, css: option.css });\r\n });\r\n }\r\n output.push(component as DialogTranslationElement);\r\n }\r\n });\r\n // convert static text from an array of name/value pairs to a record for translation\r\n const staticText: Record = {};\r\n const dialogStaticText: Record[] = xx.dialogElements.staticText;\r\n if (dialogStaticText) {\r\n dialogStaticText.forEach((st) => {\r\n const key = Object.keys(st)[0];\r\n staticText[key] = st[key];\r\n });\r\n }\r\n return { ctor: xx.ctor, label: xx.dialogElements.label, dialogElements: output, staticText };\r\n }\r\n static getStaticText(staticText: Record[]) {\r\n const rv: Record = {};\r\n staticText.forEach((st) => {\r\n const key = Object.keys(st)[0];\r\n rv[key] = st[key];\r\n });\r\n return rv;\r\n }\r\n id: string;\r\n ctor: string;\r\n boundKeyboard: boolean;\r\n components: SuiComponentBase[] = [];\r\n boundComponents: SuiComponentBase[] = [];\r\n cmap: Record = {};\r\n scroller: SuiScroller;\r\n closeDialogPromise: Promise;\r\n label: string;\r\n staticText: Record[] = [];\r\n startPromise: Promise | null;\r\n dialogElements: DialogDefinition;\r\n eventSource: BrowserEventSource;\r\n view: SuiScoreViewOperations;\r\n completeNotifier: CompleteNotifier;\r\n modifier: any;\r\n dgDom: DialogDom;\r\n displayOptions: string[] = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'GLOBALPOS', 'HIDEREMOVE'];\r\n keydownHandler: EventHandler | null = null;\r\n // ### SuiDialogBase ctor\r\n // Creates the DOM element for the dialog and gets some initial elements\r\n constructor(dialogElements: DialogDefinition, parameters: SuiDialogParams) {\r\n super();\r\n this.id = parameters.id;\r\n this.boundKeyboard = false;\r\n this.scroller = parameters.view.tracker.scroller;\r\n this.label = dialogElements.label;\r\n this.eventSource = parameters.eventSource;\r\n this.view = parameters.view;\r\n this.completeNotifier = parameters.completeNotifier;\r\n this.modifier = parameters.modifier;\r\n this.ctor = parameters.ctor;\r\n\r\n this.closeDialogPromise = new Promise((resolve) => {\r\n $('body').off('dialogDismiss').on('dialogDismiss', () => {\r\n resolve();\r\n });\r\n });\r\n this.staticText = dialogElements.staticText;\r\n\r\n // If this dialog was spawned by a menu, wait for the menu to dismiss\r\n // before continuing.\r\n // this.startPromise = parameters.closeMenuPromise;\r\n this.startPromise = parameters.startPromise;\r\n\r\n this.dialogElements = dialogElements;\r\n\r\n const left = $('.musicRelief').offset().left + $('.musicRelief').width() / 2;\r\n const top = $('.musicRelief').offset().top + $('.musicRelief').height() / 2;\r\n\r\n this.dgDom = this._constructDialog(dialogElements, {\r\n id: 'dialog-' + this.id,\r\n top,\r\n left,\r\n label: this.label\r\n });\r\n\r\n // SmoTranslator.registerDialog(this.ctor);\r\n }\r\n // ### display\r\n // make3 the modal visible. bind events and elements.\r\n display() {\r\n $('body').addClass('showAttributeDialog');\r\n this.bindComponents();\r\n this.bindElements();\r\n this.applyDisplayOptions();\r\n this.initialValue();\r\n }\r\n\r\n // ### bindElements\r\n // bing the generic controls in most dialogs.\r\n bindElements() {\r\n var dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.commit();\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n if (this.modifier) {\r\n this.modifier.cancel();\r\n }\r\n this.complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => {\r\n this.view.groupUndo(false);\r\n this.complete();\r\n });\r\n }\r\n bindComponents() {\r\n this.components.forEach((component) => {\r\n component.bind();\r\n });\r\n }\r\n initialValue(){\r\n if (this.modifier === null) {\r\n return;\r\n }\r\n this.boundComponents.forEach((comp) => {\r\n (comp as any).setValue((this.modifier as any)[comp.smoName]);\r\n });\r\n }\r\n changed() {\r\n if (this.modifier === null) {\r\n return;\r\n }\r\n this.boundComponents.forEach((comp) => {\r\n if (comp.changeFlag) {\r\n (this.modifier as any)[comp.smoName] = (comp as any).getValue();\r\n }\r\n });\r\n }\r\n getId(): string {\r\n return this.id;\r\n }\r\n getModifier() : SmoModifier | null {\r\n return this.modifier ?? null;\r\n }\r\n getEventSource() {\r\n return this.eventSource;\r\n }\r\n getStaticText() {\r\n return SuiDialogBase.getStaticText(this.staticText);\r\n }\r\n async commit(): Promise {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get closeModalPromise(): Promise {\r\n return this.closeDialogPromise;\r\n }\r\n // ### position\r\n // For dialogs based on selections, tries to place the dialog near the selection and also\r\n // to scroll so the dialog is in view\r\n static position(box: SvgBox, dgDom: DialogDom, scroller: SuiScroller) {\r\n let y = (box.y + box.height) - scroller.netScroll.y;\r\n let x = 0;\r\n\r\n // TODO: adjust if db is clipped by the browser.\r\n const dge = $(dgDom.element).find('.attributeModal');\r\n const dgeHeight: number = $(dge).height();\r\n const maxY: number = $('.musicRelief').height();\r\n const maxX: number = $('.musicRelief').width();\r\n const offset: any = $('.dom-container').offset();\r\n y = y - (offset.top as number);\r\n\r\n const offsetY = dgeHeight + y > window.innerHeight ? (dgeHeight + y) - window.innerHeight : 0;\r\n y = (y < 0) ? -y : y - offsetY;\r\n\r\n y = (y > maxY || y < 0) ? maxY / 2 : y;\r\n\r\n $(dge).css('top', '' + y + 'px');\r\n\r\n x = box.x - scroller.netScroll.x;\r\n x = x - (offset.left as number);\r\n const w: number = $(dge).width();\r\n x = (x > window.innerWidth / 2) ? x - (w + 25) : x + (w + 25);\r\n\r\n x = (x < 0 || x > maxX) ? maxX / 2 : x;\r\n $(dge).css('left', '' + x + 'px');\r\n }\r\n getView() {\r\n return this.view;\r\n }\r\n applyDisplayOptions() {\r\n $('body').addClass('showAttributeDialog');\r\n this.displayOptions.forEach((option) => {\r\n (this as any)[SuiDialogBase.displayOptions[option]]();\r\n });\r\n }\r\n // ### position\r\n // Position the dialog near a selection. If the dialog is not visible due\r\n // to scrolling, make sure it is visible.\r\n position(box: SvgBox) {\r\n SuiDialogBase.position(box, this.dgDom, this.view.tracker.scroller);\r\n }\r\n hideRemoveButton() {\r\n $(this.dgDom.element).find('.remove-button').remove();\r\n }\r\n // ### positionModifier()\r\n positionFromModifier() {\r\n if (!this.modifier || this.modifier.logicalBox === null) {\r\n this.positionGlobally();\r\n return;\r\n }\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.modifier);\r\n const screenBox = this.view.renderer.pageMap.svgToClient(this.modifier.logicalBox);\r\n this.position(screenBox);\r\n }\r\n // ### positionGlobally\r\n // position the dialog box in the center of the current scroll region\r\n positionGlobally() {\r\n const box = SvgHelpers.boxPoints(250, 250, 1, 1);\r\n SuiDialogBase.position(box, this.dgDom, this.view.tracker.scroller);\r\n }\r\n // ### postionFromSelection\r\n // set initial position of dialog based on first selection\r\n positionFromSelection() {\r\n const note: SmoNote | null = this.view.tracker.selections[0].note;\r\n if (note && note.logicalBox) {\r\n const screenBox = this.view.renderer.pageMap.svgToClient(note.logicalBox);\r\n this.position(screenBox);\r\n }\r\n }\r\n // ### build the html for the dialog, based on the instance-specific components.\r\n _constructDialog(dialogElements: DialogDefinition, parameters: SuiDomParams) {\r\n createTopDomContainer('.attributeDialog');\r\n const id = parameters.id;\r\n const b = buildDom;\r\n const r = b('div').classes('attributeModal').attr('id', 'attr-modal-' + id)\r\n .css('top', parameters.top + 'px').css('left', parameters.left + 'px')\r\n .append(b('spanb').classes('draggable button').append(b('span').classes('icon icon-move jsDbMove')))\r\n .append(b('h2').classes('dialog-label').text(this.label));\r\n\r\n var ctrl = b('div').classes('smoControlContainer');\r\n dialogElements.elements.filter((de) => de.control).forEach((de) => {\r\n let ctor = null;\r\n if (typeof (de.control) === 'function') {\r\n ctor = de.control;\r\n } else {\r\n ctor = eval('globalThis.Smo.' + de.control);\r\n }\r\n const classes = de.classes ? de.classes : '';\r\n const compParams: SuiBaseComponentParams = {\r\n classes, id: id + de.smoName, ...de\r\n }\r\n const control: SuiComponentBase = new ctor(this, compParams);\r\n this.components.push(control);\r\n this.cmap[de.smoName + 'Ctrl'] = control;\r\n ctrl.append(control.html);\r\n });\r\n r.append(ctrl);\r\n r.append(\r\n b('div').classes('buttonContainer').append(\r\n b('button').classes('ok-button button-left btn btn-primary').text('OK')).append(\r\n b('button').classes('cancel-button button-center btn btn-secondary').text('Cancel')).append(\r\n b('button').classes('remove-button button-right btn btn-secondary').text('Remove').append(\r\n b('span').classes('icon icon-cancel-circle'))));\r\n $('.attributeDialog').html('');\r\n\r\n $('.attributeDialog').append(r.dom());\r\n\r\n const trapper = new InputTrapper('.attributeDialog');\r\n trapper.trap();\r\n $('.attributeDialog').find('.cancel-button').focus();\r\n return {\r\n element: $('.attributeDialog'),\r\n trapper\r\n };\r\n }\r\n // ### Complete\r\n // Dialogs take over the keyboard, so release that and trigger an event\r\n // that the dialog is closing that can resolve any outstanding promises.\r\n complete() {\r\n if (this.boundKeyboard && this.keydownHandler) {\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').trigger('dialogDismiss');\r\n this.dgDom.trapper.close();\r\n }\r\n // ### makeDraggable\r\n // generic code to make the dialog box draggable so it doesn't\r\n // get in front of stuff.\r\n makeDraggable() {\r\n createTopDomContainer('.draganime');\r\n const cb = () => { };\r\n draggable({\r\n parent: $(this.dgDom.element).find('.attributeModal'),\r\n handle: $(this.dgDom.element).find('.jsDbMove'),\r\n animateDiv: '.draganime',\r\n cb,\r\n moveParent: true\r\n });\r\n }\r\n // ### captureKeyboardPromise\r\n // capture keyboard events until the dialog closes,\r\n // then give control back to the current keyboard\r\n async captureKeyboardPromise() {\r\n if (!(this.startPromise)) {\r\n this.completeNotifier.unbindKeyboardForModal(this);\r\n this.bindKeyboard();\r\n return;\r\n }\r\n if (this.startPromise) {\r\n await this.startPromise;\r\n this.completeNotifier.unbindKeyboardForModal(this);\r\n this.bindKeyboard();\r\n }\r\n }\r\n\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n }\r\n }\r\n\r\n // ### bindKeyboard\r\n // generic logic to grab keyboard elements for modal\r\n bindKeyboard() {\r\n this.boundKeyboard = true;\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n }\r\n}\r\nexport function dialogConstructor(type: { new(parameters: SuiDialogParams): T; }, parameters: SuiDialogParams ): T {\r\n return new type(parameters);\r\n}\r\nexport function createAndDisplayDialog(ctor: new (parameters: SuiDialogParams) => T, parameters: SuiDialogParams): T {\r\n const instance: T = dialogConstructor(ctor, parameters);\r\n instance.display();\r\n return instance;\r\n}\r\n","import { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { buildDom } from '../../common/htmlHelpers';\r\nimport { SuiButtonComposite } from './components/button';\r\nimport { SuiComponentParent } from './components/baseComponent';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { getButtonsFcn, SuiButtonArrayComponent, SuiButtonArrayParameters } from './components/buttonArray';\r\nimport { SuiDialogNotifier, SuiBaseComponentParams } from './components/baseComponent';\r\n\r\nexport class SuiDurationButtonComponent extends SuiComponentParent {\r\n growDurationComponent: SuiButtonComposite;\r\n lessDurationComponent: SuiButtonComposite;\r\n growDotComponent: SuiButtonComposite;\r\n lessDotComponent: SuiButtonComposite;\r\n constructor(dialog: SuiDialogNotifier, params: SuiBaseComponentParams) {\r\n super(dialog, params);\r\n this.growDurationComponent = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'growDuration',\r\n smoName: 'growDuration',\r\n parentControl: this,\r\n icon: 'icon-smo ribbon-button-text icon-duration_grow',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Increase Duration',\r\n text: '.'\r\n });\r\n this.lessDurationComponent = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'lessDuration',\r\n smoName: 'lessDuration',\r\n parentControl: this,\r\n icon: 'icon-smo ribbon-button-text icon-duration_less',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Decrease Duration',\r\n text: ','\r\n });\r\n this.growDotComponent = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'growDot',\r\n smoName: 'growDot',\r\n parentControl: this,\r\n icon: 'icon-smo ribbon-button-text icon-duration_grow_dot',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Add Dot',\r\n text: '>'\r\n });\r\n this.lessDotComponent = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'lessDot',\r\n smoName: 'lessDot',\r\n parentControl: this,\r\n icon: 'icon-smo ribbon-button-text icon-duration_less_dot',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Remove Dot',\r\n text: '<'\r\n });\r\n }\r\n getValue(): string {\r\n if (this.growDurationComponent.changeFlag) {\r\n return this.growDurationComponent.smoName;\r\n }\r\n if (this.lessDurationComponent.changeFlag) {\r\n return this.lessDurationComponent.smoName;\r\n }\r\n if (this.growDotComponent.changeFlag) {\r\n return this.growDotComponent.smoName;\r\n }\r\n if (this.lessDotComponent.changeFlag) {\r\n return this.lessDotComponent.smoName;\r\n }\r\n return '';\r\n } \r\n setValue(value: string) {\r\n // ignore\r\n }\r\n async changed() {\r\n this.handleChanged();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl buttonArray'))\r\n .attr('id', this.parameterId);\r\n q.append(this.growDurationComponent.html);\r\n q.append(this.lessDurationComponent.html);\r\n q.append(this.growDotComponent.html);\r\n q.append(this.lessDotComponent.html);\r\n return q;\r\n }\r\n bind() {\r\n this.growDurationComponent.bind();\r\n this.lessDurationComponent.bind();\r\n this.lessDotComponent.bind();\r\n this.growDotComponent.bind();\r\n }\r\n}\r\n\r\nexport class SuiDurationAdapter extends SuiComponentAdapter {\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.view.groupUndo(true);\r\n }\r\n get durationButtons() {\r\n return '';\r\n }\r\n set durationButtons(value: string) {\r\n if (value === 'growDuration') {\r\n this.view.batchDurationOperation('doubleDuration');\r\n }\r\n if (value === 'lessDuration') {\r\n this.view.batchDurationOperation('halveDuration');\r\n }\r\n if (value === 'growDot') {\r\n this.view.batchDurationOperation('dotDuration');\r\n }\r\n if (value === 'lessDot') {\r\n this.view.batchDurationOperation('undotDuration');\r\n }\r\n }\r\n async cancel() {\r\n await this.view.undo();\r\n }\r\n async commit() {\r\n }\r\n}\r\nexport class SuiDurationDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Duration',\r\n elements:\r\n [{\r\n smoName: 'durationButtons',\r\n control: 'SuiDurationButtonComponent',\r\n label: 'Note Duration'\r\n }, {\r\n smoName: 'textMessage4',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: `Learn the keyboard shortcuts, they're much faster!`,\r\n classes: 'hide-input'\r\n }, {\r\n smoName: 'textMessage',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use , . to decrease/increase note length.',\r\n classes: 'hide-input'\r\n }, {\r\n smoName: 'textMessage2',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use <> to add/remove dots.',\r\n classes: 'hide-input'\r\n }, {\r\n smoName: 'textMessage3',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use shift+arrow navigation keys to select notes',\r\n classes: 'hide-input'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiDurationAdapter(parameters.view);\r\n super(SuiDurationDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE'];\r\n }\r\n}","import { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoDynamicText, SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport class SuiDynamicDialogAdapter extends SuiComponentAdapter {\r\n modifier: SmoDynamicText;\r\n backup: SmoDynamicText;\r\n selection: SmoSelection;\r\n constructor(view: SuiScoreViewOperations, modifier: SmoDynamicText) {\r\n super(view);\r\n this.modifier = modifier;\r\n this.backup = new SmoDynamicText(this.modifier);\r\n if (this.view.tracker.modifierSelections.length) {\r\n this.selection = this.view.tracker.modifierSelections[0].selection!;\r\n } else {\r\n this.selection = this.view.tracker.selections[0];\r\n }\r\n }\r\n async cancel() {\r\n await this.view.addDynamic(this.selection, this.backup);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get xOffset() {\r\n return this.modifier.xOffset;\r\n }\r\n async remove() {\r\n await this.view.removeDynamic(this.modifier);\r\n }\r\n set xOffset(value: number) {\r\n this.modifier.xOffset = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get fontSize() {\r\n return this.modifier.fontSize;\r\n }\r\n set fontSize(value: number) {\r\n this.modifier.fontSize = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get yOffsetLine() {\r\n return this.modifier.yOffsetLine;\r\n }\r\n set yOffsetLine(value: number) {\r\n this.modifier.yOffsetLine = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get yOffsetPixels() {\r\n return this.modifier.yOffsetPixels;\r\n }\r\n set yOffsetPixels(value: number) {\r\n this.modifier.yOffsetPixels = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n get text() {\r\n return this.modifier.text;\r\n }\r\n set text(value: string) {\r\n this.modifier.text = value;\r\n this.view.addDynamic(this.selection, this.modifier);\r\n }\r\n}\r\n// ## SuiDynamicModifierDialog\r\n// This is a poorly named class, it just allows you to placeText\r\n// dynamic text so it doesn't collide with something.\r\nexport class SuiDynamicModifierDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = {\r\n label: 'Dynamics Properties', elements:\r\n [{\r\n smoName: 'yOffsetLine',\r\n defaultValue: 11,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Line'\r\n }, {\r\n smoName: 'yOffsetPixels',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset Px'\r\n }, {\r\n smoName: 'xOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset'\r\n }, {\r\n smoName: 'text',\r\n defaultValue: SmoDynamicText.dynamics.P,\r\n options: [{\r\n value: SmoDynamicText.dynamics.P,\r\n label: 'Piano'\r\n }, {\r\n value: SmoDynamicText.dynamics.PP,\r\n label: 'Pianissimo'\r\n }, {\r\n value: SmoDynamicText.dynamics.MP,\r\n label: 'Mezzo-Piano'\r\n }, {\r\n value: SmoDynamicText.dynamics.MF,\r\n label: 'Mezzo-Forte'\r\n }, {\r\n value: SmoDynamicText.dynamics.F,\r\n label: 'Forte'\r\n }, {\r\n value: SmoDynamicText.dynamics.FF,\r\n label: 'Fortissimo'\r\n }, {\r\n value: SmoDynamicText.dynamics.SFZ,\r\n label: 'Sforzando'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'Text'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiDynamicDialogAdapter(parameters.view, parameters.modifier);\r\n super(SuiDynamicModifierDialog.dialogElements, { adapter, ...parameters });\r\n this.view.groupUndo(true);\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoBarline, SmoRepeatSymbol } from '../../smo/data/measureModifiers';\r\nimport { reverseStaticMap } from '../../smo/data/common';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { getButtonsFcn, SuiButtonArrayComponent, SuiButtonArrayParameters } from './components/buttonArray';\r\nimport { SuiDialogNotifier, SuiBaseComponentParams } from './components/baseComponent';\r\n\r\nconst endingsButtonFactory: getButtonsFcn = () => {\r\n const params: SuiButtonArrayParameters = {\r\n label: 'Measure Endings',\r\n rows: [{\r\n label: 'Endings',\r\n classes: 'pad-span',\r\n buttons: [\r\n {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-smo ribbon-button-text icon-end_rpt',\r\n id: 'endRepeat',\r\n label: 'end repeat',\r\n smoName: 'endRepeat'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-smo ribbon-button-text icon-end_bar',\r\n id: 'endBar',\r\n label: 'end barline',\r\n smoName: 'endBar'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-smo ribbon-button-text icon-end_bar',\r\n id: 'doubleBar',\r\n label: 'double barline',\r\n smoName: 'doubleBar'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-smo ribbon-button-text',\r\n id: 'noBarEnd',\r\n label: 'no barline',\r\n smoName: 'noBar'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-smo ribbon-button-text icon-single_bar',\r\n id: 'singleBarEnd',\r\n label: 'single bar',\r\n smoName: 'singleBar'\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n return params;\r\n}\r\nconst startBarButtonFactory: getButtonsFcn = () => {\r\n const params: SuiButtonArrayParameters = {\r\n label: 'Measure Endings',\r\n rows: [{\r\n label: 'Start Bar',\r\n classes: 'text-span',\r\n buttons: [\r\n {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-smo ribbon-button-text icon-start_rpt',\r\n id: 'startRepeat',\r\n label: 'start repeat',\r\n smoName: 'startRepeat'\r\n },\r\n {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-smo ribbon-button-text',\r\n id: 'noBarStart',\r\n label: 'no barline',\r\n smoName: 'noBar'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-smo ribbon-button-text icon-single_bar',\r\n id: 'singleBarStart',\r\n label: 'single bar',\r\n smoName: 'singleBar'\r\n }\r\n ]\r\n }]\r\n };\r\n return params;\r\n}\r\nconst repeatSymbolButtonFactory: getButtonsFcn = () => {\r\n const params: SuiButtonArrayParameters = {\r\n label: 'Repeat Symbols',\r\n rows: [{\r\n label: 'Repeat',\r\n classes: 'text-span',\r\n buttons: [\r\n {\r\n classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'DcAlCoda',\r\n label: 'DC Al Coda',\r\n text: 'DC Al Coda',\r\n smoName: 'DcAlCoda'\r\n }, {\r\n classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'DsAlCoda',\r\n label: 'DS Al Coda',\r\n text: 'DS Al Coda',\r\n smoName: 'DsAlCoda'\r\n }, {\r\n classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'ToCoda',\r\n label: 'to Coda',\r\n text: 'to Coda',\r\n smoName: 'ToCoda'\r\n }]\r\n }, {\r\n label: 'Text',\r\n classes: 'pad-span',\r\n buttons: [{\r\n classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'DcAlFine',\r\n label: 'DC Al Fine',\r\n text: 'DC Al Fine',\r\n smoName: 'DcAlFine'\r\n }, {\r\n classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'DsAlFine',\r\n label: 'DS Al Fine',\r\n text: 'DS Al Fine',\r\n smoName: 'DsAlFine'\r\n }, {\r\n classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'Fine',\r\n label: 'Fine',\r\n text: 'Fine',\r\n smoName: 'Fine'\r\n }]\r\n }, {\r\n label: 'Symbols',\r\n classes: 'pad-span',\r\n buttons: [{\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-lg icon-segno',\r\n id: 'Segno',\r\n label: 'Segno',\r\n smoName: 'Segno'\r\n },\r\n {\r\n icon: 'icon-bravura icon-lg icon-coda',\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n smoName: 'Coda',\r\n label: 'Coda',\r\n id: 'Coda'\r\n }\r\n ]\r\n }]\r\n };\r\n return params;\r\n}\r\nexport class SuiEndBarButtonComponent extends SuiButtonArrayComponent {\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter, endingsButtonFactory);\r\n }\r\n}\r\nexport class SuiStartBarButtonComponent extends SuiButtonArrayComponent {\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter, startBarButtonFactory);\r\n }\r\n}\r\nexport class SuiRepeatSymbolButtonComponent extends SuiButtonArrayComponent {\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter, repeatSymbolButtonFactory);\r\n }\r\n}\r\nexport class SuiEndingsAdapter extends SuiComponentAdapter {\r\n startBarCode: string;\r\n endBarCode: string;\r\n repeatSymbolCode: string;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.view.groupUndo(true);\r\n const measure = this.view.tracker.selections[0].measure;\r\n this.startBarCode = SmoBarline.barlineString(measure.getStartBarline());\r\n this.endBarCode = SmoBarline.barlineString(measure.getEndBarline());\r\n const rs = measure.getRepeatSymbol();\r\n if (rs) {\r\n this.repeatSymbolCode = SmoRepeatSymbol.repeatSymbolString(rs);\r\n } else {\r\n this.repeatSymbolCode = '';\r\n }\r\n }\r\n get repeatSymbolComponent() {\r\n return this.repeatSymbolCode;\r\n }\r\n set repeatSymbolComponent(value: string) {\r\n this.repeatSymbolCode = value;\r\n if (SmoRepeatSymbol.symbols[value] === SmoRepeatSymbol.symbols.Coda) {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Coda);\r\n }\r\n if (SmoRepeatSymbol.symbols[value] === SmoRepeatSymbol.symbols.ToCoda) {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.ToCoda);\r\n }\r\n if (SmoRepeatSymbol.symbols[value] === SmoRepeatSymbol.symbols.Segno) {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Segno);\r\n }\r\n if (SmoRepeatSymbol.symbols[value] === SmoRepeatSymbol.symbols.DsAlCoda) {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DsAlCoda);\r\n }\r\n if (SmoRepeatSymbol.symbols[value] === SmoRepeatSymbol.symbols.DcAlCoda) {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DcAlCoda);\r\n }\r\n if (SmoRepeatSymbol.symbols[value] === SmoRepeatSymbol.symbols.DsAlFine) {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DsAlFine);\r\n }\r\n if (SmoRepeatSymbol.symbols[value] === SmoRepeatSymbol.symbols.DcAlFine) {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.DcAlFine);\r\n }\r\n if (SmoRepeatSymbol.symbols[value] === SmoRepeatSymbol.symbols.Fine) {\r\n this.view.setRepeatSymbol(SmoRepeatSymbol.positions.end, SmoRepeatSymbol.symbols.Fine);\r\n }\r\n }\r\n\r\n get endBarComponent() {\r\n return this.endBarCode;\r\n }\r\n set endBarComponent(value: string) {\r\n this.endBarCode = value;\r\n if (SmoBarline.barlines[value] === SmoBarline.barlines.endRepeat) {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.endRepeat);\r\n }\r\n if (SmoBarline.barlines[value] === SmoBarline.barlines.startRepeat) {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.startRepeat);\r\n }\r\n if (SmoBarline.barlines[value] === SmoBarline.barlines.singleBar) {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.singleBar);\r\n }\r\n if (SmoBarline.barlines[value] === SmoBarline.barlines.doubleBar) {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.doubleBar);\r\n }\r\n if (SmoBarline.barlines[value] === SmoBarline.barlines.endBar) {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.endBar);\r\n }\r\n if (SmoBarline.barlines[value] === SmoBarline.barlines.noBar) {\r\n this.view.setBarline(SmoBarline.positions.end, SmoBarline.barlines.noBar);\r\n } \r\n }\r\n get startBarComponent() {\r\n return this.startBarCode;\r\n }\r\n set startBarComponent(value: string) {\r\n this.startBarCode = value;\r\n if (SmoBarline.barlines[value] === SmoBarline.barlines.startRepeat) {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.startRepeat);\r\n }\r\n if (SmoBarline.barlines[value] === SmoBarline.barlines.singleBar) {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.singleBar);\r\n }\r\n if (SmoBarline.barlines[value] === SmoBarline.barlines.noBar) {\r\n this.view.setBarline(SmoBarline.positions.start, SmoBarline.barlines.noBar);\r\n }\r\n }\r\n async commit() {\r\n }\r\n async cancel() {\r\n await this.view.undo();\r\n }\r\n async remove() {\r\n }\r\n}\r\nexport class SuiEndingsDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Measure Endings',\r\n elements:\r\n [{\r\n smoName: 'startBarComponent',\r\n control: 'SuiStartBarButtonComponent',\r\n label: 'Measure Start'\r\n }, {\r\n smoName: 'endBarComponent',\r\n control: 'SuiEndBarButtonComponent',\r\n label: 'Measure End'\r\n }, {\r\n smoName: 'repeatSymbolComponent',\r\n control: 'SuiRepeatSymbolButtonComponent',\r\n label: 'Repeat Symbol'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiEndingsAdapter(parameters.view);\r\n super(SuiEndingsDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE'];\r\n }\r\n async changed() {\r\n this.view.undoTrackerMeasureSelections('endings dialog');\r\n await super.changed();\r\n }\r\n}","\r\nimport { SmoModifier } from '../../smo/data/score';\r\nimport { SuiDialogBase, SuiDialogParams, createAndDisplayDialog } from './dialog';\r\nimport { SuiHairpinAttributesDialog } from './hairpin';\r\nimport { SuiSlurAttributesDialog } from './slur';\r\nimport { SuiPedalMarkingDialog } from './pedalMarking';\r\nimport { SuiVoltaAttributeDialog } from './volta';\r\nimport { SuiLyricDialog } from './lyric';\r\nimport { SuiTieAttributesDialog } from './tie';\r\nimport { SuiDynamicModifierDialog } from './dynamics';\r\nimport { SuiTextBlockDialog } from './textBlock';\r\nimport { SuiTextBracketDialog } from './textBracket';\r\n\r\nexport type ModifiersWithDialogs = 'SmoStaffHairpin' | 'SmoTie' | 'SmoSlur' | \r\n'SmoDynamicText' | 'SmoVolta' | 'SmoScoreText' | 'SmoLoadScore' | 'SmoLyric' | 'SmoPedalMarking';\r\nexport var ModifiersWithDialogNames = ['SmoStaffHairpin', 'SmoTie', 'SmoSlur', 'SmoDynamicText', 'SmoVolta',\r\n 'SmoScoreText', 'SmoLoadScore', 'SmoLyric', 'SmoTextGroup', 'SmoStaffTextBracket', 'SmoPedalMarking'];\r\n\r\nexport function isModifierWithDialog(modifier: SmoModifier) {\r\n return ModifiersWithDialogNames.indexOf(modifier.attrs.type) >= 0;\r\n}\r\n/**\r\n * Dialogs bound to selectable elements like slurs, dynamics, are created \r\n * directly from a button/menu option\r\n * @category SuiDialog\r\n */\r\n export class SuiModifierDialogFactory {\r\n static createModifierDialog(modifier: SmoModifier, parameters: SuiDialogParams): SuiDialogBase | null {\r\n if (!isModifierWithDialog(modifier)) {\r\n return null;\r\n }\r\n const ctor = modifier.attrs.type;\r\n parameters.modifier = modifier;\r\n if (ctor === 'SmoStaffHairpin') {\r\n return createAndDisplayDialog(SuiHairpinAttributesDialog, parameters);\r\n } else if (ctor === 'SmoPedalMarking') {\r\n return createAndDisplayDialog(SuiPedalMarkingDialog, parameters);\r\n } else if (ctor === 'SmoTie') {\r\n return createAndDisplayDialog(SuiTieAttributesDialog, parameters);\r\n } else if (ctor === 'SmoSlur') {\r\n return createAndDisplayDialog(SuiSlurAttributesDialog, parameters);\r\n } else if (ctor === 'SmoDynamicText') {\r\n return createAndDisplayDialog(SuiDynamicModifierDialog, parameters);\r\n } else if (ctor === 'SmoVolta') {\r\n return createAndDisplayDialog(SuiVoltaAttributeDialog, parameters);\r\n } else if (ctor === 'SmoTextGroup') { \r\n return createAndDisplayDialog(SuiTextBlockDialog, parameters);\r\n } else if (ctor === 'SmoStaffTextBracket') {\r\n return createAndDisplayDialog(SuiTextBracketDialog, parameters);\r\n } else {\r\n return createAndDisplayDialog(SuiLyricDialog, parameters);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiDialogBase, SuiDialogParams, DialogDefinition } from './dialog';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { XmlToSmo } from '../../smo/mxml/xmlToSmo';\r\nimport { SmoToXml } from '../../smo/mxml/smoToXml';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiFileDownloadComponent } from './components/fileDownload';\r\nimport { SuiDialogAdapterBase, SuiComponentAdapter } from './adapter';\r\nimport { addFileLink } from '../../common/htmlHelpers';\r\nimport { SmoToMidi } from '../../smo/midi/smoToMidi';\r\nimport { MidiToSmo } from '../../smo/midi/midiToSmo';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SmoToVex } from '../../render/vex/toVex';\r\ndeclare var $: any;\r\n// declare var MidiParser: any;\r\ndeclare var parseMidi: any;\r\ndeclare var JSZip: any;\r\n\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\nexport class SuiSmoLoadAdapter extends SuiComponentAdapter {\r\n jsonFile: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.jsonFile;\r\n }\r\n set loadFile(value: string) {\r\n this.jsonFile = value;\r\n }\r\n async commit() {\r\n let scoreWorks = false;\r\n if (this.jsonFile.length > 0) {\r\n try {\r\n const score = SmoScore.deserialize(this.jsonFile);\r\n scoreWorks = true;\r\n await this.view.changeScore(score);\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n/**\r\n * Load a SMO JSON file\r\n * @category SuiDialog\r\n */\r\nexport class SuiLoadFileDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n }\r\n ],\r\n staticText: []\r\n };\r\n get loadFileCtrl() {\r\n return this.cmap['loadFileCtrl'] as SuiFileDownloadComponent;\r\n }\r\n modifier: SuiSmoLoadAdapter;\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiSmoLoadAdapter(parameters.view);\r\n parameters.ctor = 'SuiLoadFileDialog';\r\n super(SuiLoadFileDialog.dialogElements, { adapter, ...parameters });\r\n this.modifier = adapter;\r\n }\r\n async changed() {\r\n super.changed();\r\n const enable = this.modifier.loadFile.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n async commit() {\r\n await this.modifier.commit();\r\n }\r\n}\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\n export class SuiXmlLoadAdapter extends SuiComponentAdapter {\r\n xmlFile: string = '';\r\n changeScore: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.xmlFile;\r\n }\r\n set loadFile(value: string) {\r\n this.xmlFile = value;\r\n }\r\n async commit() {\r\n try {\r\n const self = this;\r\n const parser = new DOMParser();\r\n const xml = parser.parseFromString(this.xmlFile, 'text/xml');\r\n const score = XmlToSmo.convert(xml);\r\n score.layoutManager!.zoomToWidth($('body').width());\r\n this.changeScore = true;\r\n await this.view.changeScore(score);\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n\r\n/**\r\n * Load a music XML file\r\n * @category SuiDialog\r\n */\r\nexport class SuiLoadMxmlDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n },\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiLoadMxmlDialog';\r\n const adapter = new SuiXmlLoadAdapter(parameters.view);\r\n super(SuiLoadMxmlDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async changed() {\r\n super.changed();\r\n const enable = this.adapter.loadFile.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n}\r\n/**\r\n * internal state of FileLoadDialog is just the string for the filename.\r\n * @category SuiDialog\r\n */\r\n export class SuiMidiLoadAdapter extends SuiComponentAdapter {\r\n midiFile: any = null;\r\n changeScore: boolean = false;\r\n quantize: number = MidiToSmo.quantizeTicksDefault;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get loadFile() {\r\n return this.midiFile;\r\n }\r\n set loadFile(value: any) {\r\n this.midiFile = value;\r\n }\r\n get quantizeDuration() {\r\n return this.quantize;\r\n }\r\n set quantizeDuration(value: number) {\r\n this.quantize = value;\r\n }\r\n async commit() {\r\n try {\r\n // midi parser expects data in UintArray form\r\n const ar = new Uint8Array(this.midiFile);\r\n const midi: any = parseMidi(ar);\r\n const midiParser = new MidiToSmo(midi, this.quantize);\r\n await this.view.changeScore(midiParser.convert());\r\n } catch (e) {\r\n console.warn('unable to score ' + e);\r\n }\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiLoadMidiDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Load File',\r\n elements: [{\r\n smoName: 'loadFile',\r\n defaultValue: '',\r\n control: 'SuiFileDownloadComponent',\r\n label: ''\r\n }, {\r\n smoName: 'quantizeDuration',\r\n defaultValue: SmoScore.engravingFonts.Bravura,\r\n control: 'SuiDropdownComponent',\r\n dataType: 'int',\r\n label: 'Quantize to:',\r\n options: [{\r\n value: 1024,\r\n label: '1/16th note'\r\n }, {\r\n value: 512,\r\n label: '1/32nd note'\r\n }, {\r\n value: 2048,\r\n label: '1/8th note'\r\n }]\r\n }, \r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiLoadMidiDialog';\r\n const adapter = new SuiMidiLoadAdapter(parameters.view);\r\n super(SuiLoadMidiDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async changed() {\r\n super.changed();\r\n const enable = this.adapter?.loadFile?.length < 1;\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', enable);\r\n }\r\n}\r\n\r\nexport class SuiPrintFileDialog extends SuiDialogBase {\r\n static dialogElements: DialogDefinition = {\r\n label: 'Print Complete',\r\n elements: [],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiPrintFileDialog';\r\n super(SuiPrintFileDialog.dialogElements, parameters);\r\n }\r\n\r\n changed() { }\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n $('body').removeClass('printing');\r\n this.view.renderer.restoreLayoutAfterPrint();\r\n window.dispatchEvent(new Event('resize'));\r\n this.complete();\r\n });\r\n\r\n $(dgDom.element).find('.cancel-button').remove();\r\n $(dgDom.element).find('.remove-button').remove();\r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiVexSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n page: number = 0;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fileName = this.view.score.scoreInfo.name;\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n\r\n get pageToRender() {\r\n return this.page;\r\n }\r\n set pageToRender(val: number) {\r\n this.page = val;\r\n }\r\n\r\n async _saveScore() {\r\n const vexText = SmoToVex.convert(this.view.score, { div: 'smoo', page: this.page });\r\n if (!this.fileName.endsWith('.js')) {\r\n this.fileName = this.fileName + '.js';\r\n }\r\n /* TODO: zip multiple render files\r\n const zipname = this.fileName.replace('.js', 'zip');\r\n const zipFile = new JSZip();\r\n zipFile.file(this.fileName, vexText);\r\n const content = await zipFile.generateAsync({ type: 'blob' });\r\n addFileLink(zipname, content, $('.saveLink')); */\r\n addFileLink(this.fileName, vexText, $('.saveLink'));\r\n $('.saveLink a')[0].click();\r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n const rawFile = filename.split('.')[0];\r\n if (!filename) {\r\n filename = 'vexRender.js';\r\n }\r\n if (filename.indexOf('.js') < 0) {\r\n filename = filename + '.js';\r\n }\r\n await this._saveScore();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveVexDialog extends SuiDialogAdapterBase{\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save as Vex Code',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }, {\r\n smoName: 'pageToRender',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Page',\r\n dataType: 'int',\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) { \r\n parameters.ctor = 'SuiVexSaveDialog';\r\n const adapter = new SuiVexSaveAdapter(parameters.view);\r\n super(SuiSaveVexDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\nexport class SuiSmoSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fileName = this.view.score.scoreInfo.name;\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveScore() {\r\n const json = this.view.storeScore.serialize();\r\n const jsonText = JSON.stringify(json);\r\n if (!this.fileName.endsWith('.json')) {\r\n this.fileName = this.fileName + '.json';\r\n }\r\n addFileLink(this.fileName, jsonText, $('.saveLink'));\r\n $('.saveLink a')[0].click(); \r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n const rawFile = filename.split('.')[0];\r\n if (!filename) {\r\n filename = 'myScore.json';\r\n }\r\n if (filename.indexOf('.json') < 0) {\r\n filename = filename + '.json';\r\n }\r\n const scoreInfo = this.view.score.scoreInfo;\r\n scoreInfo.name = rawFile;\r\n scoreInfo.version = scoreInfo.version + 1;\r\n await this.view.updateScoreInfo(scoreInfo);\r\n this._saveScore();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveFileDialog extends SuiDialogAdapterBase{\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) { \r\n parameters.ctor = 'SuiSaveFileDialog';\r\n const adapter = new SuiSmoSaveAdapter(parameters.view);\r\n super(SuiSaveFileDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\nexport class SuiSaveJsonValidationAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveScore() {\r\n const json = this.view.storeScore.serialize({ useDictionary: false, skipStaves: false, preserveStaffIds: false });\r\n const jsonText = JSON.stringify(json);\r\n if (!this.fileName.endsWith('.json')) {\r\n this.fileName = this.fileName + '.json';\r\n }\r\n addFileLink(this.fileName, jsonText, $('.saveLink'));\r\n $('.saveLink a')[0].click(); \r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n const rawFile = filename.split('.')[0];\r\n if (!filename) {\r\n filename = 'myScore.json';\r\n }\r\n if (filename.indexOf('.json') < 0) {\r\n filename = filename + '.json';\r\n }\r\n const scoreInfo = this.view.score.scoreInfo;\r\n scoreInfo.name = rawFile;\r\n scoreInfo.version = scoreInfo.version + 1;\r\n await this.view.updateScoreInfo(scoreInfo);\r\n this._saveScore();\r\n }\r\n // noop\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n\r\nexport class SuiXmlSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveXml() {\r\n const dom = SmoToXml.convert(this.view.storeScore);\r\n const ser = new XMLSerializer();\r\n const xmlText = ser.serializeToString(dom);\r\n if (!this.fileName.endsWith('.xml') && !this.fileName.endsWith('.mxml')) {\r\n this.fileName = this.fileName + '.xml';\r\n }\r\n addFileLink(this.fileName, xmlText, $('.saveLink'));\r\n $('.saveLink a')[0].click();\r\n }\r\n async commit() {\r\n let filename = this.fileName;\r\n if (!filename) {\r\n filename = 'myScore.xml';\r\n }\r\n if (filename.indexOf('.xml') < 0) {\r\n filename = filename + '.xml';\r\n }\r\n this.view.score.scoreInfo.version += 1;\r\n this._saveXml();\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n // noop\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveXmlDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiSaveXmlDialog';\r\n const adapter = new SuiXmlSaveAdapter(parameters.view);\r\n super(SuiSaveXmlDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\nexport class SuiSaveJsonValidationDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Export SMO XML',\r\n elements: [{\r\n smoName: 'saveFileName',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiSaveJsonValidationDialog';\r\n const adapter = new SuiSaveJsonValidationAdapter(parameters.view);\r\n super(SuiSaveJsonValidationDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\n\r\nexport class SuiMidiSaveAdapter extends SuiComponentAdapter {\r\n fileName: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n }\r\n get saveFileName() {\r\n return this.fileName;\r\n }\r\n set saveFileName(value: string) {\r\n this.fileName = value;\r\n }\r\n _saveScore() {\r\n const bytes = SmoToMidi.convert(this.view.storeScore);\r\n if (!this.fileName.endsWith('.mid')) {\r\n this.fileName = this.fileName + '.mid';\r\n }\r\n addFileLink(this.fileName, bytes, $('.saveLink'), 'audio/midi');\r\n $('.saveLink a')[0].click();\r\n }\r\n\r\n async commit() {\r\n let filename = this.fileName;\r\n if (!filename) {\r\n filename = 'myScore.mid';\r\n }\r\n if (filename.indexOf('.mid') < 0) {\r\n filename = filename + '.mid';\r\n }\r\n this.view.score.scoreInfo.version += 1;\r\n this._saveScore();\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiSaveMidiDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Save Score as Midi',\r\n elements:\r\n [{\r\n smoName: 'saveFileName',\r\n control: 'SuiTextInputComponent',\r\n label: 'File Name'\r\n }],\r\n staticText: []\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n parameters.ctor = 'SuiSaveMidiDialog';\r\n const adapter = new SuiMidiSaveAdapter(parameters.view);\r\n super(SuiSaveMidiDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n await this.adapter.commit();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { FontInfo } from '../../common/vex';\r\nimport { SmoScore, isEngravingFont } from '../../smo/data/score';\r\nimport { FontPurpose } from '../../smo/data/scoreModifiers';\r\nimport { SmoScoreText } from '../../smo/data/scoreText';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\nexport class SuiScoreFontAdapter extends SuiComponentAdapter {\r\n fonts: FontPurpose[];\r\n backups: FontPurpose[];\r\n changed: boolean = false;\r\n static get defaultFont(): FontInfo {\r\n return {\r\n family: 'Merriweather',\r\n size: 14,\r\n weight: 'normal',\r\n style: 'normal'\r\n };\r\n }\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.fonts = this.view.score.fonts;\r\n this.backups = JSON.parse(JSON.stringify(this.fonts));\r\n this.view = view;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n this.fonts = this.backups;\r\n // This takes advantage of setter/getter side-effect\r\n this.engravingFont = this.engravingFont;\r\n this.lyricFont = this.lyricFont;\r\n this.chordFont = this.chordFont;\r\n }\r\n return PromiseHelpers.emptyPromise()\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n changeFont(purpose: number, name: string, fontInfo: FontInfo): FontPurpose {\r\n const fontSize = SmoScoreText.fontPointSize(fontInfo.size);\r\n const fontFamily = fontInfo.family ?? 'Arial';\r\n const fp: FontPurpose = {\r\n name,\r\n purpose,\r\n family: fontFamily,\r\n size: fontSize,\r\n custom: false\r\n };\r\n const fonts: FontPurpose[] = this.fonts.filter((ff) => ff.purpose !== purpose);\r\n fonts.push(fp);\r\n this.fonts = fonts;\r\n this.changed = true;\r\n return fp;\r\n }\r\n\r\n toInfo(fontPurpose: FontPurpose): FontInfo {\r\n return {\r\n weight: 'normal',\r\n style: 'normal',\r\n ...fontPurpose\r\n };\r\n }\r\n getInfo(purpose: number): FontInfo {\r\n const font = this.fonts.find((ff) => ff.purpose === purpose);\r\n if (font) {\r\n return this.toInfo(font);\r\n }\r\n return SuiScoreFontAdapter.defaultFont;\r\n }\r\n // Only family can be editor for engraving font, so parameter is just a string\r\n get engravingFont(): string {\r\n const font = this.fonts.find((ff) => ff.purpose === SmoScore.fontPurposes.ENGRAVING);\r\n if (font) {\r\n return this.toInfo(font).family ?? 'Arial';\r\n }\r\n return 'Bravura';\r\n }\r\n set engravingFont(value: string) {\r\n this.changed = true;\r\n const current = this.getInfo(SmoScore.fontPurposes.ENGRAVING);\r\n current.family = value;\r\n const fp = this.changeFont(SmoScore.fontPurposes.ENGRAVING, 'engraving', current);\r\n if (isEngravingFont(fp.family)) {\r\n this.view.setEngravingFontFamily(fp.family);\r\n }\r\n }\r\n set chordFont(fontInfo: FontInfo) {\r\n const fp = this.changeFont(SmoScore.fontPurposes.CHORDS, 'chords', fontInfo);\r\n this.view.setChordFont(this.toInfo(fp));\r\n\r\n this.changed = true;\r\n }\r\n get chordFont(): FontInfo {\r\n return this.getInfo(SmoScore.fontPurposes.CHORDS);\r\n }\r\n set lyricFont(fontInfo: FontInfo) {\r\n this.changed = true;\r\n const fp = this.changeFont(SmoScore.fontPurposes.LYRICS, 'lyrics', fontInfo);\r\n this.view.setLyricFont(this.toInfo(fp));\r\n }\r\n get lyricFont(): FontInfo {\r\n return this.getInfo(SmoScore.fontPurposes.LYRICS);\r\n }\r\n}\r\nexport class SuiScoreFontDialog extends SuiDialogAdapterBase {\r\n // ### dialogElements\r\n // all dialogs have elements define the controls of the dialog.\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Fonts', elements:\r\n [{\r\n smoName: 'engravingFont',\r\n defaultValue: SmoScore.engravingFonts.Bravura,\r\n control: 'SuiDropdownComponent',\r\n label: 'Engraving Font',\r\n options: [{\r\n value: 'Bravura',\r\n label: 'Bravura'\r\n }, {\r\n value: 'Gonville',\r\n label: 'Gonville'\r\n }, {\r\n value: 'Petaluma',\r\n label: 'Petaluma'\r\n }, {\r\n value: 'Leland',\r\n label: 'Leland'\r\n }]\r\n }, {\r\n smoName: 'chordFont',\r\n classes: 'chord-font-component',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Chord Font'\r\n }, {\r\n smoName: 'lyricFont',\r\n classes: 'lyric-font-component',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Lyric Font'\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiScoreFontDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScoreFontAdapter(params.view);\r\n super(SuiScoreFontDialog.dialogElements, { adapter, ...params });\r\n this.modifier = params.modifier;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager, SmoGlobalLayout } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiGlobalLayoutAdapter extends SuiComponentAdapter {\r\n scoreLayout: SmoGlobalLayout;\r\n backup: SmoGlobalLayout;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.scoreLayout = this.view.score.layoutManager!.globalLayout;\r\n this.backup = this.view.score.layoutManager!.getGlobalLayout();\r\n this.view = view;\r\n }\r\n // TODO: writeValue is not called in a global context\r\n async writeValue(attr: GlobalLayoutAttributes, value: number) {\r\n if (this.scoreLayout[attr] === value) {\r\n return;\r\n }\r\n this.scoreLayout[attr] = value;\r\n await this.view.setGlobalLayout(this.scoreLayout)\r\n this.changed = true;\r\n }\r\n get noteSpacing() {\r\n return this.scoreLayout.noteSpacing;\r\n }\r\n set noteSpacing(value: number) {\r\n this.writeValue('noteSpacing', value);\r\n }\r\n get pageWidth() {\r\n return this.scoreLayout.pageWidth;\r\n }\r\n set pageWidth(value: number) {\r\n this.writeValue('pageWidth', value);\r\n }\r\n get pageHeight() {\r\n return this.scoreLayout.pageHeight;\r\n }\r\n set pageHeight(value: number) {\r\n this.writeValue('pageHeight', value);\r\n }\r\n get svgScale() {\r\n return this.scoreLayout.svgScale;\r\n }\r\n set svgScale(value: number) {\r\n this.writeValue('svgScale', value);\r\n }\r\n get zoomScale() {\r\n return this.scoreLayout.zoomScale;\r\n }\r\n set zoomScale(value: number) {\r\n this.writeValue('zoomScale', value);\r\n }\r\n get maxMeasureSystem() {\r\n return this.scoreLayout.maxMeasureSystem;\r\n }\r\n set maxMeasureSystem(value: number) {\r\n this.writeValue('maxMeasureSystem', value);\r\n }\r\n\r\n get pageSize() {\r\n const sz = SmoScore.pageSizeFromDimensions(this.scoreLayout.pageWidth, this.scoreLayout.pageHeight);\r\n if (sz === null) {\r\n return 'custom';\r\n }\r\n return sz;\r\n }\r\n set pageSize(value: string) {\r\n if (value === 'custom') {\r\n return;\r\n }\r\n if (SmoScore.pageDimensions[value]) {\r\n const dims = SmoScore.pageDimensions[value];\r\n this.scoreLayout.pageWidth = dims.width;\r\n this.scoreLayout.pageHeight = dims.height;\r\n }\r\n this.view.setGlobalLayout(this.scoreLayout)\r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.setGlobalLayout(this.backup);\r\n }\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiGlobalLayoutDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Global Settings', elements:\r\n [{\r\n smoName: 'noteSpacing',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.noteSpacing,\r\n control: 'SuiRockerComponent',\r\n dataType: 'percent',\r\n label: 'Note Spacing'\r\n }, {\r\n smoName: 'pageSize',\r\n defaultValue: SmoScore.pageSizes[0],\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Size',\r\n options: [\r\n {\r\n value: 'letter',\r\n label: 'Letter (Portrait)'\r\n }, {\r\n value: 'letterLandscape',\r\n label: 'Letter (Landscape)'\r\n }, {\r\n value: 'tabloid',\r\n label: 'Tabloid (11x17)'\r\n }, {\r\n value: 'A4',\r\n label: 'A4'\r\n }, {\r\n value: 'custom',\r\n label: 'Custom'\r\n }]\r\n }, {\r\n smoName: 'pageWidth',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageWidth,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Width (px)'\r\n }, {\r\n smoName: 'pageHeight',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageHeight,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Height (px)'\r\n }, {\r\n smoName: 'zoomScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.zoomScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Zoom',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'svgScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.svgScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Note size',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'maxMeasureSystem',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.maxMeasureSystem,\r\n control: 'SuiRockerComponent',\r\n label: 'Max Measure/System (0=auto)',\r\n dataType: 'int'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiGlobalLayoutAdapter(params.view);\r\n super(SuiGlobalLayoutDialog.dialogElements, { adapter, ...params });\r\n }\r\n async changed() {\r\n await super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n }\r\n}\r\n","import {SuiButtonComposite } from './components/button';\r\nimport { buildDom } from '../../common/htmlHelpers';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiDialogNotifier, \r\n SuiComponentParent, SuiBaseComponentParams } from './components/baseComponent';\r\nexport class SuiGraceNoteButtonsComponent extends SuiComponentParent {\r\n addGraceNoteBtn: SuiButtonComposite;\r\n removeGraceNoteBtn: SuiButtonComposite;\r\n slashGraceNoteBtn: SuiButtonComposite;\r\n\r\n constructor(dialog: SuiDialogNotifier, params: SuiBaseComponentParams) {\r\n super(dialog, params);\r\n this.addGraceNoteBtn = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'addGraceNote',\r\n smoName: 'addGraceNote',\r\n parentControl: this,\r\n icon: 'ribbon-button-text icon icon-smo icon-grace_note',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Add Grace Note',\r\n text: 'G'\r\n });\r\n this.removeGraceNoteBtn = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'removeGraceNote',\r\n smoName: 'removeGraceNote',\r\n parentControl: this,\r\n icon: 'ribbon-button-text icon icon-smo icon-grace_remove',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Remove Grace Note',\r\n text: 'alt-g'\r\n });\r\n this.slashGraceNoteBtn = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'slashGraceNote',\r\n smoName: 'slashGraceNote',\r\n parentControl: this,\r\n icon: 'ribbon-button-text icon icon-smo icon-grace_slash',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Slash Grace Note'\r\n });\r\n }\r\n getValue(): string {\r\n if (this.addGraceNoteBtn.changeFlag) {\r\n return this.addGraceNoteBtn.smoName;\r\n }\r\n if (this.removeGraceNoteBtn.changeFlag) {\r\n return this.removeGraceNoteBtn.smoName;\r\n }\r\n if (this.slashGraceNoteBtn.changeFlag) {\r\n return this.slashGraceNoteBtn.smoName;\r\n }\r\n return '';\r\n }\r\n setValue(value: string) {\r\n // ignore\r\n }\r\n async changed() {\r\n this.handleChanged();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl buttonArray'))\r\n .attr('id', this.parameterId);\r\n q.append(this.addGraceNoteBtn.html);\r\n q.append(this.removeGraceNoteBtn.html);\r\n q.append(this.slashGraceNoteBtn.html);\r\n return q;\r\n }\r\n bind() {\r\n this.addGraceNoteBtn.bind();\r\n this.removeGraceNoteBtn.bind();\r\n this.slashGraceNoteBtn.bind();\r\n }\r\n}\r\n\r\nexport class SuiGraceNoteAdapter extends SuiComponentAdapter {\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.view.groupUndo(true);\r\n }\r\n get modifyGraceNotes() {\r\n return '';\r\n }\r\n set modifyGraceNotes(value: string) {\r\n if (value === 'addGraceNote') {\r\n this.view.addGraceNote();\r\n }\r\n if (value === 'removeGraceNote') {\r\n this.view.removeGraceNote();\r\n }\r\n if (value === 'slashGraceNote') {\r\n this.view.slashGraceNotes();\r\n }\r\n }\r\n async commit() {\r\n await this.view.renderPromise();\r\n }\r\n async cancel() {\r\n await this.view.undo();\r\n }\r\n}\r\nexport class SuiGraceNoteDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Grace Notes',\r\n elements:\r\n [{\r\n smoName: 'modifyGraceNotes',\r\n control: 'SuiGraceNoteButtonsComponent',\r\n label: 'Add/Remove Grace notes'\r\n }, {\r\n smoName: 'textLabel',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use hot keys shift-G to add grace notes, alt-g to remove.',\r\n classes: 'hide-input'\r\n }, {\r\n smoName: 'textLabelSelect',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use hot key alt-l to select grace notes for pitches, durations',\r\n classes: 'hide-input'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiGraceNoteAdapter(parameters.view);\r\n super(SuiGraceNoteDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE'];\r\n }\r\n}\r\n\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoStaffHairpin, } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SmoHairpinNumberParams = 'xOffsetLeft' | 'xOffsetRight' | 'yOffset' | 'height' | 'position';\r\nexport class SuiHairpinAdapter extends SuiComponentAdapter {\r\n backup: SmoStaffHairpin;\r\n hairpin: SmoStaffHairpin;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, hairpin: SmoStaffHairpin) {\r\n super(view);\r\n this.hairpin = hairpin;\r\n this.view = view;\r\n this.backup = new SmoStaffHairpin(this.hairpin);\r\n this.backup.attrs.id = hairpin.attrs.id;\r\n this.backup.associatedStaff = hairpin.associatedStaff;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addOrUpdateStaffModifier(this.hairpin, this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.hairpin);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async updateValue(param: SmoHairpinNumberParams, val: number) {\r\n const current = new SmoStaffHairpin(this.hairpin);\r\n this.hairpin[param] = val;\r\n await this.view.addOrUpdateStaffModifier(current, this.hairpin);\r\n this.changed = true;\r\n }\r\n get xOffsetLeft() {\r\n return this.hairpin.xOffsetLeft;\r\n }\r\n set xOffsetLeft(val: number) {\r\n this.updateValue('xOffsetLeft', val);\r\n }\r\n get xOffsetRight() {\r\n return this.hairpin.xOffsetRight;\r\n }\r\n set xOffsetRight(val: number) {\r\n this.updateValue('xOffsetRight', val);\r\n }\r\n get yOffset() {\r\n return this.hairpin.yOffset;\r\n }\r\n set yOffset(val: number) {\r\n this.updateValue('yOffset', val);\r\n }\r\n get height() {\r\n return this.hairpin.height;\r\n }\r\n set height(val: number) {\r\n this.updateValue('height', val);\r\n }\r\n get position() {\r\n return this.hairpin.position;\r\n }\r\n set position(val: number) {\r\n this.updateValue('position', val);\r\n }\r\n}\r\nexport class SuiHairpinAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Hairpin Properties', elements:\r\n [{\r\n smoName: 'height',\r\n defaultValue: 10,\r\n control: 'SuiRockerComponent',\r\n label: 'Height'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Shift'\r\n }, {\r\n smoName: 'xOffsetRight',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Right Shift'\r\n }, {\r\n smoName: 'xOffsetLeft',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Left Shift'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiHairpinAdapter(parameters.view, parameters.modifier);\r\n super(SuiHairpinAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef } from '../../smo/data/common';\r\nimport { SmoInstrument, SmoInstrumentNumParamType, SmoInstrumentStringParamType } from '../../smo/data/staffModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { SuiSampleMedia } from '../../render/audio/samples';\r\n\r\nexport class SuiInstrumentAdapter extends SuiComponentAdapter {\r\n instrument: SmoInstrument;\r\n backup: SmoInstrument;\r\n selections: SmoSelection[];\r\n selector: SmoSelector;\r\n applies: number = SuiInstrumentDialog.applyTo.selected;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n this.instrument = new SmoInstrument(this.view.score.getStaffInstrument(selection.selector));\r\n this.selections = SmoSelection.getMeasureList(this.view.tracker.selections);\r\n this.selector = JSON.parse(JSON.stringify(this.selections[0].selector));\r\n this.backup = new SmoInstrument(this.instrument);\r\n }\r\n writeNumParam(paramName: SmoInstrumentNumParamType, value: number) {\r\n this.instrument[paramName] = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n writeStringParam(paramName: SmoInstrumentStringParamType, value: string) {\r\n this.instrument[paramName] = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n\r\n get transposeIndex() {\r\n return this.instrument.keyOffset;\r\n }\r\n set transposeIndex(value: number) {\r\n this.writeNumParam('keyOffset', value);\r\n }\r\n get instrumentName() {\r\n return this.instrument.instrumentName;\r\n }\r\n get subFamily() {\r\n return this.instrument.instrument;\r\n }\r\n set subFamily(value: string) {\r\n this.writeStringParam('instrument', value);\r\n this.instrument.family = SuiSampleMedia.getFamilyForInstrument(value);\r\n }\r\n set instrumentName(value: string) {\r\n this.writeStringParam('instrumentName', value);\r\n }\r\n get clef(): Clef {\r\n return this.instrument.clef;\r\n }\r\n set clef(value: Clef) {\r\n this.instrument.clef = value;\r\n this.view.changeInstrument(this.instrument, this.selections);\r\n this.instrument = new SmoInstrument(this.instrument);\r\n }\r\n get applyTo() {\r\n return this.applies;\r\n }\r\n set applyTo(value: number) {\r\n this.applies = value;\r\n if (value === SuiInstrumentDialog.applyTo.score) {\r\n this.selections = SmoSelection.selectionsToEnd(this.view.score, this.selector.staff, 0);\r\n } else if (this.applyTo === SuiInstrumentDialog.applyTo.remaining) {\r\n this.selections = SmoSelection.selectionsToEnd(this.view.score, this.selector.staff, this.selector.measure);\r\n } else {\r\n this.selections = this.view.tracker.selections;\r\n }\r\n }\r\n async commit() {\r\n // hack: the family name for musicxml purposes is here.\r\n this.instrument.family = SuiSampleMedia.getFamilyForInstrument(this.instrument.instrument);\r\n await this.view.changeInstrument(this.instrument, this.selections);\r\n }\r\n async cancel() {\r\n await this.view.changeInstrument(this.backup, this.selections);\r\n }\r\n async remove() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiInstrumentDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Instrument Properties',\r\n elements:\r\n [{\r\n smoName: 'transposeIndex',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose Index (1/2 steps)',\r\n }, {\r\n smoName: 'instrumentName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Name'\r\n }, {\r\n smoName: 'subFamily',\r\n control: 'SuiDropdownComponent',\r\n label: 'Sample Sound',\r\n options: [{\r\n value: 'piano',\r\n label:'Grand Piano'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass (bowed)'\r\n }, {\r\n value: 'jazzBass',\r\n label: 'Bass (plucked)'\r\n }, {\r\n value: 'eGuitar',\r\n label: 'Electric Guitar'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'trombone',\r\n label: 'Trombone'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'flute',\r\n label: 'Flute'\r\n }, {\r\n value: 'altoSax',\r\n label: 'Eb Alto Sax'\r\n }, {\r\n value: 'tenorSax',\r\n label: 'Bb Tenor Sax'\r\n }, {\r\n value: 'bariSax',\r\n label: 'Eb Bari Sax'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }, {\r\n smoName: 'clef',\r\n control: 'SuiDropdownComponent',\r\n label: 'Clef',\r\n options: [{\r\n value: 'treble',\r\n label:'Treble'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass'\r\n }, {\r\n value: 'tenor',\r\n label: 'Tenor'\r\n }, {\r\n value: 'alto',\r\n label: 'Alto'\r\n }, {\r\n label: 'Percussion',\r\n value: 'percussion'\r\n }]\r\n }, {\r\n smoName: 'applyTo',\r\n defaultValue: SuiInstrumentDialog.applyTo.score,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Apply To',\r\n options: [{\r\n value: SuiInstrumentDialog.applyTo.score,\r\n label: 'Score'\r\n }, {\r\n value: SuiInstrumentDialog.applyTo.selected,\r\n label: 'Selected Measures'\r\n }, {\r\n value: SuiInstrumentDialog.applyTo.remaining,\r\n label: 'Remaining Measures'\r\n }]\r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiInstrumentAdapter(parameters.view);\r\n super(SuiInstrumentDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoTempoText, SmoTempoNumberAttribute, SmoTempoStringAttribute, SmoTempoBooleanAttribute } from '../../smo/data/measureModifiers';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\n\r\n\r\nexport class SuiKeySignatureAdapter extends SuiComponentAdapter {\r\n keySignature: string;\r\n applyToAll: boolean = false; \r\n applyToSelections: boolean = false;\r\n applyToRemaining: boolean = false;\r\n edited: boolean = false;\r\n measure: SmoMeasure;\r\n constructor(view: SuiScoreViewOperations, measure: SmoMeasure) {\r\n super(view);\r\n this.measure = measure;\r\n this.keySignature = measure.keySignature;\r\n }\r\n\r\n async cancel() {\r\n }\r\n applySelections(selections: SmoSelection[]) {\r\n this.view.groupUndo(true);\r\n this.view.modifyColumnsSelectionsNoWait('keySignature', selections, (score, selection) => {\r\n SmoOperation.addKeySignature(score, selection, this.keySignature);\r\n });\r\n this.view.groupUndo(false);\r\n }\r\n async apply() {\r\n let minSel = this.view.tracker.getExtremeSelection(-1).selector.measure;\r\n let maxSel = minSel;\r\n const maxMeasure = this.view.score.staves[0].measures.length - 1;\r\n if (this.applyToAll) {\r\n minSel = 0;\r\n maxSel = maxMeasure;\r\n } else if (this.applyToRemaining) {\r\n maxSel = maxMeasure;\r\n }\r\n const selections = SmoSelection.getMeasuresBetween(this.view.score, \r\n SmoSelector.measureSelector(0, minSel), SmoSelector.measureSelector(0, maxSel));\r\n this.applySelections(selections);\r\n await this.view.updatePromise();\r\n }\r\n get applyTo() {\r\n if (this.applyToAll) {\r\n return 'all';\r\n }\r\n if (this.applyToRemaining) {\r\n return 'remaining';\r\n }\r\n return 'selections';\r\n }\r\n set applyTo(val: string) {\r\n const orig = this.applyTo;\r\n if (orig === val) {\r\n return;\r\n }\r\n this.applyToAll = false;\r\n this.applyToRemaining = false;\r\n this.applyToSelections = false;\r\n if (val === 'all') {\r\n this.applyToAll = true;\r\n } else if (val === 'remaining') {\r\n this.applyToRemaining = true;\r\n } else {\r\n this.applyToSelections = true;\r\n }\r\n }\r\n async commit(){\r\n await this.apply();\r\n }\r\n get key() {\r\n return this.keySignature;\r\n }\r\n set key(value: string) {\r\n this.keySignature = value;\r\n }\r\n}\r\n// ## SuiTempoDialog\r\n// Allow user to choose a tempo or tempo change.\r\nexport class SuiKeySignatureDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Key Signature',\r\n staticText: [],\r\n elements: [\r\n {\r\n smoName: 'key',\r\n defaultValue: 'C',\r\n control: 'SuiDropdownComponent',\r\n label: 'Tempo Mode',\r\n options: [{\r\n label: 'C Major',\r\n value: 'c',\r\n }, {\r\n label: 'F Major',\r\n value: 'f',\r\n }, {\r\n label: 'G Major',\r\n value: 'g',\r\n }, {\r\n label: 'Bb Major',\r\n value: 'bb'\r\n }, {\r\n label: 'D Major',\r\n value: 'd'\r\n }, {\r\n label: 'Eb Major',\r\n value: 'eb'\r\n }, {\r\n label: 'A Major',\r\n value: 'a'\r\n }, {\r\n label: 'Ab Major',\r\n value: 'ab'\r\n }, {\r\n label: 'E Major',\r\n value: 'e'\r\n }, {\r\n label: 'Db Major',\r\n value: 'db'\r\n }, {\r\n label: 'B Major',\r\n value: 'b'\r\n }, {\r\n label: 'F# Major',\r\n value: 'f#'\r\n }, {\r\n label: 'C# Major',\r\n value: 'c#'\r\n }, {\r\n label: 'Gb Major',\r\n value: 'gb'\r\n }\r\n ]\r\n }, {\r\n smoName: 'applyTo',\r\n defaultValue: 'selections',\r\n control: 'SuiDropdownComponent',\r\n label: 'Apply to:',\r\n options: [{\r\n label: 'Current Selections',\r\n value: 'selections',\r\n }, {\r\n label: 'Future Measures',\r\n value: 'remaining',\r\n },{\r\n label: 'Full Score',\r\n value: 'all',\r\n }]\r\n }\r\n ]\r\n };\r\n async changed() {\r\n await super.changed();\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const measures = SmoSelection.getMeasureList(parameters.view.tracker.selections)\r\n .map((sel) => sel.measure);\r\n const measure = measures[0];\r\n const adapter = new SuiKeySignatureAdapter(parameters.view, measure);\r\n super(SuiKeySignatureDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { SmoLibrary } from '../fileio/library';\r\nimport { SuiDialogParams } from './dialog';\r\nimport { DialogDefinitionOption } from './components/baseComponent';\r\nimport { TreeComponentOption, SuiTreeComponent } from './components/tree';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoUiConfiguration } from '../configuration';\r\n\r\ndeclare var $: any;\r\n\r\nexport interface LibraryDefinitionElement {\r\n smoName: string,\r\n control: string,\r\n root: string,\r\n label: string,\r\n options?: DialogDefinitionOption[]\r\n}\r\nexport interface LibraryDefinition {\r\n label: string,\r\n elements: LibraryDefinitionElement[],\r\n staticText: Record[]\r\n}\r\nexport class SuiLibraryAdapter extends SuiComponentAdapter {\r\n topLib: SmoLibrary;\r\n elements: LibraryDefinition | null = null;\r\n selectedUrl: string = '';\r\n libHash: Record = {};\r\n config: SmoUiConfiguration;\r\n selectedLib: SmoLibrary | null;\r\n tree: Record = {};\r\n // If the selected lib is a leaf node (a score), this is the same as that\r\n selectedScore: SmoLibrary | null = null;\r\n constructor(view: SuiScoreViewOperations, config: SmoUiConfiguration) {\r\n super(view);\r\n this.config = config;\r\n this.topLib = new SmoLibrary({ url: this.config.libraryUrl });\r\n this.libHash = {};\r\n this.selectedLib = null;\r\n }\r\n loadPromise() {\r\n\r\n }\r\n initialize(): Promise {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n self.topLib.load().then(() => {\r\n self.libHash[self.topLib.url!] = self.topLib;\r\n resolve();\r\n });\r\n });\r\n }\r\n static addChildRecurse(options: TreeComponentOption[], parent: SmoLibrary, child: SmoLibrary) {\r\n options.push({ label: child.metadata.name, value: child.url, parent: parent.url, format: child.format, expanded: false });\r\n child.children.forEach((gchild) => {\r\n SuiLibraryAdapter.addChildRecurse(options, child, gchild);\r\n });\r\n }\r\n static createOptions(topLib: SmoLibrary) {\r\n const options: TreeComponentOption[] = [];\r\n topLib.children.forEach((child) => {\r\n SuiLibraryAdapter.addChildRecurse(options, topLib, child);\r\n });\r\n return options;\r\n }\r\n buildTreeRecurse(children: SmoLibrary[]) {\r\n children.forEach((child) => {\r\n this.tree[child.url!] = child;\r\n this.buildTreeRecurse(child.children);\r\n });\r\n }\r\n buildTree() {\r\n this.tree = {};\r\n this.buildTreeRecurse(this.topLib.children);\r\n }\r\n async commit() { \r\n }\r\n async cancel() {\r\n }\r\n async loadOptions(options: TreeComponentOption[]): Promise {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n if (self.selectedLib!.format === 'library') {\r\n if (!self.selectedLib!.loaded) {\r\n self.selectedLib!.load().then(() => {\r\n const nops = SuiLibraryAdapter.createOptions(self.topLib);\r\n nops.forEach((option) => {\r\n options.push(option);\r\n });\r\n resolve();\r\n });\r\n } else {\r\n const nops = SuiLibraryAdapter.createOptions(self.topLib);\r\n nops.forEach((option) => {\r\n options.push(option);\r\n });\r\n resolve();\r\n }\r\n }\r\n else {\r\n self.selectedScore = this.selectedLib;\r\n resolve();\r\n }\r\n });\r\n }\r\n async _loadScore() {\r\n await this.view.loadRemoteScore(this.selectedScore!.url!);\r\n }\r\n get selectedLibrary(): SmoLibrary | null {\r\n return this.selectedLib;\r\n }\r\n get smoLibrary() {\r\n return this.selectedUrl;\r\n }\r\n set smoLibrary(value: string) {\r\n this.selectedUrl = value;\r\n this.buildTree();\r\n this.selectedLib = this.tree[this.selectedUrl];\r\n if (this.selectedLib.format !== 'library') {\r\n this.selectedScore = this.selectedLib;\r\n } else {\r\n this.selectedScore = null;\r\n }\r\n }\r\n}\r\n// ## SuiLibraryDialog\r\n// Traverse the library nodes or load a score\r\nexport class SuiLibraryDialog extends SuiDialogAdapterBase {\r\n static dialogElements: LibraryDefinition = {\r\n label: 'Music Library', elements: [{\r\n smoName: 'smoLibrary',\r\n control: 'SuiTreeComponent',\r\n root: '',\r\n label: 'Selection',\r\n options: []\r\n }],\r\n staticText: []\r\n };\r\n static _createElements(topLib: SmoLibrary) {\r\n const elements: LibraryDefinition = JSON.parse(JSON.stringify(SuiLibraryDialog.dialogElements));\r\n const tree = elements.elements[0];\r\n tree.root = topLib.url!;\r\n (tree.options as any) = SuiLibraryAdapter.createOptions(topLib);\r\n return elements;\r\n }\r\n static _createAndDisplay(parameters: SuiDialogParams, adapter: SuiLibraryAdapter) {\r\n const elements = SuiLibraryDialog._createElements(adapter.topLib);\r\n const dg = new SuiLibraryDialog(parameters, elements, adapter);\r\n dg.display();\r\n }\r\n /** Library requires a load first, so createAndDisplayDialog won't work on it */\r\n static async createAndDisplay(parameters: SuiDialogParams, config: SmoUiConfiguration) {\r\n const adapter = new SuiLibraryAdapter(parameters.view, config);\r\n await adapter.initialize();\r\n SuiLibraryDialog._createAndDisplay(parameters, adapter);\r\n }\r\n constructor(parameters: SuiDialogParams, dialogElements: LibraryDefinition, adapter: SuiLibraryAdapter) {\r\n super(dialogElements, { adapter, ...parameters });\r\n }\r\n async commit() {\r\n if (this.adapter.selectedScore !== null) {\r\n await this.adapter._loadScore();\r\n } else {\r\n this.complete();\r\n }\r\n }\r\n get smoLibraryCtrl() {\r\n return this.cmap.smoLibraryCtrl as SuiTreeComponent;\r\n }\r\n async changed() {\r\n const okButton = $(this.dgDom.element).find('.ok-button');\r\n super.changed();\r\n if (this.adapter.selectedLib!.format === 'library') {\r\n $(okButton).prop('disabled', true);\r\n const options: TreeComponentOption[] = [];\r\n await this.adapter.loadOptions(options);\r\n this.smoLibraryCtrl.updateOptions(options);\r\n $(this.smoLibraryCtrl._getInputElement()).find('li[data-value=\"'+this.smoLibraryCtrl.getValue()+'\"] button.expander').click();\r\n } else {\r\n $(okButton).prop('disabled', false);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiLyricComponent } from './components/noteText';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoSelector, SmoSelection } from '../../smo/xform/selections'\r\nimport { SmoLyric } from '../../smo/data/noteModifiers';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { SmoRenderConfiguration } from '../../render/sui/configuration';\r\nimport { EventHandler } from '../eventSource';\r\n\r\ndeclare var $: any;\r\n\r\nfunction isSmoLyric(modifier: any):modifier is SmoLyric {\r\n return modifier?.ctor === 'SmoLyric';\r\n}\r\nexport class SuiLyricDialog extends SuiDialogBase {\r\n static get ctor() {\r\n return 'SuiLyricDialog';\r\n }\r\n static get idleLyricTime() {\r\n return 5000;\r\n }\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Lyric Editor', elements:\r\n [{\r\n smoName: 'verse',\r\n defaultValue: 0,\r\n control: 'SuiDropdownComponent',\r\n label: 'Verse',\r\n classes: 'hide-when-editing',\r\n startRow: true,\r\n options: [{\r\n value: 0,\r\n label: '1'\r\n }, {\r\n value: 1,\r\n label: '2'\r\n }, {\r\n value: 2,\r\n label: '3'\r\n }, {\r\n value: 3,\r\n label: '4'\r\n }\r\n ]\r\n }, {\r\n smoName: 'translateY',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Adjustment (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing',\r\n defaultValue: 0,\r\n control: 'SuiFontComponent',\r\n label: 'Font'\r\n }, {\r\n smoName: 'lyricEditor',\r\n defaultValue: 0,\r\n classes: 'show-always',\r\n control: 'SuiLyricComponent',\r\n label: 'Edit Lyrics',\r\n options: []\r\n },\r\n ], staticText: [\r\n { doneEditing: 'Done Editing Lyrics' },\r\n { undo: 'Undo Lyrics' },\r\n { label: 'Lyric Editor' }\r\n ]\r\n };\r\n originalRefreshTimer: number;\r\n modifier: SmoLyric | null = null;\r\n selector: SmoSelector | null = null;\r\n config: SmoRenderConfiguration;\r\n verse: number = 0;\r\n mouseMoveHandler: EventHandler | null = null;\r\n mouseClickHandler: EventHandler | null = null;\r\n constructor(parameters: SuiDialogParams) {\r\n super(SuiLyricDialog.dialogElements, parameters);\r\n this.config = this.view.config;\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'SELECTIONPOS'];\r\n this.originalRefreshTimer = this.config.idleRedrawTime;\r\n this.config.idleRedrawTime = SuiLyricDialog.idleLyricTime;\r\n this.verse = 0;\r\n }\r\n get lyricEditorCtrl(): SuiLyricComponent {\r\n return this.cmap.lyricEditorCtrl as SuiLyricComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n get translateYCtrl(): SuiRockerComponent {\r\n return this.cmap.translateYCtrl as SuiRockerComponent;\r\n }\r\n get verseCtrl(): SuiDropdownComponent {\r\n return this.cmap.verseCtrl as SuiDropdownComponent;\r\n }\r\n display() {\r\n super.display();\r\n $(this.dgDom.element).find('.smoControl').each((ix: number, ctrl: any) => {\r\n if (!$(ctrl).hasClass('cbLyricEdit')) {\r\n $(ctrl).addClass('fold-textedit');\r\n }\r\n });\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n\r\n if (this.lyricEditorCtrl.session && this.lyricEditorCtrl.session.lyric) {\r\n const lyric = this.lyricEditorCtrl.session.lyric;\r\n this.fontCtrl.setValue({\r\n family: lyric.fontInfo.family,\r\n size: lyric.fontInfo.size,\r\n weight: 'normal'\r\n });\r\n }\r\n }\r\n setLyric(selector: SmoSelector, lyric: SmoLyric) {\r\n this.modifier = lyric;\r\n this.verse = lyric.verse;\r\n this.selector = selector;\r\n this.translateYCtrl.setValue(lyric.translateY);\r\n }\r\n _focusSelection() {\r\n const selection = this.lyricEditorCtrl.session?.selection;\r\n const note = selection?.note;\r\n const box: SvgBox | null = note?.logicalBox ?? null;\r\n if (box) {\r\n this.view.scroller.scrollVisibleBox(this.view.renderer.pageMap.svgToClient(box));\r\n }\r\n }\r\n changed() {\r\n this.lyricEditorCtrl.verse = parseInt(this.verseCtrl.getValue().toString(), 10);\r\n\r\n // TODO: make these undoable\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.view.setLyricFont({ 'family': fontInfo.family, size: fontInfo.size, weight: 'normal' });\r\n }\r\n if (this.translateYCtrl && this.modifier && this.selector) {\r\n this.modifier.translateY = this.translateYCtrl.getValue();\r\n this.view.addOrUpdateLyric(this.selector, this.modifier);\r\n }\r\n }\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').remove();\r\n this.lyricEditorCtrl.startEditSession();\r\n }\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n async evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n if (!this.lyricEditorCtrl.running) {\r\n return;\r\n }\r\n const edited = await this.lyricEditorCtrl.evKey(evdata);\r\n if (edited) {\r\n evdata.stopPropagation();\r\n }\r\n }\r\n }\r\n _complete() {\r\n if (this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.endSession();\r\n }\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.config.idleRedrawTime = this.originalRefreshTimer;\r\n this.complete();\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.lyricEditorCtrl && this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.lyricEditorCtrl && this.lyricEditorCtrl.running) {\r\n this.lyricEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { SmoMeasureFormat, SmoMeasureFormatNumberAttributes, SmoMeasueFormatBooleanAttributes } from '../../smo/data/measureModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiMeasureFormatAdapter extends SuiComponentAdapter {\r\n format: SmoMeasureFormat;\r\n backup: SmoMeasureFormat;\r\n measure: SmoMeasure;\r\n renumberIndex: number;\r\n originalIndex: number;\r\n edited: boolean = false;\r\n constructor(view: SuiScoreViewOperations, measure: SmoMeasure) {\r\n super(view);\r\n this.format = measure.format;\r\n this.renumberIndex = this.originalIndex = measure.measureNumber.localIndex;\r\n this.backup = new SmoMeasureFormat(this.format);\r\n this.measure = measure;\r\n }\r\n writeNumber(param: SmoMeasureFormatNumberAttributes, value: number) {\r\n this.format.measureIndex = this.measure.measureNumber.measureIndex;\r\n this.format[param] = value;\r\n this.view.setMeasureFormat(this.format);\r\n this.edited = true;\r\n }\r\n writeBoolean(param: SmoMeasueFormatBooleanAttributes, value: boolean) {\r\n this.format.measureIndex = this.measure.measureNumber.measureIndex;\r\n this.format[param] = value;\r\n this.view.setMeasureFormat(this.format);\r\n this.edited = true;\r\n }\r\n async commit(){\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.edited) {\r\n await this.view.setMeasureFormat(this.backup);\r\n }\r\n if (this.localIndex !== this.originalIndex) {\r\n await this.view.renumberMeasures(this.measure.measureNumber.measureIndex, this.originalIndex);\r\n }\r\n }\r\n get padLeft() {\r\n return this.format.padLeft;\r\n }\r\n set padLeft(value: number) {\r\n if (value > 0) {\r\n $('.attributeDialog .attributeModal').addClass('pad-left-select');\r\n } else {\r\n $('.attributeDialog .attributeModal').removeClass('pad-left-select');\r\n }\r\n this.writeNumber('padLeft', value);\r\n }\r\n get skipMeasureCount() {\r\n return this.format.skipMeasureCount;\r\n }\r\n set skipMeasureCount(value: boolean) {\r\n this.writeBoolean('skipMeasureCount', value);\r\n }\r\n get localIndex(): number {\r\n return this.renumberIndex;\r\n }\r\n set localIndex(value: number) {\r\n if (this.renumberIndex !== value && value >= 0) {\r\n this.renumberIndex = value;\r\n this.view.renumberMeasures(this.measure.measureNumber.measureIndex, this.localIndex);\r\n }\r\n }\r\n get forceRest() {\r\n return this.format.forceRest;\r\n }\r\n set forceRest(value: boolean) {\r\n this.writeBoolean('forceRest', value);\r\n }\r\n get repeatSymbol() {\r\n return this.measure.repeatSymbol;\r\n }\r\n set repeatSymbol(value: boolean) {\r\n const repeatCount = value ? 1 : 0;\r\n this.view.updateRepeatCount(repeatCount);\r\n this.measure.repeatSymbol = value;\r\n this.measure.repeatCount = repeatCount;\r\n }\r\n get restBreak() {\r\n return this.format.restBreak;\r\n }\r\n set restBreak(value: boolean) {\r\n this.writeBoolean('restBreak', value);\r\n }\r\n get customStretch() {\r\n return this.format.customStretch;\r\n }\r\n set customStretch(value: number) {\r\n this.writeNumber('customStretch', value);\r\n }\r\n get customProportion() {\r\n return this.format.proportionality;\r\n }\r\n set customProportion(value: number) {\r\n this.writeNumber('proportionality', value);\r\n }\r\n get autoJustify() {\r\n return this.format.autoJustify;\r\n }\r\n set autoJustify(value: boolean) {\r\n this.writeBoolean('autoJustify', value);\r\n }\r\n get padAllInSystem() {\r\n return this.format.padAllInSystem;\r\n }\r\n set padAllInSystem(value: boolean) {\r\n this.writeBoolean('padAllInSystem', value);\r\n }\r\n get systemBreak() {\r\n return this.format.systemBreak;\r\n }\r\n set systemBreak(value: boolean) {\r\n this.writeBoolean('systemBreak', value);\r\n }\r\n}\r\n// ## measureDialogs.js\r\n// This file contains dialogs that affect all measures at a certain position,\r\n// such as tempo or time signature.\r\nexport class SuiMeasureDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Measure Properties',\r\n elements:\r\n [{\r\n smoName: 'padLeft',\r\n control: 'SuiRockerComponent',\r\n label: 'Pad Left (px)'\r\n }, {\r\n smoName: 'customStretch',\r\n control: 'SuiRockerComponent',\r\n label: 'Stretch Contents'\r\n }, {\r\n smoName: 'customProportion',\r\n control: 'SuiRockerComponent',\r\n increment: 10,\r\n label: 'Proportionalality'\r\n }, {\r\n smoName: 'localIndex',\r\n control: 'SuiRockerComponent',\r\n increment: 1,\r\n label: 'Measure Number'\r\n }, {\r\n smoName: 'padAllInSystem',\r\n control: 'SuiToggleComponent',\r\n label: 'Pad all measures in system'\r\n }, {\r\n smoName: 'autoJustify',\r\n control: 'SuiToggleComponent',\r\n label: 'Justify Columns'\r\n }, {\r\n smoName: 'restBreak',\r\n control: 'SuiToggleComponent',\r\n label: 'Break Multimeasure Rest in Part'\r\n }, {\r\n smoName: 'forceRest',\r\n control: 'SuiToggleComponent',\r\n label: 'Force Multimeasure Rest'\r\n }, {\r\n smoName: 'repeatSymbol',\r\n control: 'SuiToggleComponent',\r\n label: 'Repeat Symbol'\r\n }, {\r\n smoName: 'skipMeasureCount',\r\n control: 'SuiToggleComponent',\r\n label: 'Skip in max measure count'\r\n }, {\r\n smoName: 'systemBreak',\r\n control: 'SuiToggleComponent',\r\n label: 'System break before this measure'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const selection = parameters.view.tracker.selections[0];\r\n const measure = selection.measure;\r\n const adapter = new SuiMeasureFormatAdapter(parameters.view, measure);\r\n super(SuiMeasureDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { getButtonsFcn, SuiButtonArrayComponent, SuiButtonArrayParameters } from './components/buttonArray';\r\nimport { SuiDialogNotifier, SuiBaseComponentParams } from './components/baseComponent';\r\nimport { SmoMicrotone } from '../../smo/data/noteModifiers';\r\n\r\nconst microtoneButtonFactory: getButtonsFcn = () => {\r\n const params: SuiButtonArrayParameters = {\r\n label: 'Microtones',\r\n rows: [{\r\n label: 'Microtones',\r\n classes: 'pad-span',\r\n buttons: [\r\n {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-accidentalQuarterToneFlatStein',\r\n id: 'flat75sz',\r\n label: '3/4 flat',\r\n smoName: 'flat75sz'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-accidentalThreeQuarterTonesFlatZimmermann',\r\n id: 'flat25sz',\r\n label: '1/4 flat',\r\n smoName: 'flat25sz'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-accidentalBakiyeFlat',\r\n id: 'flat25ar',\r\n label: '1/4 flat',\r\n smoName: 'flat25ar'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-accidentalThreeQuarterTonesSharpStein',\r\n id: 'sharp75',\r\n label: '3/4 sharp',\r\n smoName: 'sharp75'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-accidentalQuarterToneSharpStein',\r\n id: 'sharp25',\r\n label: 'Marcato',\r\n smoName: 'sharp25'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-top icon-accidentalSori',\r\n id: 'sori',\r\n label: 'Sori',\r\n smoName: 'sori'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-top icon-accidentalKoron',\r\n id: 'koron',\r\n label: 'Koron',\r\n smoName: 'koron'\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n return params;\r\n}\r\n\r\nexport class SuiMicrotoneButtonComponent extends SuiButtonArrayComponent {\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter, microtoneButtonFactory);\r\n }\r\n}\r\nexport class SuiMicrotoneAdapter extends SuiComponentAdapter {\r\n toneString: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selections = this.view.tracker.selections.filter((ss) => ss.note);\r\n this.view.groupUndo(true);\r\n const setForAll: Record = {};\r\n let notesCount = 0;\r\n selections.forEach((sel) => {\r\n const microtones = sel.note!.getMicrotones();\r\n notesCount += 1;\r\n microtones.forEach((mt) => {\r\n if (!setForAll[mt.tone]) {\r\n setForAll[mt.tone] = 0;\r\n }\r\n setForAll[mt.tone] = setForAll[mt.tone] + 1;\r\n });\r\n });\r\n const keys = Object.keys(setForAll);\r\n keys.forEach((key) => {\r\n if (setForAll[key] === notesCount) {\r\n this.toneString = key;\r\n } \r\n });\r\n }\r\n get tone() {\r\n return this.toneString;\r\n }\r\n set tone(value: string) {\r\n let add = false;\r\n const selections = this.view.tracker.selections.filter((ss) => ss.note);\r\n // for each selection\r\n if (this.toneString === value) {\r\n this.toneString = '';\r\n } else {\r\n this.toneString = value;\r\n if (this.toneString.length) {\r\n add = true;\r\n }\r\n }\r\n selections.forEach((selection) => {\r\n // make sure any existing codes are set\r\n this.view.modifySelectionNoWait('microtone dialog', selection, (score, selection) => {\r\n const note = selection.note;\r\n if (note) {\r\n note.removeMicrotone();\r\n if (add) {\r\n const defs = SmoMicrotone.defaults;\r\n defs.tone = this.toneString;\r\n note.addMicrotone(new SmoMicrotone(defs));\r\n }\r\n }\r\n });\r\n });\r\n }\r\n async commit() { \r\n }\r\n async cancel() {\r\n await this.view.undo();\r\n }\r\n async remove() {\r\n }\r\n}\r\nexport class SuiMicrotoneDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Microtones',\r\n elements:\r\n [{\r\n smoName: 'tone',\r\n control: 'SuiMicrotoneButtonComponent',\r\n label: 'Microtones'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiMicrotoneAdapter(parameters.view);\r\n super(SuiMicrotoneDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE'];\r\n }\r\n async changed() {\r\n this.view.undoTrackerMeasureSelections('microtone dialog');\r\n await super.changed();\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { Clef } from '../../smo/data/common';\r\nimport { SmoInstrument, SmoInstrumentNumParamType, SmoInstrumentStringParamType } from '../../smo/data/staffModifiers';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoSystemStaffParams, SmoSystemStaff } from '../../smo/data/systemStaff';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiNewPartAdapter extends SuiComponentAdapter {\r\n instrument: SmoInstrument;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n this.instrument = new SmoInstrument(this.view.score.getStaffInstrument(selection.selector));\r\n }\r\n writeNumParam(paramName: SmoInstrumentNumParamType, value: number) {\r\n this.instrument[paramName] = value;\r\n }\r\n writeStringParam(paramName: SmoInstrumentStringParamType, value: string) {\r\n this.instrument[paramName] = value;\r\n }\r\n get transposeIndex() {\r\n return this.instrument.keyOffset;\r\n }\r\n set transposeIndex(value: number) {\r\n this.writeNumParam('keyOffset', value);\r\n }\r\n get instrumentName() {\r\n return this.instrument.instrumentName;\r\n }\r\n get subFamily() {\r\n return this.instrument.instrument;\r\n }\r\n set subFamily(value: string) {\r\n this.writeStringParam('instrument', value);\r\n }\r\n set instrumentName(value: string) {\r\n this.writeStringParam('instrumentName', value);\r\n }\r\n get clef(): Clef {\r\n return this.instrument.clef;\r\n }\r\n set clef(value: Clef) {\r\n this.instrument.clef = value;\r\n }\r\n async commit() {\r\n const staffParams: SmoSystemStaffParams = SmoSystemStaff.defaults;\r\n staffParams.staffId = this.view.storeScore.staves.length;\r\n staffParams.measureInstrumentMap[0] = this.instrument;\r\n await this.view.addStaff(staffParams);\r\n }\r\n async cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiNewPartDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Instrument Properties',\r\n elements:\r\n [{\r\n smoName: 'transposeIndex',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose Index (1/2 steps)',\r\n }, {\r\n smoName: 'instrumentName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Name'\r\n }, {\r\n smoName: 'subFamily',\r\n control: 'SuiDropdownComponent',\r\n label: 'Sample Sound',\r\n options: [{\r\n value: 'piano',\r\n label:'Grand Piano'\r\n }, {\r\n value: 'bass',\r\n label: 'Bass'\r\n }, {\r\n value: 'cello',\r\n label: 'Cello'\r\n }, {\r\n value: 'violin',\r\n label: 'Violin'\r\n }, {\r\n value: 'trumpet',\r\n label: 'Bb Trumpet'\r\n }, {\r\n value: 'horn',\r\n label: 'F Horn'\r\n }, {\r\n value: 'tuba',\r\n label: 'Tuba'\r\n }, {\r\n value: 'clarinet',\r\n label: 'Bb Clarinet'\r\n }, {\r\n value: 'pad',\r\n label: 'Synth Pad'\r\n }, {\r\n value: 'percussion',\r\n label: 'Percussion'\r\n }, {\r\n value: 'none',\r\n label: 'None'\r\n }]\r\n }, {\r\n smoName: 'clef',\r\n control: 'SuiDropdownComponent',\r\n label: 'Clef',\r\n options: [ {\r\n label: 'Treble Clef Staff',\r\n value: 'treble'\r\n }, {\r\n label: 'Bass Clef Staff',\r\n value: 'bass'\r\n }, {\r\n label: 'Alto Clef Staff',\r\n value: 'alto'\r\n }, {\r\n label: 'Tenor',\r\n value: 'tenor'\r\n }, {\r\n label: 'Percussion',\r\n value: 'percussion'\r\n }] \r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiNewPartAdapter(parameters.view);\r\n super(SuiNewPartDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { getButtonsFcn, SuiButtonArrayComponent, SuiButtonArrayParameters } from './components/buttonArray';\r\nimport { SuiDialogNotifier, SuiBaseComponentParams } from './components/baseComponent';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { SuiButtonComponentParams } from './components/button';\r\n\r\nconst stemButtonFactory: getButtonsFcn = () => {\r\n const params: SuiButtonArrayParameters = {\r\n label: 'Stem',\r\n rows: [{\r\n label: 'Stems',\r\n classes: 'pad-span',\r\n buttons: [\r\n { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-restQuarter',\r\n id: 'restIcon',\r\n text: 'r',\r\n label:'Rest',\r\n smoName: 'rest'\r\n },\r\n { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-transparent icon-restQuarter',\r\n id: 'hideIcon',\r\n label:'Hidden',\r\n text: 'delete',\r\n smoName: 'hidden'\r\n },{ classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-repeatBarSlash',\r\n id: 'slashIcon',\r\n label:'Slash',\r\n smoName: 'slash'\r\n },\r\n ]}]\r\n };\r\n return params;\r\n }\r\nconst noteHeadButtonFactory: getButtonsFcn = () => {\r\n const params: SuiButtonArrayParameters = {\r\n label: 'Note Heads',\r\n rows: [{\r\n label: 'Shapes',\r\n classes: 'pad-span',\r\n buttons: [\r\n {classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadXBlack',\r\n id: 'noteheadBlackX',\r\n label:'X',\r\n smoName: 'CX'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleUpBlack',\r\n id: 'noteheadTriangleXUp',\r\n label:'Triangle Up',\r\n smoName: 'TU'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleDownBlack',\r\n id: 'noteheadCircleX',\r\n label:'Triangle Down',\r\n smoName: 'TD'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadDiamondBlack',\r\n id: 'noteheadDiamondBlack',\r\n label:'Diamond',\r\n smoName: 'D'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadSquareBlack',\r\n id: 'noteheadSquareBlack',\r\n label:'Square',\r\n smoName: 'SQ'\r\n }\r\n ]\r\n }, {\r\n label: 'Heads',\r\n classes: 'pad-span',\r\n buttons: [\r\n { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadDiamondWhole',\r\n id: 'noteheadDiamondWhole',\r\n label:'Diamond whole',\r\n smoName: 'D0'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadDiamondHalf',\r\n id: 'noteheadDiamondHalf',\r\n label:'Diamond open',\r\n smoName: 'D1'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadDiamondBlack',\r\n id: 'noteheadDiamondBlack',\r\n label:'Diamond closed',\r\n smoName: 'D2'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleUpWhole',\r\n id: 'noteheadTriangleUpWhole',\r\n label:'Triangle up whole',\r\n smoName: 'T0'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleUpHalf',\r\n id: 'noteheadTriangleUpHalf',\r\n label:'Triangle up open',\r\n smoName: 'T1'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleUpBlack',\r\n id: 'noteheadTriangleUpBlack',\r\n label:'Triangle up closed',\r\n smoName: 'T2'\r\n }\r\n ]},\r\n { label: '',\r\n classes: 'pad-span',\r\n buttons:[\r\n { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadXWhole',\r\n id: 'noteheadXWhole',\r\n label:'X Whole',\r\n smoName: 'X0'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadXHalf',\r\n id: 'noteheadXHalf',\r\n label:'X Helf',\r\n smoName: 'X1'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadXBlack',\r\n id: 'noteheadXBlack',\r\n label:'X Closed',\r\n smoName: 'X2'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadMoonBlack',\r\n id: 'noteheadMoonBlack',\r\n label:'Moon Black',\r\n smoName: 'RE'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleLeftBlack',\r\n id: 'noteheadTriangleLeftBlack',\r\n label:'Left Triangle Closed',\r\n smoName: 'FA'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadTriangleRightBlack',\r\n id: 'noteheadTriangleRightBlack',\r\n label:'Right Triangle Close',\r\n smoName: 'FAUP'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-mid icon-noteheadBlack',\r\n id: 'noteheadBlack',\r\n label:'Default',\r\n smoName: ''\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n return params;\r\n}\r\nexport class SuiNoteHeadButtonComponent extends SuiButtonArrayComponent {\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams, buttonFactory: getButtonsFcn) {\r\n super(dialog, parameter, noteHeadButtonFactory);\r\n }\r\n}\r\nexport class SuiStemButtonComponent extends SuiButtonArrayComponent {\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams, buttonFactory: getButtonsFcn) {\r\n super(dialog, parameter, stemButtonFactory);\r\n }\r\n}\r\nexport class SuiNoteHeadAdapter extends SuiComponentAdapter {\r\n code: string = '';\r\n stemCode: string = '';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.view.groupUndo(true);\r\n const ss: Record = {};\r\n const selections = this.view.tracker.selections.filter((nn) => nn.note);\r\n // count all the notes in selection, if they all have the same note head, that is the\r\n // selected note head so select it in the UI.\r\n for (let i = 0; i < selections.length; ++i) {\r\n const nn = selections[i].note;\r\n if (typeof(ss[nn!.noteHead]) === 'undefined') {\r\n ss[nn!.noteHead] = 0;\r\n }\r\n ss[nn!.noteHead]+= 1;\r\n }\r\n const keys = Object.keys(ss);\r\n if (keys.length === 1) {\r\n this.code = keys[0];\r\n }\r\n }\r\n get stemComponent() {\r\n return this.stemCode;\r\n }\r\n set stemComponent(value: string) {\r\n const note = this.view.tracker.selections[0].note;\r\n if (note) {\r\n if (value === '') {\r\n this.stemCode = '';\r\n if (note.isSlash()) {\r\n this.view.toggleSlash();\r\n } else if (note.isHidden()) {\r\n this.view.deleteNote();\r\n } if (note.isRest()) {\r\n this.view.makeRest();\r\n }\r\n } else { \r\n this.stemCode = value;\r\n if (value === 'rest') {\r\n this.view.makeRest();\r\n } else if (value === 'hidden') {\r\n // hidden and rest are tri-state toggle.\r\n if (!note.isHidden()) {\r\n this.view.deleteNote();\r\n if (note.isRest()) {\r\n this.view.deleteNote();\r\n }\r\n }\r\n } else if (value === 'slash') {\r\n if (!note.isSlash()) {\r\n this.view.toggleSlash();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n get noteHead() {\r\n return this.code;\r\n }\r\n set noteHead(value: string) {\r\n this.code = value;\r\n this.view.modifyCurrentSelections('set note head', (score, selections) => {\r\n SmoOperation.setNoteHead(selections, this.code);\r\n });\r\n }\r\n async commit() { \r\n }\r\n async cancel() {\r\n this.view.undo();\r\n }\r\n async remove() { \r\n }\r\n}\r\nexport class SuiNoteHeadDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Note Heads',\r\n elements:\r\n [{\r\n smoName: 'noteHead',\r\n control: 'SuiNoteHeadButtonComponent',\r\n label: 'Note Head'\r\n }, {\r\n smoName: 'stemComponent',\r\n control: 'SuiStemButtonComponent',\r\n label: 'Rest'\r\n }, {\r\n smoName: 'textMessage',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use r to toggle note to rest. Use delete to toggle visibility.',\r\n classes: 'hide-input'\r\n }, {\r\n smoName: 'textMessage2',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use shortcuts when available - they are much faster!',\r\n classes: 'hide-input'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiNoteHeadAdapter(parameters.view);\r\n super(SuiNoteHeadDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { getButtonsFcn, SuiButtonArrayMSComponent, SuiButtonArrayParameters } from './components/buttonArray';\r\nimport { SuiDialogNotifier, SuiBaseComponentParams } from './components/baseComponent';\r\nimport { SmoOrnament } from '../../smo/data/noteModifiers';\r\nimport { reverseStaticMap } from '../../smo/data/common';\r\n\r\nconst ornamentButtonFactory: getButtonsFcn = () => { \r\n const params: SuiButtonArrayParameters = {\r\n label: 'Ornaments',\r\n rows: [\r\n {\r\n label: 'Ornaments',\r\n classes: 'pad-span',\r\n buttons: [\r\n { classes: 'icon collapseParent articulations-above button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text articulations-above icon-ornamentShortTrill',\r\n id: 'mordentButton',\r\n label:'Mordent Inverted',\r\n smoName: 'mordentButton'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text articulations-above icon-ornamentMordent',\r\n id: 'mordentInvertedButton',\r\n label:'Mordent',\r\n smoName: 'mordentInvertedButton'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text articulations-above icon-ornamentPrecompTrillSuffixDandrieu',\r\n id: 'prallUpButton',\r\n label:'Prall Up Trill',\r\n smoName: 'prallUpButton'\r\n },{ classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text articulations-above icon-ornamentPrecompTrillLowerSuffix',\r\n id: 'prallDownButton',\r\n label:'Prall Down Trill',\r\n smoName: 'prallDownButton'\r\n }, { classes: 'icon collapseParent articulations-above button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-ornamentTrill',\r\n id: 'trillButton',\r\n label:'Trill',\r\n smoName: 'trillButton'\r\n }, { classes: 'icon collapseParent articulations-above button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-ornamentTurn',\r\n id: 'turnButton',\r\n label:'Turn',\r\n smoName: 'turnButton'\r\n }, { classes: 'icon collapseParent articulations-above button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-ornamentTurnSlash',\r\n id: 'turnSlash',\r\n label:'Turn Inverted',\r\n smoName: 'turnInvertedButton'\r\n },{\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-breathMarkComma',\r\n id: 'breathButton',\r\n label: 'Breath Mark',\r\n smoName: 'breathButton'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-caesura',\r\n id: 'caesuraButton',\r\n label: 'Caesura',\r\n smoName: 'caesuraButton'\r\n }\r\n ]\r\n }, {\r\n label: 'Jazz',\r\n classes: 'pad-span',\r\n buttons: [\r\n { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-brassScoop',\r\n id: 'scoopArrayButton',\r\n label:'Mordent Inverted',\r\n smoName: 'scoopButton'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-brassFallLipShort',\r\n id: 'dropArrayButton',\r\n label:'Drop',\r\n smoName: 'dropButton'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-brassFallRoughMedium',\r\n id: 'dropLongButton',\r\n label:'Long Drop',\r\n smoName: 'dropLongButton'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-brassDoitMedium',\r\n id: 'doitArrayButton',\r\n label:'Doit',\r\n smoName: 'doitButton'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-brassLiftMedium',\r\n id: 'doitLongArrayButton',\r\n label:'Lift/Long Doit',\r\n smoName: 'doitLongButton'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-brassFlip',\r\n id: 'flipArrayButton',\r\n label:'Flip',\r\n smoName: 'flipButton'\r\n }, { classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-brassSmear',\r\n id: 'smearArrayButton',\r\n label:'Smear',\r\n smoName: 'smearButton'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-brassMuteClosed',\r\n id: 'muteClosed',\r\n label: 'Brass Mute Closed',\r\n smoName: 'muteClosed'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-brassMuteOpen',\r\n id: 'muteOpen',\r\n label: 'Brass Mute Open',\r\n smoName: 'muteOpen'\r\n }, {\r\n classes: 'icon collapseParent button-array',\r\n control: 'SuiButtonArrayButton',\r\n icon: 'icon-bravura ribbon-button-text icon-brassBend',\r\n id: 'brassBend',\r\n label: 'Brass Bend',\r\n smoName: 'bend'\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n return params;\r\n}\r\n\r\nexport class SuiOrnamentButtonComponent extends SuiButtonArrayMSComponent {\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams) {\r\n super(dialog, parameter, ornamentButtonFactory);\r\n }\r\n}\r\nexport class SuiOrnamentAdapter extends SuiComponentAdapter {\r\n static get ornamentIdMap(): Record {\r\n return { \r\n mordentButton: SmoOrnament.ornaments.mordent,\r\n mordentInvertedButton: SmoOrnament.ornaments.mordent_inverted,\r\n prallUpButton: SmoOrnament.ornaments.prallup,\r\n prallDownButton: SmoOrnament.ornaments.pralldown,\r\n trillButton: SmoOrnament.ornaments.trill,\r\n turnButton: SmoOrnament.ornaments.turn,\r\n turnInvertedButton: SmoOrnament.ornaments.turn_inverted,\r\n pedalOpenButton: SmoOrnament.ornaments.pedalOpen,\r\n pedalClosedButton: SmoOrnament.ornaments.pedalClosed,\r\n caesuraButton: SmoOrnament.ornaments.caesura,\r\n breathButton: SmoOrnament.ornaments.breath,\r\n scoopButton: SmoOrnament.ornaments.scoop,\r\n dropButton: SmoOrnament.ornaments.fall,\r\n dropLongButton: SmoOrnament.ornaments.fallLong,\r\n doitButton: SmoOrnament.ornaments.doit,\r\n doitLongButton: SmoOrnament.ornaments.doitLong,\r\n flipButton: SmoOrnament.ornaments.flip,\r\n smearButton: SmoOrnament.ornaments.smear,\r\n muteOpen: SmoOrnament.ornaments.plungerOpen,\r\n muteClosed: SmoOrnament.ornaments.plungerClosed,\r\n bend: SmoOrnament.ornaments.bend\r\n };\r\n }\r\n static ornamentTypeToId(ot: string): string | null {\r\n const keys = Object.keys(SuiOrnamentAdapter.ornamentIdMap);\r\n for (let i = 0; i < keys.length; ++i) {\r\n const key = keys[i];\r\n if (ot === SuiOrnamentAdapter.ornamentIdMap[key]) {\r\n return key;\r\n }\r\n }\r\n return null;\r\n }\r\n static get ornamentIdMapRvs(): Record {\r\n return reverseStaticMap('SuiOrnamentAdapter.ornamentIdMap', SuiOrnamentAdapter.ornamentIdMap);\r\n } \r\n codes: string[] = [];\r\n setValues: Record = {};\r\n positionCode: string = 'auto';\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selections = this.view.tracker.selections.filter((ss) => ss.note);\r\n this.view.groupUndo(true);\r\n const setForAll: Record = {};\r\n let notesCount = 0;\r\n selections.forEach((sel) => {\r\n const ornaments = sel.note!.getOrnaments();\r\n notesCount += 1;\r\n ornaments.forEach((ornament) => {\r\n if (!setForAll[ornament.ornament]) {\r\n setForAll[ornament.ornament] = 0;\r\n }\r\n setForAll[ornament.ornament] = setForAll[ornament.ornament] + 1;\r\n });\r\n });\r\n const keys = Object.keys(setForAll);\r\n keys.forEach((key) => {\r\n if (setForAll[key] === notesCount) {\r\n const btnId = SuiOrnamentAdapter.ornamentIdMapRvs[key];\r\n if (btnId) {\r\n this.setValues[btnId] = true;\r\n this.codes.push(btnId);\r\n }\r\n }\r\n });\r\n }\r\n get ornaments() {\r\n return this.codes;\r\n }\r\n set ornaments(value: string[]) {\r\n this.codes = value;\r\n const selections = this.view.tracker.selections.filter((ss) => ss.note);\r\n const oldCodes = Object.keys(this.setValues);\r\n // for each selection\r\n selections.forEach((selection) => {\r\n const note = selection.note;\r\n // make sure any existing codes are set\r\n this.codes.forEach((code) => {\r\n const smoCode = SuiOrnamentAdapter.ornamentIdMap[code];\r\n this.setValues[code] = true;\r\n // only turn off the code if this value was set initially for all selections\r\n this.view.modifySelectionNoWait('ornament dialog', selection, (score, selection) => {\r\n selection.note!.setOrnament(new SmoOrnament({ ornament: smoCode }), true);\r\n }); \r\n });\r\n oldCodes.forEach((oldCode) => {\r\n if (this.setValues[oldCode] && this.codes.indexOf(oldCode) < 0) {\r\n const smoCode = SuiOrnamentAdapter.ornamentIdMap[oldCode];\r\n const ornament = note!.getOrnament(smoCode);\r\n if (ornament) {\r\n this.view.modifySelectionNoWait('ornament dialog', selection, (score, selection) => {\r\n selection.note!.setOrnament(ornament, false);\r\n });\r\n this.setValues[oldCode] = false;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n async commit() {\r\n }\r\n async cancel() {\r\n this.view.undo();\r\n }\r\n async remove() { \r\n }\r\n}\r\nexport class SuiOrnamentDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Ornaments',\r\n elements:\r\n [{\r\n smoName: 'ornaments',\r\n control: 'SuiOrnamentButtonComponent',\r\n label: 'Ornaments'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiOrnamentAdapter(parameters.view);\r\n super(SuiOrnamentDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE'];\r\n }\r\n async changed() {\r\n this.view.undoTrackerMeasureSelections('ornament dialog');\r\n await super.changed();\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoPageLayout, SmoLayoutManager } from '../../smo/data/scoreModifiers';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { DialogDefinitionOption } from './components/baseComponent';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiPageLayoutAdapter extends SuiComponentAdapter {\r\n static get layoutTypes(): Record {\r\n return {\r\n 'all': -1,\r\n 'remaining': -2,\r\n 'page': -3\r\n }\r\n }\r\n layouts: SmoPageLayout[];\r\n backup: SmoPageLayout[] = [];\r\n currentPage: number;\r\n changed: boolean = false;\r\n currentLayout: SmoPageLayout;\r\n layoutManager: SmoLayoutManager;\r\n view: SuiScoreViewOperations\r\n applyTo: number = SuiPageLayoutAdapter.layoutTypes.all;\r\n options: DialogDefinitionOption[] = [];\r\n async updateLayouts() {\r\n let i = 0;\r\n let startPage = this.currentPage;\r\n let endPage = this.layouts.length;\r\n if (this.applyTo === SuiPageLayoutAdapter.layoutTypes.page) {\r\n endPage = startPage;\r\n } else if (this.applyTo === SuiPageLayoutAdapter.layoutTypes.all) {\r\n startPage = 0;\r\n }\r\n await this.view.setPageLayouts(this.currentLayout, startPage, endPage);\r\n this.changed = true;\r\n }\r\n get enablePages() {\r\n return this.layouts.length > 1;\r\n }\r\n get applyToPage() {\r\n return this.applyTo;\r\n }\r\n set applyToPage(value: number) {\r\n this.applyTo = value;\r\n this.updateLayouts();\r\n }\r\n set leftMargin(value: number) {\r\n this.currentLayout.leftMargin = value;\r\n this.updateLayouts();\r\n }\r\n get leftMargin() {\r\n return this.currentLayout.leftMargin;\r\n }\r\n get rightMargin() {\r\n return this.currentLayout.rightMargin;\r\n }\r\n set rightMargin(value: number) {\r\n this.currentLayout.rightMargin = value;\r\n this.updateLayouts();\r\n }\r\n get topMargin() {\r\n return this.currentLayout.topMargin;\r\n }\r\n set topMargin(value) {\r\n this.currentLayout.topMargin = value;\r\n this.updateLayouts();\r\n }\r\n get bottomMargin() {\r\n return this.currentLayout.bottomMargin;\r\n }\r\n set bottomMargin(value) {\r\n this.currentLayout.bottomMargin = value;\r\n this.updateLayouts();\r\n }\r\n get interGap() {\r\n return this.currentLayout.interGap;\r\n }\r\n set interGap(value) {\r\n this.currentLayout.interGap = value;\r\n this.updateLayouts();\r\n }\r\n get intraGap() {\r\n return this.currentLayout.intraGap;\r\n }\r\n set intraGap(value) {\r\n this.currentLayout.intraGap = value;\r\n this.updateLayouts();\r\n }\r\n async cancel() {\r\n let i = 0;\r\n if (!this.changed) {\r\n return;\r\n }\r\n for (i = 0; i < this.backup.length; ++i) {\r\n // Avoid multiple page rerender...\r\n await this.view.setPageLayout(this.backup[i], i);\r\n }\r\n \r\n }\r\n async commit() { \r\n return PromiseHelpers.emptyPromise();\r\n }\r\n\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n let i = 0;\r\n this.view = view;\r\n this.layoutManager = this.view.score.layoutManager!;\r\n this.currentPage = this.view.getFocusedPage();\r\n for (i = 0; i < this.layoutManager.pageLayouts.length; ++i) {\r\n this.backup.push(new SmoPageLayout(this.layoutManager.pageLayouts[i]));\r\n }\r\n for (i = 1; i < this.layoutManager.pageLayouts.length; ++i) {\r\n this.options.push({ value: i + 1, label: 'Page ' + (i + 1) });\r\n }\r\n this.layouts = this.layoutManager.getPageLayouts();\r\n this.currentLayout = this.layoutManager.pageLayouts[this.currentPage];\r\n if (this.layoutManager.pageLayouts.length === 1) {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.all;\r\n } else {\r\n if (this.currentPage >= 1) {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.remaining;\r\n } else {\r\n this.applyTo = SuiPageLayoutAdapter.layoutTypes.all;\r\n }\r\n }\r\n }\r\n}\r\n// ## SuiLayoutDialog\r\n// The layout dialog has page-specific layout parameters\r\nexport class SuiPageLayoutDialog extends SuiDialogAdapterBase {\r\n static get layoutParams() {\r\n return ['leftMargin', 'rightMargin', 'topMargin', 'bottomMargin', 'interGap', 'intraGap'];\r\n }\r\n // ### dialogElements\r\n // all dialogs have elements define the controls of the dialog.\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Page Layouts', elements:\r\n [{\r\n smoName: 'applyToPage',\r\n defaultValue: -1,\r\n control: 'SuiDropdownComponent',\r\n label: 'Apply to Page',\r\n dataType: 'int',\r\n options: [{\r\n value: -1,\r\n label: 'All'\r\n }, {\r\n value: -2,\r\n label: 'All Remaining'\r\n }, {\r\n value: 1,\r\n label: 'Page 1'\r\n }]\r\n }, {\r\n smoName: 'leftMargin',\r\n defaultValue: SmoPageLayout.defaults.leftMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Left Margin (px)'\r\n }, {\r\n smoName: 'rightMargin',\r\n defaultValue: SmoPageLayout.defaults.rightMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Right Margin (px)'\r\n }, {\r\n smoName: 'topMargin',\r\n defaultValue: SmoPageLayout.defaults.topMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Top Margin (px)'\r\n }, {\r\n smoName: 'bottomMargin',\r\n defaultValue: SmoPageLayout.defaults.bottomMargin,\r\n control: 'SuiRockerComponent',\r\n label: 'Bottom Margin (px)'\r\n }, {\r\n smoName: 'interGap',\r\n defaultValue: SmoPageLayout.defaults.interGap,\r\n control: 'SuiRockerComponent',\r\n label: 'Inter-System Margin'\r\n }, {\r\n smoName: 'intraGap',\r\n defaultValue: SmoPageLayout.defaults.intraGap,\r\n control: 'SuiRockerComponent',\r\n label: 'Intra-System Margin'\r\n }],\r\n staticText: [\r\n { all: 'Entire Score' },\r\n { remaining: 'Remaining Pages' },\r\n { current: 'Current Page' }\r\n ]\r\n };\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiPageLayoutAdapter(params.view);\r\n super(SuiPageLayoutDialog.dialogElements, { adapter, ...params });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup } from '../../smo/data/scoreText';\r\nimport { SmoPartInfo, SmoPartInfoStringType } from '../../smo/data/partInfo';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { ViewMapEntry } from '../../render/sui/scoreView';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiPartInfoAdapter extends SuiComponentAdapter {\r\n partInfo: SmoPartInfo;\r\n backup: SmoPartInfo;\r\n selection: SmoSelection;\r\n changed: boolean = false;\r\n expandedMultimeasure: boolean = false;\r\n currentView: ViewMapEntry[] = [];\r\n resetPart: boolean = false;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.currentView = this.view.getView();\r\n const selector = SmoSelector.default;\r\n this.selection = SmoSelection.measureSelection(this.view.score, selector.staff, selector.measure)!;\r\n this.partInfo = new SmoPartInfo(this.selection.staff.partInfo);\r\n this.backup = new SmoPartInfo(this.selection.staff.partInfo);\r\n }\r\n async update() {\r\n this.changed = true;\r\n // Since update will change the displayed score, wait for any display change to complete first.\r\n await this.view.renderer.updatePromise();\r\n await this.view.updatePartInfo(this.partInfo);\r\n // If we are expanding rests, we need to reload the part after setting the \r\n // part change. So we update the part display a second time with the new value.\r\n if (this.resetPart) {\r\n this.view.resetPartView();\r\n await this.view.updatePartInfo(this.partInfo);\r\n this.resetPart = false;\r\n }\r\n }\r\n writeLayoutValue(attr: GlobalLayoutAttributes, value: number) {\r\n // no change?\r\n if (this.partInfo.layoutManager.globalLayout[attr] === value) {\r\n return;\r\n }\r\n this.partInfo.layoutManager.globalLayout[attr] = value;\r\n this.update();\r\n }\r\n writeStringValue(attr: SmoPartInfoStringType, value: string) {\r\n if (this.partInfo[attr] === value) {\r\n return;\r\n }\r\n this.partInfo[attr] = value;\r\n this.changed = true;\r\n }\r\n get expandMultimeasureRest() {\r\n return this.partInfo.expandMultimeasureRests;\r\n }\r\n set expandMultimeasureRest(value: boolean) {\r\n this.partInfo.expandMultimeasureRests = value;\r\n // If expanding rests, we need to re-read the score, so end\r\n if (value === true) {\r\n this.resetPart = true;\r\n }\r\n this.update();\r\n }\r\n get noteSpacing() {\r\n return this.partInfo.layoutManager.globalLayout.noteSpacing;\r\n }\r\n set noteSpacing(value: number) {\r\n this.writeLayoutValue('noteSpacing', value);\r\n }\r\n get pageWidth() {\r\n return this.partInfo.layoutManager.globalLayout.pageWidth;\r\n }\r\n set pageWidth(value: number) {\r\n this.writeLayoutValue('pageWidth', value);\r\n }\r\n get pageHeight() {\r\n return this.partInfo.layoutManager.globalLayout.pageHeight;\r\n }\r\n set pageHeight(value: number) {\r\n this.writeLayoutValue('pageHeight', value);\r\n }\r\n get svgScale() {\r\n return this.partInfo.layoutManager.globalLayout.svgScale;\r\n }\r\n set svgScale(value: number) {\r\n this.writeLayoutValue('svgScale', value);\r\n }\r\n get maxMeasureSystem() {\r\n return this.partInfo.layoutManager.globalLayout.maxMeasureSystem;\r\n }\r\n set maxMeasureSystem(value: number) {\r\n this.writeLayoutValue('maxMeasureSystem', value);\r\n }\r\n get zoomScale() {\r\n return this.partInfo.layoutManager.globalLayout.zoomScale;\r\n }\r\n set zoomScale(value: number) {\r\n this.writeLayoutValue('zoomScale', value);\r\n }\r\n get pageSize() {\r\n const sz = SmoScore.pageSizeFromDimensions(this.partInfo.layoutManager.globalLayout.pageWidth, this.partInfo.layoutManager.globalLayout.pageHeight);\r\n if (sz === null) {\r\n return 'custom';\r\n }\r\n return sz;\r\n }\r\n set pageSize(value: string) {\r\n if (value === 'custom') {\r\n return;\r\n }\r\n if (SmoScore.pageDimensions[value]) {\r\n const dims = SmoScore.pageDimensions[value];\r\n this.partInfo.layoutManager.globalLayout.pageWidth = dims.width;\r\n this.partInfo.layoutManager.globalLayout.pageHeight = dims.height;\r\n }\r\n this.update();\r\n }\r\n get partName(): string {\r\n return this.partInfo.partName;\r\n }\r\n set partName(value: string) {\r\n this.writeStringValue('partName', value);\r\n }\r\n get partAbbreviation(): string {\r\n return this.partInfo.partAbbreviation;\r\n }\r\n set partAbbreviation(value: string) {\r\n this.writeStringValue('partAbbreviation', value);\r\n }\r\n get includeNext(): boolean {\r\n return this.partInfo.stavesAfter === 1 && this.partInfo.stavesBefore === 0;\r\n }\r\n set includeNext(value: boolean) {\r\n const oldValue = this.partInfo.stavesAfter;\r\n if (value) {\r\n this.partInfo.stavesAfter = 1;\r\n } else {\r\n this.partInfo.stavesAfter = 0;\r\n }\r\n if (oldValue !== this.partInfo.stavesAfter) {\r\n // special case for a 2-stave score. The score and the part are the same so we stick to \r\n // score view.\r\n if (this.partInfo.stavesAfter === 1 && this.view.storeScore.staves.length === 2) {\r\n this.update().then(() => {\r\n this.view.viewAll();\r\n });\r\n return;\r\n }\r\n }\r\n this.update();\r\n }\r\n get cueInScore(): boolean {\r\n return this.partInfo.cueInScore;\r\n }\r\n set cueInScore(value: boolean) {\r\n this.partInfo.cueInScore = value;\r\n this.update();\r\n }\r\n get preserveTextGroups(): boolean {\r\n return this.partInfo.preserveTextGroups;\r\n }\r\n set preserveTextGroups(value: boolean) {\r\n if (value === true && this.partInfo.textGroups.length === 0) {\r\n this.view.score.textGroups.forEach((tg) => {\r\n const ngrp: SmoTextGroup = SmoTextGroup.deserializePreserveId(tg.serialize()) as SmoTextGroup;\r\n this.partInfo.textGroups.push(ngrp);\r\n });\r\n }\r\n this.partInfo.preserveTextGroups = value;\r\n this.update();\r\n }\r\n async commit() {\r\n if (this.changed) {\r\n await this.update();\r\n }\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n this.partInfo = this.backup;\r\n await this.update();\r\n }\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiPartInfoDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Part Settings', elements:\r\n [{\r\n smoName: 'partName',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Name'\r\n }, {\r\n smoName: 'partAbbreviation',\r\n control: 'SuiTextInputComponent',\r\n label: 'Part Abbrev.'\r\n }, {\r\n smoName: 'preserveTextGroups',\r\n control: 'SuiToggleComponent',\r\n label: 'Part-specific text'\r\n }, {\r\n smoName: 'cueInScore',\r\n control: 'SuiToggleComponent',\r\n label: 'Show as Cues in score'\r\n }, {\r\n smoName: 'includeNext',\r\n control: 'SuiToggleComponent',\r\n label: 'Include Next Staff in Part'\r\n }, {\r\n smoName: 'expandMultimeasureRest',\r\n control: 'SuiToggleComponent',\r\n label: 'Expand Multimeasure Rests'\r\n }, {\r\n smoName: 'noteSpacing',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.noteSpacing,\r\n control: 'SuiRockerComponent',\r\n dataType: 'percent',\r\n label: 'Note Spacing'\r\n }, {\r\n smoName: 'pageSize',\r\n defaultValue: SmoScore.pageSizes[0],\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Size',\r\n options: [\r\n {\r\n value: 'letter',\r\n label: 'Letter (Portrait)'\r\n }, {\r\n value: 'letterLandscape',\r\n label: 'Letter (Landscape)'\r\n }, {\r\n value: 'tabloid',\r\n label: 'Tabloid (11x17)'\r\n }, {\r\n value: 'A4',\r\n label: 'A4'\r\n }, {\r\n value: 'custom',\r\n label: 'Custom'\r\n }]\r\n }, {\r\n smoName: 'pageWidth',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageWidth,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Width (px)'\r\n }, {\r\n smoName: 'pageHeight',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.pageHeight,\r\n control: 'SuiRockerComponent',\r\n label: 'Page Height (px)'\r\n }, {\r\n smoName: 'zoomScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.zoomScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Zoom',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'svgScale',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.svgScale,\r\n control: 'SuiRockerComponent',\r\n label: '% Note size',\r\n dataType: 'percent'\r\n }, {\r\n smoName: 'maxMeasureSystem',\r\n defaultValue: SmoLayoutManager.defaults.globalLayout.maxMeasureSystem,\r\n control: 'SuiRockerComponent',\r\n label: 'Max Measures/System (0=auto)',\r\n dataType: 'int'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiPartInfoAdapter(params.view);\r\n super(SuiPartInfoDialog.dialogElements, { adapter, ...params });\r\n }\r\n async changed() {\r\n await super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n if (this.cmap.includeNextCtrl.changeFlag) {\r\n const includeNext = this.cmap.includeNextCtrl as SuiToggleComponent;\r\n if (includeNext.getValue()) {\r\n const partMap = this.view.getPartMap();\r\n if (this.view.storeScore.staves.length === 2) {\r\n this.complete();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoPedalMarking } from '../../smo/data/staffModifiers';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { addOrReplacePedalMarking } from '../menus/staffModifier';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\n\r\ndeclare var $: any;\r\n\r\n\r\nexport class SuiPedalMarkingAdapter extends SuiComponentAdapter {\r\n backup: SmoPedalMarking;\r\n pedalMarking: SmoPedalMarking;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, bracket: SmoPedalMarking) {\r\n super(view);\r\n this.pedalMarking = bracket;\r\n this.view = view;\r\n this.backup = new SmoPedalMarking(this.pedalMarking.serialize());\r\n this.backup.attrs.id = bracket.attrs.id;\r\n this.backup.associatedStaff = bracket.associatedStaff;\r\n this.view.groupUndo(true);\r\n }\r\n async cancel() {\r\n await addOrReplacePedalMarking(this.view, this.backup);\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.pedalMarking);\r\n }\r\n async commit() {\r\n return;\r\n }\r\n get depressText() {\r\n return this.pedalMarking.depressText;\r\n }\r\n set depressText(val: string) {\r\n this.pedalMarking.depressText = val.trim();\r\n }\r\n get releaseText() {\r\n return this.pedalMarking.releaseText;\r\n }\r\n set releaseText(val: string) {\r\n this.pedalMarking.releaseText = val.trim();\r\n }\r\n get bracket() {\r\n return this.pedalMarking.bracket;\r\n }\r\n set bracket(val: boolean) {\r\n this.pedalMarking.bracket = val;\r\n }\r\n get startMark() {\r\n return this.pedalMarking.startMark;\r\n }\r\n set startMark(val: boolean) {\r\n this.pedalMarking.startMark = val;\r\n }\r\n get releaseMark() {\r\n return this.pedalMarking.releaseMark;\r\n }\r\n set releaseMark(val: boolean) {\r\n this.pedalMarking.releaseMark = val;\r\n }\r\n}\r\nexport class SuiPedalMarkingDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Pedal Marking Properties', elements:\r\n [{\r\n smoName: 'bracket',\r\n defaultValue: 1,\r\n control: 'SuiToggleComponent',\r\n label: 'Bracket'\r\n }, {\r\n smoName: 'startMark',\r\n defaultValue: 1,\r\n control: 'SuiToggleComponent',\r\n label: 'Start Mark'\r\n }, {\r\n smoName: 'releaseMark',\r\n defaultValue: 1,\r\n control: 'SuiToggleComponent',\r\n label: 'ReleaseMark'\r\n }, {\r\n smoName: 'depressText',\r\n control: 'SuiTextInputComponent',\r\n label: 'Depress Text'\r\n }, {\r\n smoName: 'releaseText',\r\n control: 'SuiTextInputComponent',\r\n label: 'Release Text'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiPedalMarkingAdapter(parameters.view, parameters.modifier);\r\n super(SuiPedalMarkingDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n async changed() {\r\n await super.changed();\r\n const redraw = SmoSelection.getMeasuresBetween(this.view.score, this.adapter.pedalMarking.startSelector,\r\n this.adapter.pedalMarking.endSelector\r\n );\r\n this.view.undoStaffModifier('pedal marking', this.adapter.backup, UndoBuffer.bufferSubtypes.UPDATE);\r\n await addOrReplacePedalMarking(this.view, this.adapter.pedalMarking);\r\n this.view._renderChangedMeasures(redraw);\r\n await this.view.updatePromise();\r\n }\r\n}","import { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { buildDom } from '../../common/htmlHelpers';\r\nimport { SuiButtonComposite } from './components/button';\r\nimport { SuiComponentParent } from './components/baseComponent';\r\nimport { IsPitchLetter } from '../../smo/data/common';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { getButtonsFcn, SuiButtonArrayComponent, SuiButtonArrayParameters } from './components/buttonArray';\r\nimport { SuiDialogNotifier, SuiBaseComponentParams } from './components/baseComponent';\r\n\r\nexport class SuiTransposeButtonComponent extends SuiComponentParent {\r\n upOctaveComponent: SuiButtonComposite;\r\n downOctaveComponent: SuiButtonComposite;\r\n upStepComponent: SuiButtonComposite;\r\n downStepComponent: SuiButtonComposite;\r\n toggleEnharmonicComponent: SuiButtonComposite;\r\n toggleCourtesyComponent: SuiButtonComposite;\r\n constructor(dialog: SuiDialogNotifier, params: SuiBaseComponentParams) {\r\n super(dialog, params);\r\n this.upOctaveComponent = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'upOctave',\r\n smoName: 'upOctave',\r\n parentControl: this,\r\n icon: 'ribbon-button-text icon-bravura icon-ottavaAlta',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Up Octave',\r\n text: '+'\r\n });\r\n this.downOctaveComponent = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'downOctave',\r\n smoName: 'downOctave',\r\n parentControl: this,\r\n icon: 'ribbon-button-text icon-bravura icon-ottavaBassa',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Down Octave',\r\n text: '_'\r\n });\r\n this.upStepComponent = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'upStep',\r\n smoName: 'upStep',\r\n parentControl: this,\r\n icon: 'ribbon-button-text icon-bravura icon-accidentalSharp',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Add Dot',\r\n text: '='\r\n });\r\n this.downStepComponent = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'downStep',\r\n smoName: 'downStep',\r\n parentControl: this,\r\n icon: 'ribbon-button-text icon-bravura icon-accidentalFlat',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Remove Dot',\r\n text: '-'\r\n });\r\n this.toggleEnharmonicComponent = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'toggleEnharmonic',\r\n smoName: 'toggleEnharmonic',\r\n parentControl: this,\r\n icon: 'icon-smo ribbon-button-text icon-accident',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Remove Dot',\r\n text: 'Shift-E'\r\n });\r\n this.toggleCourtesyComponent = new SuiButtonComposite(this.dialog,\r\n {\r\n id: this.id + 'toggleCourtesy',\r\n smoName: 'toggleCourtesy',\r\n parentControl: this,\r\n icon: 'icon-smo ribbon-button-text icon-courtesy',\r\n classes: 'icon collapseParent button-hotkey',\r\n control: 'SuiButtonComponent',\r\n label: 'Toggle Courtesy Accidental',\r\n text: 'Shift-F'\r\n }); \r\n }\r\n getValue(): string {\r\n if (this.upOctaveComponent.changeFlag) {\r\n return this.upOctaveComponent.smoName;\r\n }\r\n if (this.downOctaveComponent.changeFlag) {\r\n return this.downOctaveComponent.smoName;\r\n }\r\n if (this.upStepComponent.changeFlag) {\r\n return this.upStepComponent.smoName;\r\n }\r\n if (this.downStepComponent.changeFlag) {\r\n return this.downStepComponent.smoName;\r\n }\r\n if (this.toggleEnharmonicComponent.changeFlag) {\r\n return this.toggleEnharmonicComponent.smoName;\r\n }\r\n if (this.toggleCourtesyComponent.changeFlag) {\r\n return this.toggleCourtesyComponent.smoName;\r\n }\r\n return '';\r\n } \r\n setValue(value: string) {\r\n // ignore\r\n }\r\n async changed() {\r\n this.handleChanged();\r\n }\r\n get html() {\r\n const b = buildDom;\r\n const q = b('div').classes(this.makeClasses('multiControl smoControl buttonArray'))\r\n .attr('id', this.parameterId);\r\n q.append(this.upOctaveComponent.html);\r\n q.append(this.downOctaveComponent.html);\r\n q.append(this.upStepComponent.html);\r\n q.append(this.downStepComponent.html);\r\n q.append(this.toggleEnharmonicComponent.html);\r\n q.append(this.toggleCourtesyComponent.html);\r\n return q;\r\n }\r\n bind() {\r\n this.upOctaveComponent.bind();\r\n this.downOctaveComponent.bind();\r\n this.upStepComponent.bind();\r\n this.downStepComponent.bind();\r\n this.toggleEnharmonicComponent.bind();\r\n this.toggleCourtesyComponent.bind();\r\n }\r\n}\r\n\r\nconst intervalButtonFactory: getButtonsFcn = () => {\r\n const params: SuiButtonArrayParameters = {\r\n label: 'Intervals',\r\n rows: [{\r\n label: 'Intervals Up',\r\n classes: 'pad-span',\r\n buttons: [\r\n { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'chordsecond',\r\n text: '2nd',\r\n label:'2nd',\r\n smoName: 'chordsecond'\r\n },\r\n { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'chordthird',\r\n text: '3rd',\r\n label:'3rd',\r\n smoName: 'chordthird'\r\n }, { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'chordfourth',\r\n text: '4th',\r\n label:'4th',\r\n smoName: 'chordfourth'\r\n }, { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'chordfifth',\r\n text: '5th',\r\n label:'5th',\r\n smoName: 'chordfifth'\r\n }, { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'chordsixth',\r\n text: '6th',\r\n label:'6th',\r\n smoName: 'chordsixth'\r\n }, { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'chordseventh',\r\n text: '7th',\r\n label:'7th',\r\n smoName: 'chordseventh'\r\n }, { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'chordoctave',\r\n text: '8va',\r\n label:'8va',\r\n smoName: 'chordoctave'\r\n }\r\n ]}, \r\n {\r\n label: 'Intervals Down',\r\n classes: 'pad-span',\r\n buttons: [\r\n { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'downchordsecond',\r\n text: '2nd',\r\n label:'2nd',\r\n smoName: 'downchordsecond'\r\n },\r\n { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'downchordthird',\r\n text: '3rd',\r\n label:'3rd',\r\n smoName: 'downchordthird'\r\n }, { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'downchordfourth',\r\n text: '4th',\r\n label:'4th',\r\n smoName: 'downchordfourth'\r\n }, { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'downchordfifth',\r\n text: '5th',\r\n label:'5th',\r\n smoName: 'downchordfifth'\r\n }, { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'downchordsixth',\r\n text: '6th',\r\n label:'6th',\r\n smoName: 'downchordsixth'\r\n }, { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'downchordseventh',\r\n text: '7th',\r\n label:'7th',\r\n smoName: 'downchordseventh'\r\n }, { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'downchordoctave',\r\n text: '8va',\r\n label:'8va',\r\n smoName: 'downchordoctave'\r\n }\r\n ]}]\r\n };\r\n return params;\r\n }\r\n const letterButtonFactory: getButtonsFcn = () => {\r\n const params: SuiButtonArrayParameters = {\r\n label: 'Pitches',\r\n rows: [{\r\n label: 'Pitches',\r\n classes: 'pad-span',\r\n buttons: [\r\n { classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'pitchA',\r\n text: 'A',\r\n label:'A',\r\n smoName: 'a'\r\n },{ classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'pitchB',\r\n text: 'B',\r\n label:'B',\r\n smoName: 'b'\r\n },{ classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'pitchC',\r\n text: 'C',\r\n label:'C',\r\n smoName: 'c'\r\n },{ classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'pitchD',\r\n text: 'D',\r\n label:'D',\r\n smoName: 'd'\r\n },{ classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'pitchE',\r\n text: 'E',\r\n label:'E',\r\n smoName: 'e'\r\n },{ classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'pitchF',\r\n text: 'F',\r\n label:'F',\r\n smoName: 'f'\r\n },{ classes: 'icon collapseParent button-array repetext',\r\n control: 'SuiButtonArrayButton',\r\n icon: '',\r\n id: 'pitchG',\r\n text: 'G',\r\n label:'G',\r\n smoName: 'g'\r\n },\r\n ]\r\n }]\r\n };\r\n return params;\r\n }\r\n export class SuiIntervalButtonComponent extends SuiButtonArrayComponent {\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams, buttonFactory: getButtonsFcn) {\r\n super(dialog, parameter, intervalButtonFactory);\r\n }\r\n } \r\n export class SuiLetterButtonComponent extends SuiButtonArrayComponent {\r\n constructor(dialog: SuiDialogNotifier, parameter: SuiBaseComponentParams, buttonFactory: getButtonsFcn) {\r\n super(dialog, parameter, letterButtonFactory);\r\n }\r\n } \r\nexport class SuiPitchAdapter extends SuiComponentAdapter {\r\n static intervalUp = ['chordsecond', 'chordthird', 'chordfourth', 'chordfifth', 'chordsixth', 'chordseventh', 'chordoctave'];\r\n static intervalDown = ['downchordsecond', 'downchordthird', 'downchordfourth', 'downchordfifth', 'downchordsixth',\r\n 'downchordseventh', 'downchordoctave'];\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.view.groupUndo(true);\r\n }\r\n get transposeButtons() {\r\n return '';\r\n }\r\n set transposeButtons(value: string) {\r\n if (value === 'upOctave') {\r\n this.view.transposeScore(12);\r\n }\r\n if (value === 'downOctave') {\r\n this.view.transposeScore(-12);\r\n }\r\n if (value === 'upStep') {\r\n this.view.transposeScore(1);\r\n }\r\n if (value === 'downStep') {\r\n this.view.transposeScore(-1);\r\n }\r\n if (value === 'toggleEnharmonic') {\r\n this.view.toggleEnharmonic(); \r\n }\r\n if (value === 'toggleCourtesy') {\r\n this.view.toggleCourtesyAccidentals();\r\n }\r\n }\r\n get intervalButtons() {\r\n return '';\r\n }\r\n set intervalButtons(value: string) {\r\n const intervalUp = SuiPitchAdapter.intervalUp.indexOf(value);\r\n const intervalDown = SuiPitchAdapter.intervalDown.indexOf(value);\r\n if (intervalUp >= 0) {\r\n this.view.setInterval(intervalUp + 1);\r\n }\r\n if (intervalDown >= 0) {\r\n this.view.setInterval((intervalDown + 1) * -1);\r\n }\r\n }\r\n get pitchButtons() {\r\n return '';\r\n }\r\n set pitchButtons(value: string) {\r\n if (IsPitchLetter(value)) {\r\n this.view.setPitch(value);\r\n }\r\n }\r\n async cancel() {\r\n await this.view.undo();\r\n }\r\n async commit() {\r\n }\r\n}\r\nexport class SuiPitchDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Pitch',\r\n elements:\r\n [{\r\n smoName: 'transposeButtons',\r\n control: 'SuiTransposeButtonComponent',\r\n label: 'Pitch and Transposition'\r\n }, {\r\n smoName: 'intervalButtons',\r\n control: 'SuiIntervalButtonComponent',\r\n label: 'Intervals'\r\n }, {\r\n smoName: 'pitchButtons',\r\n control: 'SuiLetterButtonComponent',\r\n label: 'Letter Names'\r\n },{\r\n smoName: 'textMessage4',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use a-g on the keyboard for notes with those letter names',\r\n classes: 'hide-input'\r\n }, {\r\n smoName: 'textMessage1',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: `Learn the keyboard shortcuts, they're much faster!`,\r\n classes: 'hide-input'\r\n }, {\r\n smoName: 'textMessage5',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use - = keys to move pitch up/down 1/2 step',\r\n classes: 'hide-input'\r\n }, {\r\n smoName: 'textMessage2',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use _ (shift minus) + (shift = ) keys to move pitch up/down octaves',\r\n classes: 'hide-input'\r\n }, {\r\n smoName: 'textMessage3',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use 2-8 on the keyboard for intervals (Shift for interval below)',\r\n classes: 'hide-input'\r\n }, {\r\n smoName: 'textMessage2',\r\n control: 'SuiReadOnlyTextComponent',\r\n label: 'Use shift + arrow keys to navigate and select notes',\r\n classes: 'hide-input'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiPitchAdapter(parameters.view);\r\n super(SuiPitchDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS', 'HIDEREMOVE'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScorePreferences } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nconst deepCopy = (x: any) => JSON.parse(JSON.stringify(x));\r\n\r\nexport class SuiScorePreferencesAdapter extends SuiComponentAdapter {\r\n preferences: SmoScorePreferences;\r\n backup: SmoScorePreferences;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.preferences = new SmoScorePreferences(view.score.preferences);\r\n this.backup = JSON.parse(JSON.stringify(this.preferences));\r\n }\r\n get autoAdvance(): boolean {\r\n return this.preferences.autoAdvance;\r\n }\r\n set autoAdvance(value: boolean) {\r\n this.preferences.autoAdvance = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get autoPlay(): boolean {\r\n return this.preferences.autoPlay;\r\n }\r\n set autoPlay(value: boolean) {\r\n this.preferences.autoPlay = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get showPiano(): boolean {\r\n return this.preferences.showPiano;\r\n }\r\n set showPiano(value: boolean) {\r\n this.preferences.showPiano = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get hideEmptyLines(): boolean {\r\n return this.preferences.hideEmptyLines;\r\n }\r\n set hideEmptyLines(value: boolean) {\r\n this.preferences.hideEmptyLines = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get defaultDupleDuration() {\r\n return this.preferences.defaultDupleDuration;\r\n }\r\n set defaultDupleDuration(value: number) {\r\n this.preferences.defaultDupleDuration = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get defaultTripleDuration() {\r\n return this.preferences.defaultTripleDuration;\r\n }\r\n set defaultTripleDuration(value: number) {\r\n this.preferences.defaultTripleDuration = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n get transposingScore() {\r\n return this.preferences.transposingScore;\r\n }\r\n set transposingScore(value: boolean) {\r\n this.preferences.transposingScore = value;\r\n this.view.updateScorePreferences(this.preferences);\r\n }\r\n async cancel() {\r\n const p1 = JSON.stringify(this.preferences);\r\n const p2 = JSON.stringify(this.backup);\r\n if (p1 !== p2) {\r\n await this.view.updateScorePreferences(this.backup);\r\n }\r\n }\r\n commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiScorePreferencesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Preferences',\r\n elements: [{\r\n smoName: 'autoAdvance',\r\n control: 'SuiToggleComponent',\r\n label: 'Auto-advance after pitch'\r\n }, {\r\n smoName: 'autoPlay',\r\n control: 'SuiToggleComponent',\r\n label: 'Auto-play sounds for note entry'\r\n }, {\r\n smoName: 'showPiano',\r\n control: 'SuiToggleComponent',\r\n label: 'Show Piano widget'\r\n }, {\r\n smoName: 'transposingScore',\r\n control: 'SuiToggleComponent',\r\n label: 'Tranpose Score'\r\n }, {\r\n smoName: 'hideEmptyLines',\r\n control: 'SuiToggleComponent',\r\n label: 'Hide Empty Lines'\r\n }, {\r\n smoName: 'defaultDupleDuration',\r\n control: 'SuiDropdownComponent',\r\n label: 'Default Duration (even meter)',\r\n dataType: 'int',\r\n options: [{\r\n value: 4096,\r\n label: '1/4'\r\n }, {\r\n value: 2048,\r\n label: '1/8'\r\n }]\r\n }, {\r\n smoName: 'defaultTripleDuration',\r\n control: 'SuiDropdownComponent',\r\n label: 'Default Duration (triple meter)',\r\n dataType: 'int',\r\n options: [{\r\n value: 6144,\r\n label: 'dotted 1/4'\r\n }, {\r\n value: 2048,\r\n label: '1/8'\r\n }]\r\n }],\r\n staticText: []\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScorePreferencesAdapter(params.view);\r\n super(SuiScorePreferencesDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScoreInfo, SmoScoreInfoKeys } from '../../smo/data/scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupPurpose } from '../../smo/data/scoreText';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { TextCheckPair } from './components/textCheck';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiScoreIdentificationAdapter extends SuiComponentAdapter {\r\n scoreInfo: SmoScoreInfo;\r\n backup: SmoScoreInfo;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.scoreInfo = this.view.score.scoreInfo;\r\n this.backup = JSON.parse(JSON.stringify(this.scoreInfo));\r\n }\r\n get title(): string {\r\n return this.scoreInfo.title;\r\n }\r\n set title(value: string) {\r\n this.scoreInfo.title = value;\r\n }\r\n get subTitle(): string {\r\n return this.scoreInfo.subTitle;\r\n }\r\n set subTitle(value: string) {\r\n this.scoreInfo.subTitle = value;\r\n }\r\n get composer(): string {\r\n return this.scoreInfo.composer;\r\n }\r\n set composer(value: string) {\r\n this.scoreInfo.composer = value;\r\n }\r\n get copyright(): string {\r\n return this.scoreInfo.copyright;\r\n }\r\n set copyright(value: string) {\r\n this.scoreInfo.copyright = value;\r\n }\r\n get name() {\r\n return this.scoreInfo.name;\r\n }\r\n set name(value: string) {\r\n this.scoreInfo.name = value;\r\n }\r\n async commit() {\r\n await this.view.updateScoreInfo(this.scoreInfo);\r\n }\r\n cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\n// ## SuiScoreIdentificationDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiScoreIdentificationDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score Preferences', elements:\r\n [{\r\n smoName: 'name',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Score Name',\r\n }, {\r\n smoName: 'title',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Title',\r\n }, {\r\n smoName: 'subTitle',\r\n control: 'SuiTextInputComponent',\r\n label: 'Sub Title',\r\n }, {\r\n smoName: 'composer',\r\n control: 'SuiTextInputComponent',\r\n label: 'Composer',\r\n }, {\r\n smoName: 'copyright',\r\n control: 'SuiTextInputComponent',\r\n label: 'Copyright'\r\n }],\r\n staticText: [\r\n { titleText: 'Title' },\r\n { subTitleText: 'Sub-title' },\r\n { copyrightText: 'Copyright' },\r\n { composerText: 'Composer' },\r\n { show: 'Show' }\r\n ]\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiScoreIdentificationDialog(parameters);\r\n dg.display();\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiScoreIdentificationAdapter(params.view);\r\n super(SuiScoreIdentificationDialog.dialogElements, { adapter, ...params });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { ViewMapEntry } from '../../render/sui/scoreView';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\nimport { StaffCheckComponent } from './components/staffComponents';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nconst deepCopy = (x: any) => JSON.parse(JSON.stringify(x));\r\nexport class SuiScoreViewAdapter extends SuiComponentAdapter {\r\n originalView: ViewMapEntry[];\r\n currentView: ViewMapEntry[];\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.currentView = this.view.getView();\r\n this.originalView = JSON.parse(JSON.stringify(this.currentView));\r\n }\r\n async cancel() {\r\n const s1 = JSON.stringify(this.originalView);\r\n const s2 = JSON.stringify(this.currentView);\r\n if (s1 !== s2) {\r\n this.view.setView(this.originalView);\r\n }\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async commit() {\r\n const s1 = JSON.stringify(this.originalView);\r\n const s2 = JSON.stringify(this.currentView);\r\n if (s1 !== s2) {\r\n this.view.setView(this.currentView);\r\n }\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get scoreView(): ViewMapEntry[] {\r\n return this.currentView;\r\n }\r\n set scoreView(value: ViewMapEntry[]) {\r\n this.currentView = value;\r\n }\r\n}\r\n// ## SuiScoreViewDialog\r\n// decide which rows of the score to look at\r\nexport class SuiScoreViewDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Score View', elements:\r\n [{\r\n smoName: 'scoreView',\r\n control: 'StaffCheckComponent',\r\n label: 'Show staff',\r\n }],\r\n staticText: []\r\n };\r\n originalValue: number[];\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiScoreViewAdapter(parameters.view);\r\n super(SuiScoreViewDialog.dialogElements, { adapter, ...parameters });\r\n this.originalValue = JSON.parse(JSON.stringify(this.view.getView()));\r\n }\r\n get scoreViewCtrl() {\r\n return this.cmap.scoreViewCtrl as StaffCheckComponent;\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoSlur, SlurNumberParams } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoOperation } from '../../smo/xform/operations';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type SlurNumber = 'spacing' | 'thickness' | 'xOffset' | 'yOffset' | 'position' | 'position_end' | 'cp1x'\r\n| 'cp1y' | 'cp2x' | 'cp2y' | 'orientation';\r\nexport class SuiSlurAdapter extends SuiComponentAdapter {\r\nslur: SmoSlur;\r\nbackup: SmoSlur;\r\nchanged: boolean = false;\r\nupdating: boolean = false;\r\nconstructor(view: SuiScoreViewOperations, slur: SmoSlur) {\r\n super(view);\r\n this.slur = slur;\r\n this.view = view;\r\n this.backup = new SmoSlur(this.slur);\r\n // Set the same id so the erase works\r\n this.backup.attrs.id = slur.attrs.id;\r\n this.backup.associatedStaff = this.slur.associatedStaff;\r\n}\r\nwriteSlurNumber(view: SuiScoreViewOperations, slur: SmoSlur, key: SlurNumber, value: number) {\r\n const current = new SmoSlur(slur);\r\n slur[key] = value;\r\n view.addOrUpdateStaffModifier(current, slur);\r\n this.changed = true;\r\n}\r\nasync cancel() {\r\n if (!this.changed) {\r\n return;\r\n }\r\n await this.view.addOrUpdateStaffModifier(this.slur, this.backup);\r\n}\r\nasync commit() {\r\n return PromiseHelpers.emptyPromise();\r\n}\r\nget resetAll(): boolean {\r\n return false;\r\n}\r\nset resetAll(value: boolean) {\r\n this.resetDefaults = value;\r\n const slurs: SmoSlur[] = [];\r\n const self = this;\r\n this.updating = true;\r\n const updateSlur = async (score: SmoScore, slur: SmoSlur) => {\r\n const params = SmoOperation.getDefaultSlurDirection(score, slur.startSelector, slur.endSelector);\r\n const original = new SmoSlur(slur);\r\n SlurNumberParams.forEach((key) => {\r\n slur[key] = params[key]; \r\n });\r\n await self.view.addOrUpdateStaffModifier(original, slur);\r\n }\r\n new Promise((resolve) => {\r\n const nextSlur = () => {\r\n setTimeout(() => {\r\n if (slurs.length) {\r\n const slur = slurs.pop();\r\n updateSlur(self.view.score, slur!).then(() => {\r\n nextSlur();\r\n });\r\n } else {\r\n self.updating = false;\r\n resolve();\r\n }\r\n }, 1);\r\n }\r\n nextSlur();\r\n });\r\n this.view.score.staves.forEach((staff) => {\r\n staff.modifiers.filter((x) => x.ctor === 'SmoSlur').forEach((smoObj) => {\r\n const slur = smoObj as SmoSlur;\r\n slurs.push(slur);\r\n });\r\n });\r\n this.changed = true;\r\n}\r\nget resetDefaults(): boolean {\r\n return false;\r\n}\r\nset resetDefaults(value: boolean) {\r\n const params = SmoOperation.getDefaultSlurDirection(this.view.score, this.slur.startSelector, this.slur.endSelector);\r\n SlurNumberParams.forEach((key) => {\r\n this.slur[key] = params[key]; \r\n });\r\n this.view.addOrUpdateStaffModifier(this.backup, this.slur);\r\n this.changed = true;\r\n}\r\nget cp2y(): number {\r\n return this.slur.cp2y;\r\n}\r\nset cp2y(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp2y', value);\r\n} \r\nget cp2x(): number {\r\n return this.slur.cp2x;\r\n}\r\nset cp2x(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp2x', value);\r\n} \r\nget cp1y(): number {\r\n return this.slur.cp1y;\r\n}\r\nset cp1y(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp1y', value);\r\n} \r\nget cp1x(): number {\r\n return this.slur.cp1x;\r\n}\r\nset cp1x(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'cp1x', value);\r\n} \r\nget orientation(): number {\r\n return this.slur.orientation;\r\n}\r\nset orientation(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'orientation', value);\r\n}\r\nget position_end(): number {\r\n return this.slur.position_end;\r\n}\r\nset position_end(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'position_end', value);\r\n}\r\nget position(): number {\r\n return this.slur.position;\r\n}\r\nset position(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'position', value);\r\n}\r\nget yOffset(): number {\r\n return this.slur.yOffset;\r\n}\r\nset yOffset(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'yOffset', value);\r\n}\r\nget xOffset(): number {\r\n return this.slur.xOffset;\r\n}\r\nset xOffset(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'xOffset', value);\r\n}\r\nget thickness(): number {\r\n return this.slur.thickness;\r\n}\r\nset thickness(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'thickness', value);\r\n}\r\nget spacing(): number {\r\n return this.slur.spacing;\r\n}\r\nset spacing(value: number) {\r\n this.writeSlurNumber(this.view, this.slur, 'spacing', value);\r\n}\r\nasync remove() {\r\n await this.view.removeStaffModifier(this.backup);\r\n}\r\n}\r\nexport class SuiSlurAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = { \r\n label: 'Slur Properties', elements: [{\r\n smoName: 'spacing',\r\n defaultValue: 2,\r\n control: 'SuiRockerComponent',\r\n label: 'Spacing'\r\n }, {\r\n smoName: 'thickness',\r\n defaultValue: 2,\r\n control: 'SuiRockerComponent',\r\n label: 'Thickness'\r\n }, {\r\n smoName: 'xOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 10,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }, {\r\n smoName: 'position',\r\n defaultValue: SmoSlur.positions.AUTO,\r\n dataType: 'int',\r\n options: [{\r\n value: SmoSlur.positions.AUTO,\r\n label: 'Auto'\r\n }, {\r\n value: SmoSlur.positions.HEAD,\r\n label: 'Head'\r\n },{\r\n value: SmoSlur.positions.TOP,\r\n label: 'Top'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'Start Position'\r\n }, {\r\n smoName: 'position_end',\r\n defaultValue: SmoSlur.positions.HEAD,\r\n dataType: 'int',\r\n options: [{\r\n value: SmoSlur.positions.AUTO,\r\n label: 'Auto'\r\n }, {\r\n value: SmoSlur.positions.HEAD,\r\n label: 'Head'\r\n }, {\r\n value: SmoSlur.positions.TOP,\r\n label: 'Top'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'End Position'\r\n }, {\r\n smoName: 'orientation',\r\n defaultValue: SmoSlur.orientations.AUTO,\r\n dataType: 'int',\r\n options: [{\r\n value: SmoSlur.orientations.AUTO,\r\n label: 'Auto'\r\n }, {\r\n value: SmoSlur.orientations.UP,\r\n label: 'Up'\r\n }, {\r\n value: SmoSlur.orientations.DOWN,\r\n label: 'Down'\r\n }],\r\n control: 'SuiDropdownComponent',\r\n label: 'Orientation'\r\n },{\r\n smoName: 'resetDefaults',\r\n control: 'SuiToggleComponent',\r\n label: 'Defaults'\r\n }, {\r\n smoName: 'resetAll',\r\n control: 'SuiToggleComponent',\r\n label: 'Reset All Slurs'\r\n }, {\r\n smoName: 'cp1x',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1 X'\r\n }, {\r\n smoName: 'cp1y',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1 Y'\r\n }, {\r\n smoName: 'cp2x',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2 X'\r\n }, {\r\n smoName: 'cp2y',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2 Y'\r\n }], staticText: []\r\n };\r\n disableClose() {\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', true);\r\n $(this.dgDom.element).find('.cancel-button').prop('disabled', true);\r\n $(this.dgDom.element).find('.remove-button').prop('disabled', true);\r\n }\r\n enableClose() {\r\n $(this.dgDom.element).find('.ok-button').prop('disabled', false);\r\n $(this.dgDom.element).find('.cancel-button').prop('disabled', false);\r\n $(this.dgDom.element).find('.remove-button').prop('disabled', false);\r\n }\r\n modalPromise() {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n const checkComplete = () => {\r\n setTimeout(() => {\r\n if (self.adapter.updating === false) { \r\n resolve();\r\n } else {\r\n checkComplete();\r\n } \r\n }, 200);\r\n };\r\n checkComplete();\r\n });\r\n }\r\n async changed() {\r\n await super.changed();\r\n if (this.adapter.updating) {\r\n this.disableClose();\r\n await this.modalPromise();\r\n this.enableClose();\r\n }\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiSlurAdapter(parameters.view, parameters.modifier);\r\n super(SuiSlurAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoSystemGroup } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiStaffGroupDialogAdapter extends SuiComponentAdapter {\r\n staffGroup: SmoSystemGroup;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n const selection = this.view.tracker.selections[0];\r\n // Reset the view so we can see all the staves\r\n this.view.viewAll();\r\n const staffGroup = this.view.score.getSystemGroupForStaff(selection);\r\n if (!staffGroup) {\r\n const params = SmoSystemGroup.defaults;\r\n params.startSelector = JSON.parse(JSON.stringify(selection.selector));\r\n params.endSelector = JSON.parse(JSON.stringify(selection.selector));\r\n this.staffGroup = new SmoSystemGroup(params);\r\n } else {\r\n this.staffGroup = staffGroup;\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n cancel() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get leftConnector() {\r\n return this.staffGroup.leftConnector;\r\n }\r\n set leftConnector(val: number) {\r\n this.staffGroup.leftConnector = val;\r\n this.view.addOrUpdateStaffGroup(this.staffGroup);\r\n }\r\n get staffGroups() {\r\n return this.staffGroup;\r\n }\r\n set staffGroups(val: SmoSystemGroup) {\r\n this.staffGroup = val;\r\n this.view.addOrUpdateStaffGroup(this.staffGroup);\r\n }\r\n}\r\n// ## SuiStaffGroupDialog\r\n// A staff group is a grouping of staves that can be bracketed and justified\r\nexport class SuiStaffGroupDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Staff Group', elements:\r\n [{\r\n smoName: 'staffGroups',\r\n control: 'StaffAddRemoveComponent',\r\n label: 'Staves in Group',\r\n }, {\r\n smoName: 'leftConnector',\r\n control: 'SuiDropdownComponent',\r\n dataType: 'int',\r\n label: 'Left Connector',\r\n options: [\r\n {\r\n value: SmoSystemGroup.connectorTypes.bracket,\r\n label: 'Bracket'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.brace,\r\n label: 'Brace'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.single,\r\n label: 'Single'\r\n }, {\r\n value: SmoSystemGroup.connectorTypes.double,\r\n label: 'Double'\r\n }]\r\n }],\r\n staticText: [\r\n { includeStaff: 'Include Staff' }\r\n ]\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n const dg = new SuiStaffGroupDialog(parameters);\r\n dg.display();\r\n }\r\n getModifier() {\r\n return this.adapter.staffGroups;\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiStaffGroupDialogAdapter(parameters.view);\r\n super(SuiStaffGroupDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoTabStave } from '../../smo/data/staffModifiers';\r\nimport { Pitch } from '../../smo/data/common';\r\nimport { SmoSelection, SmoSelector } from '../../smo/xform/selections';\r\n\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\n\r\nexport class SuiTabStaveAdapter extends SuiComponentAdapter {\r\n selections: SmoSelection[];\r\n tabStave: SmoTabStave;\r\n constructor(view: SuiScoreViewOperations, modifier?: SmoTabStave) {\r\n super(view);\r\n this.selections = SmoSelection.getMeasureList(this.view.tracker.selections);\r\n if (modifier) {\r\n this.tabStave = modifier;\r\n } else {\r\n const tabStave = this.selections[0].staff.getTabStaveForMeasure(this.selections[0].selector);\r\n if (tabStave) {\r\n this.tabStave = tabStave\r\n } else {\r\n this.tabStave = new SmoTabStave(SmoTabStave.defaults);\r\n this.tabStave.startSelector = JSON.parse(JSON.stringify(this.selections[0].selector));\r\n this.tabStave.endSelector = JSON.parse(JSON.stringify(this.selections[this.selections.length - 1].selector));\r\n }\r\n }\r\n }\r\n get numLines(): number {\r\n return this.tabStave.numLines;\r\n }\r\n set numLines(value: number) {\r\n this.tabStave.numLines = value;\r\n }\r\n set spacing(value: number) {\r\n this.tabStave.spacing = value;\r\n }\r\n get spacing(): number {\r\n return this.tabStave.spacing;\r\n }\r\n get showStems(): boolean {\r\n return this.tabStave.showStems;\r\n }\r\n set showStems(value: boolean) {\r\n this.tabStave.showStems = value;\r\n }\r\n get allMeasures(): boolean {\r\n return this.tabStave.allMeasures;\r\n }\r\n set allMeasures(value: boolean) {\r\n this.tabStave.allMeasures = value;\r\n }\r\n get stringPitches(): Pitch[] {\r\n return this.tabStave.stringPitches;\r\n }\r\n set stringPitches(value: Pitch[]) {\r\n this.tabStave.stringPitches = value;\r\n this.numLines = this.tabStave.stringPitches.length;\r\n }\r\n resetStrings() {\r\n this.tabStave.stringPitches = SmoTabStave.defaultStringPitches;\r\n }\r\n async commit() {\r\n this.view.updateTabStave(this.tabStave);\r\n }\r\n async cancel() {\r\n }\r\n async remove() { \r\n return await this.view.removeTabStave();\r\n }\r\n}\r\nexport class SuiTabStaveDialog extends SuiDialogAdapterBase {\r\n static get applyTo() {\r\n return {\r\n score: 0, selected: 1, remaining: 3\r\n };\r\n }\r\n // export type Clef = 'treble' | 'bass' | 'tenor' | 'alto' | 'soprano' | 'percussion'\r\n //| 'mezzo-soprano' | 'baritone-c' | 'baritone-f' | 'subbass' | 'french';\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Tab Properties',\r\n elements:\r\n [{smoName: 'stringPitches',\r\n control:'SuiPitchArrayComponentTab', \r\n label: 'Pitches'\r\n }, {\r\n smoName: 'spacing',\r\n defaultValue: 13,\r\n control: 'SuiRockerComponent',\r\n label: 'Space between lines'\r\n }, {\r\n smoName: 'showStems',\r\n control: 'SuiToggleComponent',\r\n label: 'Show Stems'\r\n }, {\r\n smoName: 'allMeasures',\r\n control: 'SuiToggleComponent',\r\n label: 'Apply to all measures'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiTabStaveAdapter(parameters.view, parameters.modifier);\r\n super(SuiTabStaveDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoTempoText, SmoTempoNumberAttribute, SmoTempoStringAttribute, SmoTempoBooleanAttribute } from '../../smo/data/measureModifiers';\r\nimport { SmoSelection } from '../../smo/xform/selections';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\n\r\n\r\nexport class SuiTempoAdapter extends SuiComponentAdapter {\r\n smoTempoText: SmoTempoText;\r\n backup: SmoTempoText;\r\n applyToAllVal: boolean = false; \r\n applyToSelection: boolean = false;\r\n edited: boolean = false;\r\n measure: SmoMeasure;\r\n constructor(view: SuiScoreViewOperations, measure: SmoMeasure) {\r\n super(view);\r\n this.measure = measure;\r\n this.smoTempoText = new SmoTempoText(measure.tempo);\r\n this.backup = new SmoTempoText(this.smoTempoText);\r\n }\r\n writeNumber(param: SmoTempoNumberAttribute, value: number) {\r\n this.smoTempoText[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n writeBoolean(param: SmoTempoBooleanAttribute, value: boolean) {\r\n this.smoTempoText[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n writeString(param: SmoTempoStringAttribute, value: string) {\r\n (this.smoTempoText as any)[param] = value;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n async remove() {\r\n await this.view.removeTempo(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n }\r\n async cancel() {\r\n await this.view.updateTempoScore(this.measure, this.backup, this.applyToAll, this.applyToSelection);\r\n }\r\n get applyToAll() {\r\n return this.applyToAllVal;\r\n }\r\n set applyToAll(val: boolean) {\r\n this.applyToAllVal = val;\r\n this.view.updateTempoScore(this.measure, this.smoTempoText, this.applyToAll, this.applyToSelection);\r\n this.edited = true;\r\n }\r\n async commit(){\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n get tempoText() {\r\n return this.smoTempoText.tempoText;\r\n }\r\n set tempoText(value: string) {\r\n this.writeString('tempoText', value);\r\n }\r\n get tempoMode() {\r\n return this.smoTempoText.tempoMode;\r\n }\r\n set tempoMode(value: string) {\r\n this.writeString('tempoMode', value);\r\n }\r\n get customText() {\r\n return this.smoTempoText.customText;\r\n }\r\n set customText(value: string) {\r\n this.writeString('customText', value);\r\n }\r\n get bpm() {\r\n return this.smoTempoText.bpm;\r\n }\r\n set bpm(value: number) {\r\n this.writeNumber('bpm', value);\r\n }\r\n get display() {\r\n return this.smoTempoText.display;\r\n }\r\n set display(value: boolean) {\r\n this.writeBoolean('display', value);\r\n }\r\n get beatDuration() {\r\n return this.smoTempoText.beatDuration;\r\n }\r\n set beatDuration(value: number) {\r\n this.writeNumber('beatDuration', value);\r\n }\r\n get yOffset() {\r\n return this.smoTempoText.yOffset;\r\n }\r\n set yOffset(value: number) {\r\n this.writeNumber('yOffset', value);\r\n }\r\n}\r\n// ## SuiTempoDialog\r\n// Allow user to choose a tempo or tempo change.\r\nexport class SuiTempoDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition = \r\n {\r\n label: 'Tempo Properties',\r\n elements: [\r\n {\r\n smoName: 'tempoMode',\r\n defaultValue: SmoTempoText.tempoModes.durationMode,\r\n control: 'SuiDropdownComponent',\r\n label: 'Tempo Mode',\r\n options: [{\r\n value: 'duration',\r\n label: 'Duration (Beats/Minute)'\r\n }, {\r\n value: 'text',\r\n label: 'Tempo Text'\r\n }, {\r\n value: 'custom',\r\n label: 'Specify text and duration'\r\n }\r\n ]\r\n },\r\n {\r\n smoName: 'customText',\r\n defaultValue: '',\r\n control: 'SuiTextInputComponent',\r\n label: 'Custom Text',\r\n classes: 'hide-when-text-mode'\r\n },\r\n {\r\n smoName: 'bpm',\r\n defaultValue: 120,\r\n control: 'SuiRockerComponent',\r\n label: 'Notes/Minute'\r\n },\r\n {\r\n smoName: 'beatDuration',\r\n defaultValue: 4096,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Unit for Beat',\r\n options: [{\r\n value: 4096,\r\n label: 'Quarter Note',\r\n }, {\r\n value: 2048,\r\n label: '1/8 note'\r\n }, {\r\n value: 6144,\r\n label: 'Dotted 1/4 note'\r\n }, {\r\n value: 8192,\r\n label: '1/2 note'\r\n }\r\n ]\r\n },\r\n {\r\n smoName: 'tempoText',\r\n defaultValue: SmoTempoText.tempoTexts.allegro,\r\n control: 'SuiDropdownComponent',\r\n label: 'Tempo Text',\r\n classes: 'hide-when-not-text-mode',\r\n options: [{\r\n value: SmoTempoText.tempoTexts.larghissimo,\r\n label: 'Larghissimo'\r\n }, {\r\n value: SmoTempoText.tempoTexts.grave,\r\n label: 'Grave'\r\n }, {\r\n value: SmoTempoText.tempoTexts.lento,\r\n label: 'Lento'\r\n }, {\r\n value: SmoTempoText.tempoTexts.largo,\r\n label: 'Largo'\r\n }, {\r\n value: SmoTempoText.tempoTexts.larghetto,\r\n label: 'Larghetto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.adagio,\r\n label: 'Adagio'\r\n }, {\r\n value: SmoTempoText.tempoTexts.adagietto,\r\n label: 'Adagietto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andante_moderato,\r\n label: 'Andante moderato'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andante,\r\n label: 'Andante'\r\n }, {\r\n value: SmoTempoText.tempoTexts.andantino,\r\n label: 'Andantino'\r\n }, {\r\n value: SmoTempoText.tempoTexts.moderator,\r\n label: 'Moderato'\r\n }, {\r\n value: SmoTempoText.tempoTexts.allegretto,\r\n label: 'Allegretto',\r\n }, {\r\n value: SmoTempoText.tempoTexts.allegro,\r\n label: 'Allegro'\r\n }, {\r\n value: SmoTempoText.tempoTexts.vivace,\r\n label: 'Vivace'\r\n }, {\r\n value: SmoTempoText.tempoTexts.presto,\r\n label: 'Presto'\r\n }, {\r\n value: SmoTempoText.tempoTexts.prestissimo,\r\n label: 'Prestissimo'\r\n }\r\n ]\r\n }, {\r\n smoName: 'applyToAll',\r\n control: 'SuiToggleComponent',\r\n label: 'Apply to all future measures?'\r\n }, {\r\n smoName: 'applyToSelection',\r\n control: 'SuiToggleComponent',\r\n label: 'Apply to selection?'\r\n }, {\r\n smoName: 'display',\r\n control: 'SuiToggleComponent',\r\n label: 'Display Tempo'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }\r\n ],\r\n staticText: []\r\n };\r\n showHideCustom(): void {\r\n if (this.adapter.tempoMode === 'custom') {\r\n this.cmap.customTextCtrl.show();\r\n } else {\r\n this.cmap.customTextCtrl.hide();\r\n }\r\n }\r\n async changed() {\r\n await super.changed();\r\n this.showHideCustom();\r\n }\r\n initialValue() {\r\n super.initialValue();\r\n this.showHideCustom();\r\n }\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n const measures = SmoSelection.getMeasureList(parameters.view.tracker.selections)\r\n .map((sel) => sel.measure);\r\n const measure = measures[0];\r\n const adapter = new SuiTempoAdapter(parameters.view, measure);\r\n super(SuiTempoDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScoreText, SmoTextGroup } from '../../smo/data/scoreText';\r\n\r\nimport { closeDialogPromise } from '../../common/htmlHelpers';\r\n\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SvgHelpers, OutlineInfo } from '../../render/sui/svgHelpers';\r\nimport { SuiTextEditor } from '../../render/sui/textEdit';\r\n\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\nimport { SuiDragText } from './components/dragText';\r\nimport { SuiTextInPlace } from './components/textInPlace';\r\nimport { SuiDropdownComponent } from './components/dropdown';\r\nimport { SuiToggleComponent } from './components/toggle';\r\nimport { SuiRockerComponent } from './components/rocker';\r\nimport { SuiHelp } from '../help';\r\nimport { SuiFontComponent } from './components/fontComponent';\r\nimport { SuiTextBlockComponent } from './components/textInPlace';\r\n\r\nimport { EventHandler } from '../eventSource';\r\nimport { SuiInlineText } from '../../render/sui/textRender';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTextBlockDialog extends SuiDialogBase {\r\n get textEditorCtrl(): SuiTextInPlace {\r\n return this.cmap.textEditorCtrl as SuiTextInPlace;\r\n }\r\n get insertCodeCtrl(): SuiDropdownComponent {\r\n return this.cmap.insertCodeCtrl as SuiDropdownComponent;\r\n }\r\n get textDraggerCtrl(): SuiDragText {\r\n return this.cmap.textDraggerCtrl as SuiDragText;\r\n }\r\n get yCtrl(): SuiRockerComponent {\r\n return this.cmap.yCtrl as SuiRockerComponent;\r\n }\r\n get xCtrl(): SuiRockerComponent {\r\n return this.cmap.xCtrl as SuiRockerComponent;\r\n }\r\n get fontCtrl(): SuiFontComponent {\r\n return this.cmap.fontCtrl as SuiFontComponent;\r\n }\r\n get textBlockCtrl(): SuiTextBlockComponent {\r\n return this.cmap.textBlockCtrl as SuiTextBlockComponent;\r\n }\r\n get paginationCtrl(): SuiDropdownComponent {\r\n return this.cmap.paginationCtrl as SuiDropdownComponent;\r\n }\r\n get attachToSelectorCtrl(): SuiToggleComponent {\r\n return this.cmap.attachToSelectorCtrl as SuiToggleComponent;\r\n }\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Text Properties', elements:\r\n [{\r\n smoName: 'textEditor',\r\n defaultValue: 0,\r\n control: 'SuiTextInPlace',\r\n classes: 'show-always hide-when-moving',\r\n label: 'Edit Text',\r\n options: []\r\n }, {\r\n smoName: 'insertCode',\r\n classes: 'show-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Insert Special',\r\n options: [\r\n { value: '@@@', label: 'Pages' },\r\n { value: '###', label: 'Page Number' }\r\n ]\r\n }, {\r\n smoName: 'textDragger',\r\n classes: 'hide-when-editing show-when-moving',\r\n defaultValue: 0,\r\n control: 'SuiDragText',\r\n label: 'Move Text',\r\n options: []\r\n }, {\r\n smoName: 'x',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'X Position (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'y',\r\n defaultValue: 0,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiRockerComponent',\r\n label: 'Y Position (Px)',\r\n dataType: 'int'\r\n }, {\r\n smoName: 'font',\r\n classes: 'hide-when-editing hide-when-moving',\r\n defaultValue: SmoScoreText.fontFamilies.times,\r\n control: 'SuiFontComponent',\r\n label: 'Font Information'\r\n },\r\n {\r\n smoName: 'textBlock',\r\n classes: 'hide-when-editing hide-when-moving',\r\n defaultValue: '',\r\n control: 'SuiTextBlockComponent',\r\n label: 'Text Block Properties'\r\n },\r\n { // {every:'every',even:'even',odd:'odd',once:'once'}\r\n smoName: 'pagination',\r\n defaultValue: SmoTextGroup.paginations.ONCE,\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiDropdownComponent',\r\n label: 'Page Behavior',\r\n startRow: true,\r\n options: [{ value: SmoTextGroup.paginations.ONCE, label: 'Once' },\r\n { value: SmoTextGroup.paginations.EVERY, label: 'Every' },\r\n { value: SmoTextGroup.paginations.ODD, label: 'Odd' },\r\n { value: SmoTextGroup.paginations.SUBSEQUENT, label: 'Subsequent' }\r\n ]\r\n }, {\r\n smoName: 'attachToSelector',\r\n classes: 'hide-when-editing hide-when-moving',\r\n control: 'SuiToggleComponent',\r\n label: 'Attach to Selection'\r\n }],\r\n staticText: [\r\n { label: 'Text Properties' },\r\n { editorLabel: 'Done Editing Text' },\r\n { draggerLabel: 'Done Dragging Text' }\r\n ]\r\n };\r\n edited: boolean;\r\n isNew: boolean;\r\n modifier: SmoTextGroup;\r\n originalTextGroup: SmoTextGroup | null = null;\r\n activeScoreText: SmoScoreText;\r\n textElement: any;\r\n mouseMoveHandler: EventHandler | null;\r\n mouseUpHandler: EventHandler | null;\r\n mouseDownHandler: EventHandler | null;\r\n mouseClickHandler: EventHandler | null;\r\n outlineRect: OutlineInfo | null = null;\r\n\r\n constructor(parameters: SuiDialogParams) {\r\n let edited = false;\r\n let isNew = false;\r\n const originalTextGroup: SmoTextGroup | null = parameters.modifier ?? null;\r\n const tracker = parameters.view.tracker;\r\n ['staffModifier', 'suggestion'].forEach((outlineType) => {\r\n if (tracker.outlines[outlineType]) {\r\n SvgHelpers.eraseOutline(tracker.outlines[outlineType]);\r\n }\r\n });\r\n // Create a new text modifier, if this is new text. Else use selection\r\n if (!parameters.modifier) {\r\n isNew = true;\r\n const textParams = SmoScoreText.defaults;\r\n const newText = new SmoScoreText(textParams);\r\n // convert scroll from screen coord to svg coord\r\n const svgScroll = tracker.renderer.pageMap.clientToSvg(SvgHelpers.smoBox(tracker.scroller.scrollState));\r\n newText.y += svgScroll.y;\r\n newText.x += svgScroll.x;\r\n if (tracker.selections.length > 0) {\r\n const sel = tracker.selections[0].measure.svg;\r\n if (typeof (sel.logicalBox) !== 'undefined') {\r\n if (sel.logicalBox.y >= newText.y) {\r\n newText.y = sel.logicalBox.y;\r\n newText.x = sel.logicalBox.x;\r\n }\r\n }\r\n }\r\n const grpParams = SmoTextGroup.defaults;\r\n grpParams.textBlocks = [{ text: newText, position: SmoTextGroup.relativePositions.LEFT, activeText: true }];\r\n const newGroup = new SmoTextGroup(grpParams);\r\n parameters.modifier = newGroup;\r\n parameters.modifier.setActiveBlock(newText);\r\n parameters.view.groupUndo(true);\r\n parameters.view.addTextGroup(parameters.modifier);\r\n edited = true;\r\n } else {\r\n // Make sure there is a score text to start the editing.\r\n parameters.modifier = SmoTextGroup.deserializePreserveId(parameters.modifier);\r\n parameters.modifier.setActiveBlock(parameters.modifier.textBlocks[0].text);\r\n }\r\n super(SuiTextBlockDialog.dialogElements, parameters);\r\n this.originalTextGroup = originalTextGroup;\r\n this.isNew = isNew;\r\n this.modifier = parameters.modifier;\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS']\r\n this.edited = edited;\r\n this.view.groupUndo(true);\r\n this.activeScoreText = this.modifier.getActiveBlock();\r\n this.mouseMoveHandler = null;\r\n this.mouseUpHandler = null;\r\n this.mouseDownHandler = null;\r\n this.mouseClickHandler = null;\r\n }\r\n populateInitial() {\r\n this.textBlockCtrl.setValue({\r\n activeScoreText: this.activeScoreText,\r\n modifier: this.modifier\r\n });\r\n const fontFamily = this.activeScoreText.fontInfo.family;\r\n const fontSize = this.activeScoreText.fontInfo.size;\r\n this.fontCtrl.setValue({\r\n family: fontFamily,\r\n size: fontSize,\r\n style: this.activeScoreText.fontInfo.style,\r\n weight: this.activeScoreText.fontInfo.weight\r\n });\r\n this.attachToSelectorCtrl.setValue(this.modifier.attachToSelector);\r\n const ul = this.modifier.ul();\r\n this.xCtrl.setValue(ul.x);\r\n this.yCtrl.setValue(ul.y);\r\n this.paginationCtrl.setValue(this.modifier.pagination);\r\n this.highlightActiveRegion();\r\n }\r\n static unrenderTextGroup(tg: SmoTextGroup) {\r\n tg.elements.forEach((el) => {\r\n el.remove();\r\n });\r\n tg.elements = [];\r\n\r\n }\r\n unrenderOriginal() {\r\n if (this.originalTextGroup) {\r\n SuiTextBlockDialog.unrenderTextGroup(this.originalTextGroup);\r\n }\r\n }\r\n display() {\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.activeScoreText);\r\n const svg = pageContext.svg;\r\n this.textElement = $(svg).find('.' + this.activeScoreText.attrs.id)[0];\r\n $('body').addClass('showAttributeDialog');\r\n $('body').addClass('textEditor');\r\n this.applyDisplayOptions();\r\n this.populateInitial();\r\n this.bindElements();\r\n if (!this.modifier.logicalBox) {\r\n this.view.renderer.renderTextGroup(this.modifier);\r\n }\r\n\r\n // If this control has not been edited this session, assume they want to\r\n // edit the text and just right into that.\r\n if (!this.modifier.edited) {\r\n this.modifier.edited = true;\r\n layoutDebug.addDialogDebug('text transform db: startEditSession');\r\n this.unrenderOriginal();\r\n this.textEditorCtrl.startEditSession();\r\n }\r\n this.mouseMoveHandler = this.eventSource.bindMouseMoveHandler(this, 'mouseMove');\r\n this.mouseUpHandler = this.eventSource.bindMouseUpHandler(this, 'mouseUp');\r\n this.mouseDownHandler = this.eventSource.bindMouseDownHandler(this, 'mouseDown');\r\n this.mouseClickHandler = this.eventSource.bindMouseClickHandler(this, 'mouseClick');\r\n }\r\n _resetAttachToSelector() {\r\n this.modifier.attachToSelector = false;\r\n this.modifier.selector = SmoTextGroup.defaults.selector;\r\n this.modifier.musicXOffset = SmoTextGroup.defaults.musicXOffset;\r\n this.modifier.musicYOffset = SmoTextGroup.defaults.musicYOffset;\r\n }\r\n _activateAttachToSelector() {\r\n this.modifier.attachToSelector = true;\r\n this.modifier.selector = JSON.parse(JSON.stringify(this.view.tracker.selections[0].selector));\r\n if (this.modifier.logicalBox) {\r\n this.modifier.musicXOffset = this.modifier.logicalBox.x - this.view.tracker.selections[0].measure.svg.logicalBox.x;\r\n this.modifier.musicYOffset = this.modifier.logicalBox.y - this.view.tracker.selections[0].measure.svg.logicalBox.y;\r\n }\r\n }\r\n\r\n changed() {\r\n this.edited = true;\r\n if (this.insertCodeCtrl.changeFlag && this.textEditorCtrl.session) {\r\n const val = this.insertCodeCtrl.getValue().toString().split('');\r\n val.forEach((key) => {\r\n this.evKey({ key });\r\n });\r\n this.insertCodeCtrl.unselect();\r\n }\r\n\r\n if (this.textBlockCtrl.changeFlag) {\r\n const nval = this.textBlockCtrl.getValue();\r\n this.activeScoreText = nval.activeScoreText;\r\n this.highlightActiveRegion();\r\n }\r\n if (this.textEditorCtrl.changeFlag) {\r\n this.highlightActiveRegion();\r\n }\r\n\r\n if (this.attachToSelectorCtrl.changeFlag) {\r\n const toSet = this.attachToSelectorCtrl.getValue();\r\n if (toSet) {\r\n this._activateAttachToSelector();\r\n this.paginationCtrl.setValue(SmoTextGroup.paginations.ONCE);\r\n this.modifier.pagination = SmoTextGroup.paginations.ONCE;\r\n } else {\r\n this._resetAttachToSelector();\r\n }\r\n }\r\n\r\n const pos = this.modifier.ul();\r\n\r\n // position can change from drag or by dialog - only update from\r\n // dialog entries if that changed.\r\n if (this.xCtrl.changeFlag) {\r\n this.modifier.offsetX(this.xCtrl.getValue() - pos.x);\r\n }\r\n if (this.yCtrl.changeFlag) {\r\n this.modifier.offsetY(this.yCtrl.getValue() - pos.y);\r\n }\r\n if (this.textDraggerCtrl.changeFlag) {\r\n this.xCtrl.setValue(pos.x);\r\n this.yCtrl.setValue(pos.y);\r\n }\r\n\r\n if (this.paginationCtrl.changeFlag) {\r\n this.modifier.pagination = parseInt(this.paginationCtrl.getValue().toString(), 10);\r\n // Pagination and attach to measure don't mix.\r\n this._resetAttachToSelector();\r\n this.attachToSelectorCtrl.setValue(false);\r\n }\r\n\r\n if (this.fontCtrl.changeFlag) {\r\n const fontInfo = this.fontCtrl.getValue();\r\n this.activeScoreText.fontInfo.family = fontInfo.family;\r\n // transitioning away from non-point-based font size units\r\n this.activeScoreText.fontInfo.size = fontInfo.size;\r\n this.activeScoreText.fontInfo.weight = fontInfo.weight;\r\n this.activeScoreText.fontInfo.style = fontInfo.style;\r\n }\r\n // Use layout context because render may have reset svg.\r\n const subtype = this.isNew ? UndoBuffer.bufferSubtypes.ADD : UndoBuffer.bufferSubtypes.UPDATE;\r\n this.view.updateTextGroup(this.modifier);\r\n }\r\n highlightActiveRegion() {\r\n const pageContext = this.view.renderer.pageMap.getRendererFromModifier(this.activeScoreText);\r\n const svg = pageContext.svg;\r\n if (this.activeScoreText.logicalBox) {\r\n const stroke = SuiTextEditor.strokes['text-highlight'];\r\n if (!this.outlineRect) {\r\n this.outlineRect = {\r\n context: pageContext,\r\n classes: '',\r\n stroke,\r\n box: this.activeScoreText.logicalBox,\r\n scroll: this.scroller.scrollState,\r\n timeOff: 1000\r\n };\r\n }\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n this.outlineRect.box = this.activeScoreText.logicalBox;\r\n SvgHelpers.outlineRect(this.outlineRect);\r\n }\r\n }\r\n // ### handleKeydown\r\n // allow a dialog to be dismissed by esc.\r\n evKey(evdata: any) {\r\n if (evdata.key === 'Escape') {\r\n $(this.dgDom.element).find('.cancel-button').click();\r\n evdata.preventDefault();\r\n } else {\r\n this.textEditorCtrl.evKey(evdata);\r\n }\r\n }\r\n\r\n // ### Event handlers, passed from dialog\r\n mouseUp() {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseUp(null);\r\n }\r\n }\r\n\r\n mouseMove(ev: any) {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseMove(ev);\r\n } else if (this.textEditorCtrl && this.textEditorCtrl.isRunning) {\r\n this.textEditorCtrl.mouseMove(ev);\r\n }\r\n }\r\n\r\n mouseClick(ev: any) {\r\n if (this.textEditorCtrl && this.textEditorCtrl.isRunning) {\r\n this.textEditorCtrl.mouseClick(ev);\r\n ev.stopPropagation();\r\n }\r\n }\r\n\r\n mouseDown(ev: any) {\r\n if (this.textDraggerCtrl && this.textDraggerCtrl.running) {\r\n this.textDraggerCtrl.mouseDown(ev);\r\n }\r\n }\r\n\r\n _complete() {\r\n this.view.groupUndo(false);\r\n this.modifier.setActiveBlock(null);\r\n this.view.tracker.updateMap(); // update the text map\r\n this.view.renderer.setDirty();\r\n if (this.mouseDownHandler) {\r\n this.eventSource.unbindMouseDownHandler(this.mouseDownHandler);\r\n }\r\n if (this.mouseUpHandler) {\r\n this.eventSource.unbindMouseUpHandler(this.mouseUpHandler);\r\n }\r\n if (this.mouseMoveHandler) {\r\n this.eventSource.unbindMouseMoveHandler(this.mouseMoveHandler);\r\n }\r\n if (this.mouseClickHandler) {\r\n this.eventSource.unbindMouseClickHandler(this.mouseClickHandler);\r\n }\r\n if (this.outlineRect) {\r\n SvgHelpers.eraseOutline(this.outlineRect);\r\n }\r\n // Hack - this comes from SuiInlineText and SuiTextEdit.\r\n $('body').removeClass('showAttributeDialog');\r\n $('body').removeClass('textEditor');\r\n this.complete();\r\n }\r\n _removeText() {\r\n // The modifier rendered is for edit, not the one attached to the score. so\r\n // unrender it now\r\n SuiTextBlockDialog.unrenderTextGroup(this.modifier);\r\n this.view.removeTextGroup(this.modifier);\r\n }\r\n\r\n bindElements() {\r\n const dgDom = this.dgDom;\r\n\r\n $(dgDom.element).find('.ok-button').off('click').on('click', () => {\r\n const subtype = this.isNew ? UndoBuffer.bufferSubtypes.ADD : UndoBuffer.bufferSubtypes.UPDATE;\r\n this.view.updateTextGroup(this.modifier);\r\n this._complete();\r\n });\r\n\r\n $(dgDom.element).find('.cancel-button').off('click').on('click', () => {\r\n if (this.edited) {\r\n this.modifier.elements.forEach((element) => {\r\n element.remove();\r\n });\r\n this.modifier.elements = [];\r\n this.view.undo();\r\n }\r\n this._complete();\r\n });\r\n $(dgDom.element).find('.remove-button').off('click').on('click', () => { \r\n this._removeText();\r\n this._complete();\r\n });\r\n }\r\n}\r\n\r\nexport class helpModal {\r\n static createAndDisplay() {\r\n SuiHelp.displayHelp();\r\n return closeDialogPromise();\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoStaffTextBracket, SmoTextBracketNumberType, SmoTextBracketStringType} from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTextBracketAdapter extends SuiComponentAdapter {\r\n backup: SmoStaffTextBracket;\r\n bracket: SmoStaffTextBracket;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, bracket: SmoStaffTextBracket) {\r\n super(view);\r\n this.bracket = bracket;\r\n this.view = view;\r\n this.backup = new SmoStaffTextBracket(this.bracket);\r\n this.backup.attrs.id = bracket.attrs.id;\r\n this.backup.associatedStaff = bracket.associatedStaff;\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.removeTextBracket(this.bracket);\r\n await this.view.addOrReplaceTextBracket(this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.bracket);\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async updateValue(param: SmoTextBracketNumberType, val: number) {\r\n const current = new SmoStaffTextBracket(this.bracket);\r\n this.bracket[param] = parseInt(val.toString(), 10);\r\n await this.view.addOrUpdateStaffModifier(current, this.bracket);\r\n this.changed = true;\r\n }\r\n async updateText(param: SmoTextBracketStringType, val: string) {\r\n const current = new SmoStaffTextBracket(this.bracket);\r\n this.bracket[param] = val;\r\n await this.view.addOrUpdateStaffModifier(current, this.bracket);\r\n this.changed = true;\r\n }\r\n get text() {\r\n return this.bracket.text;\r\n }\r\n set text(val: string) {\r\n this.updateText('text', val);\r\n }\r\n get superscript() {\r\n return this.bracket.superscript;\r\n }\r\n set superscript(val: string) {\r\n this.updateText('superscript', val);\r\n }\r\n get position() {\r\n return this.bracket.position;\r\n }\r\n set position(val: number) {\r\n this.updateValue('position', val);\r\n }\r\n get line() {\r\n return this.bracket.line;\r\n }\r\n set line(val: number) {\r\n this.updateValue('line', val);\r\n }\r\n}\r\nexport class SuiTextBracketDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Text Bracket Properties', elements:\r\n [{\r\n smoName: 'line',\r\n defaultValue: 1,\r\n control: 'SuiRockerComponent',\r\n label: 'Line'\r\n }, {\r\n smoName: 'position',\r\n control: 'SuiDropdownComponent',\r\n label: 'Position',\r\n options: [\r\n {\r\n value: '1',\r\n label: 'Above'\r\n }, {\r\n value: '-1',\r\n label: 'Below'\r\n }]\r\n }, {\r\n smoName: 'text',\r\n control: 'SuiTextInputComponent',\r\n label: 'Text'\r\n }, {\r\n smoName: 'superscript',\r\n control: 'SuiTextInputComponent',\r\n label: 'SubText'\r\n }],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiTextBracketAdapter(parameters.view, parameters.modifier);\r\n super(SuiTextBracketDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SmoTie, TieLine } from '../../smo/data/staffModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport type TieNumber = 'tie_spacing' | 'cp1' | 'cp2' | 'first_x_shift' | 'last_x_shift' | 'y_shift';\r\n\r\nexport class SuiTieAdapter extends SuiComponentAdapter {\r\n tie: SmoTie;\r\n backup: SmoTie;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, tie: SmoTie) {\r\n super(view);\r\n this.tie = tie;\r\n this.backup = new SmoTie(tie);\r\n // Make it have same ID so remove works.\r\n this.backup.attrs.id = tie.attrs.id;\r\n this.backup.associatedStaff = tie.associatedStaff;\r\n }\r\n writeTieNumber(value: number, param: TieNumber) {\r\n this.tie[param] = value;\r\n this.view.addOrUpdateStaffModifier(this.backup, this.tie);\r\n this.changed = true;\r\n }\r\n get lines(): TieLine[] {\r\n return this.tie.lines;\r\n }\r\n set lines(value: TieLine[]) {\r\n this.tie.lines = JSON.parse(JSON.stringify(value));\r\n this.view.addOrUpdateStaffModifier(this.backup, this.tie);\r\n }\r\n get tie_spacing(): number {\r\n return this.tie.tie_spacing;\r\n }\r\n set tie_spacing(value: number) {\r\n this.writeTieNumber(value, 'tie_spacing');\r\n } \r\n get first_x_shift(): number {\r\n return this.tie.first_x_shift;\r\n }\r\n set first_x_shift(value: number) {\r\n this.writeTieNumber(value, 'first_x_shift');\r\n } \r\n get last_x_shift(): number {\r\n return this.tie.last_x_shift;\r\n }\r\n set last_x_shift(value: number) {\r\n this.writeTieNumber(value, 'last_x_shift');\r\n } \r\n get y_shift(): number {\r\n return this.tie.y_shift;\r\n }\r\n set y_shift(value: number) {\r\n this.writeTieNumber(value, 'y_shift');\r\n } \r\n get cp1(): number {\r\n return this.tie.cp1;\r\n }\r\n set cp1(value: number) {\r\n this.writeTieNumber(value, 'cp1');\r\n }\r\n get cp2(): number {\r\n return this.tie.cp2;\r\n }\r\n set cp2(value: number) {\r\n this.writeTieNumber(value, 'cp2');\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.addOrUpdateStaffModifier(this.backup, this.backup);\r\n }\r\n }\r\n async remove() {\r\n await this.view.removeStaffModifier(this.backup);\r\n }\r\n}\r\nexport class SuiTieAttributesDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Tie Properties',\r\n staticText: [\r\n { label: 'Tie Properties' },\r\n { fromNote: 'From Note' },\r\n { toNote: 'To Note' }\r\n ], elements: [{\r\n smoName: 'lines',\r\n control: 'TieMappingComponent',\r\n label: 'Lines'\r\n }, {\r\n smoName: 'cp1',\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 1'\r\n }, {\r\n smoName: 'cp2',\r\n control: 'SuiRockerComponent',\r\n label: 'Control Point 2'\r\n }, {\r\n smoName: 'first_x_shift',\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset 1'\r\n }, {\r\n smoName: 'last_x_shift',\r\n control: 'SuiRockerComponent',\r\n label: 'X Offset 2'\r\n }, {\r\n smoName: 'y_shift',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }, {\r\n smoName: 'tie_spacing',\r\n defaultValue: 40,\r\n control: 'SuiRockerComponent',\r\n label: 'Tie Spacing'\r\n }],\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n if (!parameters.modifier) {\r\n throw new Error('modifier attribute dialog must have modifier');\r\n }\r\n const tie = parameters.modifier as SmoTie;\r\n const adapter = new SuiTieAdapter(parameters.view, tie);\r\n super(SuiTieAttributesDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { TimeSignature } from '../../smo/data/measureModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { DialogDefinition, SuiDialogParams } from './dialog';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTimeSignatureAdapter extends SuiComponentAdapter {\r\n measure: SmoMeasure;\r\n backup: TimeSignature;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.measure = this.view.tracker.selections[0].measure;\r\n this.backup = new TimeSignature(this.measure.timeSignature);\r\n }\r\n get numerator() {\r\n return this.measure.timeSignature.actualBeats;\r\n }\r\n set numerator(value: number) {\r\n this.measure.timeSignature.actualBeats = value;\r\n }\r\n get denominator() {\r\n return this.measure.timeSignature.beatDuration;\r\n }\r\n set denominator(value: number) {\r\n this.measure.timeSignature.beatDuration = value;\r\n }\r\n get display() {\r\n return this.measure.timeSignature.display;\r\n }\r\n set display(value: boolean) {\r\n this.measure.timeSignature.display = value;\r\n }\r\n get useSymbol() {\r\n return this.measure.timeSignature.useSymbol;\r\n }\r\n set useSymbol(value: boolean) {\r\n this.measure.timeSignature.useSymbol = value;\r\n }\r\n get customString() {\r\n return this.measure.timeSignature.displayString;\r\n }\r\n set customString(value: string) {\r\n const tr = value.trim();\r\n if (!(tr.indexOf('/') >= 0)) {\r\n if (tr === 'C' || tr === 'C|') {\r\n this.measure.timeSignature.displayString = tr;\r\n return;\r\n }\r\n }\r\n const ar = tr.split('/');\r\n if (isNaN(parseInt(ar[0], 10)) || isNaN(parseInt(ar[1], 10))) {\r\n this.measure.timeSignature.displayString = '';\r\n return;\r\n }\r\n this.measure.timeSignature.displayString = tr;\r\n }\r\n async commit() {\r\n await this.view.setTimeSignature(this.measure.timeSignature);\r\n }\r\n async cancel() {\r\n this.measure.timeSignature = this.backup;\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n}\r\nexport class SuiTimeSignatureDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Custom Time Signature',\r\n elements:\r\n [\r\n {\r\n smoName: 'numerator',\r\n defaultValue: 3,\r\n control: 'SuiRockerComponent',\r\n label: 'Beats/Measure',\r\n },\r\n {\r\n smoName: 'denominator',\r\n defaultValue: 8,\r\n dataType: 'int',\r\n control: 'SuiDropdownComponent',\r\n label: 'Beat Value',\r\n options: [{\r\n value: 16,\r\n label: '16',\r\n }, {\r\n value: 8,\r\n label: '8',\r\n }, {\r\n value: 4,\r\n label: '4'\r\n }, {\r\n value: 2,\r\n label: '2'\r\n }]\r\n }, {\r\n smoName: 'display',\r\n control: 'SuiToggleComponent',\r\n label: 'Display',\r\n }, {\r\n smoName: 'useSymbol',\r\n control: 'SuiToggleComponent',\r\n label: 'Common/Cut',\r\n }, {\r\n smoName: 'customString',\r\n control: 'SuiTextInputComponent',\r\n label: 'Custom',\r\n }\r\n ],\r\n staticText: []\r\n };\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiTimeSignatureAdapter(parameters.view);\r\n super(SuiTimeSignatureDialog.dialogElements, { adapter, ...parameters });\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { GlobalLayoutAttributes, SmoLayoutManager, SmoGlobalLayout } from '../../smo/data/scoreModifiers';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { DialogDefinition, SuiDialogBase, SuiDialogParams } from './dialog';\r\n\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTransposeScoreAdapter extends SuiComponentAdapter {\r\n transposeOffset: number = 0;\r\n constructor(view: SuiScoreViewOperations) {\r\n super(view);\r\n this.view = view;\r\n }\r\n // TODO: writeValue is not called in a global context\r\n get offset() {\r\n return this.transposeOffset;\r\n }\r\n set offset(value: number) {\r\n if (value > -13 && value < 13) {\r\n this.transposeOffset = value;\r\n }\r\n }\r\n async commit() { \r\n if (this.transposeOffset !== 0) {\r\n this.view.transposeScore(this.transposeOffset);\r\n }\r\n }\r\n async cancel() {\r\n }\r\n}\r\n// ## SuiGlobalLayoutDialog\r\n// change editor and formatting defaults for this score.\r\nexport class SuiTransposeScoreDialog extends SuiDialogAdapterBase {\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Transpose Score', elements:\r\n [{\r\n smoName: 'offset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Transpose (1/2 steps)'\r\n }],\r\n staticText: []\r\n };\r\n get dimensionControls() {\r\n return [this.cmap.pageSizeCtrl, this.cmap.pageWidthCtrl, this.cmap.pageHeightCtrl];\r\n }\r\n constructor(params: SuiDialogParams) {\r\n const adapter = new SuiTransposeScoreAdapter(params.view);\r\n super(SuiTransposeScoreDialog.dialogElements, { adapter, ...params });\r\n }\r\n async changed() {\r\n await super.changed();\r\n if (this.dimensionControls.find((x) => x.changeFlag)) {\r\n this.initialValue();\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { DialogDefinition,SuiDialogParams } from './dialog';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { SmoVolta } from '../../smo/data/measureModifiers';\r\nimport { SuiComponentAdapter, SuiDialogAdapterBase } from './adapter';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\n\r\nexport type SmoVoltaNumberParam = 'startBar' | 'endBar' | 'xOffsetStart' | 'xOffsetEnd' | 'yOffset' | 'number';\r\n\r\nexport class SuiVoltaAdapter extends SuiComponentAdapter {\r\n volta: SmoVolta;\r\n backup: SmoVolta;\r\n changed: boolean = false;\r\n constructor(view: SuiScoreViewOperations, volta: SmoVolta) {\r\n super(view);\r\n this.volta = volta;\r\n this.backup = new SmoVolta(this.volta); \r\n }\r\n async remove() {\r\n await this.view.removeEnding(this.volta);\r\n }\r\n async cancel() {\r\n if (this.changed) {\r\n await this.view.updateEnding(this.backup);\r\n }\r\n }\r\n async commit() {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n updateVolta(param: SmoVoltaNumberParam, value: number) {\r\n this.volta[param] = value;\r\n this.view.updateEnding(this.volta);\r\n this.changed = true;\r\n }\r\n get startBar() {\r\n return this.volta.startBar;\r\n }\r\n set startBar(val: number) {\r\n this.updateVolta('startBar', val);\r\n }\r\n get endBar() {\r\n return this.volta.endBar;\r\n }\r\n set endBar(val: number) {\r\n this.updateVolta('endBar', val);\r\n }\r\n get xOffsetStart() {\r\n return this.volta.xOffsetStart;\r\n }\r\n set xOffsetStart(val: number) {\r\n this.updateVolta('xOffsetStart', val);\r\n }\r\n get xOffsetEnd() {\r\n return this.volta.xOffsetEnd;\r\n }\r\n set xOffsetEnd(val: number) {\r\n this.updateVolta('xOffsetEnd', val);\r\n }\r\n get yOffset() {\r\n return this.volta.yOffset;\r\n }\r\n set yOffset(val: number) {\r\n this.updateVolta('yOffset', val);\r\n }\r\n get number() {\r\n return this.volta.number;\r\n }\r\n set number(val: number) {\r\n this.updateVolta('number', val);\r\n }\r\n} \r\n// ## SuiVoltaAttributeDialog\r\n// aka first and second endings\r\nexport class SuiVoltaAttributeDialog extends SuiDialogAdapterBase {\r\n\r\n static dialogElements: DialogDefinition =\r\n {\r\n label: 'Volta Properties', elements:\r\n [{\r\n smoName: 'number',\r\n defaultValue: 1,\r\n control: 'SuiRockerComponent',\r\n label: 'number'\r\n }, {\r\n smoName: 'xOffsetStart',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X1 Offset'\r\n }, {\r\n smoName: 'xOffsetEnd',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'X2 Offset'\r\n }, {\r\n smoName: 'yOffset',\r\n defaultValue: 0,\r\n control: 'SuiRockerComponent',\r\n label: 'Y Offset'\r\n }],\r\n staticText: []\r\n };\r\n static createAndDisplay(parameters: SuiDialogParams) {\r\n if (parameters.modifier.logicalBox === null) {\r\n return null;\r\n }\r\n const dg = new SuiVoltaAttributeDialog(parameters);\r\n dg.display();\r\n return dg;\r\n }\r\n constructor(parameters: SuiDialogParams) {\r\n const adapter = new SuiVoltaAdapter(parameters.view, parameters.modifier)\r\n super(SuiVoltaAttributeDialog.dialogElements, { adapter, ...parameters });\r\n this.displayOptions = ['BINDCOMPONENTS', 'DRAGGABLE', 'KEYBOARD_CAPTURE', 'MODIFIERPOS'];\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { KeyEvent } from '../smo/data/common';\r\n\r\ndeclare var $: any;\r\nimport { scoreChangeEvent } from '../render/sui/renderState';\r\n\r\n/**\r\n * Event handler for smoosic. Any UI element can have any number\r\n * of event handlers. For modals, event handlers are added/removed \r\n * as the gain/relinquish control\r\n * @param sink - an object that implements:\r\n * @param method - the callback method on sink\r\n * @param symbol - used to distinguish handler instances of the same type\r\n */\r\nexport interface EventHandler {\r\n sink: any,\r\n method: string,\r\n symbol: Symbol\r\n}\r\n/**\r\n * This is the event generating interface for Smoosic. It is kept as \r\n * skeletal as possible so applications can call event handling methods from\r\n * their own event logic.\r\n * @category SuiUiBase\r\n */\r\nexport class BrowserEventSource {\r\n keydownHandlers: EventHandler[];\r\n keyupHandlers: EventHandler[];\r\n mouseMoveHandlers: EventHandler[];\r\n mouseClickHandlers: EventHandler[];\r\n mouseUpHandlers: EventHandler[];\r\n mouseDownHandlers: EventHandler[];\r\n scoreChangeHandlers: EventHandler[] = [];\r\n domTriggers: EventHandler[];\r\n handleMouseMove: ((ev: any) => void) | null = null;\r\n handleMouseClick: ((ev: any) => void) | null = null;\r\n handleMouseUp: ((ev: any) => void) | null = null;\r\n handleMouseDown: ((ev: any) => void) | null = null;\r\n\r\n handleKeydown: (ev: KeyEvent) => void;\r\n handleKeyup: (ev: KeyEvent) => void;\r\n handleScoreChangeEvent: (ev: KeyEvent) => void;\r\n renderElement: any;\r\n constructor() {\r\n this.keydownHandlers = [];\r\n this.mouseMoveHandlers = [];\r\n this.mouseClickHandlers = [];\r\n this.mouseUpHandlers = [];\r\n this.mouseDownHandlers = [];\r\n this.domTriggers = [];\r\n this.keyupHandlers = [];\r\n this.handleKeydown = this.evKey.bind(this);\r\n this.handleKeyup = this.keyUp.bind(this);\r\n this.handleScoreChangeEvent = this.evScoreChange.bind(this);\r\n window.addEventListener(\"keydown\", this.handleKeydown as any, true);\r\n window.addEventListener(\"keyup\", this.handleKeyup as any, true);\r\n window.addEventListener(scoreChangeEvent, this.handleScoreChangeEvent as any, true);\r\n }\r\n\r\n async evKey(event: KeyEvent) {\r\n let i = 0;\r\n for (i = 0; i < this.keydownHandlers.length; ++i) {\r\n const handler = this.keydownHandlers[i]\r\n await handler.sink[handler.method](event);\r\n }\r\n }\r\n async keyUp(event: KeyEvent) {\r\n let i = 0;\r\n for (i = 0; i < this.keyupHandlers.length; ++i) {\r\n const handler = this.keyupHandlers[i]\r\n await handler.sink[handler.method](event);\r\n }\r\n }\r\n async evScoreChange(event: any) {\r\n let i = 0;\r\n for (i = 0; i < this.scoreChangeHandlers.length; ++i) {\r\n const handler = this.scoreChangeHandlers[i]\r\n await handler.sink[handler.method](event);\r\n }\r\n }\r\n mouseMove(event: any) {\r\n this.mouseMoveHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseClick(event: any) {\r\n this.mouseClickHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseDown(event: any) {\r\n this.mouseDownHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n mouseUp(event: any) {\r\n this.mouseUpHandlers.forEach((handler) => {\r\n handler.sink[handler.method](event);\r\n });\r\n }\r\n\r\n setRenderElement(renderElement: any) {\r\n this.renderElement = renderElement;\r\n var self = this;\r\n this.handleMouseMove = this.mouseMove.bind(this);\r\n this.handleMouseClick = this.mouseClick.bind(this);\r\n this.handleMouseUp = this.mouseUp.bind(this);\r\n this.handleMouseDown = this.mouseDown.bind(this);\r\n $(document)[0].addEventListener(\"mousemove\", this.handleMouseMove);\r\n $(this.renderElement)[0].addEventListener(\"click\", this.handleMouseClick);\r\n $(document)[0].addEventListener(\"mouseup\", this.handleMouseUp);\r\n $(document)[0].addEventListener(\"mousedown\", this.handleMouseDown);\r\n }\r\n\r\n _unbindHandlerArray(arSrc: EventHandler[], arDest: EventHandler[], handler: EventHandler) {\r\n arSrc.forEach((htest) => {\r\n if (handler.symbol !== htest.symbol) {\r\n arDest.push(htest);\r\n }\r\n });\r\n }\r\n\r\n unbindMouseMoveHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseMoveHandlers, handlers, handler);\r\n this.mouseMoveHandlers = handlers;\r\n }\r\n unbindMouseDownHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseDownHandlers, handlers, handler);\r\n this.mouseDownHandlers = handlers;\r\n }\r\n unbindMouseUpHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseUpHandlers, handlers, handler);\r\n this.mouseUpHandlers = handlers;\r\n }\r\n unbindMouseClickHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.mouseClickHandlers, handlers, handler);\r\n this.mouseClickHandlers = handlers;\r\n }\r\n\r\n unbindKeydownHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.keydownHandlers, handlers, handler);\r\n this.keydownHandlers = handlers;\r\n }\r\n unbindKeyupHandler(handler: EventHandler) {\r\n const handlers: EventHandler[] = [];\r\n this._unbindHandlerArray(this.keyupHandlers, handlers, handler);\r\n this.keyupHandlers = handlers;\r\n }\r\n\r\n // ### bindKeydownHandler\r\n // add a handler for the evKey event, for keyboard data.\r\n bindKeydownHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.keydownHandlers.push(handler as EventHandler);\r\n return handler;\r\n }\r\n bindKeyupHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.keyupHandlers.push(handler as EventHandler);\r\n return handler;\r\n }\r\n\r\n bindMouseMoveHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseMoveHandlers.push(handler as EventHandler);\r\n return handler;\r\n }\r\n\r\n bindMouseUpHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseUpHandlers.push(handler);\r\n return handler;\r\n }\r\n bindScoreChangeHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.scoreChangeHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n bindMouseDownHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseDownHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n bindMouseClickHandler(sink: any, method: string) {\r\n var handler: EventHandler = { symbol: Symbol(), sink, method };\r\n this.mouseClickHandlers.push(handler);\r\n return handler;\r\n }\r\n\r\n domClick(selector: string, sink: any, method: string, args: any) {\r\n $(selector).off('click').on('click', function (ev: any) {\r\n sink[method](ev, args);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from '../common/htmlHelpers';\r\nimport { SuiEventHandler } from '../application/eventHandler';\r\nimport { SuiScoreView } from '../render/sui/scoreView';\r\ndeclare var $: any;\r\n\r\nexport class SuiExceptionHandler {\r\n view: SuiScoreView;\r\n thrown: boolean;\r\n static _instance: SuiExceptionHandler;\r\n constructor(params: any) {\r\n this.view = params.view;\r\n this.thrown = false;\r\n SuiExceptionHandler._instance = this;\r\n }\r\n static get instance() {\r\n return SuiExceptionHandler._instance;\r\n }\r\n exceptionHandler(e: any) {\r\n let stack = '';\r\n let doing = '';\r\n let scoreString = '';\r\n if (this.thrown) {\r\n return;\r\n }\r\n this.thrown = true;\r\n if (SuiEventHandler.reentry) {\r\n return;\r\n }\r\n\r\n SuiEventHandler.reentry = true;\r\n scoreString = 'Could not serialize score.';\r\n try {\r\n scoreString = JSON.stringify(this.view.score.serialize(), null, ' ');\r\n } catch (e: any) {\r\n if (e.message) {\r\n scoreString += ' ' + e.message;\r\n }\r\n }\r\n const message = e.message;\r\n stack = 'No stack trace available';\r\n\r\n try {\r\n if (e.error && e.error.stack) {\r\n stack = e.error.stack;\r\n } else if (e.stack) {\r\n stack = e.stack;\r\n }\r\n } catch (e2: any) {\r\n stack = 'Error with stack: ' + e2.message;\r\n }\r\n doing = 'Last operation not available.';\r\n const url = 'https://github.com/AaronDavidNewman/Smoosic/issues';\r\n const bodyObject = JSON.stringify({\r\n message,\r\n stack,\r\n lastOperation: doing,\r\n scoreString\r\n }, null, ' ');\r\n createTopDomContainer('.bugDialog');\r\n const b = buildDom;\r\n const r = b('div').classes('bug-modal').append(\r\n b('img').attr('src', '../styles/images/logo.png').classes('bug-logo'))\r\n .append(b('button').classes('icon icon-cross bug-dismiss-button'))\r\n .append(b('span').classes('bug-title').text('oh nooooo! You\\'ve found a bug'))\r\n .append(b('p').text('It would be helpful if you would submit a bug report, and copy the data below into an issue'))\r\n .append(b('div')\r\n .append(b('textarea').attr('id', 'bug-text-area').text(bodyObject))\r\n .append(\r\n b('div').classes('button-container').append(b('button').classes('bug-submit-button').text('Submit Report'))));\r\n\r\n $('.bugDialog').html('');\r\n $('.bugDialog').append(r.dom());\r\n\r\n // used to try to restore the last good score here...\r\n $('.bug-dismiss-button').off('click').on('click', () => {\r\n $('body').removeClass('bugReport');\r\n });\r\n $('.bug-submit-button').off('click').on('click', () => {\r\n $('#bug-text-area').select();\r\n document.execCommand('copy');\r\n window.open(url, 'Report Smoosic issues');\r\n });\r\n $('body').addClass('bugReport');\r\n if (!this.thrown) {\r\n this.thrown = true;\r\n throw (e);\r\n }\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\ndeclare var JSZip: any;\r\n// ## SuiFileInput\r\n// Get a string or binary file from a file input control and transparently\r\n// decompress it if it's mxml file (compressed). This will read any text or\r\n// binary file,\r\n// but it will only unzip .mxml files first and has a consistent async interface\r\nexport class SuiFileInput {\r\n compressed: boolean = false;\r\n binary: boolean = false;\r\n value: any;\r\n event: any;\r\n constructor(evt: any) {\r\n this.compressed = false;\r\n this.binary = false;\r\n this.value = null;\r\n this.event = evt;\r\n if (evt.target.files[0].name.endsWith('.mxl')) {\r\n this.compressed = true;\r\n this.binary = true;\r\n } else if (evt.target.files[0].name.endsWith('.mid')) {\r\n this.binary = true;\r\n }\r\n }\r\n _handleZip() {\r\n const self = this;\r\n return new Promise((resolve) => {\r\n JSZip.loadAsync(self.value).then((zip: any) => {\r\n // Find the real xml file in the zip (not metadata)\r\n const filename =\r\n Object.keys(zip.files).find((ss) => ss.indexOf('META') < 0 && ss.endsWith('xml'));\r\n zip.file(filename).async('text').then((str: any) => {\r\n self.value = str;\r\n resolve();\r\n });\r\n });\r\n });\r\n }\r\n loadAsync() {\r\n const self = this;\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (file) => {\r\n if (file === null || file.target === null || file.target.result === null) {\r\n reject();\r\n return;\r\n }\r\n self.value = file.target.result;\r\n if (!self.compressed) {\r\n resolve();\r\n } else {\r\n self._handleZip().then(() => {\r\n resolve();\r\n });\r\n }\r\n };\r\n if (self.binary) {\r\n reader.readAsArrayBuffer(self.event.target.files[0])\r\n } else {\r\n reader.readAsText(self.event.target.files[0]);\r\n }\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiXhrLoader } from './xhrLoader';\r\nimport { PromiseHelpers } from '../../common/promiseHelpers';\r\nimport { smoSerialize } from '../../common/serializationHelpers';\r\nexport interface kvPair { [key: string]: string }\r\nexport interface LibraryParams {\r\n loaded: boolean;\r\n parentLib: kvPair;\r\n url: string | undefined;\r\n format: string;\r\n metadata: kvPair;\r\n children: SmoLibrary[];\r\n data: any;\r\n}\r\n\r\n// ## SmoLibrary\r\n// A class to organize smoosic files (or any format smoosic accepts) into libraries.\r\nexport class SmoLibrary {\r\n static _defaults: Partial;\r\n loaded: boolean;\r\n parentLib: kvPair;\r\n url: string | undefined = '';\r\n format: string = 'smo';\r\n metadata: kvPair = {};\r\n children: SmoLibrary[] = [];\r\n constructor(parameters: Partial) {\r\n this.loaded = false;\r\n this.parentLib = {};\r\n if (parameters.url) {\r\n this.url = parameters.url;\r\n } else if (parameters.data) {\r\n this.initialize(parameters.data);\r\n }\r\n }\r\n initialize(parameters: LibraryParams) {\r\n smoSerialize.serializedMerge(\r\n SmoLibrary.parameterArray, SmoLibrary.defaults, this);\r\n // if the object was loaded from URL, use that.\r\n if (!this.url) {\r\n this.url = parameters.url;\r\n }\r\n this.format = parameters.format;\r\n Object.keys(parameters.metadata).forEach((key: string) => {\r\n this.metadata[key] = parameters.metadata[key];\r\n });\r\n this.children = [];\r\n if (typeof(parameters.children) !== 'undefined') {\r\n parameters.children.forEach((childLib: SmoLibrary) => {\r\n this.children.push(new SmoLibrary({ data: childLib }));\r\n });\r\n }\r\n this.children.forEach((child) => {\r\n child._inheritMetadata(this);\r\n });\r\n }\r\n static get metadataNames() {\r\n return ['name', 'icon', 'tags', 'composer', 'artist', 'copyright',\r\n 'title', 'subtitle', 'movement', 'source'];\r\n }\r\n static get formatTypes() {\r\n return ['smoosic', 'library', 'mxml', 'midi', 'abc'];\r\n }\r\n static get libraryTypes() {\r\n return ['work', 'transcription', 'library', 'collection'];\r\n }\r\n static get defaults() {\r\n if (typeof(SmoLibrary._defaults) === 'undefined') {\r\n SmoLibrary._defaults = { children: [], metadata: {} };\r\n }\r\n return SmoLibrary._defaults;\r\n }\r\n static get parameterArray() {\r\n return ['children', 'metadata', 'format', 'url'];\r\n }\r\n load() {\r\n const self = this;\r\n if (this.loaded) {\r\n return PromiseHelpers.emptyPromise();\r\n }\r\n const loader = new SuiXhrLoader(this.url!);\r\n return new Promise((resolve) => {\r\n loader.loadAsync().then(() => {\r\n const jsonObj = JSON.parse(loader.value);\r\n self.initialize(jsonObj);\r\n self.loaded = true;\r\n resolve();\r\n });\r\n });\r\n }\r\n _inheritMetadata(parent: any) {\r\n // eslint-disable-next-line\r\n for (const key in parent) {\r\n if (typeof(this.metadata[key]) === 'undefined') {\r\n this.metadata[key] = parent[key];\r\n }\r\n }\r\n this.parentLib = { name: parent.metadata.name, value: parent };\r\n this.children.forEach((child) => {\r\n child._inheritMetadata(this);\r\n });\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\ndeclare var JSZip: any;\r\n\r\n/**\r\n * Load a file. Guess based on the extension whether the file is string or binary\r\n */\r\nexport class SuiXhrLoader {\r\n compressed: boolean = false;\r\n value: any = null;\r\n path: string;\r\n binary: boolean = false;\r\n isMidi: boolean = false;\r\n constructor(path: string) {\r\n this.path = path;\r\n if (path.endsWith('mxl')) {\r\n this.compressed = true;\r\n this.binary = true;\r\n } else if (path.endsWith('mid')) {\r\n this.isMidi = true;\r\n this.binary = true;\r\n }\r\n }\r\n async _uncompress(result: any): Promise {\r\n const self = this;\r\n const zip = await JSZip.loadAsync(result);\r\n // Find the real xml file in the zip (not metadata)\r\n const filename = Object.keys(zip.files).find((ss) => ss.indexOf('META') < 0 && ss.endsWith('xml'));\r\n self.value = await zip.file(filename).async('text');\r\n return self.value\r\n }\r\n /**\r\n * \r\n * @returns promise resolved when the target file is loaded\r\n */\r\n loadAsync(): Promise {\r\n const req = new XMLHttpRequest();\r\n const self = this;\r\n const promise = new Promise((resolve) => {\r\n req.addEventListener('load', () => {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', async () => {\r\n if (self.isMidi) {\r\n self.value = new Uint8Array(reader.result as ArrayBuffer);\r\n resolve(self.value);\r\n }\r\n else if (!self.compressed) {\r\n self.value = reader.result;\r\n resolve(self.value);\r\n } else {\r\n self.value = await self._uncompress(reader.result);\r\n resolve(self.value);\r\n }\r\n });\r\n if (this.isMidi) {\r\n reader.readAsArrayBuffer(req.response);\r\n }\r\n else if (this.binary) {\r\n reader.readAsBinaryString(req.response);\r\n } else {\r\n reader.readAsText(req.response);\r\n }\r\n });\r\n });\r\n req.responseType = 'blob';\r\n req.open('GET', this.path);\r\n req.send();\r\n return promise;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, draggable, createTopDomContainer } from '../common/htmlHelpers';\r\nimport { SmoLanguage } from './i18n/language';\r\ndeclare var $: any;\r\n\r\nexport interface HtmlHelpBlock {\r\n title: string,\r\n html: string,\r\n index: number\r\n}\r\nexport type HelpMode = 'cards' | 'expand';\r\nexport class SuiHelp {\r\n static helpMode: HelpMode = 'cards';\r\n static created = false;\r\n static currentCard: number = 0;\r\n static displayHelp() {\r\n $('body').addClass('showHelpDialog');\r\n if (!SuiHelp.created) {\r\n createTopDomContainer('helpDialog');\r\n SuiHelp.created = true;\r\n }\r\n $('.helpDialog').html('');\r\n $('.helpDialog').append(SuiHelp.closeButton.dom());\r\n SuiHelp.helpHtml.forEach((cat, catIx) => {\r\n const r = SuiHelp._buildElements(cat);\r\n $('.helpDialog').append(r.dom());\r\n });\r\n $('button.help-title').off('click').on('click', (ev: any) => {\r\n $(ev.currentTarget).closest('div.helpLine').toggleClass('showSection');\r\n $(ev.currentTarget).find('span.icon').toggleClass('icon-plus');\r\n $(ev.currentTarget).find('span.icon').toggleClass('icon-minus');\r\n });\r\n $('.helpDialog button.icon-cross').off('click').on('click', () => {\r\n $('body').removeClass('showHelpDialog');\r\n $('.workspace').css('height', '');\r\n });\r\n const wsh = window.innerHeight;\r\n $('.workspace').css('height', '' + wsh + 'px');\r\n const cb = () => {};\r\n createTopDomContainer('.draganime');\r\n draggable({\r\n parent: $('.helpDialog'),\r\n handle: $('.helpDialog').find('.icon-move'),\r\n animateDiv:'.draganime',\r\n cb,\r\n moveParent: true\r\n });\r\n SuiHelp.setCards();\r\n }\r\n static setCards() {\r\n $('.helpDialog').addClass('card-view');\r\n const lines = $('.helpDialog .helpLine');\r\n const numLines = $(lines).length;\r\n $(lines).each((ix: number, line: any) => {\r\n const lineno = parseInt($(line).attr('data-index'));\r\n if (lineno !== SuiHelp.currentCard) {\r\n $(line).addClass('hide');\r\n } else {\r\n $(line).removeClass('hide');\r\n const prevButton = $(line).find('button.prev-topic');\r\n const nextButton = $(line).find('button.next-topic');\r\n if (lineno === numLines - 1) {\r\n $(nextButton).addClass('hide');\r\n }\r\n if (lineno === 0) {\r\n $(prevButton).addClass('hide');\r\n }\r\n $(prevButton).off('click').on('click', () => {\r\n SuiHelp.currentCard = (SuiHelp.currentCard + (numLines - 1)) % numLines;\r\n SuiHelp.setCards();\r\n });\r\n $(nextButton).off('click').on('click', () => {\r\n SuiHelp.currentCard = (SuiHelp.currentCard + 1) % numLines;\r\n SuiHelp.setCards();\r\n });\r\n }\r\n });\r\n }\r\n\r\n static get closeButton() {\r\n const b = buildDom;\r\n const r = b('div').append(b('span').classes('icon icon-move')).append('div').classes('help-closer').append(\r\n b('button').classes('icon-cross close'));\r\n return r;\r\n }\r\n\r\n static _buildElements(helps: HtmlHelpBlock) {\r\n const b = buildDom;\r\n const r = b('div').classes('helpLine').attr('data-index', helps.index.toString())\r\n .append(b('div').classes('help-category-button')\r\n .append(b('button')\r\n .append(b('span').classes('icon icon-plus')).classes('help-title')\r\n .append(b('span').classes('help-category-text').text(helps.title))))\r\n .append(b('h3').text(helps.title)) \r\n .append(b('div').classes('help-content').html(helps.html))\r\n .append(b('div').classes('button-container')\r\n .append(b('button').classes('prev-topic')\r\n .append(b('span').classes('icon icon-arrow-left'))\r\n .append(b('span').classes('prev-topic-text').text('Previous Topic')))\r\n .append(b('button').classes('next-topic')\r\n .append(b('span').classes('next-topic-text').text('Next Topic'))\r\n .append(b('span').classes(' icon icon-arrow-right'))));\r\n return r;\r\n }\r\n\r\n static get helpHtml() {\r\n /* [cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardVoicesHiddenNotesHtmlEn\r\n]; */\r\n const cards = [\r\n { title: 'Keys', html: SmoLanguage.getHelpFile('cardKeysHtml') },\r\n { title: 'Notes - letter notes', html: SmoLanguage.getHelpFile('cardNotesLetterHtml') },\r\n { title: 'Notes - chromatic and octave', html: SmoLanguage.getHelpFile('cardNotesChromaticHtml') },\r\n { title: 'Notes - chords', html: SmoLanguage.getHelpFile('cardNotesChordsHtml') },\r\n { title: 'Notes - rests', html: SmoLanguage.getHelpFile('cardNotesRestsHtml') },\r\n { title: 'Duration', html: SmoLanguage.getHelpFile('cardDurationNotesHtml') },\r\n { title: 'Duration - tuplets', html: SmoLanguage.getHelpFile('cardDurationTupletsHtml') },\r\n { title: 'Selections - notes', html: SmoLanguage.getHelpFile('cardSelectionsNotesHtml') },\r\n { title: 'Selections - modifiers', html: SmoLanguage.getHelpFile('cardSelectionsModifiersHtml') },\r\n { title: 'Selections - non-selectable modifiers', html: SmoLanguage.getHelpFile('cardSelectionsNonSelectableHtml') },\r\n { title: 'Selections - slash menus', html: SmoLanguage.getHelpFile('cardSelectionsSlashHtml') },\r\n { title: 'Beams and Stems - direction', html: SmoLanguage.getHelpFile('cardBeamsAndStemsDirectionHtml') },\r\n { title: 'Beams and Stems - grouping', html: SmoLanguage.getHelpFile('cardBeamsAndStemsGroupingHtml') },\r\n { title: 'Measures - insert and delete', html: SmoLanguage.getHelpFile('cardMeasuresAddDeleteHtml') },\r\n { title: 'Staves - add and delete', html: SmoLanguage.getHelpFile('cardPartAddDeleteHtml') },\r\n { title: 'Voices - create and delete', html: SmoLanguage.getHelpFile('cardVoicesCreateDeleteHtml') },\r\n ];\r\n const blocks: HtmlHelpBlock[] = [];\r\n cards.forEach((card, cardIx) => {\r\n blocks.push({ index: cardIx, ...card});\r\n });\r\n return blocks;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { smoLanguageStringAr } from './language_ar';\r\nimport { smoLanguageStringDe } from './language_de';\r\nimport { smoLanguageStringEn } from './language_en';\r\nimport { MenuChoiceDefinition, MenuDefinition, MenuTranslation } from '../menus/menu';\r\nimport { ButtonLabel } from '../buttons/button';\r\nimport { RibbonButtons } from '../buttons/ribbon';\r\nimport { DialogTranslation } from '../dialogs/dialog';\r\ndeclare var $: any;\r\n\r\nexport interface TranslationStrings {\r\n dialogs: DialogTranslation[],\r\n menus: MenuTranslation[],\r\n buttonText: ButtonLabel[]\r\n}\r\nexport type languageDirection = 'ltr' | 'rtl';\r\nexport interface LanguageTranslation {\r\n dir: languageDirection, strings: TranslationStrings, helpHtml: any\r\n}\r\nexport class SmoTranslator {\r\n static dialogs: any[] = [];\r\n\r\n static menus: any[] = [];\r\n static debugMask: number = 0;\r\n\r\n static registerMenu(_class: any) {\r\n if (!SmoTranslator.menus[_class]) {\r\n SmoTranslator.menus[_class] = true;\r\n }\r\n }\r\n static registerDialog(_class: any) {\r\n if (!SmoTranslator.dialogs[_class]) {\r\n SmoTranslator.dialogs[_class] = true;\r\n }\r\n }\r\n\r\n static printLanguages() {\r\n const dialogs: any[] = [];\r\n const menus: any[] = [];\r\n SmoTranslator.allDialogs.forEach((key) => {\r\n SmoTranslator.registerDialog(key);\r\n const translatable: any = eval('globalThis.Smo.' + key);\r\n dialogs.push(translatable.printTranslate(key));\r\n });\r\n SmoTranslator.allMenus.forEach((key) => {\r\n SmoTranslator.registerMenu(key);\r\n const translatable: any = eval('globalThis.Smo.' + key);\r\n menus.push(translatable.printTranslate(key));\r\n });\r\n const buttonText: any[] = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n if (SmoTranslator.debugMask) {\r\n console.log(JSON.stringify({ dialogs, menus, buttonText }, null, ' '));\r\n }\r\n }\r\n\r\n static _updateDialog(dialogStrings: DialogTranslation, _dialogClass: any, dialogClass: string) {\r\n if (!dialogStrings) {\r\n console.log('no strings for Dialog ' + dialogClass);\r\n return;\r\n }\r\n _dialogClass.label = dialogStrings.label;\r\n const staticText = dialogStrings.staticText;\r\n if (staticText || _dialogClass.dialogElements.staticText) {\r\n const keys = Object.keys(staticText);\r\n keys.forEach((key) => {\r\n _dialogClass.dialogElements.staticText[key] = staticText[key];\r\n });\r\n }\r\n _dialogClass.dialogElements.label = dialogStrings.label;\r\n _dialogClass.dialogElements.elements.forEach((component: any) => {\r\n const componentStrings = dialogStrings.dialogElements.find((ds: any) => ds.id === component.smoName);\r\n if (componentStrings) {\r\n component.label = componentStrings.label;\r\n if (component.options) {\r\n component.options.forEach((option: any) => {\r\n const optionString = componentStrings!.options!.find((cs: any) => cs.value === option.value);\r\n if (!optionString) {\r\n if (SmoTranslator.debugMask) {\r\n console.log('no string for option ' + option.value + ' in component ' + component.smoName + ' in dialog ' + dialogClass);\r\n }\r\n } else {\r\n option.label = optionString.label;\r\n }\r\n });\r\n }\r\n } else {\r\n if (SmoTranslator.debugMask) {\r\n console.log('Untranslated component in ' + dialogClass);\r\n }\r\n }\r\n });\r\n }\r\n\r\n static _updateMenu(menuStrings: MenuTranslation, _menuClass: any, menuClass: string) {\r\n if (!menuStrings) {\r\n console.log('no strings for Menu ' + menuClass);\r\n return;\r\n }\r\n const defaults = _menuClass.defaults as MenuDefinition;\r\n defaults.menuItems.forEach((menuItem: MenuChoiceDefinition) => {\r\n const val = menuItem.value;\r\n const nvPair = menuStrings.menuItems.find((ff: any) => ff.value === val);\r\n if (!nvPair) {\r\n if (SmoTranslator.debugMask) {\r\n console.log('no xlate for ' + val + ' in menu ' + menuClass);\r\n }\r\n } else {\r\n menuItem.text = nvPair.text;\r\n if (SmoTranslator.debugMask) {\r\n console.log('setting menu item value ' + val + ' to ' + nvPair.text);\r\n }\r\n }\r\n });\r\n }\r\n\r\n static setLanguage(language: string) {\r\n if (!(SmoLanguage as any)[language]) {\r\n return; // no xlate exists\r\n }\r\n const trans = (SmoLanguage as any)[language] as LanguageTranslation;\r\n // Set the text in all the menus\r\n SmoTranslator.allMenus.forEach((menuClass) => {\r\n const _class = eval('globalThis.Smo.' + menuClass);\r\n const menuStrings = trans.strings.menus.find((mm: MenuTranslation) => mm.ctor === menuClass);\r\n if (menuStrings) {\r\n SmoTranslator._updateMenu(menuStrings, _class, menuClass);\r\n\r\n // Set text in ribbon buttons that invoke menus\r\n const menuButton = $('.ribbonButtonContainer button.' + menuClass).find('.left-text .text-span');\r\n if (menuButton.length && menuStrings) {\r\n $(menuButton).text(menuStrings.label);\r\n }\r\n }\r\n });\r\n\r\n SmoTranslator.allDialogs.forEach((dialogClass) => {\r\n const _class = eval('globalThis.Smo.' + dialogClass);\r\n const dialogStrings = trans.strings.dialogs.find((mm: any) => mm.ctor === dialogClass);\r\n if (typeof (_class) === 'undefined') {\r\n console.log('no eval for class ' + dialogClass);\r\n return;\r\n }\r\n if (!dialogStrings) {\r\n return;\r\n }\r\n // Set text in ribbon buttons that invoke menus\r\n const dialogButton = $('.ribbonButtonContainer button.' + dialogClass).find('.left-text .text-span');\r\n if (dialogButton.length && dialogStrings) {\r\n $(dialogButton).text(dialogStrings.label);\r\n }\r\n\r\n SmoTranslator._updateDialog(dialogStrings, _class, dialogClass);\r\n });\r\n\r\n // Translate the buttons on the ribbon\r\n const langButtons = trans.strings.buttonText;\r\n if (langButtons) {\r\n RibbonButtons.translateButtons.forEach((button: any) => {\r\n const langButton = langButtons.find((lb: any) => lb.buttonId === button.buttonId);\r\n if (langButton) {\r\n const buttonDom = $('.ribbonButtonContainer #' + button.buttonId);\r\n if (buttonDom.length) {\r\n $(buttonDom).find('.left-text').text(langButton.buttonText);\r\n }\r\n }\r\n });\r\n }\r\n // Handle rtl languages\r\n $('body').find('.language-dir').each((ix: number, dd: any) => { $(dd).attr('dir', trans.dir); });\r\n }\r\n\r\n static get allMenus() {\r\n return [\r\n 'SuiDynamicsMenu',\r\n 'SuiFileMenu',\r\n 'SuiKeySignatureMenu',\r\n 'SuiLanguageMenu',\r\n 'SuiMeasureMenu',\r\n 'SuiPartMenu',\r\n 'SuiScoreMenu',\r\n 'SuiStaffModifierMenu',\r\n 'SuiTimeSignatureMenu',\r\n ];\r\n }\r\n\r\n static get allDialogs() {\r\n return [\r\n // file dialogs\r\n 'SuiChordChangeDialog',\r\n 'SuiDynamicModifierDialog',\r\n 'SuiGlobalLayoutDialog',\r\n 'SuiHairpinAttributesDialog',\r\n 'SuiInsertMeasures',\r\n 'SuiInstrumentDialog',\r\n 'SuiLoadFileDialog',\r\n 'SuiLoadMxmlDialog',\r\n 'SuiLyricDialog',\r\n 'SuiMeasureDialog',\r\n 'SuiPageLayoutDialog',\r\n 'SuiPartInfoDialog',\r\n 'SuiPrintFileDialog',\r\n 'SuiSaveFileDialog',\r\n 'SuiSaveMidiDialog',\r\n 'SuiSaveXmlDialog',\r\n 'SuiScoreFontDialog',\r\n 'SuiScorePreferencesDialog',\r\n 'SuiScoreIdentificationDialog',\r\n 'SuiScoreViewDialog',\r\n 'SuiSlurAttributesDialog',\r\n 'SuiStaffGroupDialog',\r\n 'SuiTempoDialog',\r\n 'SuiTextBlockDialog',\r\n 'SuiTieAttributesDialog',\r\n 'SuiTimeSignatureDialog',\r\n 'SuiVoltaAttributeDialog'\r\n ];\r\n }\r\n}\r\n\r\nexport class SmoLanguage {\r\n static getHelpFile(category: any) {\r\n // TODO: how to express language if it is not part of the config?\r\n return eval('globalThis.Smo.' + category + 'En');\r\n }\r\n static get en(): LanguageTranslation {\r\n const strings: TranslationStrings = JSON.parse(smoLanguageStringEn) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'ltr', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n\r\n static get ar(): LanguageTranslation {\r\n const strings = JSON.parse(smoLanguageStringAr) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'rtl', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n\r\n static get de(): LanguageTranslation {\r\n const strings = JSON.parse(smoLanguageStringDe) as TranslationStrings;\r\n const rv: LanguageTranslation = { dir: 'ltr', strings, helpHtml: {} };\r\n return rv;\r\n }\r\n}\r\n","\r\nexport const smoLanguageStringAr = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Measure Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"وضع الإيقاع\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Duration (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Specify text and duration\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"وحدة لكل ضربه\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Page Size\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Letter (Portrait)\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Letter (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Custom\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Score Fonts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Engraving Font\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Start Position\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"End Position\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"ملف\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"جديدe\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"فتح\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Quick Save\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"حفظ\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"طباعه\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"إلغاء\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"الدليل\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"وزن الإيقاع\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Other\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"خطوط\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"تصاعد\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"تهابط\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"طمس / تعادل\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"النهاية التاسعة\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"ملف\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n }`;\r\n\r\n\r\nexport const quickStartHtmlar = `(Arabic)\r\n

Quick start guide

\r\n

If you don't like to read instructions, this cook's tour of Smoosic was made for you.

\r\n
    \r\n
  • One of buttons on the left is called 'File'. Click on it. The menu items before 'cancel' are pre-canned projects that you can use as a template to get you started.

    \r\n
  • \r\n
  • The cursor keys will navigate you to the different notes.

    \r\n
  • \r\n
  • Letters a-g on the computer keyboard change the note to those pitches

    \r\n
  • \r\n
  • 'Insert' adds a new, blank measure.

    \r\n
  • \r\n
  • The ribbon of thick blue buttons on the top expand to button groups, that contain most of the functionality of Smoosic.

    \r\n
  • \r\n
  • The buttons on the left bring up menus or dialogs that do basically what the buttons say.

    \r\n
  • \r\n
  • There are a few 'instant gratification' buttons for playing the music, refreshing the screen or changing the zoom level on the left part of the ribbon.

    \r\n
  • \r\n
  • The piano tool is an alternate way of entering music, or can be dismissed by the close button in the lower left.

    \r\n
  • \r\n
\r\n

\"\"

\r\n`;\r\n\r\n\r\nexport const selectionHtmlar = `(Arabic)\r\n

Selecting things

\r\n

Almost all operations in Smoosic act on the selected music. You can select notes in different ways:

\r\n
    \r\n
  1. with the computer mouse
  2. \r\n
  3. with the keyboard's navigation keys
  4. \r\n
  5. with the navigation keys on the ribbon
  6. \r\n
  7. with the piano tool, to some extent.
  8. \r\n
\r\n

\"\"

\r\n

You can select multiple things with the keyboard navigation keys, by selecting 'shift-arrow', just like many applications. There is a similar control for selection in the navigation ribbon. Some operations, like changing pitch for instance, act on all the selected notes.

\r\n

Sometimes a selection of one line affects all the measures in that column (or all the measures of the system, if you like). When you change the key, for instance, the selection determines where the key change starts. If you have multiple measures selected, it applies to those measures, and then changes back to whatever it was before.

\r\n`;\r\n\r\n\r\nexport const enterDurationsHtmlar = `(Arabic)\r\n

Note duration in Smoosic is done by changing the duration of an existing note. Usually, doubling the duration or cutting it in two, or adding a dot - duration to a note. You can also create tuplets for uneven sets of notes (3, 5, or 7).

\r\n

There are actually 3 ways to do many duration operations - using the piano tool, using the computer keyboard, or using the button ribbon. Like with many things, you should find entering duration using the keyboard fastest, once you have some experience with Smoosic. But the ribbon or the

\r\n

Changing note length with the keyboard

\r\n

You can change the length of notes using the ',' and '.' (comma and period) keys, which halve and double the note lengths, respectively. You can add a dot to the length of the note (multiplying length by 3/2 for the first dot, and 3/4 for the second dot, if you like to think of it that way) or remove a dot, using the '>' and '<'. The mnemonic device for these is '>' makes note duration greater. '<' makes note duration...less. (On most QWERTY keyboards, comma shifted is '<' and period shifted is '>').

\r\n

\"\"

\r\n

Note how the selection is preserved as the notes get shorter. When you change something, Smoosic will try to keep the selection as close as possible to what you had. You can use the cursor navigation keys to move to a specific selected note.

\r\n

\"\"

\r\n

When you increase the length of a note, Smoosic always 'borrows' from the next note in the measure that is eligible. So when you double the length of the 8th note, it combines the 16th, and 2 32nd notes, and collapses them into a single quarter. If Smoosic can't honor the request, it does nothing. For instance, it can't remove the dot from a note with no dot, and it can't extend beyond the length of the measure.

\r\n

You can create tuplets from the keyboard by typing Ctrl-3, Ctrl-5 or Ctrl-7 for triplets, quintuplets, and septuplets, respectively. Individual notes in a tuplet can be doubled and halved with the duration keys '-' (minus) and '=' (equals), just like non-tuplets. You 'untupletify' a tuplet by Ctrl-0.

\r\n

\"\"

\r\n

Changing note length with piano widget

\r\n

The piano widget is shown when the application starts, and can be restored from the left menu 'Piano' button when closed.

\r\n

You can double or halve note duration, or add dot duration, to a note using the piano tool.

\r\n

\"\"

\r\n

Changing note length from the button ribbon

\r\n

All the duration commands can be accomplished from the ribbon buttons.

\r\n

\"\"

\r\n

Note that the equivalent keyboard commands are also indicated on the right of each button, when it's available. (there are only so many keys, so there are some ribbon buttons with no key shortcut).

\r\n`;\r\n\r\n\r\nexport const enterPitchesHtmlar = `(Arabic)\r\n

There are a few ways to enter notes in Smoosic. You can click on the piano widget keys, or you can enter notes directly from the keyboard.

\r\n

Your first Smoosical notes

\r\n

Notes from the keyboard

\r\n

The keys a-g on the computer keyboard will enter a corresponding note, A-G, on the staff (Most key commands in Smoosic have a mnemonic device). The default behavior is for the cursor to advance when a note is entered in this way. (Future behavior, auto-advance can be overridden). You navigate to the notes using the keyboard navigation arrows.

\r\n

\"\"

\r\n

You change the octave from the keyboard using the '_' and '+' (underscore, aka shift-minus, and plus), and change notes chromatically using '-' and '=' key. The mnemonic device for this is 'plus and minus' for raising and lowering pitches. You can change the enharmonic spelling of the note using the 'Shift-E' (mnemonic: E for enharmonic - get it?). And Shift-F gives you a courtesy, or cautionary, accidental (mnemonic - F comes after E).

\r\n

\"\"

\r\n

You can create chords and intervals using the number keys along the top of the keyboard. The '3' key makes a third, the '4' key a fourth, and so on. Shift+number gives you the interval down.

\r\n

\"\"

\r\n

Note that the interval starts from the highest note in the chord, for intervals going up, and the lowest note in the chord, for intervals going down. You can select individual pitches in the chord using 'Shift-Up Arrow' as shown. This is similar to how modifiers like dynamics are selected. Once you have the pitch selected, you can change it using the up-down commands shows above, or change the enharmonic spelling.

\r\n

There is currently no way to remove a single pitch from the chord. If you want to collapse the chord, just type a letter a-g on the keyboard, and it will be replaced with a single note.

\r\n

Notes from the piano tool

\r\n

You can also add notes to your score with the piano tool, by clicking on the corresponding notes.

\r\n

\"\"

\r\n

Clicking on the piano gives the selected note the piano pitch. The octave of the note is based on the clef, so for treble clef, the 'C' is middle 'C'. You can change the octave of the note, and move the pitch up and down. The top buttons affect the pitch, and the bottom buttons navigate or change the length of the note. Clicking on the chord button acts like a 'sustain' that puts additional notes in chords.

\r\n

Everything that can be done from the piano widget, and most things in Smoosic generally, can be done more efficiently with keyboard commands. Once you are comfortable with the computer keyboard, you can free up some screen real-estate by closing the piano widget (cross control in lower left). You can bring it up again with the piano menu button on the left.

\r\n`;\r\n","\r\nexport const smoLanguageStringDe = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Datei laden\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Score speichern\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Score speichern\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Takt Voreinstellungen\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Takt Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Voreinstellungen\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Tempo Modus\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Dauer (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Text und Dauer festlegen\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"Einheit für Beat\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Seitengröße\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Brief\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Brief (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"benutzerdefiniert\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Schriftart\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Schriftart\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Startposition\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Endposition\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"Datei\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"Neu\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"Öffnen\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Schnellspeichern\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Speichern\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Drucken\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"Tonlage\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"Taktzeit\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"benutzerdefiniert\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"Lines\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"Crescendo\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"Decrescendo\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Bogen/Bindung\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"nth Ende\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Abbrechen\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"File\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n}`;\r\n","\r\nexport const smoLanguageStringEn = `{\r\n \"dialogs\": [\r\n {\r\n \"ctor\": \"SuiLoadFileDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {}\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveFileDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveXmlDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiPrintFileDialog\",\r\n \"label\": \"Print Complete\",\r\n \"dialogElements\": [],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveMidiDialog\",\r\n \"label\": \"Save Score as Midi\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSaveActionsDialog\",\r\n \"label\": \"Save Score\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"File Name\",\r\n \"id\": \"saveFileName\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadMxmlDialog\",\r\n \"label\": \"Load File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLoadActionsDialog\",\r\n \"label\": \"Load Action File\",\r\n \"dialogElements\": [\r\n {},\r\n {\r\n \"staticText\": {\r\n \"label\": \"Load Action File\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureDialog\",\r\n \"label\": \"Measure Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Pickup\",\r\n \"id\": \"pickup\"\r\n },\r\n {\r\n \"label\": \"Pad Left (px)\",\r\n \"id\": \"padLeft\"\r\n },\r\n {\r\n \"label\": \"Stretch Contents\",\r\n \"id\": \"customStretch\"\r\n },\r\n {\r\n \"label\": \"Proportionalality\",\r\n \"id\": \"customProportion\"\r\n },\r\n {\r\n \"label\": \"Pad all measures in system\",\r\n \"id\": \"padAllInSystem\"\r\n },\r\n {\r\n \"label\": \"Justify Columns\",\r\n \"id\": \"autoJustify\"\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"measureTextPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 2,\r\n \"label\": \"Left\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Right\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Above\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Below\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"System break before this measure\",\r\n \"id\": \"systemBreak\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTempoDialog\",\r\n \"label\": \"Tempo Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Tempo Mode\",\r\n \"id\": \"tempoMode\",\r\n \"options\": [\r\n {\r\n \"value\": \"duration\",\r\n \"label\": \"Duration (Beats/Minute)\"\r\n },\r\n {\r\n \"value\": \"text\",\r\n \"label\": \"Tempo Text\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Specify text and duration\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Custom Text\",\r\n \"id\": \"customText\"\r\n },\r\n {\r\n \"label\": \"Notes/Minute\",\r\n \"id\": \"bpm\"\r\n },\r\n {\r\n \"label\": \"Unit for Beat\",\r\n \"id\": \"beatDuration\",\r\n \"options\": [\r\n {\r\n \"value\": 4096,\r\n \"label\": \"Quarter Note\"\r\n },\r\n {\r\n \"value\": 2048,\r\n \"label\": \"1/8 note\"\r\n },\r\n {\r\n \"value\": 6144,\r\n \"label\": \"Dotted 1/4 note\"\r\n },\r\n {\r\n \"value\": 8192,\r\n \"label\": \"1/2 note\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Tempo Text\",\r\n \"id\": \"tempoText\",\r\n \"options\": [\r\n {\r\n \"value\": \"Larghissimo\",\r\n \"label\": \"Larghissimo\"\r\n },\r\n {\r\n \"value\": \"Grave\",\r\n \"label\": \"Grave\"\r\n },\r\n {\r\n \"value\": \"Lento\",\r\n \"label\": \"Lento\"\r\n },\r\n {\r\n \"value\": \"Largo\",\r\n \"label\": \"Largo\"\r\n },\r\n {\r\n \"value\": \"Larghetto\",\r\n \"label\": \"Larghetto\"\r\n },\r\n {\r\n \"value\": \"Adagio\",\r\n \"label\": \"Adagio\"\r\n },\r\n {\r\n \"value\": \"Adagietto\",\r\n \"label\": \"Adagietto\"\r\n },\r\n {\r\n \"value\": \"Andante moderato\",\r\n \"label\": \"Andante moderato\"\r\n },\r\n {\r\n \"value\": \"Andante\",\r\n \"label\": \"Andante\"\r\n },\r\n {\r\n \"value\": \"Andantino\",\r\n \"label\": \"Andantino\"\r\n },\r\n {\r\n \"value\": \"Moderato\",\r\n \"label\": \"Moderato\"\r\n },\r\n {\r\n \"value\": \"Allegretto\",\r\n \"label\": \"Allegretto\"\r\n },\r\n {\r\n \"value\": \"Allegro\",\r\n \"label\": \"Allegro\"\r\n },\r\n {\r\n \"value\": \"Vivace\",\r\n \"label\": \"Vivace\"\r\n },\r\n {\r\n \"value\": \"Presto\",\r\n \"label\": \"Presto\"\r\n },\r\n {\r\n \"value\": \"Prestissimo\",\r\n \"label\": \"Prestissimo\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Apply to all future measures?\",\r\n \"id\": \"applyToAll\"\r\n },\r\n {\r\n \"label\": \"Display Tempo\",\r\n \"id\": \"display\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInstrumentDialog\",\r\n \"label\": \"Instrument Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Transpose Index (1/2 steps)\",\r\n \"id\": \"transposeIndex\"\r\n },\r\n {\r\n \"label\": \"Apply To\",\r\n \"id\": \"applyTo\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"Score\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Selected Measures\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Remaining Measures\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiInsertMeasures\",\r\n \"label\": \"Insert Measures\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Measures to Insert\",\r\n \"id\": \"measureCount\"\r\n },\r\n {\r\n \"label\": \"Append to Selection\",\r\n \"id\": \"append\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureDialog\",\r\n \"label\": \"Custom Time Signature\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Beats/Measure\",\r\n \"id\": \"numerator\"\r\n },\r\n {\r\n \"label\": \"Beat Value\",\r\n \"id\": \"denominator\",\r\n \"options\": [\r\n {\r\n \"value\": 8,\r\n \"label\": \"8\"\r\n },\r\n {\r\n \"value\": 4,\r\n \"label\": \"4\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Display\",\r\n \"id\": \"display\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreViewDialog\",\r\n \"label\": \"Score View\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Show staff\",\r\n \"id\": \"scoreView\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreIdentificationDialog\",\r\n \"label\": \"Score Preferences\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Title\",\r\n \"id\": \"title\"\r\n },\r\n {\r\n \"label\": \"Sub Title\",\r\n \"id\": \"subTitle\"\r\n },\r\n {\r\n \"label\": \"Composer\",\r\n \"id\": \"composer\"\r\n },\r\n {\r\n \"label\": \"Copyright\",\r\n \"id\": \"copyright\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"titleText\": \"Title\",\r\n \"subTitleText\": \"Sub-title\",\r\n \"copyrightText\": \"Copyright\",\r\n \"composerText\": \"Composer\",\r\n \"show\": \"Show\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiGlobalLayoutDialog\",\r\n \"label\": \"Global Settings\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Score Name\",\r\n \"id\": \"scoreName\"\r\n },\r\n {\r\n \"label\": \"Play Selections\",\r\n \"id\": \"autoPlay\"\r\n },\r\n {\r\n \"label\": \"Auto-Advance Cursor\",\r\n \"id\": \"autoAdvance\"\r\n },\r\n {\r\n \"label\": \"Note Spacing\",\r\n \"id\": \"noteSpacing\"\r\n },\r\n {\r\n \"label\": \"Page Size\",\r\n \"id\": \"pageSize\",\r\n \"options\": [\r\n {\r\n \"value\": \"letter\",\r\n \"label\": \"Letter (Portrait)\"\r\n },\r\n {\r\n \"value\": \"letterLandscape\",\r\n \"label\": \"Letter (Landscape)\"\r\n },\r\n {\r\n \"value\": \"tabloid\",\r\n \"label\": \"Tabloid (11x17)\"\r\n },\r\n {\r\n \"value\": \"A4\",\r\n \"label\": \"A4\"\r\n },\r\n {\r\n \"value\": \"custom\",\r\n \"label\": \"Custom\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Page Width (px)\",\r\n \"id\": \"pageWidth\"\r\n },\r\n {\r\n \"label\": \"Page Height (px)\",\r\n \"id\": \"pageHeight\"\r\n },\r\n {\r\n \"label\": \"% Zoom\",\r\n \"id\": \"zoomScale\"\r\n },\r\n {\r\n \"label\": \"% Note size\",\r\n \"id\": \"svgScale\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiScoreFontDialog\",\r\n \"label\": \"Score Fonts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Engraving Font\",\r\n \"id\": \"engravingFont\",\r\n \"options\": [\r\n {\r\n \"value\": \"Bravura\",\r\n \"label\": \"Bravura\"\r\n },\r\n {\r\n \"value\": \"Gonville\",\r\n \"label\": \"Gonville\"\r\n },\r\n {\r\n \"value\": \"Petaluma\",\r\n \"label\": \"Petaluma\"\r\n },\r\n {\r\n \"value\": \"Leland\",\r\n \"label\": \"Leland\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Chord Font\",\r\n \"id\": \"chordFont\"\r\n },\r\n {\r\n \"label\": \"Lyric Font\",\r\n \"id\": \"lyricFont\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLayoutDialog\",\r\n \"label\": \"Page Layouts\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Apply to Page\",\r\n \"id\": \"applyToPage\",\r\n \"options\": [\r\n {\r\n \"value\": -1,\r\n \"label\": \"All\"\r\n },\r\n {\r\n \"value\": -2,\r\n \"label\": \"All Remaining\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Page 1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Left Margin (px)\",\r\n \"id\": \"leftMargin\"\r\n },\r\n {\r\n \"label\": \"Right Margin (px)\",\r\n \"id\": \"rightMargin\"\r\n },\r\n {\r\n \"label\": \"Top Margin (px)\",\r\n \"id\": \"topMargin\"\r\n },\r\n {\r\n \"label\": \"Bottom Margin (px)\",\r\n \"id\": \"bottomMargin\"\r\n },\r\n {\r\n \"label\": \"Inter-System Margin\",\r\n \"id\": \"interGap\"\r\n },\r\n {\r\n \"label\": \"Intra-System Margin\",\r\n \"id\": \"intraGap\"\r\n },\r\n {\r\n \"staticText\": {\r\n \"label\": \"Page Layouts\"\r\n }\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiSlurAttributesDialog\",\r\n \"label\": \"Slur Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Spacing\",\r\n \"id\": \"spacing\"\r\n },\r\n {\r\n \"label\": \"Thickness\",\r\n \"id\": \"thickness\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Start Position\",\r\n \"id\": \"position\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"End Position\",\r\n \"id\": \"position_end\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Head\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Top\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Invert\",\r\n \"id\": \"invert\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 X\",\r\n \"id\": \"cp1x\"\r\n },\r\n {\r\n \"label\": \"Control Point 1 Y\",\r\n \"id\": \"cp1y\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 X\",\r\n \"id\": \"cp2x\"\r\n },\r\n {\r\n \"label\": \"Control Point 2 Y\",\r\n \"id\": \"cp2y\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiTieAttributesDialog\",\r\n \"label\": \"Tie Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Lines\",\r\n \"id\": \"lines\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Tie Properties\",\r\n \"fromNote\": \"From Note\",\r\n \"toNote\": \"To Note\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiVoltaAttributeDialog\",\r\n \"label\": \"Volta Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"number\",\r\n \"id\": \"number\"\r\n },\r\n {\r\n \"label\": \"X1 Offset\",\r\n \"id\": \"xOffsetStart\"\r\n },\r\n {\r\n \"label\": \"X2 Offset\",\r\n \"id\": \"xOffsetEnd\"\r\n },\r\n {\r\n \"label\": \"Y Offset\",\r\n \"id\": \"yOffset\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiHairpinAttributesDialog\",\r\n \"label\": \"Hairpin Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Height\",\r\n \"id\": \"height\"\r\n },\r\n {\r\n \"label\": \"Y Shift\",\r\n \"id\": \"yOffset\"\r\n },\r\n {\r\n \"label\": \"Right Shift\",\r\n \"id\": \"xOffsetRight\"\r\n },\r\n {\r\n \"label\": \"Left Shift\",\r\n \"id\": \"xOffsetLeft\"\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiStaffGroupDialog\",\r\n \"label\": \"Staff Group\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Staves in Group\",\r\n \"id\": \"staffGroups\"\r\n },\r\n {\r\n \"label\": \"Left Connector\",\r\n \"id\": \"leftConnector\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Bracket\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Brace\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Single\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Double\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {\r\n \"includeStaff\": \"Include Staff\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiDynamicModifierDialog\",\r\n \"label\": \"Dynamics Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Y Line\",\r\n \"id\": \"yOffsetLine\"\r\n },\r\n {\r\n \"label\": \"Y Offset Px\",\r\n \"id\": \"yOffsetPixels\"\r\n },\r\n {\r\n \"label\": \"X Offset\",\r\n \"id\": \"xOffset\"\r\n },\r\n {\r\n \"label\": \"Text\",\r\n \"id\": \"text\",\r\n \"options\": [\r\n {\r\n \"value\": \"p\",\r\n \"label\": \"Piano\"\r\n },\r\n {\r\n \"value\": \"pp\",\r\n \"label\": \"Pianissimo\"\r\n },\r\n {\r\n \"value\": \"mp\",\r\n \"label\": \"Mezzo-Piano\"\r\n },\r\n {\r\n \"value\": \"mf\",\r\n \"label\": \"Mezzo-Forte\"\r\n },\r\n {\r\n \"value\": \"f\",\r\n \"label\": \"Forte\"\r\n },\r\n {\r\n \"value\": \"ff\",\r\n \"label\": \"Fortissimo\"\r\n },\r\n {\r\n \"value\": \"sfz\",\r\n \"label\": \"Sforzando\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"staticText\": {}\r\n },\r\n {\r\n \"ctor\": \"SuiLyricDialog\",\r\n \"label\": \"Lyric Editor\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Verse\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"4\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Edit Lyrics\",\r\n \"id\": \"lyricEditor\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"doneEditing\": \"Done Editing Lyrics\",\r\n \"undo\": \"Undo Lyrics\",\r\n \"label\": \"Lyric Editor\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiChordChangeDialog\",\r\n \"label\": \"Edit Chord Symbol\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Ordinality\",\r\n \"id\": \"verse\",\r\n \"options\": [\r\n {\r\n \"value\": 0,\r\n \"label\": \"1\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"2\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Y Adjustment (Px)\",\r\n \"id\": \"translateY\"\r\n },\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"chordEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Chord Symbol\",\r\n \"id\": \"chordSymbol\",\r\n \"options\": [\r\n {\r\n \"value\": \"csymDiminished\",\r\n \"label\": \"Dim\"\r\n },\r\n {\r\n \"value\": \"csymHalfDiminished\",\r\n \"label\": \"Half dim\"\r\n },\r\n {\r\n \"value\": \"csymDiagonalArrangementSlash\",\r\n \"label\": \"Slash\"\r\n },\r\n {\r\n \"value\": \"csymMajorSeventh\",\r\n \"label\": \"Maj7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Text Position\",\r\n \"id\": \"textPosition\",\r\n \"options\": [\r\n {\r\n \"value\": 1,\r\n \"label\": \"Superscript\"\r\n },\r\n {\r\n \"value\": 2,\r\n \"label\": \"Subscript\"\r\n },\r\n {\r\n \"value\": 0,\r\n \"label\": \"Normal\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Font\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Adjust Note Width\",\r\n \"id\": \"adjustWidth\",\r\n \"options\": []\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Edit Chord Symbol\",\r\n \"undo\": \"Undo Chord Symbols\",\r\n \"doneEditing\": \"Done Editing Chord Symbols\"\r\n }\r\n },\r\n {\r\n \"ctor\": \"SuiTextBlockDialog\",\r\n \"label\": \"Text Properties\",\r\n \"dialogElements\": [\r\n {\r\n \"label\": \"Edit Text\",\r\n \"id\": \"textEditor\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"Insert Special\",\r\n \"id\": \"insertCode\",\r\n \"options\": [\r\n {\r\n \"value\": \"@@@\",\r\n \"label\": \"Pages\"\r\n },\r\n {\r\n \"value\": \"###\",\r\n \"label\": \"Page Number\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Move Text\",\r\n \"id\": \"textDragger\",\r\n \"options\": []\r\n },\r\n {\r\n \"label\": \"X Position (Px)\",\r\n \"id\": \"x\"\r\n },\r\n {\r\n \"label\": \"Y Position (Px)\",\r\n \"id\": \"y\"\r\n },\r\n {\r\n \"label\": \"Font Information\",\r\n \"id\": \"font\"\r\n },\r\n {\r\n \"label\": \"Text Block Properties\",\r\n \"id\": \"textBlock\"\r\n },\r\n {\r\n \"label\": \"Page Behavior\",\r\n \"id\": \"pagination\",\r\n \"options\": [\r\n {\r\n \"value\": 4,\r\n \"label\": \"Once\"\r\n },\r\n {\r\n \"value\": 1,\r\n \"label\": \"Every\"\r\n },\r\n {\r\n \"label\": \"Even\"\r\n },\r\n {\r\n \"value\": 3,\r\n \"label\": \"Odd\"\r\n },\r\n {\r\n \"value\": 5,\r\n \"label\": \"Subsequent\"\r\n }\r\n ]\r\n },\r\n {\r\n \"label\": \"Attach to Selection\",\r\n \"id\": \"attachToSelector\"\r\n }\r\n ],\r\n \"staticText\": {\r\n \"label\": \"Text Properties\",\r\n \"editorLabel\": \"Done Editing Text\",\r\n \"draggerLabel\": \"Done Dragging Text\"\r\n }\r\n }\r\n ],\r\n \"menus\": [\r\n {\r\n \"ctor\": \"SuiDynamicsMenu\",\r\n \"label\": \"Dynamics\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"pianissimo\",\r\n \"text\": \"Pianissimo\",\r\n \"value\": \"pp\"\r\n },\r\n {\r\n \"icon\": \"piano\",\r\n \"text\": \"Piano\",\r\n \"value\": \"p\"\r\n },\r\n {\r\n \"icon\": \"mezzopiano\",\r\n \"text\": \"Mezzo-piano\",\r\n \"value\": \"mp\"\r\n },\r\n {\r\n \"icon\": \"mezzoforte\",\r\n \"text\": \"Mezzo-forte\",\r\n \"value\": \"mf\"\r\n },\r\n {\r\n \"icon\": \"forte\",\r\n \"text\": \"Forte\",\r\n \"value\": \"f\"\r\n },\r\n {\r\n \"icon\": \"fortissimo\",\r\n \"text\": \"Fortissimo\",\r\n \"value\": \"ff\"\r\n },\r\n {\r\n \"icon\": \"sfz\",\r\n \"text\": \"sfortzando\",\r\n \"value\": \"sfz\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiFileMenu\",\r\n \"label\": \"File\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"folder-new\",\r\n \"text\": \"New Score\",\r\n \"value\": \"newFile\"\r\n },\r\n {\r\n \"icon\": \"folder-open\",\r\n \"text\": \"Open\",\r\n \"value\": \"openFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Quick Save\",\r\n \"value\": \"quickSave\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save\",\r\n \"value\": \"saveFile\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Print\",\r\n \"value\": \"printScore\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Import MusicXML\",\r\n \"value\": \"importMxml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export MusicXML\",\r\n \"value\": \"exportXml\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Export Midi\",\r\n \"value\": \"exportMidi\"\r\n },\r\n {\r\n \"icon\": \"folder-save\",\r\n \"text\": \"Save Actions\",\r\n \"value\": \"saveActions\"\r\n },\r\n {\r\n \"icon\": \"icon-play3\",\r\n \"text\": \"Play Actions\",\r\n \"value\": \"playActions\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }, \r\n {\r\n \"ctor\": \"SuiKeySignatureMenu\",\r\n \"label\": \"Key\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"key-sig-c\",\r\n \"text\": \"C Major\",\r\n \"value\": \"KeyOfC\"\r\n },\r\n {\r\n \"icon\": \"key-sig-f\",\r\n \"text\": \"F Major\",\r\n \"value\": \"KeyOfF\"\r\n },\r\n {\r\n \"icon\": \"key-sig-g\",\r\n \"text\": \"G Major\",\r\n \"value\": \"KeyOfG\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bb\",\r\n \"text\": \"Bb Major\",\r\n \"value\": \"KeyOfBb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-d\",\r\n \"text\": \"D Major\",\r\n \"value\": \"KeyOfD\"\r\n },\r\n {\r\n \"icon\": \"key-sig-eb\",\r\n \"text\": \"Eb Major\",\r\n \"value\": \"KeyOfEb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-a\",\r\n \"text\": \"A Major\",\r\n \"value\": \"KeyOfA\"\r\n },\r\n {\r\n \"icon\": \"key-sig-ab\",\r\n \"text\": \"Ab Major\",\r\n \"value\": \"KeyOfAb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-e\",\r\n \"text\": \"E Major\",\r\n \"value\": \"KeyOfE\"\r\n },\r\n {\r\n \"icon\": \"key-sig-bd\",\r\n \"text\": \"Db Major\",\r\n \"value\": \"KeyOfDb\"\r\n },\r\n {\r\n \"icon\": \"key-sig-b\",\r\n \"text\": \"B Major\",\r\n \"value\": \"KeyOfB\"\r\n },\r\n {\r\n \"icon\": \"key-sig-fs\",\r\n \"text\": \"F# Major\",\r\n \"value\": \"KeyOfF#\"\r\n },\r\n {\r\n \"icon\": \"key-sig-cs\",\r\n \"text\": \"C# Major\",\r\n \"value\": \"KeyOfC#\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiMeasureMenu\",\r\n \"label\": \"Measure\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Add Measures\",\r\n \"value\": \"addMenuCmd\"\r\n },\r\n {\r\n \"icon\": \"icon-cross\",\r\n \"text\": \"Delete Selected Measures\",\r\n \"value\": \"deleteSelected\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Format Measure\",\r\n \"value\": \"formatMeasureDialog\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiTimeSignatureMenu\",\r\n \"label\": \"Time Sig\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"sixeight\",\r\n \"text\": \"6/8\",\r\n \"value\": \"6/8\"\r\n },\r\n {\r\n \"icon\": \"fourfour\",\r\n \"text\": \"4/4\",\r\n \"value\": \"4/4\"\r\n },\r\n {\r\n \"icon\": \"threefour\",\r\n \"text\": \"3/4\",\r\n \"value\": \"3/4\"\r\n },\r\n {\r\n \"icon\": \"twofour\",\r\n \"text\": \"2/4\",\r\n \"value\": \"2/4\"\r\n },\r\n {\r\n \"icon\": \"twelveeight\",\r\n \"text\": \"12/8\",\r\n \"value\": \"12/8\"\r\n },\r\n {\r\n \"icon\": \"seveneight\",\r\n \"text\": \"7/8\",\r\n \"value\": \"7/8\"\r\n },\r\n {\r\n \"icon\": \"fiveeight\",\r\n \"text\": \"5/8\",\r\n \"value\": \"5/8\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Other\",\r\n \"value\": \"TimeSigOther\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiStaffModifierMenu\",\r\n \"label\": \"Lines\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"cresc\",\r\n \"text\": \"Crescendo\",\r\n \"value\": \"crescendo\"\r\n },\r\n {\r\n \"icon\": \"decresc\",\r\n \"text\": \"Decrescendo\",\r\n \"value\": \"decrescendo\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Slur\",\r\n \"value\": \"slur\"\r\n },\r\n {\r\n \"icon\": \"slur\",\r\n \"text\": \"Tie\",\r\n \"value\": \"tie\"\r\n },\r\n {\r\n \"icon\": \"ending\",\r\n \"text\": \"nth ending\",\r\n \"value\": \"ending\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLanguageMenu\",\r\n \"label\": \"Language\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"English\",\r\n \"value\": \"en\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Deutsch\",\r\n \"value\": \"de\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"اَلْعَرَبِيَّةُ\",\r\n \"value\": \"ar\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiLibraryMenu\",\r\n \"label\": \"Score\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Bach Invention\",\r\n \"value\": \"bach\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Postillion-Lied\",\r\n \"value\": \"postillion\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Jesu Bambino\",\r\n \"value\": \"bambino\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Handel Messiah 1-1\",\r\n \"value\": \"handel\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Precious Lord\",\r\n \"value\": \"preciousLord\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"In Its Delightful Shade\",\r\n \"value\": \"shade\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Yama\",\r\n \"value\": \"yamaJson\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Dichterliebe (xml)\",\r\n \"value\": \"dichterliebe\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Beethoven - An die ferne Gliebte (xml)\",\r\n \"value\": \"beethoven\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Mozart - An Chloe (xml)\",\r\n \"value\": \"mozart\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Joplin - The Entertainer (xml)\",\r\n \"value\": \"joplin\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n },\r\n {\r\n \"ctor\": \"SuiScoreMenu\",\r\n \"label\": \"Score Settings\",\r\n \"menuItems\": [\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Layout\",\r\n \"value\": \"layout\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Fonts\",\r\n \"value\": \"fonts\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"View\",\r\n \"value\": \"view\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Score Info\",\r\n \"value\": \"identification\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Global Settings\",\r\n \"value\": \"preferences\"\r\n },\r\n {\r\n \"icon\": \"\",\r\n \"text\": \"Cancel\",\r\n \"value\": \"cancel\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"buttonText\": [\r\n {\r\n \"buttonId\": \"helpDialog\",\r\n \"buttonText\": \"Help\"\r\n },\r\n {\r\n \"buttonId\": \"languageMenu\",\r\n \"buttonText\": \"Language\"\r\n },\r\n {\r\n \"buttonId\": \"fileMenu\",\r\n \"buttonText\": \"File\"\r\n },\r\n {\r\n \"buttonId\": \"libraryMenu\",\r\n \"buttonText\": \"Library\"\r\n },\r\n {\r\n \"buttonId\": \"addStaffMenu\",\r\n \"buttonText\": \"Staves\"\r\n },\r\n {\r\n \"buttonId\": \"measureModal\",\r\n \"buttonText\": \"Measure\"\r\n },\r\n {\r\n \"buttonId\": \"tempoModal\",\r\n \"buttonText\": \"Tempo\"\r\n },\r\n {\r\n \"buttonId\": \"timeSignatureMenu\",\r\n \"buttonText\": \"Time Signature\"\r\n },\r\n {\r\n \"buttonId\": \"keyMenu\",\r\n \"buttonText\": \"Key\"\r\n },\r\n {\r\n \"buttonId\": \"staffModifierMenu\",\r\n \"buttonText\": \"Lines\"\r\n },\r\n {\r\n \"buttonId\": \"instrumentModal\",\r\n \"buttonText\": \"Instrument\"\r\n },\r\n {\r\n \"buttonId\": \"pianoModal\",\r\n \"buttonText\": \"Piano\"\r\n },\r\n {\r\n \"buttonId\": \"layoutMenu\",\r\n \"buttonText\": \"Score\"\r\n },\r\n {\r\n \"buttonId\": \"UpOctaveButton\",\r\n \"buttonText\": \"8va\"\r\n },\r\n {\r\n \"buttonId\": \"DownOctaveButton\",\r\n \"buttonText\": \"8vb\"\r\n },\r\n {\r\n \"buttonId\": \"moreNavButtons\",\r\n \"buttonText\": \"...\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlCoda\",\r\n \"buttonText\": \"DC Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlCoda\",\r\n \"buttonText\": \"DS Al Coda\"\r\n },\r\n {\r\n \"buttonId\": \"dcAlFine\",\r\n \"buttonText\": \"DC Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"dsAlFine\",\r\n \"buttonText\": \"DS Al Fine\"\r\n },\r\n {\r\n \"buttonId\": \"toCoda\",\r\n \"buttonText\": \"to \"\r\n },\r\n {\r\n \"buttonId\": \"fine\",\r\n \"buttonText\": \"Fine\"\r\n },\r\n {\r\n \"buttonId\": \"moreStaffButtons\",\r\n \"buttonText\": \"...\"\r\n }\r\n ]\r\n }`;\r\n\r\nexport const cardKeysHtmlEn = `\r\n

Welcome to Smoosic

\r\n

Smoosic was designed to allow you to enter music as fast as you can type, once you learn some basic commands and patterns. While music can be entered in multiple ways, the fastest/easiest way to create or edit in Smoosic is to use some basic keyboard shortcuts.

\r\n

You can customize the key bindings (which keys do what) by changing the files in src/ui/keyBindings/ directory, or by providing your own bindings. See the custom-keybinding.html in the project that demonstrates how to create your own key bindings.\r\n\"\"

\r\n`;\r\n\r\nexport const cardNotesLetterHtmlEn = `\r\n

Most key commands in Smoosic have a mnemonic device. The keys a-g on the computer keyboard will enter a corresponding note, A-G, on the staff. The default behavior is for the cursor to advance when a note is entered in this way. This can be overridden in the 'Score Preferences' dialog. You navigate to the notes using the keyboard navigation arrows.

\r\n

\"\"

\r\n

Some conventions used in this documentation:

\r\n

Keystrokes are specified in bold, e.g. x means the 'x' key. Shift+E means to press the Shift and E keys at the same time.

\r\n

Key sequences are specified on their own line:

\r\n

/ a

\r\n

means to press the / key followed by the a key.

\r\n`;\r\n\r\nexport const cardNotesChromaticHtmlEn = `\r\n

You change notes chromatically using - and = key. You can change the octave using the _ (underscore) and + (plus) keys. The mnemonic device for this is 'plus and minus' for raising and lowering pitches. You can change the enharmonic spelling of the note using the Shift+E (mnemonic: E for enharmonic - get it?). And Shift+F gives you a courtesy, or cautionary, accidental (mnemonic - F comes after E).

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardNotesChordsHtmlEn = `\r\n

You can create chords and intervals using the number keys along the top of the keyboard. The 3 key makes a third, the 4 key a fourth, and so on. Shift+3 gives you the 3rd below.

\r\n

You can toggle selection to individual pitches by using Shift+UpArrow. So to create a G triad, starting with g, hit 3 for the 'B', 3 again for the 'D'. So far, we have G major. To lower the 3rd, Shift+up to select the 'B', then - to lower the pitch.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardNotesRestsHtmlEn = `\r\n

You can toggle notes to rests by pressing r or Delete.

\r\n

In Smoosic, you can't truly delete a note - a 4/4 bar will always have 4 beats of music. But you can 'hide' notes by creating invisible rests. This is another use of Delete.

\r\n

Delete follows standard toggle behavior - deleted notes become rests, and delete rests become invisible rests. Hitting Delete a third time restores the note.

\r\n

Invisible rests show up as partially opaque in the display. But when printed, they are truly invisible.

\r\n

\"\"

\r\n`\r\nexport const cardDurationNotesHtmlEn = `\r\n

Changing duration is a little different in Smoosic than other programs. Rather than selecting a duration (quarter note, etc.), you change (increase/decrease) the duration of existing notes.

\r\n

You can change the length of notes using the , and . (comma and period) keys, which halve and double the note lengths, respectively. You can add a dot to the length of the note (multiplying length by 3/2 for the first dot, and 5/4 for the second dot, if you like to think of it that way) or remove a dot, using the > (Shift+,) and ,. The mnemonic device for these is > makes note duration greater. < makes note duration less. (On most QWERTY keyboards, comma shifted is < and period shifted is >).

\r\n

\"\"

`;\r\n\r\nexport const cardDurationTupletsHtmlEn = `\r\n

You can create tuplets from the keyboard by typing Ctrl+3, Ctrl+5 or Ctrl+7 for triplets, quintuplets, and septuplets, respectively. Individual notes in a tuplet can be doubled and halved with the duration keys - (minus) and = (equals), just like non-tuplets. You 'untupletify' a tuplet by Ctrl+0.

\r\n

\"\"

`;\r\n\r\nexport const cardSelectionsNotesHtmlEn = `

Many operations in Smoosic act on the selected music. You select the music the way you select text in a text app, with the to move right, to move left. Shift+→ expands the selection left, etc.

\r\n

\"\"

\r\n

In the last example, note how the selection is preserved as the notes get shorter. When you change something, Smoosic will try to keep the selection as close as possible to what you had when the music changes.\r\nYou can also use the mouse to select notes. Selecting a range across multiple staves is not supported (yet). But you can use Control+click to select notes in multiple staves.

\r\n`;\r\nexport const cardSelectionsModifiersHtmlEn = ` \r\n

A modifier is anything that affects a note, such as an articulation or dynamic. Many modifiers, especially those that affect multiple notes, can be selected with the keyboard. To select a modifier such as a slur, crescendo, or ending, use 'Alt-left arrow' or 'Alt-right arrow' when the first or last note of the modifier is selected. This will move the selecttion between modifiers that apply to that note.

\r\n

You can also select modifiers with the mouse.

\r\n

Once selected, you can bring up the modifier dialog by hitting 'Enter'.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardSelectionsNonSelectableHtmlEn = `\r\n

Some modifiers, such as articulations, aren't selectable. The keys h, i, j, and k bring up articulations that aren't selectable, but are placed on the note automatically. You can toggle position and on/off by repeating the key.

\r\n

Additional articulations are available from the of articulation button group.

\r\n

You can customize the articulations selected by the key bindings by changing the ui/keyBindings/editorKeys.ts file, or by providing your own bindings. See the custom-keybinding.html example in the project.

\r\n

\"\"

`;\r\n\r\n\r\nexport const cardSelectionsSlashHtmlEn = `\r\n

The buttons on the left (for L-to-R languages) bring up menus and dialogs. These dialogs can also be accessed via the 'Slash' menus.

\r\n

For instance, slurs, ties, hairpins and other modifiers that work on a range of music are created from the 'Lines' menu. You can access this via the slash menu:

\r\n

/ l (el, not one) 2

\r\n

Then you can use the modifier selection to edit the phrase marking to your taste.

\r\n

You can also select modifiers or any menu option with the mouse.

\r\n

\"\"

`;\r\n\r\nexport const cardBeamsAndStemsDirectionHtmlEn = `\r\n

Beams and Stems part 1: Direction

\r\n

The direction of beams and stems is controlled selecting the notes you want to affect and typing Shift+B. The selection will be toggled between auto (default), up, and down. 'Auto' means stems are up if the notes are below 3rd line, so the beam direction will change if the notes do.

\r\n

Note that there are 3 settings, even though only 2 will produce a visible change for any given stem, since 'auto' will be either up or down.

\r\n

\"\"

\r\n`;\r\nexport const cardBeamsAndStemsGroupingHtmlEn = `\r\n

By default, notes are auto-beamed so that a 1/4 note is beamed. So 1/8 notes in 4/4 time will be beamed in 2's, 16th notes in 4's etc. In triple time (e.g. 6/8, 9/8), 1/8 notes are beamed in 3's. You can change this default in the Score Preferences.

\r\n

You can split a beam at any point using the x (mnemonic: x to cancel beaming. You can create a beam by selecting the notes and typing Shift-X. Only notes with 1/8 note duration or less can be beamed.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardMeasuresAddDeleteHtmlEn = `\r\n

You can add a single measure at the current selection point by pressing Insert. Shift+Insert appends the new measure to the selected measure.

\r\n

To add many measures, you can do this from the 'Add Measures' dialog. This can be brought up through the 'Measure' button on the left, or by pressing

\r\n

/ a 0 (zero)

\r\n

Deleting the selected measures can be done from the 'Measures' menu on the left, or by pressing

\r\n

/ a 1.

\r\n

Note the insert and delete key behavior is asymmetric. The Delete key is used to toggle notes to rests, and also I thought this made it too easy to accidentally delete a lot of music.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardVoicesCreateDeleteHtmlEn = `\r\n

If you need different rhythms in the same stave, you can do this by creating multiple voices. You add a voice to a measure using the voice buttons - you can have up to 4 voices in a measure.

\r\n

You can select a differnt voice using the voice buttons also.

\r\n

You can delete any voice except voice 1 by selecting the voice, and selecting the Vx button. When a voice is deleted, any voices with a higher number are bumped down - e.g., if you delete voice 2, voice 3 becomes voice 2, etc.

\r\n

By default, the odd-numbered voices (indexed from 1) have stems that point up. You can use the Ctrl+B to change the staff direction if you want.

\r\n

Notes in voices > 1 have different colors in the editor. This is to make editing easier. All voices are black when the music is printed.

\r\n

\"\"

\r\n`;\r\n\r\nexport const cardPartAddDeleteHtmlEn = `

You can add a new stave/part from the parts menu.

\r\n

/ p 0 (zero)

\r\n

From the dialog, you can select the initial properties of the new stave, such as the clef and transposition.

\r\n

To delete the selected staves:\r\n/ p 1 (zero)

\r\n

Note that you can't delete the only stave - the music will always contain at least one stave.

\r\n

Note: The 'Part' menu may show different options depending on what else is in the score. Other characteristics of the part and staff are covered in the 'Working with Scores' section.

\r\n

\"\"

\r\n`;\r\n\r\nexport const helpCards = [cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn\r\n];","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from \"../../common/htmlHelpers\";\r\nimport { SmoLanguage, SmoTranslator, TranslationStrings } from \"./language\";\r\nimport { RibbonButtons } from \"../buttons/ribbon\";\r\nimport { ButtonLabel } from \"../buttons/button\";\r\nimport { DialogTranslation, DialogDefinition } from \"../dialogs/dialog\";\r\nimport { DialogDefinitionElement, DialogDefinitionOption } from \"../dialogs/components/baseComponent\";\r\n\r\ndeclare var $: any;\r\n\r\n// ## SmoTranslationEditor\r\n// Create a somewhat user-friendly editor DOM to translate SMO\r\n// dialogs and menus, and any subset, into other languages.\r\nexport class SmoTranslationEditor {\r\n // ### _getHtmlTextInput\r\n // All the editable text elements contain: the code label or value from the\r\n // UI element, the En string, and the translated string, or a copy of the\r\n // EN string if the string has not been translated.\r\n static _getHtmlTextInput(dbLabel: string, enLabel: string, langLabel: string, labelType: string, labelId: string) {\r\n var b = buildDom;\r\n\r\n const compHtml = b('div').classes('dialog-element-container')\r\n .attr('data-' + labelType, labelId).append(\r\n b('div').classes('dialog-component-label').append(\r\n b('span').classes('trans-label').append(\r\n b('span').classes('trans-db-text').text(dbLabel)\r\n ).append(\r\n b('span').classes('trans-en-text').text(enLabel)\r\n ).append(\r\n b('input').classes('trans-label-input')\r\n ).append(\r\n b('span').classes('plaintext-translate hide').text(langLabel)\r\n )\r\n )\r\n ).dom();\r\n return compHtml;\r\n }\r\n\r\n // ### _getMenuTextDialogHtml\r\n // Get all the menu item labels for translation\r\n static _getMenuTextDialogHtml(menuCtor: string, enStrings: TranslationStrings, langStrings: TranslationStrings) {\r\n const menuClass = eval('globalThis.Smo.' + menuCtor);\r\n const menuItems = menuClass['defaults'].menuItems;\r\n var enMenu = enStrings.menus.find((mn: any) => mn.ctor === menuCtor);\r\n\r\n // Get the JSON EN menu, or copy the DB strings if it doesn't exist\r\n if (!enMenu) {\r\n enMenu = JSON.parse(JSON.stringify(menuClass['defaults']));\r\n enMenu!.ctor = menuCtor;\r\n }\r\n // Get the JSON language menu strings, or copy the EN strings if it doesn't exist\r\n var langMenu = langStrings.menus.find((mn: any) => mn.ctor === menuCtor);\r\n if (!langMenu) {\r\n langMenu = JSON.parse(JSON.stringify(menuClass['defaults']));\r\n langMenu!.ctor = menuCtor;\r\n }\r\n\r\n // create the DOM menu container\r\n var b = buildDom;\r\n const container = b('div').classes('menu-translate-container')\r\n .attr('data-menucontainer', menuCtor).append(\r\n b('button').classes('icon-plus trans-expander')).append(\r\n b('span').classes('menu-translate-title').text(menuCtor)\r\n ).dom();\r\n const menuItemsDom = b('div').classes('menu-element-container').dom();\r\n\r\n // create the label editor\r\n const menuLabel = SmoTranslationEditor._getHtmlTextInput(menuClass['defaults'].label, enMenu!.label, langMenu!.label,\r\n 'menulabel', menuCtor);\r\n $(menuItemsDom).append(menuLabel);\r\n $(container).append(menuItemsDom);\r\n\r\n // create the editor for each item\r\n menuItems.forEach((item: any) => {\r\n var enItem = enMenu!.menuItems.find((mi: any) => mi.value === item.value);\r\n if (!enItem) {\r\n enItem = JSON.parse(JSON.stringify(item));\r\n }\r\n var langItem = langMenu!.menuItems!.find((mi: any) => mi.value === item.value);\r\n if (!langItem) {\r\n langItem = JSON.parse(JSON.stringify(item));\r\n }\r\n const menuItemDom = b('div').classes('menu-item-container').dom();\r\n const itemEditDom = SmoTranslationEditor._getHtmlTextInput(\r\n item.value, enItem!.text, langItem!.text,\r\n 'itemtext', item.value);\r\n $(menuItemDom).append(itemEditDom);\r\n $(menuItemsDom).append(menuItemDom);\r\n });\r\n return container;\r\n }\r\n static getButtonTranslateHtml(enStrings: TranslationStrings, langStrings: TranslationStrings, transContainer: HTMLElement) {\r\n var b = buildDom;\r\n var buttonDom: HTMLElement = b('div').classes('ribbon-translate-container')\r\n .attr('data-ribbon-translate', 'buttons').append(\r\n b('button').classes('icon-plus trans-expander')).append(\r\n b('span').classes('ribbon-translate-title').text('Button Text')\r\n ).dom() as HTMLElement;\r\n\r\n var enKeys: ButtonLabel[] = enStrings.buttonText;\r\n if (!enKeys) {\r\n enKeys = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n }\r\n var langKeys = langStrings.buttonText;\r\n if (!langKeys) {\r\n langKeys = JSON.parse(JSON.stringify(RibbonButtons.translateButtons));\r\n }\r\n enKeys.forEach((button: ButtonLabel) => {\r\n const langObj = langKeys.find((langText: any) => langText.buttonId === button.buttonId);\r\n const langString = langObj ? langObj.buttonText : button.buttonText;\r\n var buttonContainer: HTMLElement = b('div').classes('ribbon-button-container')\r\n .attr('data-buttoncontainer', button.buttonId).dom();\r\n $(buttonContainer).append(\r\n SmoTranslationEditor._getHtmlTextInput(button.buttonId, button.buttonText, langString, 'ribbon-button', button.buttonId)\r\n );\r\n $(buttonDom).append(buttonContainer);\r\n });\r\n $(transContainer).append(buttonDom);\r\n }\r\n\r\n // ### _getStaticTextDialogHtml\r\n // create DOM for the static text section of the dialogs.\r\n static _getStaticTextDialogHtml(elements: DialogDefinition, enDb: Record, langDb: Record, htmlContainer: HTMLElement) {\r\n var b = buildDom;\r\n const keys = Object.keys(elements.staticText);\r\n const nodeContainer = b('div')\r\n .classes('dialog-element-container')\r\n .attr('data-component', 'staticText')\r\n .dom();\r\n elements.staticText.forEach((nv: any) => {\r\n const name = Object.keys(nv)[0];\r\n const value = nv[name];\r\n var enVal = enDb[name] ? enDb[name] : value;\r\n var langVal = langDb[name] ? langDb[name] : enDb[name];\r\n const translateElement = SmoTranslationEditor._getHtmlTextInput(\r\n name, enVal, langVal, 'statictext', name);\r\n $(nodeContainer).append(translateElement);\r\n });\r\n $(htmlContainer).append(nodeContainer);\r\n }\r\n static _getDialogComponentHtml(element: DialogDefinitionElement, enDb: DialogTranslation, langDb: DialogTranslation, container: HTMLElement) {\r\n var b = buildDom;\r\n var label = element.label;\r\n var smoName = element.smoName;\r\n if (typeof (enDb.dialogElements.find) !== 'function') {\r\n console.warn('no ENDB!');\r\n }\r\n var enComponent = enDb.dialogElements.find((st: any) => st.id === smoName);\r\n if (!enComponent) {\r\n enComponent = JSON.parse(JSON.stringify(element))\r\n }\r\n var langComponent = langDb.dialogElements.find((st: any) => st.id === smoName);\r\n if (!langComponent) {\r\n langComponent = JSON.parse(JSON.stringify(element));\r\n }\r\n const enLabel = enComponent!.label ? enComponent!.label : label;\r\n const langLabel = langComponent!.label ? langComponent!.label : label;\r\n const compHtml = SmoTranslationEditor._getHtmlTextInput(\r\n label, enLabel, langLabel, 'component', smoName);\r\n\r\n if (element.options) {\r\n const optionsHtml = b('div').classes('dialog-component-options').dom();\r\n $(compHtml).append(optionsHtml);\r\n if (!enComponent!.options) {\r\n enComponent!.options = JSON.parse(JSON.stringify(element.options));\r\n }\r\n if (!langComponent!.options) {\r\n langComponent!.options = JSON.parse(JSON.stringify(element.options));\r\n }\r\n\r\n element.options.forEach((option: DialogDefinitionOption) => {\r\n var enOption = enComponent!.options!.find((op: any) => op.value === option.value);\r\n var langOption = langComponent!.options!.find((op: any) => op.value === option.value);\r\n if (!enOption || !enOption.label) {\r\n enOption = JSON.parse(JSON.stringify(option));\r\n }\r\n if (!langOption || !langOption.label) {\r\n langOption = JSON.parse(JSON.stringify(option));\r\n }\r\n const optionHtml = SmoTranslationEditor._getHtmlTextInput(\r\n option.value.toString(), enOption!.label, langOption!.label, 'component-option', option!.value.toString());\r\n $(optionsHtml).append(optionHtml)\r\n });\r\n }\r\n $(container).append(compHtml);\r\n }\r\n\r\n static getDialogTranslationHtml(dialogCtor: string, enStrings: TranslationStrings, langStrings: TranslationStrings) {\r\n var b = buildDom;\r\n var container: HTMLElement = b('div').classes('db-translate-container').attr('data-dbcontainer', dialogCtor)\r\n .append(b('button').classes('icon-plus trans-expander'))\r\n .append(b('span').classes('db-translate-title').text(dialogCtor)).dom() as HTMLElement;\r\n var ctor = eval('globalThis.Smo.' + dialogCtor);\r\n if (!ctor) {\r\n console.warn('Bad dialog in translate: ' + dialogCtor);\r\n return;\r\n }\r\n var elements = ctor.dialogElements as DialogDefinition;\r\n var enDb = enStrings.dialogs.find((dbStr: DialogTranslation) => dbStr.ctor === dialogCtor);\r\n if (!enDb) {\r\n enDb = JSON.parse(JSON.stringify({\r\n ctor: dialogCtor, label: elements.label, dialogElements: elements.elements, staticText: elements.staticText\r\n }\r\n ));\r\n }\r\n var langDb = langStrings.dialogs.find((dbStr: DialogTranslation) => dbStr.ctor === dialogCtor);\r\n if (!langDb) {\r\n langDb = JSON.parse(JSON.stringify({\r\n ctor: dialogCtor, label: elements.label, dialogElements: elements.elements, staticText: elements.staticText\r\n }));\r\n }\r\n const htmlText = SmoTranslationEditor._getHtmlTextInput(dialogCtor, enDb!.label, langDb!.label, 'dialog-label', dialogCtor);\r\n $(container).append(htmlText);\r\n if (elements.staticText) {\r\n SmoTranslationEditor._getStaticTextDialogHtml(elements, enDb!.staticText, langDb!.staticText, container);\r\n }\r\n elements.elements.forEach((element: DialogDefinitionElement) => {\r\n if (element.smoName && element.label) {\r\n SmoTranslationEditor._getDialogComponentHtml(element, enDb!, langDb!, container);\r\n }\r\n });\r\n return container;\r\n }\r\n static getAllTranslationHtml(lang: string) {\r\n const enStr: TranslationStrings = SmoLanguage.en.strings;\r\n const langStr: TranslationStrings = (SmoLanguage as any)[lang].strings;\r\n var b = buildDom;\r\n var container: HTMLElement = b('div').classes('top-translate-container')\r\n .attr('dir', (SmoLanguage as any)[lang].dir).dom() as HTMLElement;\r\n SmoTranslator.allDialogs.forEach((dialog) => {\r\n const htmlDom: HTMLElement | undefined = SmoTranslationEditor.getDialogTranslationHtml(dialog, enStr, langStr);\r\n if (htmlDom) {\r\n $(container).append(htmlDom);\r\n }\r\n });\r\n SmoTranslator.allMenus.forEach((menu) => {\r\n $(container).append(SmoTranslationEditor._getMenuTextDialogHtml(menu, enStr, langStr));\r\n });\r\n SmoTranslationEditor.getButtonTranslateHtml(enStr, langStr, container);\r\n var resultDom = b('div').classes('translation-json-container').append(\r\n b('textarea').classes('translation-json-text')).append(\r\n b('div').append(\r\n b('button').classes('translate-submit-button').text('Submit')\r\n )\r\n ).dom() as HTMLElement;\r\n $(container).append(resultDom);\r\n return container;\r\n }\r\n static parseDom() {\r\n var json = [];\r\n // $('.top-translate-container .db-translate-container[data-dbcontainer] [data-component=\"staticText\"]')\r\n $('.top-translate-container .db-translate-container[data-dbcontainer]').each((ix: number, dbEl: any) => {\r\n var db = $(dbEl).attr('data-dbcontainer');\r\n var obj: any = { ctor: db };\r\n var elements: any[] = [];\r\n var domComponents = $(dbEl).find('[data-component]');\r\n $(domComponents).each(function (ix: number, domComponent: any) {\r\n const compType = $(domComponent).attr('data-component');\r\n if (compType === 'staticText') {\r\n var stElements: any[] = [];\r\n $(domComponent).find('[data-statictext]').each((ix: number, stDom: any) => {\r\n const key = $(stDom).attr('data-statictext');\r\n const value = $(stDom).find('input.trans-label-input').val();\r\n const stNode = JSON.parse('{\"' + key + '\":\"' + value + '\"}');\r\n stElements.push(stNode);\r\n });\r\n elements.push({ staticText: stElements });\r\n } else {\r\n var dbComponent = { id: compType, label: '', options: {} };\r\n dbComponent.label = $(domComponent).find('input.trans-label-input').val();\r\n var compOptions: any[] = [];\r\n $(domComponent).find('[data-component-option]').each(function (ix: number, optionDom: any) {\r\n const value = $(optionDom).find('.trans-db-text').text();\r\n const label = $(optionDom).find('input.trans-label-input').val();\r\n compOptions.push({ value: value, label: label });\r\n });\r\n dbComponent.options = compOptions;\r\n elements.push(dbComponent);\r\n }\r\n });\r\n obj.dialogElements = elements;\r\n json.push(obj);\r\n });\r\n $('.menu-translate-container[data-menucontainer]').each((ix: number, menuEl: any) => {\r\n var menuId = $(menuEl).attr('data-menucontainer');\r\n var obj = { ctor: menuId, label: '', options: {}, menuItems: {} };\r\n const menuLabel = $(menuEl)\r\n .find('.dialog-element-container[data-menulabel] .trans-label-input')\r\n .val();\r\n obj.label = menuLabel;\r\n var menuItems: any[] = [];\r\n var itemsDom = $(menuEl).find('.menu-item-container .dialog-element-container');\r\n $(itemsDom).each((ix: number, itemDom: any) => {\r\n const value = $(itemDom).find('.trans-db-text').text();\r\n const text = $(itemDom).find('input.trans-label-input').val();\r\n menuItems.push({ value: value, text: text });\r\n });\r\n obj.menuItems = menuItems;\r\n json.push(obj);\r\n });\r\n var ribbonText: any[] = [];\r\n $('.ribbon-translate-container .ribbon-button-container').each((ix: number, buttonEl: any) => {\r\n const buttonId = $(buttonEl).find('.trans-db-text').text();\r\n const buttonText = $(buttonEl).find('input.trans-label-input').val();\r\n ribbonText.push({ buttonId: buttonId, buttonText: buttonText });\r\n });\r\n json.push({ ribbonText: ribbonText });\r\n return json;\r\n }\r\n static startEditor(lang: string) {\r\n createTopDomContainer('.translation-editor');\r\n var transDom = SmoTranslationEditor.getAllTranslationHtml(lang);\r\n $('.translation-editor').append(transDom);\r\n $('body').addClass('translation-mode');\r\n $('.plaintext-translate').each(function (ix: number, el: any) {\r\n var txt = $(el).text();\r\n $(el).closest('.trans-label').find('input.trans-label-input').val(txt);\r\n });\r\n\r\n $('.db-translate-container button.trans-expander').off('click').on('click', function (ev: any) {\r\n var exp = $(ev.target).closest('.db-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(ev.target).removeClass('icon-minus');\r\n $(ev.target).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(ev.target).addClass('icon-minus');\r\n $(ev.target).removeClass('icon-plus');\r\n }\r\n });\r\n $('.menu-translate-container button.trans-expander').off('click').on('click', function (ev: any) {\r\n var exp = $(ev.target).closest('.menu-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(ev.target).removeClass('icon-minus');\r\n $(ev.target).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(ev.target).addClass('icon-minus');\r\n $(ev.target).removeClass('icon-plus');\r\n }\r\n });\r\n $('.ribbon-translate-container button.trans-expander').off('click').on('click', function () {\r\n const dom = $('.ribbon-translate-container button.trans-expander');\r\n var exp = $(dom).closest('.ribbon-translate-container');\r\n if ($(exp).hasClass('expanded')) {\r\n $(exp).removeClass('expanded');\r\n $(dom).removeClass('icon-minus');\r\n $(dom).addClass('icon-plus');\r\n } else {\r\n $(exp).addClass('expanded');\r\n $(dom).addClass('icon-minus');\r\n $(dom).removeClass('icon-plus');\r\n }\r\n });\r\n $('.translate-submit-button').off('click').on('click', () => {\r\n var json = SmoTranslationEditor.parseDom();\r\n $('.translation-json-text').val(JSON.stringify(json, null, ' '));\r\n });\r\n\r\n\r\n }\r\n\r\n}\r\n","import { KeyBinding } from '../../../application/common';\r\nexport class defaultEditorKeys {\r\n static get keys(): KeyBinding[] {\r\n return [{\r\n event: \"keydown\",\r\n key: \"=\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"transposeUp\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"-\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"transposeDown\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"+\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"upOctave\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"_\",\r\n ctrlKey:false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"downOctave\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"F\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleCourtesyAccidental\"\r\n }, {\r\n event: \"keydown\",\r\n key: \".\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"doubleDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \",\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"halveDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \">\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"dotDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"<\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"undotDuration\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"a\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"A\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"slashGraceNotes\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"b\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"G\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addGraceNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"g\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"removeGraceNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"c\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"d\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"e\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"f\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"g\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"setPitch\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"r\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeRest\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"r\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"rerender\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"p\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"playScore\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"P\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"pausePlayer\"\r\n },\r\n { event: \"keydown\",\r\n key: \" \",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"togglePlayer\"\r\n },\r\n {\r\n event: \"keydown\",\r\n key: \"s\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"stopPlayer\"\r\n },\r\n {\r\n event: \"keydown\",\r\n key: \"3\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"5\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"7\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"makeTuplet\"\r\n },\r\n // interval commands\r\n {\r\n event: \"keydown\",\r\n key: \"2\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"3\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"4\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"5\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"6\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"7\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"8\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"@\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"$\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"#\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"%\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"^\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"&\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"*\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"8\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"interval\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"0\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"unmakeTuplet\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Insert\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addMeasure\"\r\n },{\r\n event: \"keydown\",\r\n key: \"Insert\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"i\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"I\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"B\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleBeamDirection\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Delete\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"deleteNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"d\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"deleteNote\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"z\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"undo\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"c\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"copy\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"x\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"toggleBeamGroup\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"X\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"beamSelections\"\r\n },{\r\n event: \"keydown\",\r\n key: \"v\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"paste\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"h\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveAccent\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"i\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveTenuto\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"j\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveStaccato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"k\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemoveMarcato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"l\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"addRemovePizzicato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"H\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveAccent\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"I\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveTenuto\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"J\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveStaccato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"K\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemoveMarcato\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"L\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"addRemovePizzicato\"\r\n },{\r\n event: \"keydown\",\r\n key: \"E\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"toggleEnharmonic\"\r\n }\r\n ];\r\n }\r\n\r\n}\r\n","import { KeyBinding } from '../../../application/common';\r\nexport class defaultTrackerKeys {\r\n static get keys(): KeyBinding[] {\r\n return [{\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"Home\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveHome\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"End\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveEnd\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionRight\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"advanceModifierSelection\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: true,\r\n shiftKey: false,\r\n action: \"advanceModifierSelection\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionLeft\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionRight\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionRightMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"growSelectionLeft\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowUp\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionUp\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowDown\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionDown\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowRight\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionRightMeasure\"\r\n }, {\r\n event: \"keydown\",\r\n key: \"ArrowLeft\",\r\n ctrlKey: true,\r\n altKey: false,\r\n shiftKey: false,\r\n action: \"moveSelectionLeftMeasure\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowUp\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveSelectionPitchUp\"\r\n },{\r\n event: \"keydown\",\r\n key: \"ArrowDown\",\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: true,\r\n action: \"moveSelectionPitchDown\"\r\n }\r\n ];\r\n }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition, SuiMenuHandler, SuiMenuShowOption, \r\n SuiConfiguredMenuOption, SuiConfiguredMenu } from './menu';\r\n\r\n declare var $: any;\r\nexport class SuiBeamMenu extends SuiConfiguredMenu {\r\n constructor(params: SuiMenuParams) {\r\n super(params, 'Beams', SuiBeamMenuOptions);\r\n } \r\n}\r\n\r\nconst toggleBeamGroupMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.toggleBeamGroup();\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) {\r\n const mm = menu.view.tracker.selections[i].measure;\r\n for (let j = 0; j < mm.voices.length; ++j) {\r\n const vv = mm.voices[j];\r\n for (let k = 0; k < vv.notes.length; ++k) {\r\n const nn = vv.notes[k];\r\n if (nn) {\r\n if (nn.noteType === 'n' && nn.tickCount < 4096) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: 'icon smo-icon icon-beamBreak',\r\n text: 'Toggle Beam Group',\r\n hotkey: 'x',\r\n value: 'toggleBeamMenuOption'\r\n }\r\n}\r\nconst beamSelectionsMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.beamSelections();\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) {\r\n const mm = menu.view.tracker.selections[i].measure;\r\n for (let j = 0; j < mm.voices.length; ++j) {\r\n const vv = mm.voices[j];\r\n for (let k = 0; k < vv.notes.length; ++k) {\r\n const nn = vv.notes[k];\r\n if (nn) {\r\n if (nn.noteType === 'n' && nn.tickCount < 4096) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: 'icon smo-icon icon-beam',\r\n text: 'Beam Selections',\r\n hotkey: 'Shift-X',\r\n value: 'beamSelectionsMenuOption'\r\n }\r\n}\r\nconst toggleBeamDirectionMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.toggleBeamDirection();\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) {\r\n const mm = menu.view.tracker.selections[i].measure;\r\n for (let j = 0; j < mm.voices.length; ++j) {\r\n const vv = mm.voices[j];\r\n for (let k = 0; k < vv.notes.length; ++k) {\r\n const nn = vv.notes[k];\r\n if (nn) {\r\n if (nn.noteType === 'n') {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: 'icon icon-smo icon-flagFlip',\r\n text: 'Toggle Stem Direction (auto, up, down)',\r\n hotkey: 'Shift-B',\r\n value: 'toggleBeamDirection'\r\n }\r\n}\r\nconst tripletMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.makeTuplet(3);\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) { \r\n const mm = menu.view.tracker.selections[i].measure;\r\n for (let j = 0; j < mm.voices.length; ++j) {\r\n const vv = mm.voices[j];\r\n for (let k = 0; k < vv.notes.length; ++k) {\r\n const nn = vv.notes[k];\r\n if (nn) {\r\n if (nn.noteType === 'n') {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: ' icon icon-smo icon-triplet',\r\n text: 'Make Triplet',\r\n hotkey: 'Ctrl-3',\r\n value: 'tripletMenuOption'\r\n }\r\n}\r\nconst quintupletMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.makeTuplet(3);\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) { \r\n const mm = menu.view.tracker.selections[i].measure;\r\n for (let j = 0; j < mm.voices.length; ++j) {\r\n const vv = mm.voices[j];\r\n for (let k = 0; k < vv.notes.length; ++k) {\r\n const nn = vv.notes[k];\r\n if (nn) {\r\n if (nn.noteType === 'n') {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: 'icon-smo icon-quint',\r\n text: 'Make 5-tuplet',\r\n hotkey: 'Ctrl-5',\r\n value: 'quintupletMenuOption'\r\n }\r\n}\r\nconst sevenTupletMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.makeTuplet(3);\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) { \r\n const mm = menu.view.tracker.selections[i].measure;\r\n for (let j = 0; j < mm.voices.length; ++j) {\r\n const vv = mm.voices[j];\r\n for (let k = 0; k < vv.notes.length; ++k) {\r\n const nn = vv.notes[k];\r\n if (nn) {\r\n if (nn.noteType === 'n') {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: 'icon-smo icon icon-septuplet',\r\n hotkey: 'Ctrl-7',\r\n text: 'Make 7-tuplet',\r\n value: 'sevenTupletMenuOption'\r\n }\r\n}\r\nconst removeTupletMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.unmakeTuplet();\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) { \r\n const mm = menu.view.tracker.selections[i].measure;\r\n for (let j = 0; j < mm.voices.length; ++j) {\r\n const vv = mm.voices[j];\r\n for (let k = 0; k < vv.notes.length; ++k) {\r\n const nn = vv.notes[k];\r\n if (nn) {\r\n if (nn.isTuplet) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: 'icon icon-smo icon-no_tuplet',\r\n text: 'Unmake tuplet',\r\n hotkey: 'Ctrl-0',\r\n value: 'unmakeTuplet'\r\n }\r\n}\r\nconst SuiBeamMenuOptions: SuiConfiguredMenuOption[] = [toggleBeamGroupMenuOption,\r\n beamSelectionsMenuOption, toggleBeamDirectionMenuOption, tripletMenuOption, quintupletMenuOption,\r\n sevenTupletMenuOption, removeTupletMenuOption\r\n];","import { SmoDynamicText } from '../../smo/data/noteModifiers';\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\ndeclare var $: any;\r\nexport class SuiDynamicsMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Dynamics',\r\n menuItems: [{\r\n icon: 'pianissimo',\r\n text: 'Pianissimo',\r\n value: 'pp'\r\n }, {\r\n icon: 'piano',\r\n text: 'Piano',\r\n value: 'p'\r\n }, {\r\n icon: 'mezzopiano',\r\n text: 'Mezzo-piano',\r\n value: 'mp'\r\n }, {\r\n icon: 'mezzoforte',\r\n text: 'Mezzo-forte',\r\n value: 'mf'\r\n }, {\r\n icon: 'forte',\r\n text: 'Forte',\r\n value: 'f'\r\n }, {\r\n icon: 'fortissimo',\r\n text: 'Fortissimo',\r\n value: 'ff'\r\n }, {\r\n icon: 'sfz',\r\n text: 'sfortzando',\r\n value: 'sfz'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiDynamicsMenu.defaults;\r\n }\r\n\r\n async selection(ev: any) {\r\n const text: string = $(ev.currentTarget).attr('data-value');\r\n const props = SmoDynamicText.defaults;\r\n props.text = text;\r\n const dynamic = new SmoDynamicText(props);\r\n await this.view.addDynamic(this.tracker.selections[0], dynamic);\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport {\r\n SuiSaveFileDialog, SuiPrintFileDialog, \r\n // SuiSaveActionsDialog, SuiLoadActionsDialog, \r\n SuiLoadFileDialog, SuiLoadMidiDialog,\r\n SuiSaveXmlDialog, SuiSaveMidiDialog, SuiLoadMxmlDialog, SuiSaveVexDialog,\r\n SuiSaveJsonValidationDialog\r\n} from '../dialogs/fileDialogs';\r\nimport { SmoScore } from '../../smo/data/score';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiFileMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults = {\r\n label: 'File',\r\n menuItems: [{\r\n icon: 'folder-new',\r\n text: 'New Score',\r\n value: 'newFile'\r\n }, {\r\n icon: 'folder-open',\r\n text: 'Open',\r\n value: 'openFile'\r\n }, {\r\n icon: '',\r\n text: 'Quick Save',\r\n value: 'quickSave'\r\n }, {\r\n icon: 'folder-save',\r\n text: 'Save',\r\n value: 'saveFile'\r\n }, {\r\n icon: '',\r\n text: 'Print',\r\n value: 'printScore'\r\n }, {\r\n icon: '',\r\n text: 'Import MusicXML',\r\n value: 'importMxml'\r\n }, {\r\n icon: '',\r\n text: 'Export MusicXML',\r\n value: 'exportXml'\r\n }, {\r\n icon: '',\r\n text: 'Export SMO For Validation',\r\n value: 'SMOJSON'\r\n }, {\r\n icon: '',\r\n text: 'Export Midi',\r\n value: 'exportMidi'\r\n }, {\r\n icon: '',\r\n text: 'Import Midi',\r\n value: 'importMidi'\r\n }, {\r\n icon: '',\r\n text: 'Export Vex',\r\n value: 'exportVex'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiFileMenu.defaults;\r\n }\r\n systemPrint() {\r\n window.print();\r\n createAndDisplayDialog(SuiPrintFileDialog, {\r\n ctor: 'SuiPrintFileDialog',\r\n id: 'print',\r\n eventSource: this.eventSource,\r\n modifier: null,\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: this.closePromise,\r\n tracker: this.tracker\r\n });\r\n }\r\n async selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n const self = this;\r\n if (text === 'saveFile') {\r\n createAndDisplayDialog(SuiSaveFileDialog, {\r\n ctor: 'SuiSaveFileDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'openFile') {\r\n createAndDisplayDialog(SuiLoadFileDialog, {\r\n ctor: 'SuiLoadFileDialog',\r\n id: 'loadFile',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'newFile') {\r\n const score = SmoScore.getDefaultScore(SmoScore.defaults, null);\r\n await this.view.changeScore(score);\r\n } else if (text === 'quickSave') {\r\n this.view.quickSave();\r\n } else if (text === 'printScore') {\r\n const systemPrint = () => {\r\n self.systemPrint();\r\n };\r\n this.view.renderer.renderForPrintPromise().then(systemPrint);\r\n } else if (text === 'exportXml') {\r\n createAndDisplayDialog(SuiSaveXmlDialog, {\r\n ctor: 'SuiSaveXmlDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'SMOJSON') {\r\n createAndDisplayDialog(SuiSaveJsonValidationDialog, {\r\n ctor: 'SuiSaveSmoosicXmlDialog',\r\n id: 'saveSmoJson',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'exportVex') {\r\n createAndDisplayDialog(SuiSaveVexDialog, {\r\n ctor: 'SuiSaveVexDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'exportMidi') {\r\n createAndDisplayDialog(SuiSaveMidiDialog, {\r\n ctor: 'SuiSaveMidiDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n } else if (text === 'importMxml') {\r\n createAndDisplayDialog(SuiLoadMxmlDialog, {\r\n ctor: 'SuiLoadMxmlDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n }); \r\n } else if (text === 'importMidi') {\r\n createAndDisplayDialog(SuiLoadMidiDialog, {\r\n ctor: 'SuiLoadMidiDialog',\r\n id: 'save',\r\n modifier: null,\r\n completeNotifier: this.completeNotifier,\r\n tracker: this.tracker,\r\n eventSource: this.eventSource,\r\n view: this.view,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiKeySignatureMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static get ctor() {\r\n return 'SuiKeySignatureMenu';\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Key',\r\n menuItems: [{\r\n icon: 'key-sig-c',\r\n text: 'C Major',\r\n value: 'KeyOfC',\r\n }, {\r\n icon: 'key-sig-f',\r\n text: 'F Major',\r\n value: 'KeyOfF',\r\n }, {\r\n icon: 'key-sig-g',\r\n text: 'G Major',\r\n value: 'KeyOfG',\r\n }, {\r\n icon: 'key-sig-bb',\r\n text: 'Bb Major',\r\n value: 'KeyOfBb'\r\n }, {\r\n icon: 'key-sig-d',\r\n text: 'D Major',\r\n value: 'KeyOfD'\r\n }, {\r\n icon: 'key-sig-eb',\r\n text: 'Eb Major',\r\n value: 'KeyOfEb'\r\n }, {\r\n icon: 'key-sig-a',\r\n text: 'A Major',\r\n value: 'KeyOfA'\r\n }, {\r\n icon: 'key-sig-ab',\r\n text: 'Ab Major',\r\n value: 'KeyOfAb'\r\n }, {\r\n icon: 'key-sig-e',\r\n text: 'E Major',\r\n value: 'KeyOfE'\r\n }, {\r\n icon: 'key-sig-bd',\r\n text: 'Db Major',\r\n value: 'KeyOfDb'\r\n }, {\r\n icon: 'key-sig-b',\r\n text: 'B Major',\r\n value: 'KeyOfB'\r\n }, {\r\n icon: 'key-sig-fs',\r\n text: 'F# Major',\r\n value: 'KeyOfF#'\r\n }, {\r\n icon: 'key-sig-cs',\r\n text: 'C# Major',\r\n value: 'KeyOfC#'\r\n },\r\n {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiKeySignatureMenu.defaults;\r\n }\r\n async selection(ev: any) {\r\n let keySig = $(ev.currentTarget).attr('data-value');\r\n keySig = (keySig === 'cancel' ? keySig : keySig.substring(5, keySig.length));\r\n if (keySig === 'cancel') {\r\n return;\r\n }\r\n await this.view.addKeySignature(keySig);\r\n this.complete();\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { SmoTranslator } from '../i18n/language';\r\n\r\ndeclare var $: any;\r\nexport class SuiLanguageMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static get ctor() {\r\n return 'SuiLanguageMenu';\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Language',\r\n menuItems: [{\r\n icon: '',\r\n text: 'English',\r\n value: 'en'\r\n }, {\r\n icon: '',\r\n text: 'Deutsch',\r\n value: 'de'\r\n }, {\r\n icon: '',\r\n text: 'اَلْعَرَبِيَّةُ',\r\n value: 'ar'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n getDefinition() {\r\n return SuiLanguageMenu.defaults;\r\n }\r\n async selection(ev: any) {\r\n var op = $(ev.currentTarget).attr('data-value');\r\n\r\n SmoTranslator.setLanguage(op);\r\n this.complete();\r\n }\r\n keydown() {\r\n }\r\n}","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer } from '../../common/htmlHelpers';\r\nimport { SvgBox } from '../../smo/data/common';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\n\r\nimport { layoutDebug } from '../../render/sui/layoutDebug';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { SuiKeySignatureDialog } from '../dialogs/keySignature';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { CompleteNotifier, ModalComponent } from '../common';\r\nimport { BrowserEventSource, EventHandler } from '../eventSource';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { KeyBinding } from '../../application/common';\r\nimport { Qwerty } from '../qwerty';\r\nimport { SuiMenuBase, SuiMenuParams, SuiConfiguredMenu, SuiConfiguredMenuOption } from './menu';\r\ndeclare var $: any;\r\n\r\nexport interface SuiMenuManagerParams {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n completeNotifier: CompleteNotifier;\r\n undoBuffer: UndoBuffer;\r\n menuContainer?: HTMLElement;\r\n}\r\n\r\nexport class SuiMenuManager {\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n completeNotifier: CompleteNotifier;\r\n undoBuffer: UndoBuffer;\r\n menuContainer: HTMLElement;\r\n bound: boolean = false;\r\n hotkeyBindings: Record = {};\r\n closeMenuPromise: Promise | null = null;\r\n menu: SuiMenuBase | null = null;\r\n keydownHandler: EventHandler | null = null;\r\n menuPosition: SvgBox = { x: 250, y: 40, width: 1, height: 1 };\r\n tracker: SuiTracker;\r\n menuBind: KeyBinding[] = SuiMenuManager.menuKeyBindingDefaults;\r\n constructor(params: SuiMenuManagerParams) {\r\n this.eventSource = params.eventSource;\r\n this.view = params.view;\r\n this.bound = false; \r\n this.menuContainer = params.menuContainer ?? createTopDomContainer('.menuContainer');\r\n this.completeNotifier = params.completeNotifier;\r\n this.undoBuffer = params.undoBuffer;\r\n this.tracker = params.view.tracker;\r\n }\r\n\r\n static get defaults() {\r\n return {\r\n menuBind: SuiMenuManager.menuKeyBindingDefaults,\r\n menuContainer: '.menuContainer'\r\n };\r\n }\r\n\r\n get closeModalPromise() {\r\n return this.closeMenuPromise;\r\n }\r\n\r\n setController(c: CompleteNotifier) {\r\n this.completeNotifier = c;\r\n }\r\n\r\n get score() {\r\n return this.view.score;\r\n }\r\n\r\n // ### Description:\r\n // slash ('/') menu key bindings. The slash key followed by another key brings up\r\n // a menu.\r\n static get menuKeyBindingDefaults(): KeyBinding[] {\r\n return [\r\n {\r\n event: 'keydown',\r\n key: 'p',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiPartMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'l',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiStaffModifierMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'd',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiDynamicsMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'f',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiFileMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'm',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiTimeSignatureMenu'\r\n }, {\r\n event: 'keydown',\r\n key: 'a',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiMeasureMenu'\r\n }, {\r\n event: 'partSelection',\r\n key: '',\r\n ctrlKey: false,\r\n altKey: false,\r\n shiftKey: false,\r\n action: 'SuiPartSelectionMenu'\r\n }\r\n ];\r\n }\r\n get optionElements() {\r\n return $('.menuContainer ul.menuElement li.menuOption');\r\n }\r\n _advanceSelection(inc: number) {\r\n if (!this.menu) {\r\n return;\r\n }\r\n const options = this.optionElements;\r\n inc = inc < 0 ? options.length - 1 : 1;\r\n this.menu.focusIndex = (this.menu.focusIndex + inc) % options.length;\r\n $(options[this.menu.focusIndex]).find('a').trigger('focus');\r\n }\r\n\r\n unattach() {\r\n if (!this.keydownHandler) {\r\n return;\r\n }\r\n this.eventSource.unbindKeydownHandler(this.keydownHandler);\r\n $('body').removeClass('modal');\r\n $(this.menuContainer).html('');\r\n $('body').off('dismissMenu');\r\n this.bound = false;\r\n this.menu = null;\r\n }\r\n\r\n attach() {\r\n if (!this.menu) {\r\n return;\r\n }\r\n let hotkey = 0;\r\n\r\n $(this.menuContainer).html('');\r\n $(this.menuContainer).attr('z-index', '12');\r\n const b = buildDom;\r\n const r = b('ul').classes('menuElement dropdown-menu rounded-3 shadow w-220px show').attr('size', this.menu.menuItems.length.toString())\r\n .attr('role', 'menu')\r\n .css('left', '' + this.menuPosition.x + 'px')\r\n .css('top', '' + this.menuPosition.y + 'px');\r\n this.menu.menuItems.forEach((item) => {\r\n var vkey = (hotkey < 10) ? String.fromCharCode(48 + hotkey) :\r\n String.fromCharCode(87 + hotkey);\r\n\r\n r.append(\r\n b('li').classes('menuOption').append(\r\n b('a').attr('data-value', item.value).attr('href','#')\r\n .attr('role', 'menuItem').classes('dropdown-item').append(\r\n b('span').classes('menuText').text(item.text))\r\n .append(b('span').classes('icon icon-' + item.icon))\r\n .append(b('span').classes('menu-key').text('' + vkey))));\r\n item.hotkey = vkey;\r\n hotkey += 1;\r\n });\r\n $(this.menuContainer).append(r.dom());\r\n $('body').addClass('modal');\r\n this.bindEvents();\r\n }\r\n\r\n captureMenuEvents(completeNotifier: CompleteNotifier) {\r\n var self = this;\r\n if (this.closeMenuPromise) {\r\n console.log('menu already open, skipping');\r\n return;\r\n }\r\n this.bindEvents();\r\n layoutDebug.addDialogDebug('slash menu creating closeMenuPromise');\r\n // A menu asserts this event when it is done.\r\n this.closeMenuPromise = new Promise((resolve) => {\r\n $('body').off('menuDismiss').on('menuDismiss', () => {\r\n layoutDebug.addDialogDebug('menuDismiss received, resolve closeMenuPromise');\r\n self.unattach();\r\n $('body').removeClass('slash-menu d-block');\r\n self.closeMenuPromise = null;\r\n resolve();\r\n });\r\n });\r\n // take over the keyboard\r\n if (this.closeModalPromise) {\r\n completeNotifier.unbindKeyboardForModal(this as ModalComponent);\r\n }\r\n }\r\n\r\n dismiss() {\r\n $('body').trigger('menuDismiss');\r\n }\r\n displayMenu(menu: SuiMenuBase | null) {\r\n this.menu = menu;\r\n if (!this.menu) {\r\n return;\r\n }\r\n this.menu.preAttach();\r\n this.attach();\r\n this.menu!.menuItems.forEach((item) => {\r\n if (typeof(item.hotkey) !== 'undefined') {\r\n this.hotkeyBindings[item.hotkey] = item.value;\r\n }\r\n });\r\n setTimeout(() => {\r\n const options = this.optionElements;\r\n if (options.length > 0) {\r\n $(options[options.length - 1]).find('a').trigger('focus');\r\n } \r\n }, 1);\r\n }\r\n\r\n createMenu(action: string, notifier: CompleteNotifier) {\r\n this.captureMenuEvents(notifier);\r\n if (!this.completeNotifier) {\r\n return;\r\n }\r\n this.menuPosition = { x: 250, y: 40, width: 1, height: 1 };\r\n // If we were called from the ribbon, we notify the controller that we are\r\n // taking over the keyboard. If this was a key-based command we already did.\r\n layoutDebug.addDialogDebug('createMenu creating ' + action);\r\n if (action === 'SuiKeySignatureMenu') {\r\n // TODO: find a better way of handling slash menus from ribbon buttons\r\n createAndDisplayDialog(SuiKeySignatureDialog, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: null,\r\n eventSource: this.eventSource,\r\n tracker: this.view.tracker,\r\n ctor: 'SuiKeySignatureDialog',\r\n id: 'key-signature-dialog',\r\n modifier: null\r\n });\r\n }\r\n const ctor = eval('globalThis.Smo.' + action);\r\n const params: SuiMenuParams = \r\n {\r\n tracker: this.tracker,\r\n score: this.score,\r\n completeNotifier: this.completeNotifier,\r\n closePromise: this.closeMenuPromise,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n undoBuffer: this.undoBuffer,\r\n ctor: action\r\n };\r\n this.displayMenu(new ctor(params));\r\n }\r\n\r\n // ### evKey\r\n // We have taken over menu commands from controller. If there is a menu active, send the key\r\n // to it. If there is not, see if the keystroke creates one. If neither, dismissi the menu.\r\n evKey(event: any) {\r\n Qwerty.handleKeyEvent(event);\r\n if (['Tab', 'Enter'].indexOf(event.code) >= 0) {\r\n return;\r\n }\r\n event.preventDefault();\r\n if (event.code === 'Escape') {\r\n this.dismiss();\r\n }\r\n if (this.menu) {\r\n if (event.code === 'ArrowUp') {\r\n this._advanceSelection(-1);\r\n } else if (event.code === 'ArrowDown') {\r\n this._advanceSelection(1);\r\n } else if (this.hotkeyBindings[event.key]) {\r\n $('a[data-value=\"' + this.hotkeyBindings[event.key] + '\"]').click();\r\n } else {\r\n this.menu.keydown();\r\n }\r\n return;\r\n }\r\n const binding = this.menuBind.find((ev) =>\r\n ev.key === event.key\r\n );\r\n if (!binding) {\r\n // TODO: find a better place for the slash menus\r\n if (event.key === 'k') {\r\n createAndDisplayDialog(SuiKeySignatureDialog, {\r\n view: this.view,\r\n completeNotifier: this.completeNotifier,\r\n startPromise: null,\r\n eventSource: this.eventSource,\r\n tracker: this.view.tracker,\r\n ctor: 'SuiKeySignatureDialog',\r\n id: 'key-signature-dialog',\r\n modifier: null\r\n });\r\n }\r\n this.dismiss();\r\n return;\r\n }\r\n // this.createMenu(binding.action);\r\n }\r\n\r\n bindEvents() {\r\n this.hotkeyBindings = { };\r\n $('body').addClass('slash-menu d-block');\r\n // We need to keep track of is bound, b/c the menu can be created from\r\n // different sources.\r\n if (!this.bound) {\r\n this.keydownHandler = this.eventSource.bindKeydownHandler(this, 'evKey');\r\n this.bound = true;\r\n }\r\n $(this.menuContainer).find('a.dropdown-item').off('click').on('click', async (ev: any) => {\r\n if ($(ev.currentTarget).attr('data-value') === 'cancel') {\r\n this.menu!.complete();\r\n return;\r\n }\r\n await this.menu!.selection(ev);\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition, SuiConfiguredMenuOption, SuiConfiguredMenu } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiEndingsDialog } from '../dialogs/endings';\r\nimport { SuiInsertMeasures } from '../dialogs/addMeasure';\r\nimport { SuiMeasureDialog } from '../dialogs/measureFormat';\r\nimport { SmoMeasureFormat } from '../../smo/data/measureModifiers';\r\ndeclare var $: any;\r\nexport class SuiMeasureMenu extends SuiConfiguredMenu {\r\n static defaults: MenuDefinition = {\r\n label: 'Measure Menu',\r\n menuItems: [],\r\n }\r\n constructor(params: SuiMenuParams) {\r\n super(params, 'Notes', SuiMeasureMenuConfig);\r\n } \r\n}\r\nconst formatMeasureMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiMeasureDialog, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiMeasureDialog',\r\n id: 'measure-dialog',\r\n modifier: null\r\n });\r\n },\r\n display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Format Measure',\r\n value: 'formatMeasure'\r\n }\r\n}\r\nconst addMeasureMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiInsertMeasures, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiMeasureDialog',\r\n id: 'insert-dialog',\r\n modifier: null\r\n });\r\n },\r\n display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Add Measures',\r\n value: 'addMeasures'\r\n }\r\n}\r\nconst endingsMeasureMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiEndingsDialog, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiEndingsDialog',\r\n id: 'endings-dialog',\r\n modifier: null\r\n });\r\n },\r\n display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Endings',\r\n value: 'endings'\r\n }\r\n}\r\nconst deleteSelectedMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.deleteMeasure();\r\n },\r\n display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Delete Selected Measures',\r\n value: 'deleteSelected'\r\n }\r\n}\r\nconst resetSystemBreaksMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n await menu.view.removeSystemBreaks();\r\n },\r\n display: (menu: SuiMenuBase) => {\r\n const selections = menu.tracker.getSelectedMeasures();\r\n for (let i = 0; i < selections.length; ++i) {\r\n const sel = selections[i];\r\n if (sel.measure.format.systemBreak) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: '',\r\n text: 'Reset system breaks',\r\n value: 'resetFormatting'\r\n }\r\n}\r\nconst resetFormattingMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n await menu.view.setMeasureFormat(new SmoMeasureFormat(SmoMeasureFormat.defaults));\r\n },\r\n display: (menu: SuiMenuBase) => {\r\n const selections = menu.tracker.getSelectedMeasures();\r\n for (let i = 0; i < selections.length; ++i) {\r\n const selection = selections[i];\r\n if (!selection.measure.format.isDefault) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: '',\r\n text: 'Reset formatting selection',\r\n value: 'resetFormatting'\r\n }\r\n}\r\nconst SuiMeasureMenuConfig: SuiConfiguredMenuOption[] = [\r\n addMeasureMenuOption, formatMeasureMenuOption, endingsMeasureMenuOption, deleteSelectedMenuOption, \r\n resetSystemBreaksMenuOption, resetFormattingMenuOption];","import { SvgBox } from '../../smo/data/common';\r\nimport { SuiTracker } from '../../render/sui/tracker';\r\nimport { SmoScore } from '../../smo/data/score';\r\nimport { CompleteNotifier } from '../common';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\nimport { BrowserEventSource } from '../eventSource';\r\nimport { UndoBuffer } from '../../smo/xform/undo';\r\nimport { SmoTranslator } from '../i18n/language';\r\ndeclare var $: any;\r\n/**\r\n * Data for a menu choice. 'value' indicates which options selected\r\n * @param icon - .icon class will be added to the choice\r\n * @param text - text to describe the choice\r\n * @param value - the value received by the menu loop\r\n * @param hotkey - optional key binding, if not supplied one is selected\r\n */\r\nexport interface MenuChoiceDefinition {\r\n icon: string,\r\n text: string,\r\n value: string,\r\n hotkey?: string\r\n}\r\n/**\r\n * Menu just array of choices\r\n * @param label - Not currently displayed\r\n * @param menuItems - list of choices\r\n */\r\nexport interface MenuDefinition {\r\n label: string,\r\n menuItems: MenuChoiceDefinition[]\r\n}\r\nexport interface MenuTranslation {\r\n ctor: string,\r\n label: string,\r\n menuItems: MenuChoiceDefinition[]\r\n}\r\n/**\r\n * All menus take the same options. Menu choices can alter the score\r\n * directly, or call dialogs or even other menus\r\n * @param ctor dialog constructor\r\n * @param position - menu position\r\n * @param view the MVVM object to change the score\r\n * @param score SmoScore, could also be read from the view\r\n * @param completeNotifier used to take over key/mouse control\r\n * @param closePromise resolved when the menu closes, used to syncronize with other modals\r\n * @param eventSource event source to register for additional events like mouseup\r\n * @param undoBuffer used to create undo\r\n*/\r\nexport interface SuiMenuParams {\r\n ctor: string,\r\n tracker: SuiTracker, \r\n score: SmoScore,\r\n completeNotifier: CompleteNotifier,\r\n closePromise: Promise | null\r\n view: SuiScoreViewOperations,\r\n eventSource: BrowserEventSource,\r\n undoBuffer: UndoBuffer,\r\n items?: MenuDefinition\r\n}\r\nexport abstract class SuiMenuBase {\r\n label: string;\r\n menuItems: MenuChoiceDefinition[];\r\n ctor: string;\r\n completeNotifier: CompleteNotifier;\r\n score: SmoScore;\r\n view: SuiScoreViewOperations;\r\n eventSource: BrowserEventSource;\r\n undoBuffer: UndoBuffer;\r\n focusIndex: number = -1;\r\n closePromise: Promise | null;\r\n tracker: SuiTracker;\r\n constructor(params: SuiMenuParams) {\r\n this.ctor = params.ctor;\r\n const definition: MenuDefinition = \r\n params.items ?? this.getDefinition();\r\n this.label = definition.label;\r\n this.menuItems = definition.menuItems;\r\n this.completeNotifier = params.completeNotifier;\r\n this.score = params.score;\r\n this.view = params.view;\r\n this.undoBuffer = params.undoBuffer;\r\n this.eventSource = params.eventSource;\r\n this.closePromise = params.closePromise;\r\n this.tracker = params.tracker;\r\n SmoTranslator.registerMenu(this.ctor);\r\n }\r\n abstract selection(ev: any): Promise;\r\n abstract getDefinition(): MenuDefinition;\r\n /**\r\n * Base class can override this, called before display and event binding to \r\n * add or remove options from the static list\r\n */\r\n preAttach() { }\r\n static printTranslate(_class: string): MenuTranslation {\r\n const xx: any = eval('Smo.' + _class);\r\n const items: MenuChoiceDefinition[] = xx.defaults.menuItems as MenuChoiceDefinition[];\r\n const rvItems: MenuChoiceDefinition[] = [];\r\n items.forEach((item) => {\r\n rvItems.push({ value: item.value, text: item.text, icon: '' });\r\n });\r\n return { ctor: _class, label: xx.defaults.label, menuItems: items };\r\n }\r\n\r\n complete() {\r\n $('body').trigger('menuDismiss');\r\n }\r\n // Most menus don't process their own events\r\n keydown() {}\r\n}\r\n\r\nexport type SuiMenuHandler = (menu: SuiMenuBase) => Promise;\r\nexport type SuiMenuShowOption = (menu: SuiMenuBase) => boolean;\r\nexport interface SuiConfiguredMenuOption {\r\n menuChoice: MenuChoiceDefinition,\r\n handler: SuiMenuHandler,\r\n display: SuiMenuShowOption\r\n}\r\n\r\nconst cancelOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.complete();\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n}\r\nexport class SuiConfiguredMenu extends SuiMenuBase {\r\n menuOptions: SuiConfiguredMenuOption[] = [];\r\n label: string = '';\r\n constructor(params: SuiMenuParams, label: string, options: SuiConfiguredMenuOption[]) {\r\n const cancel = options.find((op) => op.menuChoice.value === 'cancel');\r\n if (!cancel) {\r\n options.push(cancelOption);\r\n }\r\n super({ items: SuiConfiguredMenu.definitionFromOptions(label, options), ...params });\r\n this.menuOptions = options;\r\n }\r\n async selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n for (let i = 0; i < this.menuOptions.length; ++ i) {\r\n const option: SuiConfiguredMenuOption = this.menuOptions[i];\r\n if (option.menuChoice.value === text) {\r\n await option.handler(this);\r\n break;\r\n }\r\n }\r\n this.complete();\r\n }\r\n static definitionFromOptions(label: string, options: SuiConfiguredMenuOption[]) {\r\n const menuItems = options.map(oo => oo.menuChoice);\r\n return { label, menuItems };\r\n }\r\n getDefinition(): MenuDefinition {\r\n const choices: MenuChoiceDefinition[] = [];\r\n for (let i = 0; i < this.menuOptions.length; ++ i) {\r\n const option: SuiConfiguredMenuOption = this.menuOptions[i];\r\n choices.push(option.menuChoice);\r\n }\r\n return {\r\n label: this.label,\r\n menuItems: choices\r\n };\r\n }\r\n preAttach(): void {\r\n this.menuItems = [];\r\n this.menuOptions.forEach((option) => {\r\n if (option.display(this)) {\r\n this.menuItems.push(option.menuChoice);\r\n }\r\n });\r\n }\r\n}","import { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport {SuiArpeggioDialog } from '../dialogs/arpeggio';\r\nimport { SuiClefChangeDialog } from '../dialogs/clefChange';\r\nimport { SuiNoteHeadDialog } from '../dialogs/noteHead';\r\nimport { SuiOrnamentDialog } from '../dialogs/ornament';\r\nimport { SuiDurationDialog } from '../dialogs/durations';\r\nimport { SuiArticulationDialog } from '../dialogs/articulation';\r\nimport { SuiGraceNoteDialog } from '../dialogs/gracenote';\r\nimport { SuiMicrotoneDialog } from '../dialogs/microtones';\r\nimport { SuiPitchDialog } from '../dialogs/pitch';\r\nimport { SmoPedalMarking } from '../../smo/data/staffModifiers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition, SuiMenuHandler, SuiMenuShowOption, \r\n SuiConfiguredMenuOption, SuiConfiguredMenu } from './menu';\r\n import { addOrReplacePedalMarking } from './staffModifier';\r\ndeclare var $: any;\r\nexport class SuiNoteMenu extends SuiConfiguredMenu {\r\n constructor(params: SuiMenuParams) {\r\n super(params, 'Notes', SuiNoteMenuOptions);\r\n } \r\n}\r\n\r\nconst toggleCueMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n await menu.view.toggleCue();\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Toggle Cue',\r\n value: 'toggleCueMenuOption'\r\n }\r\n}\r\nconst arpeggioMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiArpeggioDialog, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiArpeggioDialog',\r\n id: 'insert-dialog',\r\n modifier: null\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Arpeggio',\r\n value: 'arpeggioDialog'\r\n }\r\n}\r\n\r\nconst noteHeadMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiNoteHeadDialog, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiNoteHeadDialog',\r\n id: 'notehead-dialog',\r\n modifier: null\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Head and Stem',\r\n value: 'noteHeadDialog'\r\n }\r\n}\r\nconst pitchMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiPitchDialog, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiPitchDialog',\r\n id: 'pitch-dialog',\r\n modifier: null\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Pitches',\r\n value: 'pitchDialog'\r\n }\r\n}\r\nconst graceNotesMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiGraceNoteDialog, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiNoteHeadDialog',\r\n id: 'insert-dialog',\r\n modifier: null\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Grace Notes',\r\n value: 'graceNotes'\r\n }\r\n}\r\nconst clefNoteDialogMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiClefChangeDialog, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiClefChangeDialog',\r\n id: 'insert-dialog',\r\n modifier: null\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Change Clef',\r\n value: 'clefNoteDialog'\r\n }\r\n}\r\nconst togglePedalRelease: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.tracker.selections.forEach(async (selection) => {\r\n const pms = selection.staff.getPedalMarkingsContaining(selection.selector);\r\n const selectorToAdd = selection.selector;\r\n let shouldAdd = true;\r\n \r\n pms.forEach(async (mod) => {\r\n const pm = mod as SmoPedalMarking;\r\n const releaseAr = [];\r\n pm.releases.forEach((rr) => {\r\n if (SmoSelector.eq(rr, selectorToAdd)) {\r\n shouldAdd = false;\r\n } else if (SmoSelector.gt(mod.startSelector, selectorToAdd) && SmoSelector.lt(mod.endSelector, selectorToAdd)) {\r\n releaseAr.push(rr);\r\n }\r\n });\r\n if (shouldAdd) {\r\n releaseAr.push(selectorToAdd);\r\n }\r\n pm.releases = releaseAr.sort((a, b) => SmoSelector.gt(a, b) ? 1 : -1);\r\n await addOrReplacePedalMarking(menu.view, pm);\r\n });\r\n });\r\n }, display: ((menu: SuiMenuBase) => {\r\n let show = false;\r\n menu.tracker.selections.forEach((selection) => {\r\n const pms = selection.staff.getPedalMarkingsContaining(selection.selector);\r\n if (pms.length) {\r\n show = true;\r\n }\r\n });\r\n return show;\r\n }),\r\n menuChoice: {\r\n icon: '',\r\n text: 'Toggle Pedal Release',\r\n value: 'togglePedalRelease'\r\n }\r\n}\r\nconst ornamentNoteDialogMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiOrnamentDialog, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiOrnamentDialog',\r\n id: 'ornament-dialog',\r\n modifier: null\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Ornaments',\r\n value: 'ornamentDialog'\r\n }\r\n}\r\nconst durationDialogMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiDurationDialog, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiDurationDialog',\r\n id: 'duration-dialog',\r\n modifier: null\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Durations',\r\n value: 'durationDialog'\r\n }\r\n}\r\nconst articulationNoteDialogMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiArticulationDialog, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiArticulationDialog',\r\n id: 'ornament-dialog',\r\n modifier: null\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Articulations',\r\n value: 'articulationDialog'\r\n }\r\n}\r\nconst microtoneNoteDialogMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiMicrotoneDialog, {\r\n view: menu.view,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: menu.closePromise,\r\n eventSource: menu.eventSource,\r\n tracker: menu.tracker,\r\n ctor: 'SuiMicrotoneDialog',\r\n id: 'microtone-dialog',\r\n modifier: null\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Microtones',\r\n value: 'microtoneDialog'\r\n }\r\n}\r\nconst SuiNoteMenuOptions: SuiConfiguredMenuOption[] = [\r\n toggleCueMenuOption, arpeggioMenuOption, clefNoteDialogMenuOption, \r\n graceNotesMenuOption,\r\n noteHeadMenuOption, ornamentNoteDialogMenuOption,\r\n articulationNoteDialogMenuOption, \r\n microtoneNoteDialogMenuOption, togglePedalRelease, \r\n durationDialogMenuOption, pitchMenuOption\r\n];","import { SuiMenuBase, SuiMenuParams, MenuChoiceDefinition, MenuDefinition } from './menu';\r\nimport { SmoPartInfo } from '../../smo/data/partInfo';\r\ndeclare var $: any;\r\n\r\nexport class SuiPartSelectionMenu extends SuiMenuBase {\r\n partMap: { keys: number[], partMap: Record } = { keys: [], partMap: {} };\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Parts',\r\n menuItems: [\r\n {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }\r\n ]\r\n };\r\n getDefinition() {\r\n return SuiPartSelectionMenu.defaults;\r\n }\r\n selectPart(val: number) {\r\n if (val < 0) {\r\n this.view.viewAll();\r\n this.complete();\r\n return;\r\n }\r\n const partInfo = this.partMap.partMap[val];\r\n this.view.exposePart(this.view.storeScore.staves[partInfo.associatedStaff]);\r\n this.complete();\r\n } \r\n preAttach() {\r\n const defs: MenuChoiceDefinition[] = [];\r\n this.partMap = this.view.getPartMap();\r\n if (this.view.score.staves.length < this.view.storeScore.staves.length) {\r\n defs.push({\r\n icon: '',\r\n text: 'View All',\r\n value: '-1'\r\n });\r\n }\r\n this.partMap.keys.forEach((key) => {\r\n defs.push({\r\n icon: '',\r\n text: this.partMap.partMap[key].partName,\r\n value: key.toString()\r\n });\r\n });\r\n defs.push({\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n });\r\n this.menuItems = defs;\r\n }\r\n\r\n async selection(ev: any) {\r\n const op: string = $(ev.currentTarget).attr('data-value');\r\n const choice = parseInt(op);\r\n if (isNaN(choice)) {\r\n this.complete(); // cancel\r\n }\r\n this.selectPart(choice);\r\n }\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuChoiceDefinition, MenuDefinition, \r\n SuiConfiguredMenuOption, SuiConfiguredMenu } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiScoreViewDialog } from '../dialogs/scoreView';\r\nimport { SuiInstrumentDialog } from '../dialogs/instrument';\r\nimport { SuiPartInfoDialog } from '../dialogs/partInfo';\r\nimport { SuiPageLayoutDialog } from '../dialogs/pageLayout';\r\nimport { SuiNewPartDialog } from '../dialogs/newPart';\r\nimport { SuiTabStaveDialog } from '../dialogs/tabStave';\r\ndeclare var $: any;\r\n\r\nexport const createNotePartMenuOption: SuiConfiguredMenuOption = {\r\n menuChoice: {\r\n icon: '',\r\n text: 'Create New Part/Stave',\r\n value: 'createPart'\r\n }, display: () => true,\r\n handler: async(menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiNewPartDialog,\r\n {\r\n completeNotifier: menu.completeNotifier!,\r\n view: menu.view,\r\n eventSource: menu.eventSource,\r\n id: 'newPartDialog',\r\n ctor: 'SuiNewPartDialog',\r\n tracker: menu.view.tracker,\r\n modifier: menu,\r\n startPromise: menu.closePromise\r\n });\r\n }\r\n}\r\nexport const removePartMenuOption: SuiConfiguredMenuOption = {\r\n menuChoice: { \r\n icon: 'cancel-circle',\r\n text: 'Remove Selected Parts/Staves',\r\n value: 'removePart'\r\n }, display: () => true,\r\n handler: async (menu: SuiMenuBase) => {\r\n await menu.view.removeStaff();\r\n }\r\n}\r\nexport const partPropertiesMenuOption: SuiConfiguredMenuOption = {\r\n menuChoice: { \r\n icon: '',\r\n text: 'Part Properties',\r\n value: 'editPart'\r\n }, display: (menu: SuiMenuBase) => menu.view.isPartExposed(),\r\n handler: async (menu: SuiMenuBase) => {\r\n const selection = menu.view.tracker.selections[0];\r\n if (menu.view.score.staves.length !== selection.staff.partInfo.stavesAfter + selection.staff.partInfo.stavesBefore + 1) {\r\n menu.view.exposePart(selection.staff);\r\n }\r\n await menu.view.renderPromise();\r\n createAndDisplayDialog(SuiPartInfoDialog,\r\n {\r\n completeNotifier: menu.completeNotifier!,\r\n view: menu.view,\r\n eventSource: menu.eventSource,\r\n id: 'editPart',\r\n ctor: 'SuiPartInfoDialog',\r\n tracker: menu.view.tracker,\r\n modifier: null,\r\n startPromise: menu.closePromise\r\n }\r\n );\r\n }\r\n}\r\nexport const pageLayoutMenuOption: SuiConfiguredMenuOption = {\r\n menuChoice: {\r\n icon: '',\r\n text: 'Page Layout',\r\n value: 'pageLayout'\r\n }, display: (menu: SuiMenuBase) => menu.view.isPartExposed(),\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiPageLayoutDialog,\r\n {\r\n completeNotifier: menu.completeNotifier!,\r\n view: menu.view,\r\n eventSource: menu.eventSource,\r\n id: 'layoutDialog',\r\n ctor: 'SuiPageLayoutDialog',\r\n tracker: menu.view.tracker,\r\n modifier: null,\r\n startPromise: menu.closePromise\r\n });\r\n }\r\n}\r\n\r\nexport const viewPartialScoreMenuOption: SuiConfiguredMenuOption = {\r\n menuChoice: {\r\n icon: '',\r\n text: 'View Partial Score',\r\n value: 'view'\r\n }, display: (menu: SuiMenuBase) => !menu.view.isPartExposed(),\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiScoreViewDialog,\r\n {\r\n completeNotifier: menu.completeNotifier!,\r\n view: menu.view,\r\n eventSource: menu.eventSource,\r\n id: 'scoreViewDialog',\r\n ctor: 'SuiScoreViewDialog',\r\n tracker: menu.view.tracker,\r\n modifier: null,\r\n startPromise: menu.closePromise\r\n });\r\n }\r\n}\r\nexport const viewFullScoreMenuOption: SuiConfiguredMenuOption = {\r\n menuChoice: {\r\n icon: '',\r\n text: 'View All',\r\n value: 'viewAll'\r\n }, display: (menu: SuiMenuBase) => menu.view.score.staves.length < menu.view.storeScore.staves.length,\r\n handler: async (menu: SuiMenuBase) => {\r\n await menu.view.viewAll();\r\n }\r\n}\r\n\r\nexport const editInstrumentMenuOption: SuiConfiguredMenuOption = {\r\n menuChoice: {\r\n icon: '',\r\n text: 'Instrument Properties',\r\n value: 'editInstrument'\r\n }, display: (menu: SuiMenuBase) => true,\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiInstrumentDialog,\r\n {\r\n completeNotifier: menu.completeNotifier!,\r\n view: menu.view,\r\n eventSource: menu.eventSource,\r\n id: 'instrumentModal',\r\n ctor: 'SuiInstrumentDialog',\r\n tracker: menu.view.tracker,\r\n modifier: menu,\r\n startPromise: menu.closePromise\r\n });\r\n }\r\n}\r\nexport const tabStaveMenuOption: SuiConfiguredMenuOption = {\r\n menuChoice: {\r\n icon: '',\r\n text: 'Guitar Tablature',\r\n value: 'tabStave'\r\n }, display: (menu: SuiMenuBase) => true,\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiTabStaveDialog, {\r\n ctor: 'SuiTabStaveDialog',\r\n id: 'tabStaveDialog',\r\n tracker: menu.view.tracker,\r\n completeNotifier: menu.completeNotifier,\r\n startPromise: null,\r\n view: menu.view,\r\n eventSource: menu.eventSource\r\n });\r\n }\r\n}\r\nexport const moveUpMenuOption: SuiConfiguredMenuOption = {\r\n menuChoice: {\r\n icon: 'icon-smo icon-arrow-up',\r\n text: 'Move Part Up',\r\n value: 'partUp'\r\n }, display: (menu: SuiMenuBase) => {\r\n return menu.view.score.staves.length > 1;\r\n },\r\n handler: async (menu: SuiMenuBase) => {\r\n await menu.view.moveStaffUpDown(-1);\r\n }\r\n}\r\nexport const moveDownMenuOption: SuiConfiguredMenuOption = {\r\n menuChoice: {\r\n icon: 'icon-smo icon-arrow-up',\r\n text: 'Move Part Down',\r\n value: 'partDown'\r\n }, display: (menu: SuiMenuBase) => {\r\n return menu.view.score.staves.length > 1;\r\n },\r\n handler: async (menu: SuiMenuBase) => {\r\n await menu.view.moveStaffUpDown(1);\r\n }\r\n}\r\nexport const SuiPartMenuOptions: SuiConfiguredMenuOption[] = [\r\n createNotePartMenuOption, removePartMenuOption, partPropertiesMenuOption, pageLayoutMenuOption, viewPartialScoreMenuOption, \r\n editInstrumentMenuOption, viewFullScoreMenuOption, tabStaveMenuOption, moveUpMenuOption, moveDownMenuOption\r\n];\r\n\r\nexport class SuiPartMenu extends SuiConfiguredMenu {\r\n constructor(params: SuiMenuParams) {\r\n super(params, 'Parts', SuiPartMenuOptions);\r\n } \r\n}\r\n","import { MenuDefinition, MenuChoiceDefinition, SuiMenuBase, SuiMenuParams } from './menu';\r\nimport { SuiScorePreferencesDialog } from '../dialogs/preferences';\r\nimport { SuiScoreIdentificationDialog } from '../dialogs/scoreId';\r\nimport { SuiPageLayoutDialog } from '../dialogs/pageLayout';\r\nimport { SuiScoreFontDialog } from '../dialogs/fonts';\r\nimport { SuiGlobalLayoutDialog } from '../dialogs/globalLayout';\r\nimport { SuiTransposeScoreDialog } from '../dialogs/transposeScore';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiStaffGroupDialog } from '../dialogs/staffGroup';\r\nimport { SuiAudioSettingsDialog } from '../dialogs/audioSettings';\r\n\r\ndeclare var $: any;\r\nexport class SuiScoreMenu extends SuiMenuBase {\r\n static defaults: MenuDefinition = {\r\n label: 'Score Settings',\r\n menuItems: [{\r\n icon: '',\r\n text: 'Smoosic Preferences',\r\n value: 'preferences'\r\n }, {\r\n icon: '',\r\n text: 'View All',\r\n value: 'viewAll'\r\n }, {\r\n icon: '',\r\n text: 'Global Layout',\r\n value: 'globalLayout'\r\n }, {\r\n icon: '',\r\n text: 'Page Layout',\r\n value: 'pageLayout'\r\n }, {\r\n icon: '',\r\n text: 'Audio Settings',\r\n value: 'audioSettings'\r\n }, {\r\n icon: '',\r\n text: 'System Groups',\r\n value: 'staffGroups'\r\n }, {\r\n icon: '',\r\n text: 'Score Fonts',\r\n value: 'fonts'\r\n }, {\r\n icon: '',\r\n text: 'Score Info',\r\n value: 'identification'\r\n }, {\r\n icon: '',\r\n text: 'Transpose Score',\r\n value: 'transposeScore'\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiScoreMenu.defaults;\r\n }\r\n preAttach() {\r\n const defs: MenuChoiceDefinition[] = [];\r\n this.menuItems.forEach((item) => {\r\n // show these options no matter what\r\n if (['fonts', 'cancel', 'identification', 'preferences', 'audioSettings', 'transposeScore'].findIndex((x) => x === item.value) >= 0) {\r\n defs.push(item);\r\n } else if (item.value === 'pageLayout' || item.value === 'globalLayout' || item.value === 'staffGroups') {\r\n if (this.view.isPartExposed() === false) {\r\n // only show the page layout in score menu if we are in score mode\r\n defs.push(item);\r\n } \r\n } else if (item.value === 'viewAll') {\r\n // Only show 'view all' if we are not viewing all\r\n if (this.score.staves.length < this.view.storeScore.staves.length) {\r\n defs.push(item);\r\n }\r\n }\r\n });\r\n this.menuItems = defs;\r\n }\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n execStaffGroups() {\r\n createAndDisplayDialog(SuiStaffGroupDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'staffGroups',\r\n ctor: 'SuiStaffGroupDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n }\r\n );\r\n }\r\n execScoreId() {\r\n SuiScoreIdentificationDialog.createAndDisplay(\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'scoreIdDialog',\r\n ctor: 'SuiScoreIdentificationDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execPageLayout() {\r\n createAndDisplayDialog(SuiPageLayoutDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'layoutDialog',\r\n ctor: 'SuiPageLayoutDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execFonts() {\r\n SuiScoreFontDialog.createAndDisplay(\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'fontDialog',\r\n ctor: 'SuiScoreFontDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execGlobalLayout() {\r\n createAndDisplayDialog(SuiGlobalLayoutDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'globalLayout',\r\n ctor: 'SuiGlobalLayoutDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execPreferences() {\r\n createAndDisplayDialog(SuiScorePreferencesDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'preferences',\r\n ctor: 'SuiScorePreferencesDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execAudioSettings() {\r\n createAndDisplayDialog(SuiAudioSettingsDialog, \r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'audioSettings',\r\n ctor: 'SuiAudioSettingsDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n execTransposeScore() {\r\n createAndDisplayDialog(SuiTransposeScoreDialog,\r\n {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'scoreIdDialog',\r\n ctor: 'SuiTransposeScoreDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n }\r\n async selection(ev: any) {\r\n const text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'pageLayout') {\r\n this.execPageLayout();\r\n } else if (text === 'staffGroups') {\r\n this.execStaffGroups();\r\n } else if (text === 'preferences') {\r\n this.execPreferences();\r\n } else if (text === 'fonts') {\r\n this.execFonts();\r\n } else if (text === 'globalLayout') {\r\n this.execGlobalLayout();\r\n } else if (text === 'identification') {\r\n this.execScoreId();\r\n } else if (text === 'viewAll') {\r\n this.view.viewAll();\r\n } else if (text === 'audioSettings') {\r\n this.execAudioSettings();\r\n } else if (text === 'transposeScore') {\r\n this.execTransposeScore();\r\n }\r\n this.complete();\r\n }\r\n keydown() { }\r\n}","import { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { SmoPedalMarking } from '../../smo/data/staffModifiers';\r\nimport { SmoSelector } from '../../smo/xform/selections';\r\nimport { SuiScoreViewOperations } from '../../render/sui/scoreViewOperations';\r\n\r\ndeclare var $: any;\r\n\r\nexport async function addOrReplacePedalMarking(view: SuiScoreViewOperations, obj: SmoPedalMarking) {\r\n await view.addOrReplaceStaffModifier((score, fromSelection, toSelection) => {\r\n const modifier = new SmoPedalMarking(obj.serialize());\r\n modifier.startSelector = fromSelection.selector;\r\n modifier.endSelector = toSelection.selector;\r\n score.staves[modifier.startSelector.staff].addStaffModifier(modifier);\r\n }, obj);\r\n}\r\nexport class SuiStaffModifierMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Lines',\r\n menuItems: [{\r\n icon: 'cresc',\r\n text: 'Cresc. Hairpin',\r\n value: 'crescendo'\r\n }, {\r\n icon: 'decresc',\r\n text: 'Dim. Hairpin',\r\n value: 'decrescendo'\r\n }, {\r\n icon: 'slur',\r\n text: 'Slur',\r\n value: 'slur'\r\n }, {\r\n icon: 'slur',\r\n text: 'Tie',\r\n value: 'tie'\r\n }, {\r\n icon: 'pedal',\r\n text: 'Pedal Marking',\r\n value: 'pedalMarking'\r\n }, {\r\n icon: 'ending',\r\n text: 'nth ending',\r\n value: 'ending'\r\n }, {\r\n icon: '',\r\n text: 'Dim. Bracket',\r\n value: 'dimenuendo'\r\n }, {\r\n icon: '',\r\n text: 'Cresc. Bracket',\r\n value: 'crescendoBracket'\r\n }, {\r\n icon: '',\r\n text: 'Accelerando',\r\n value: 'accel'\r\n }, {\r\n icon: '',\r\n text: 'Ritard',\r\n value: 'ritard'\r\n }, {\r\n icon: 'slur',\r\n text: 'Reset slurs',\r\n value: 'resetSlurs'\r\n },{\r\n icon: 'icon-ending',\r\n text: 'Repeate Endings',\r\n value: 'endings'\r\n },\r\n {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiStaffModifierMenu.defaults;\r\n }\r\n async selection(ev: any) {\r\n var op = $(ev.currentTarget).attr('data-value');\r\n if (op === 'ending') {\r\n this.view.addEnding();\r\n } else if (op === 'slur') {\r\n this.view.addSlur();\r\n } else if (op === 'tie') {\r\n this.view.tie();\r\n } else if (op === 'accel') {\r\n this.view.accelerando();\r\n } else if (op === 'dimenuendo') {\r\n this.view.dimenuendo();\r\n } else if (op === 'ritard') {\r\n this.view.ritard();\r\n } else if (op === 'crescendoBracket') {\r\n this.view.crescendoBracket();\r\n } else if (op === 'endings') {\r\n this.view.addEnding();\r\n } else if (op === 'pedalMarking') {\r\n const ft = this.tracker.getExtremeSelection(-1);\r\n const tt = this.tracker.getExtremeSelection(1);\r\n const defaults = SmoPedalMarking.defaults;\r\n defaults.startSelector = ft.selector;\r\n defaults.endSelector = tt.selector;\r\n const pedalMarking = new SmoPedalMarking(defaults);\r\n const overlaps = this.score.staves[pedalMarking.startSelector.staff].findSimlarOverlap(pedalMarking);\r\n if (overlaps.length) {\r\n const minSelector = SmoSelector.order(overlaps[0].startSelector, pedalMarking.startSelector)[0];\r\n const maxSelector = SmoSelector.order(overlaps[0].endSelector, pedalMarking.endSelector)[1];\r\n pedalMarking.startSelector = minSelector;\r\n pedalMarking.endSelector = maxSelector;\r\n await this.view.removeStaffModifier(overlaps[0]);\r\n }\r\n await addOrReplacePedalMarking(this.view, pedalMarking);\r\n } else if (op === 'crescendo') {\r\n this.view.crescendo();\r\n } else if (op === 'decrescendo') {\r\n this.view.decrescendo();\r\n } else if (op === 'resetSlurs') {\r\n const self = this;\r\n this.view.refreshViewport().then(() => {\r\n self.complete();\r\n });\r\n return;\r\n }\r\n // else cancel...\r\n this.complete();\r\n }\r\n keydown() {\r\n }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition, SuiMenuHandler, SuiMenuShowOption, \r\n SuiConfiguredMenuOption, SuiConfiguredMenu } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiTextBlockDialog } from '../dialogs/textBlock';\r\nimport { SmoDynamicText } from '../../smo/data/noteModifiers';\r\nimport { SuiChordChangeDialog } from '../dialogs/chordChange';\r\nimport { SuiLyricDialog } from '../dialogs/lyric';\r\nimport { SuiDynamicModifierDialog } from '../dialogs/dynamics';\r\n\r\ndeclare var $: any;\r\nexport class SuiTextMenu extends SuiConfiguredMenu {\r\n constructor(params: SuiMenuParams) {\r\n super(params, 'Notes', SuiTextMenuOptions);\r\n } \r\n}\r\n\r\nconst rehearsalLetterDialogMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.toggleRehearsalMark();\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Rehearsal Letter',\r\n value: 'rehearsalLetter'\r\n }\r\n}\r\nconst textBlockDialogMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n createAndDisplayDialog(SuiTextBlockDialog, {\r\n completeNotifier: menu.completeNotifier!,\r\n view: menu.view,\r\n eventSource: menu.eventSource,\r\n id: 'textDialog',\r\n ctor: 'SuiTextBlockDialog',\r\n tracker: menu.view.tracker,\r\n startPromise: menu.closePromise,\r\n modifier: null\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Score Text',\r\n value: 'textBlock'\r\n }\r\n}\r\nconst chordChangeDialogMenuOption: SuiConfiguredMenuOption = { \r\n handler: async (menu: SuiMenuBase) => {\r\n const sel = menu.view.tracker.selections[0];\r\n const note = sel.note;\r\n if (!note) {\r\n return;\r\n }\r\n const lyrics = note.getChords();\r\n const lyric = lyrics.length > 0 ? null : lyrics[0];\r\n createAndDisplayDialog(SuiChordChangeDialog,\r\n {\r\n completeNotifier: menu.completeNotifier!,\r\n view: menu.view,\r\n eventSource: menu.eventSource,\r\n id: 'chordDialog',\r\n ctor: 'SuiChordChangeDialog',\r\n tracker: menu.view.tracker,\r\n startPromise: menu.closePromise,\r\n modifier: lyric\r\n }\r\n );\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Chord Changes',\r\n value: 'chordChanges'\r\n }\r\n}\r\nconst lyricsDialogMenuOption: SuiConfiguredMenuOption = { \r\n handler: async (menu: SuiMenuBase) => {\r\n const sel = menu.view.tracker.selections[0];\r\n const note = sel.note;\r\n if (!note) {\r\n return;\r\n }\r\n const lyrics = note.getTrueLyrics();\r\n const lyric = lyrics.length > 0 ? lyrics[0] : null;\r\n\r\n createAndDisplayDialog(SuiLyricDialog, \r\n {\r\n completeNotifier: menu.completeNotifier!,\r\n view: menu.view,\r\n eventSource: menu.eventSource,\r\n id: 'lyricDialog',\r\n ctor: 'SuiLyricDialog',\r\n tracker: menu.view.tracker,\r\n startPromise: menu.closePromise,\r\n modifier: lyric\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Lyrics',\r\n value: 'lyricMenu'\r\n }\r\n}\r\nconst dynamicsDialogMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n const sel = menu.view.tracker.selections[0];\r\n let modifier = null;\r\n if (sel.note) {\r\n const dynamics = sel.note.getModifiers('SmoDynamicText');\r\n if (dynamics.length) {\r\n modifier = dynamics[0];\r\n } else {\r\n const params = SmoDynamicText.defaults;\r\n modifier = new SmoDynamicText(params);\r\n menu.view.addDynamic(sel, modifier);\r\n }\r\n }\r\n createAndDisplayDialog(SuiDynamicModifierDialog, {\r\n completeNotifier: menu.completeNotifier!,\r\n view: menu.view,\r\n eventSource: menu.eventSource,\r\n id: 'dynamicsDialog',\r\n ctor: 'SuiDynamicModifierDialog',\r\n tracker: menu.view.tracker,\r\n startPromise: menu.closePromise,\r\n modifier\r\n });\r\n }, display: (menu: SuiMenuBase) => true,\r\n menuChoice: {\r\n icon: '',\r\n text: 'Dynamics',\r\n value: 'dynamicsMenu'\r\n }\r\n}\r\nconst SuiTextMenuOptions: SuiConfiguredMenuOption[] = \r\n[dynamicsDialogMenuOption, textBlockDialogMenuOption, \r\n chordChangeDialogMenuOption, lyricsDialogMenuOption, rehearsalLetterDialogMenuOption];\r\n\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { SuiMenuBase, SuiMenuParams, MenuDefinition } from './menu';\r\nimport { SmoMeasure } from '../../smo/data/measure';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\nimport { SuiTimeSignatureDialog } from '../dialogs/timeSignature';\r\n\r\ndeclare var $: any;\r\n\r\nexport class SuiTimeSignatureMenu extends SuiMenuBase {\r\n constructor(params: SuiMenuParams) {\r\n super(params);\r\n }\r\n static defaults: MenuDefinition = {\r\n label: 'Time Sig',\r\n menuItems: [{\r\n icon: 'sixeight',\r\n text: '6/8',\r\n value: '6/8',\r\n }, {\r\n icon: 'fourfour',\r\n text: '4/4',\r\n value: '4/4',\r\n }, {\r\n icon: 'threefour',\r\n text: '3/4',\r\n value: '3/4',\r\n }, {\r\n icon: 'twofour',\r\n text: '2/4',\r\n value: '2/4',\r\n }, {\r\n icon: 'twelveeight',\r\n text: '12/8',\r\n value: '12/8',\r\n }, {\r\n icon: 'seveneight',\r\n text: '7/8',\r\n value: '7/8',\r\n }, {\r\n icon: 'fiveeight',\r\n text: '5/8',\r\n value: '5/8',\r\n }, {\r\n icon: '',\r\n text: 'Other',\r\n value: 'TimeSigOther',\r\n }, {\r\n icon: '',\r\n text: 'Cancel',\r\n value: 'cancel'\r\n }]\r\n };\r\n\r\n getDefinition() {\r\n return SuiTimeSignatureMenu.defaults;\r\n }\r\n async selection(ev: any) {\r\n var text = $(ev.currentTarget).attr('data-value');\r\n if (text === 'TimeSigOther') {\r\n createAndDisplayDialog(SuiTimeSignatureDialog, {\r\n completeNotifier: this.completeNotifier!,\r\n view: this.view,\r\n eventSource: this.eventSource,\r\n id: 'staffGroups',\r\n ctor: 'SuiStaffGroupDialog',\r\n tracker: this.view.tracker,\r\n modifier: null,\r\n startPromise: this.closePromise\r\n });\r\n this.complete();\r\n return;\r\n }\r\n await this.view.setTimeSignature(SmoMeasure.convertLegacyTimeSignature(text));\r\n this.complete();\r\n }\r\n\r\n keydown() { }\r\n}\r\n","import { SuiMenuBase, SuiMenuParams, MenuDefinition, SuiMenuHandler, SuiMenuShowOption, \r\n SuiConfiguredMenuOption, SuiConfiguredMenu } from './menu';\r\nimport { createAndDisplayDialog } from '../dialogs/dialog';\r\n\r\ndeclare var $: any;\r\nexport class SuiVoiceMenu extends SuiConfiguredMenu {\r\n constructor(params: SuiMenuParams) {\r\n super(params, 'Voices', SuiVoiceMenuOptions);\r\n } \r\n}\r\n\r\nconst selectVoiceOneMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.populateVoice(0);\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) {\r\n const mm = menu.view.tracker.selections[i].measure;\r\n if (mm.voices.length > 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: '',\r\n text: 'Voice 1',\r\n value: 'voiceOne'\r\n }\r\n}\r\nconst selectVoiceTwoMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.populateVoice(1);\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) {\r\n const mm = menu.view.tracker.selections[i].measure;\r\n if (mm.voices.length < 4) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: '',\r\n text: 'Voice 2',\r\n value: 'voiceTwo'\r\n }\r\n}\r\nconst selectVoiceThreeMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.populateVoice(2);\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) {\r\n const mm = menu.view.tracker.selections[i].measure;\r\n if (mm.voices.length < 4 && mm.voices.length > 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: '',\r\n text: 'Voice 3',\r\n value: 'voiceThree'\r\n }\r\n}\r\nconst selectVoiceFourMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.populateVoice(3);\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) {\r\n const mm = menu.view.tracker.selections[i].measure;\r\n if (mm.voices.length < 4 && mm.voices.length > 2) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: '',\r\n text: 'Voice 4',\r\n value: 'voiceFour'\r\n }\r\n}\r\nconst removeVoiceMenuOption: SuiConfiguredMenuOption = {\r\n handler: async (menu: SuiMenuBase) => {\r\n menu.view.depopulateVoice();\r\n }, display: (menu: SuiMenuBase) => {\r\n for (let i = 0; i < menu.view.tracker.selections.length; ++i) {\r\n const mm = menu.view.tracker.selections[i].measure;\r\n if (mm.activeVoice > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n menuChoice: {\r\n icon: '',\r\n text: 'Remove Voice',\r\n value: 'removeVoice'\r\n }\r\n}\r\nconst SuiVoiceMenuOptions: SuiConfiguredMenuOption[] = [\r\n selectVoiceOneMenuOption, selectVoiceTwoMenuOption, selectVoiceThreeMenuOption, selectVoiceFourMenuOption,\r\n removeVoiceMenuOption\r\n];\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\nimport { buildDom, createTopDomContainer, draggable } from \"../common/htmlHelpers\";\r\nimport { KeyEvent } from '../smo/data/common';\r\n\r\nexport interface SuiKbRow {\r\n row: string, shifted: string;\r\n};\r\nexport interface SuiKbKey {\r\n icon: string, text: string, shifted: string, classes: string, dataKey: string\r\n};\r\ndeclare var $: any;\r\nexport class Qwerty {\r\n static _shiftTime: number = 0;\r\n static displayed: boolean = false;\r\n static created: boolean = false;\r\n static get navigationElements() {\r\n const kbRows: SuiKbRow[] =\r\n [\r\n { row: '1234567890-=',shifted:'!@#$%^&*()_+'},\r\n { row: 'QWERTYUIOP[]',shifted:'QWERTYUIOP{}'},\r\n { row:\"ASDFGHJKL;'\", shifted:'ASDFGHJKL:\"'},\r\n { row:'ZXCVBNM,./',shifted:'ZXCVBNM<>?'}\r\n ];\r\n const arrows: SuiKbKey[] = [\r\n {icon: 'icon-arrow-left',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowLeft'},\r\n {icon: 'icon-arrow-right',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowRight'},\r\n {icon:'',text:'Space',classes:'wideKey',shifted:'',dataKey:'Space'},\r\n {icon: 'icon-arrow-up',text:'', shifted:'',classes:'helpKey',dataKey:'ArrowUp'},\r\n {icon: 'icon-arrow-down' ,text:'', shifted:'',classes:'helpKey',dataKey:'ArrowDown'},\r\n {icon: '' ,text:'Ins', shifted:'',classes:'helpKey',dataKey:'Insert'},\r\n {icon: '' ,text:'Del', shifted:'',classes:'helpKey',dataKey:'Delete'},\r\n {icon: '' ,text:'Enter', shifted:'',classes:'wideKey',dataKey:'Enter'}\r\n ];\r\n let keyRows: Record = {};\r\n const labels: string[] = ['topNumbers','keys1','keys2','keys3','arrows'];\r\n let j = 0;\r\n\r\n kbRows.forEach((kbRow) => {\r\n var str = kbRow.row;\r\n var shifted = kbRow.shifted;\r\n var keys: SuiKbKey[] = [];\r\n for (var i = 0;i < str.length;++i) {\r\n if (j === 2 && i === 0) {\r\n keys.push({icon:'',text:'Shift',shifted: '', classes:'wideKey',dataKey:'shift'});\r\n }\r\n if (j === 3 && i === 0) {\r\n keys.push({icon:'', text:'Ctrl',shifted: '', classes:'wideKey', dataKey:'ctrl'});\r\n keys.push({icon:'', text:'Alt', shifted: '',classes:'helpKey', dataKey:'alt'});\r\n }\r\n keys.push({icon:'', text:str[i], shifted:shifted[i], classes:'helpKey', dataKey:str[i]});\r\n }\r\n keyRows[labels[j]] = keys;\r\n j += 1;\r\n });\r\n keyRows[labels[j]] = arrows;\r\n return keyRows;\r\n }\r\n static flashShift() {\r\n if (Qwerty._shiftTime) {\r\n Qwerty._shiftTime = 0;\r\n setTimeout(function() {\r\n Qwerty.flashShift();\r\n }, 1000);\r\n } else {\r\n $('.kb-float').removeClass('shifted');\r\n }\r\n }\r\n\r\n static displayForDuration() {\r\n Qwerty.displayAll();\r\n $('#row-0').hide();\r\n $('#row-1').hide();\r\n $('#row-4').hide();\r\n }\r\n\r\n static displayForTuplet() {\r\n Qwerty.displayAll();\r\n $('#row-1').hide();\r\n $('#row-2').hide();\r\n }\r\n\r\n static displayForNav() {\r\n Qwerty.displayAll();\r\n $('#row-0').hide();\r\n $('#row-1').hide();\r\n }\r\n\r\n static displayAll() {\r\n $('#row-0').show();\r\n $('#row-1').show();\r\n $('#row-2').show();\r\n $('#row-3').show();\r\n $('#row-4').show();\r\n }\r\n\r\n static _flashButton(key: string) {\r\n var e = $('[data-key=\"'+key+'\"]');\r\n if (!e.length) {\r\n e = $('[data-shift=\"'+key+'\"]');\r\n }\r\n if (e.length) {\r\n $(e).removeClass('transition-button');\r\n $(e).addClass('reverse-button');\r\n setTimeout(function() {\r\n $(e).removeClass('reverse-button');\r\n $(e).addClass('transition-button');\r\n },750);\r\n }\r\n }\r\n static get editingKeys() {\r\n return ['ArrowLeft','ArrowRight','ArrowUp','ArrowDown','Insert','Delete'];\r\n }\r\n static handleKeyEvent(evdata: KeyEvent) {\r\n if (Qwerty.editingKeys.indexOf(evdata.code) >= 0) {\r\n Qwerty._flashButton(evdata.code);\r\n } else if (evdata.key.length === 1\r\n && evdata.key.charCodeAt(0) > 32\r\n && evdata.key.charCodeAt(0) < 127) {\r\n Qwerty._flashButton(evdata.key.toUpperCase());\r\n }\r\n if (evdata.code === 'Space') {\r\n Qwerty._flashButton('Space');\r\n }\r\n if (evdata.code === 'Enter') {\r\n Qwerty._flashButton('Enter');\r\n }\r\n if (evdata.ctrlKey) {\r\n Qwerty._flashButton('ctrl');\r\n }\r\n if (evdata.shiftKey) {\r\n Qwerty._flashButton('shift');\r\n $('.kb-float').addClass('shifted');\r\n Qwerty._shiftTime = 1;\r\n Qwerty.flashShift();\r\n }\r\n if (evdata.altKey) {\r\n Qwerty._flashButton('alt');\r\n }\r\n }\r\n\r\n static _kbButton(buttons: SuiKbKey[]) {\r\n var b = buildDom;\r\n var r = b('span').classes('keyContainer');\r\n buttons.forEach((button) => {\r\n var text = button.text;\r\n var shiftedText = button.shifted ? button.shifted : text;\r\n r.append(b('span').classes(button.icon + ' ' + button.classes)\r\n .attr('data-key',button.dataKey).attr('data-shift',shiftedText)\r\n .append(b('span').classes('button-text').text(text))\r\n .append(b('span').classes('button-shifted').text(shiftedText))\r\n );\r\n });\r\n return r;\r\n }\r\n static _buttonBlock(buttons: SuiKbKey[], id: string) {\r\n var b = buildDom;\r\n var r = b('div').classes('keyBlock').attr('id', id);\r\n r.append(Qwerty._kbButton(buttons));\r\n return r;\r\n }\r\n\r\n static _buildElements(rows: Record) {\r\n const b = buildDom;\r\n const r = b('div').classes('buttonLine')\r\n .append(b('span').classes('icon icon-move'));\r\n const keys = Object.keys(rows);\r\n keys.forEach((key, rowIx) => {\r\n const row = rows[key];\r\n r.append(Qwerty._buttonBlock(row, 'row-'+rowIx));\r\n });\r\n return r;\r\n }\r\n static hideKb() {\r\n $('body').removeClass('showQwerty');\r\n Qwerty.displayed = false;\r\n }\r\n static displayKb() {\r\n if (Qwerty.created) {\r\n $('body').addClass('showQwerty');\r\n Qwerty.displayed = true;\r\n return;\r\n }\r\n createTopDomContainer('.qwertyKb');\r\n $('body').addClass('showQwerty');\r\n $('.qwertyKb').html('');\r\n var b = buildDom;\r\n var r = b('div').classes('kb-float');\r\n r.append(Qwerty._buildElements(Qwerty.navigationElements));\r\n $('.qwertyKb').append(r.dom());\r\n\r\n var cb = function (x: any, y: any ) {}\r\n createTopDomContainer('.draganime');\r\n draggable({\r\n parent: $('.qwertyKb'),\r\n handle: $('.qwertyKb').find('.icon-move'),\r\n animateDiv:'.draganime',\r\n cb: cb,\r\n moveParent: true\r\n });\r\n Qwerty.displayed = true;\r\n Qwerty.created = true;\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { ButtonDefinition } from \"../../buttons/button\";\r\nimport { RibbonLayout } from \"../../common\";\r\n\r\nexport class defaultRibbonLayout {\r\n static get ribbons(): RibbonLayout {\r\n var left = defaultRibbonLayout.leftRibbonIds;\r\n var top = defaultRibbonLayout.displayIds.concat(defaultRibbonLayout.debugIds);\r\n\r\n return {\r\n left: left,\r\n top: top\r\n };\r\n }\r\n\r\n static get ribbonButtons(): ButtonDefinition[] {\r\n return defaultRibbonLayout.leftRibbonButtons.concat(defaultRibbonLayout.displayButtons).concat(defaultRibbonLayout.debugRibbonButtons);\r\n }\r\n\r\n static get leftRibbonIds() {\r\n return ['helpDialog', 'languageMenu', 'fileMenu', \r\n 'scoreMenu', 'partMenu', 'staffModifierMenu', 'measureModal', 'voiceMenu', 'beamMenu',\r\n 'noteMenu', 'textMenu', 'libraryMenu',\r\n ];\r\n }\r\n static get debugIds() {\r\n return ['DebugGroup', 'DebugButton2'];\r\n }\r\n static get displayIds() {\r\n return ['quickButtons', 'selectPart', 'refresh', 'zoomout', 'zoomin', 'playButton2', 'stopButton2', 'keySignature', 'ribbonTempo', 'ribbonTime'];\r\n }\r\n static get displayButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon hide',\r\n icon: 'icon-smo icon-zoomplus',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'quickButtons',\r\n id: 'quickButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'Select Part',\r\n classes: 'icon select-part-button',\r\n icon: 'icon-smo icon-circle-down',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'selectPart'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-smo icon-refresh',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'refresh'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-smo icon-zoomplus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomout'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-smo icon-zoomminus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomin'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon play',\r\n icon: 'icon-smo icon-play3',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'playButton2'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon stop2',\r\n icon: 'icon-smo icon-stop2',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'stopButton2'\r\n }, {\r\n leftText: 'Key',\r\n rightText: 'Alt-k',\r\n hotKey: 'k',\r\n classes: 'icon keysignature button-wide hover-text',\r\n icon: 'icon-smo icon-key-sig-b',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'keySignature'\r\n }, {\r\n leftText: 'Tempo',\r\n rightText: 'Alt-o',\r\n hotKey: 'o',\r\n classes: 'icon keysignature button-wide hover-text',\r\n icon: 'icon-smo icon-metronome4',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'ribbonTempo'\r\n }, {\r\n leftText: 'Time',\r\n rightText: 'Alt-t',\r\n hotKey: 't',\r\n classes: 'icon keysignature button-wide hover-text',\r\n icon: 'icon-bravura icon-timeSigCommon',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'ribbonTime'\r\n }\r\n ];\r\n }\r\n\r\n static get debugRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-new-tab',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'debug',\r\n id: 'DebugGroup'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapsed',\r\n icon: 'icon-new-tab',\r\n action: 'collapseChild',\r\n ctor: 'DebugButtons',\r\n group: 'debug',\r\n id: 'DebugButton2'\r\n }];\r\n }\r\n \r\n static get leftRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n icon: '',\r\n leftText: 'Help',\r\n rightText: '?',\r\n classes: 'help-button nav-link link-body-emphasis',\r\n action: 'modal',\r\n ctor: 'helpModal',\r\n group: 'scoreEdit',\r\n id: 'helpDialog'\r\n }, {\r\n leftText: 'Language',\r\n rightText: 'Alt-g',\r\n icon: '',\r\n hotKey: 'g',\r\n classes: 'language-select nav-link link-body-emphasis hover-text',\r\n action: 'menu',\r\n ctor: 'SuiLanguageMenu',\r\n group: 'scoreEdit',\r\n id: 'languageMenu'\r\n }, {\r\n leftText: 'File',\r\n rightText: 'Alt-f',\r\n hotKey: 'f',\r\n icon: '',\r\n classes: 'file-modify nav-link link-body-emphasis hover-text',\r\n action: 'menu',\r\n ctor: 'SuiFileMenu',\r\n group: 'scoreEdit',\r\n id: 'fileMenu'\r\n }, {\r\n leftText: 'Score',\r\n rightText: 'Alt-s',\r\n hotKey: 's',\r\n icon: '',\r\n classes: 'icon nav-link link-body-emphasis hover-text',\r\n action: 'menu',\r\n ctor: 'SuiScoreMenu',\r\n group: 'scoreEdit',\r\n id: 'scoreMenu'\r\n },\r\n {\r\n leftText: 'Parts',\r\n rightText: 'Alt-p',\r\n hotKey: 'p',\r\n icon: '',\r\n classes: 'icon nav-link link-body-emphasis hover-text',\r\n action: 'menu',\r\n ctor: 'SuiPartMenu',\r\n group: 'scoreEdit',\r\n id: 'partMenu'\r\n }, {\r\n leftText: 'Lines',\r\n rightText: 'Alt-l',\r\n hotKey: 'l',\r\n icon: '',\r\n classes: 'icon note-modify nav-link link-body-emphasis hover-text',\r\n action: 'menu',\r\n ctor: 'SuiStaffModifierMenu',\r\n group: 'scoreEdit',\r\n id: 'staffModifierMenu'\r\n }, {\r\n leftText: 'Measure',\r\n rightText: 'Alt-m',\r\n hotKey: 'm',\r\n icon: '',\r\n classes: 'icon menu-select nav-link link-body-emphasis hover-text',\r\n action: 'menu',\r\n ctor: 'SuiMeasureMenu',\r\n group: 'scoreEdit',\r\n id: 'measureModal'\r\n }, {\r\n leftText: 'Voices',\r\n rightText: 'Alt-v',\r\n hotKey: 'v',\r\n icon: '',\r\n classes: 'icon nav-link link-body-emphasis hover-text',\r\n action: 'menu',\r\n ctor: 'SuiVoiceMenu',\r\n group: 'scoreEdit',\r\n id: 'voiceMenu'\r\n }, {\r\n leftText: 'Beams',\r\n rightText: 'Alt-b',\r\n hotKey: 'b',\r\n icon: '',\r\n classes: 'icon nav-link link-body-emphasis hover-text',\r\n action: 'menu',\r\n ctor: 'SuiBeamMenu',\r\n group: 'scoreEdit',\r\n id: 'beamMenu'\r\n }, {\r\n leftText: 'Notes',\r\n rightText: 'Alt-n',\r\n hotKey: 'n',\r\n icon: '',\r\n classes: 'icon nav-link link-body-emphasis hover-text',\r\n action: 'menu',\r\n ctor: 'SuiNoteMenu',\r\n group: 'scoreEdit',\r\n id: 'noteMenu'\r\n },\r\n {\r\n leftText: 'Text',\r\n rightText: 'Alt-x',\r\n hotKey: 'x',\r\n icon: '',\r\n classes: 'menu-select nav-link link-body-emphasis hover-text',\r\n action: 'menu',\r\n ctor: 'SuiTextMenu',\r\n group: 'scoreEdit',\r\n id: 'textMenu'\r\n }, {\r\n leftText: 'Library',\r\n rightText: 'Alt-y',\r\n hotKey: 'y',\r\n icon: '',\r\n classes: 'file-modify menu-select nav-link link-body-emphasis hover-text',\r\n action: 'modal',\r\n ctor: 'SuiLibraryDialog',\r\n group: 'scoreEdit',\r\n id: 'libraryMenu'\r\n },\r\n ];\r\n }\r\n}\r\n","// [Smoosic](https://github.com/AaronDavidNewman/Smoosic)\r\n// Copyright (c) Aaron David Newman 2021.\r\n\r\nimport { ButtonDefinition } from \"../../buttons/button\";\r\nimport { RibbonLayout } from \"../../common\";\r\n\r\nexport class simpleRibbonLayout {\r\n static get ribbons(): RibbonLayout {\r\n var left = simpleRibbonLayout.leftRibbonIds;\r\n var top = simpleRibbonLayout.displayIds.concat(simpleRibbonLayout.noteButtonIds).concat(simpleRibbonLayout.navigateButtonIds)\r\n .concat(simpleRibbonLayout.durationIds);\r\n \r\n return {\r\n left: left,\r\n top: top\r\n };\r\n }\r\n\r\n static get simpleRibbonLayout(): ButtonDefinition[] {\r\n return simpleRibbonLayout.leftRibbonButtons.concat(\r\n simpleRibbonLayout.navigationButtons).concat(\r\n simpleRibbonLayout.noteRibbonButtons).concat(\r\n simpleRibbonLayout.durationRibbonButtons);\r\n }\r\n\r\n static get leftRibbonIds() {\r\n return [ 'libraryMenu',\r\n 'layoutMenu', \r\n 'tempoModal', 'timeSignatureMenu', 'keyMenu', 'staffModifierMenu',\r\n 'pianoModal'];\r\n }\r\n static get noteButtonIds() {\r\n return ['NoteButtons',\r\n 'UpNoteButton', 'DownNoteButton',\r\n 'UpOctaveButton', 'DownOctaveButton', 'ToggleRestButton', 'ToggleSlashButton', 'ToggleAccidental', 'ToggleCourtesy'];\r\n }\r\n \r\n static get navigateButtonIds() {\r\n return ['NavigationButtons', 'navLeftButton', 'navRightButton', 'navUpButton', 'navDownButton', 'moreNavButtons', 'navFastForward', 'navRewind',\r\n 'navGrowLeft', 'navGrowRight'];\r\n }\r\n \r\n static get intervalIds() {\r\n return ['CreateChordButtons', 'SecondUpButton', 'SecondDownButton', 'ThirdUpButton', 'ThirdDownButton', 'FourthUpButton', 'FourthDownButton',\r\n 'FifthUpButton', 'FifthDownButton', 'SixthUpButton', 'SixthDownButton'\r\n , 'SeventhUpButton', 'SeventhDownButton', 'OctaveUpButton', 'OctaveDownButton', 'CollapseChordButton'];\r\n }\r\n\r\n static get durationIds() {\r\n return ['DurationButtons', 'GrowDuration', 'LessDuration', 'GrowDurationDot', 'LessDurationDot', 'TripletButton', 'QuintupletButton', 'SeptupletButton', 'NoTupletButton'];\r\n }\r\n\r\n static get playerIds() {\r\n return ['playerButtons', 'playButton', 'pauseButton', 'stopButton'];\r\n }\r\n\r\n static get displayIds() {\r\n return ['quickButtons', 'refresh', 'zoomout', 'zoomin', 'playButton2', 'stopButton2'];\r\n }\r\n\r\n static get displayButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon hide',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'quickButtons',\r\n id: 'quickButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-refresh',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'refresh'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomplus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomout'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon refresh',\r\n icon: 'icon-zoomminus',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'zoomin'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon play',\r\n icon: 'icon-play3',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'playButton2'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon stop2',\r\n icon: 'icon-stop2',\r\n action: 'collapseChild',\r\n ctor: 'DisplaySettings',\r\n group: 'quickButtons',\r\n id: 'stopButton2'\r\n }\r\n ];\r\n }\r\n\r\n static get durationRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent duration',\r\n icon: 'icon-duration',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'duration',\r\n id: 'DurationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '.',\r\n icon: 'icon-duration_grow',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDuration'\r\n }, {\r\n leftText: '',\r\n rightText: ',',\r\n icon: 'icon-duration_less',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDuration'\r\n }, {\r\n leftText: '',\r\n rightText: '>',\r\n icon: 'icon-duration_grow_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'GrowDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: '<',\r\n icon: 'icon-duration_less_dot',\r\n classes: 'collapsed duration',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'LessDurationDot'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-3',\r\n icon: 'icon-triplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'TripletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-5',\r\n icon: 'icon-quint',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'QuintupletButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'Ctrl-7',\r\n icon: 'icon-septuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'SeptupletButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'Ctrl-0',\r\n icon: 'icon-no_tuplet',\r\n classes: 'collapsed duration tuplet',\r\n action: 'collapseChild',\r\n ctor: 'DurationButtons',\r\n group: 'duration',\r\n id: 'NoTupletButton'\r\n }\r\n ];\r\n }\r\n\r\n static get noteRibbonButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-note',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'notes',\r\n id: 'NoteButtons'\r\n }, {\r\n leftText: 'A',\r\n rightText: 'a',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ANoteButton'\r\n }, {\r\n leftText: 'B',\r\n rightText: 'b',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'BNoteButton'\r\n }, {\r\n leftText: 'C',\r\n rightText: 'c',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CNoteButton'\r\n }, {\r\n leftText: 'D',\r\n rightText: 'd',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DNoteButton'\r\n }, {\r\n leftText: 'E',\r\n rightText: 'e',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ENoteButton'\r\n }, {\r\n leftText: 'F',\r\n rightText: 'f',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'FNoteButton'\r\n }, {\r\n leftText: 'G',\r\n rightText: 'g',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'GNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '-',\r\n icon: 'icon-sharp',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: '=',\r\n icon: 'icon-flat',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownNoteButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-rest',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleRestButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'r',\r\n icon: 'icon-slash',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleSlashButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: 'icon-circle-left',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'notes',\r\n id: 'moreNoteButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'G',\r\n icon: 'icon-grace_note',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'AddGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-grace_slash',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'SlashGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: 'alt-g',\r\n icon: 'icon-grace_remove',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'RemoveGraceNote'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'XNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-triangleup',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'TriUpNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-circlex',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'CircleXNoteHead'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-notehead-diamondblack',\r\n classes: 'collapsed graceIcon',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DiamondNoteHead'\r\n }, {\r\n leftText: '8va',\r\n rightText: 'Shift=',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'UpOctaveButton'\r\n }, {\r\n leftText: '8vb',\r\n rightText: 'Shift-',\r\n icon: '',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'DownOctaveButton'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftE',\r\n icon: 'icon-accident',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleAccidental'\r\n }, {\r\n leftText: '',\r\n rightText: 'ShiftF',\r\n icon: 'icon-courtesy',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NoteButtons',\r\n group: 'notes',\r\n id: 'ToggleCourtesy'\r\n }\r\n\r\n ];\r\n }\r\n static get playerButtons(): ButtonDefinition[] {\r\n // .icon-play3\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-equalizer2',\r\n classes: 'icon collapseParent player',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'playerButtons',\r\n id: 'playerButtons'\r\n }, {\r\n leftText: '',\r\n rightText: 'p',\r\n icon: 'icon-play3',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'playButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 's',\r\n icon: 'icon-stop2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'stopButton'\r\n },\r\n {\r\n leftText: '',\r\n rightText: 'P',\r\n icon: 'icon-pause2',\r\n classes: 'icon collapsed player',\r\n action: 'collapseChild',\r\n ctor: 'PlayerButtons',\r\n group: 'playerButtons',\r\n id: 'pauseButton'\r\n }];\r\n }\r\n static get navigationButtons(): ButtonDefinition[] {\r\n return [{\r\n leftText: '',\r\n rightText: '',\r\n classes: 'icon collapseParent',\r\n icon: 'icon-navigate',\r\n action: 'collapseParent',\r\n ctor: 'CollapseRibbonControl',\r\n group: 'navigation',\r\n id: 'NavigationButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-left',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navLeftButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-right',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRightButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-up',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navUpButton'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-arrow-down',\r\n classes: 'collapsed',\r\n action: 'collapseChild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navDownButton'\r\n }, {\r\n leftText: '...',\r\n rightText: '',\r\n icon: '',\r\n classes: 'collapsed expander',\r\n action: 'collapseMore',\r\n ctor: 'ExtendedCollapseParent',\r\n group: 'navigation',\r\n id: 'moreNavButtons'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-fforward',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navFastForward'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-rewind',\r\n classes: 'collapsed',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navRewind'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_left',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowLeft'\r\n }, {\r\n leftText: '',\r\n rightText: '',\r\n icon: 'icon-note_select_right',\r\n classes: 'collapsed selection-icon',\r\n action: 'collapseGrandchild',\r\n ctor: 'NavigationButtons',\r\n group: 'navigation',\r\n id: 'navGrowRight'\r\n }\r\n ];\r\n }\r\n\r\n static get leftRibbonButtons(): ButtonDefinition[] {\r\n return [ {\r\n leftText: 'Library',\r\n rightText: '/L',\r\n icon: '',\r\n classes: 'file-modify menu-select',\r\n action: 'modal',\r\n ctor: 'SuiLibraryDialog',\r\n group: 'scoreEdit',\r\n id: 'libraryMenu'\r\n }, {\r\n leftText: 'Score',\r\n rightText: '',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'menu',\r\n ctor: 'SuiScoreMenu',\r\n group: 'scoreEdit',\r\n id: 'layoutMenu'\r\n }, {\r\n leftText: 'Tempo',\r\n rightText: 't',\r\n icon: '',\r\n classes: 'icon ',\r\n action: 'modal',\r\n ctor: 'SuiTempoDialog',\r\n group: 'scoreEdit',\r\n id: 'tempoModal'\r\n }, {\r\n leftText: 'Time Signature',\r\n rightText: '/m',\r\n icon: '',\r\n classes: 'staff-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiTimeSignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'timeSignatureMenu'\r\n },\r\n {\r\n leftText: 'Key',\r\n rightText: '/k',\r\n icon: '',\r\n classes: 'note-modify menu-select',\r\n action: 'menu',\r\n ctor: 'SuiKeySignatureMenu',\r\n group: 'scoreEdit',\r\n id: 'keyMenu'\r\n },\r\n ];\r\n }\r\n}\r\n","import { SuiApplication } from '../src/application/application';\r\nimport { SmoToXml } from '../src/smo/mxml/smoToXml';\r\nimport { XmlToSmo } from '../src/smo/mxml/xmlToSmo';\r\nimport { SuiXhrLoader } from '../src/ui/fileio/xhrLoader';\r\nimport { MidiToSmo } from '../src/smo/midi/midiToSmo';\r\n\r\ndeclare var $: any;\r\ndeclare var parseMidi: any;\r\n\r\nexport function createLoadTests(): void {\r\n const jsonPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/hymns/Precious Lord.json';\r\n const midiTiesPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/ties.mid';\r\n const midiTripletPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/triplet.mid';\r\n const midiKeyPath = 'https://aarondavidnewman.github.io/Smoosic/release/library/miditest/keytime.mid';\r\n var app = async (application: SuiApplication) => {\r\n const view = application.view!;\r\n await view.loadRemoteScore(jsonPath);\r\n await view.renderPromise();\r\n QUnit.test('loaded', assert => {\r\n assert.equal(view.score.staves[0].measures.length, 17);\r\n assert.equal($('#boo .vf-annotation').length, 82);\r\n });\r\n const xml = SmoToXml.convert(view.score);\r\n const newScore = XmlToSmo.convert(xml);\r\n await view.changeScore(newScore);\r\n QUnit.test('loadXml', assert => {\r\n assert.equal(view.score.staves[0].measures.length, 17);\r\n assert.equal($('#boo .vf-annotation').length, 82);\r\n });\r\n let midiData = new SuiXhrLoader(midiTiesPath);\r\n await midiData.loadAsync();\r\n let midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi1', assert => {\r\n assert.equal(midiScore.staves[0].getTiesEndingAt({ staff: 0, measure: 1, voice: 0, tick: 0, pitches: [] }).length, 1);\r\n });\r\n midiData = new SuiXhrLoader(midiTripletPath);\r\n await midiData.loadAsync();\r\n midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi2', assert => {\r\n assert.equal(midiScore.staves[0].measures[0].tupletTrees.length, 1);\r\n });\r\n midiData = new SuiXhrLoader(midiKeyPath);\r\n await midiData.loadAsync();\r\n midiScore = (new MidiToSmo(parseMidi(midiData.value), 1024)).convert();\r\n await view.changeScore(midiScore);\r\n QUnit.test('loadMidi2', assert => {\r\n assert.equal(midiScore.staves.length, 2);\r\n assert.equal(midiScore.staves[0].measures[0].keySignature, 'eb');\r\n });\r\n // console.log('measures ' + view.score.staves[0].measures.length);\r\n };\r\n\r\n SuiApplication.configure({\r\n mode: 'library',\r\n idleRedrawTime: 5,\r\n scoreDomContainer: 'outer-container'\r\n }).then((application) => {\r\n app(application)\r\n });\r\n}","/*!\n * VexFlow 4.2.8 2024-08-22T00:54:49.402Z 26945f85b426cc69f2acae2474cd84f863046c6d\n * Vexflow_smoosic, forked from :\n * Copyright (c) 2010 Mohit Muthanna Cheppudira \n * https://www.vexflow.com https://github.com/0xfe/vexflow\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./src/version.ts\":\n/*!************************!*\\\n !*** ./src/version.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DATE: () => (/* binding */ DATE),\n/* harmony export */ ID: () => (/* binding */ ID),\n/* harmony export */ VERSION: () => (/* binding */ VERSION)\n/* harmony export */ });\nconst VERSION = '4.2.8';\nconst ID = '26945f85b426cc69f2acae2474cd84f863046c6d';\nconst DATE = '2024-08-22T00:54:49.402Z';\n\n\n/***/ }),\n\n/***/ \"./src/accidental.ts\":\n/*!***************************!*\\\n !*** ./src/accidental.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* binding */ Accidental)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nclass Accidental extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new _music__WEBPACK_IMPORTED_MODULE_3__.Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isAccidental)(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNoteGroup)(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes(this.type);\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft);\n const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft);\n const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/annotation.ts\":\n/*!***************************!*\\\n !*** ./src/annotation.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Annotation: () => (/* binding */ Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* binding */ AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* binding */ AnnotationVerticalJustify)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Annotation', args);\n}\nvar AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nvar AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nclass Annotation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n\n\n/***/ }),\n\n/***/ \"./src/articulation.ts\":\n/*!*****************************!*\\\n !*** ./src/articulation.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Articulation: () => (/* binding */ Articulation)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note) || (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) ||\n (position === BELOW && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nclass Articulation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStemmableNote)(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n };\n this.reset();\n }\n reset() {\n this.articulation = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n\n\n/***/ }),\n\n/***/ \"./src/barnote.ts\":\n/*!************************!*\\\n !*** ./src/barnote.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BarNote: () => (/* binding */ BarNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nclass BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.BarNote;\n }\n constructor(type = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n this.barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n ctx.openGroup('barnote', this.getAttribute('id'));\n this.barline.setType(this.type);\n this.barline.setX(this.getAbsoluteX());\n this.barline.draw(this.checkStave());\n ctx.closeGroup();\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/beam.ts\":\n/*!*********************!*\\\n !*** ./src/beam.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BEAM_BOTH: () => (/* binding */ BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* binding */ BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* binding */ BEAM_RIGHT),\n/* harmony export */ Beam: () => (/* binding */ Beam)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n }\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nconst BEAM_LEFT = 'L';\nconst BEAM_RIGHT = 'R';\nconst BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nclass Beam extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction().parse(group));\n }\n return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.BOTTOM : _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/bend.ts\":\n/*!*********************!*\\\n !*** ./src/bend.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Bend: () => (/* binding */ Bend)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n/** Bend implements tablature bends. */\nclass Bend extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n\n\n/***/ }),\n\n/***/ \"./src/boundingbox.ts\":\n/*!****************************!*\\\n !*** ./src/boundingbox.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BoundingBox: () => (/* binding */ BoundingBox)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nclass BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/boundingboxcomputation.ts\":\n/*!***************************************!*\\\n !*** ./src/boundingboxcomputation.ts ***!\n \\***************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BoundingBoxComputation: () => (/* binding */ BoundingBoxComputation)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nclass BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/canvascontext.ts\":\n/*!******************************!*\\\n !*** ./src/canvascontext.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CanvasContext: () => (/* binding */ CanvasContext)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nclass CanvasContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.warn)('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = (0,_util__WEBPACK_IMPORTED_MODULE_2__.globalObject)().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if ((0,_web__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas)(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style);\n this.context2D.font = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo);\n this.textHeight = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/chordsymbol.ts\":\n/*!****************************!*\\\n !*** ./src/chordsymbol.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ChordSymbol: () => (/* binding */ ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* binding */ ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* binding */ ChordSymbolVerticalJustify),\n/* harmony export */ SymbolModifiers: () => (/* binding */ SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* binding */ SymbolTypes)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.ChordSymbol', args);\n}\nvar ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nvar ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nvar SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nvar SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nclass ChordSymbol extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n csymDiminished: {\n code: 'csymDiminished'\n },\n csymMinor: {\n code: 'csymMinor',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n\n\n/***/ }),\n\n/***/ \"./src/clef.ts\":\n/*!*********************!*\\\n !*** ./src/clef.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Clef: () => (/* binding */ Clef)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nclass Clef extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n },\n bass: {\n code: 'fClef',\n line: 1,\n },\n alto: {\n code: 'cClef',\n line: 2,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n },\n tab: {\n code: '6stringTabClef',\n line: 2.5,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.getWidth(this.clef.code, Clef.getPoint(this.size), `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = (Clef.getPoint(this.size) / 5) * 3;\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Get point for clefs. */\n static getPoint(size) {\n // for sizes other than 'default', clef is 2/3 of the default value\n return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 3) * 2;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), Clef.getPoint(this.size), this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/clefnote.ts\":\n/*!*************************!*\\\n !*** ./src/clefnote.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ClefNote: () => (/* binding */ ClefNote)\n/* harmony export */ });\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\n\n\n\n\n/** ClefNote implements clef annotations in measures. */\nclass ClefNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), _clef__WEBPACK_IMPORTED_MODULE_0__.Clef.getPoint(this.size), this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/crescendo.ts\":\n/*!**************************!*\\\n !*** ./src/crescendo.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Crescendo: () => (/* binding */ Crescendo)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nclass Crescendo extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = _tickcontext__WEBPACK_IMPORTED_MODULE_1__.TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/curve.ts\":\n/*!**********************!*\\\n !*** ./src/curve.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Curve: () => (/* binding */ Curve),\n/* harmony export */ CurvePosition: () => (/* binding */ CurvePosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\n\n\n\nvar CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nclass Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ openingDirection: 'auto', thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n if (this.render_options.openingDirection === 'up') {\n stem_direction = 1;\n }\n if (this.render_options.openingDirection === 'down') {\n stem_direction = -1;\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/dot.ts\":\n/*!********************!*\\\n !*** ./src/dot.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Dot: () => (/* binding */ Dot)\n/* harmony export */ });\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\n\n\n\nclass Dot extends _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isStaveNote)(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isGraceNote)(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/easyscore.ts\":\n/*!**************************!*\\\n !*** ./src/easyscore.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Builder: () => (/* binding */ Builder),\n/* harmony export */ EasyScore: () => (/* binding */ EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* binding */ EasyScoreGrammar),\n/* harmony export */ Piece: () => (/* binding */ Piece)\n/* harmony export */ });\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.EasyScore', args);\n}\nclass EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nclass Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nclass Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = _music__WEBPACK_IMPORTED_MODULE_3__.Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n _dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nclass EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, _articulation__WEBPACK_IMPORTED_MODULE_0__.Articulation.easyScoreHook, _frethandfinger__WEBPACK_IMPORTED_MODULE_2__.FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new _parser__WEBPACK_IMPORTED_MODULE_4__.Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/element.ts\":\n/*!************************!*\\\n !*** ./src/element.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Element: () => (/* binding */ Element)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\n\n\n\n\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nclass Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = _registry__WEBPACK_IMPORTED_MODULE_1__.Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n/***/ }),\n\n/***/ \"./src/factory.ts\":\n/*!************************!*\\\n !*** ./src/factory.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Factory: () => (/* binding */ Factory)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_39__.log)('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nclass Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new _util__WEBPACK_IMPORTED_MODULE_39__.RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if ((0,_web__WEBPACK_IMPORTED_MODULE_42__.isHTMLCanvas)(elem)) {\n backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.CANVAS;\n }\n else {\n backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.SVG;\n }\n }\n this.context = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new _stave__WEBPACK_IMPORTED_MODULE_24__.Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new _tabstave__WEBPACK_IMPORTED_MODULE_32__.TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new _stavenote__WEBPACK_IMPORTED_MODULE_27__.StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new _glyphnote__WEBPACK_IMPORTED_MODULE_13__.GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new _repeatnote__WEBPACK_IMPORTED_MODULE_23__.RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new _ghostnote__WEBPACK_IMPORTED_MODULE_12__.GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new _textnote__WEBPACK_IMPORTED_MODULE_35__.TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new _clefnote__WEBPACK_IMPORTED_MODULE_6__.ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new _timesignote__WEBPACK_IMPORTED_MODULE_37__.TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new _keysignote__WEBPACK_IMPORTED_MODULE_16__.KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new _tabnote__WEBPACK_IMPORTED_MODULE_31__.TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new _gracenote__WEBPACK_IMPORTED_MODULE_14__.GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__.GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify.CENTER, vJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new _chordsymbol__WEBPACK_IMPORTED_MODULE_5__.ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new _ornament__WEBPACK_IMPORTED_MODULE_20__.Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new _textdynamics__WEBPACK_IMPORTED_MODULE_34__.TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new _frethandfinger__WEBPACK_IMPORTED_MODULE_11__.FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new _stringnumber__WEBPACK_IMPORTED_MODULE_29__.StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new _tickcontext__WEBPACK_IMPORTED_MODULE_36__.TickContext();\n }\n ModifierContext() {\n return new _modifiercontext__WEBPACK_IMPORTED_MODULE_17__.ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = (0,_util__WEBPACK_IMPORTED_MODULE_39__.defined)(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__.MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new _voice__WEBPACK_IMPORTED_MODULE_41__.Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new _staveconnector__WEBPACK_IMPORTED_MODULE_25__.StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new _formatter__WEBPACK_IMPORTED_MODULE_10__.Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_38__.Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new _beam__WEBPACK_IMPORTED_MODULE_4__.Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new _curve__WEBPACK_IMPORTED_MODULE_7__.Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new _stavetie__WEBPACK_IMPORTED_MODULE_28__.StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new _staveline__WEBPACK_IMPORTED_MODULE_26__.StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new _vibratobracket__WEBPACK_IMPORTED_MODULE_40__.VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new _textbracket__WEBPACK_IMPORTED_MODULE_33__.TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new _system__WEBPACK_IMPORTED_MODULE_30__.System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new _easyscore__WEBPACK_IMPORTED_MODULE_8__.EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new _pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking(p.notes);\n pedal.setType(_pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new _notesubgroup__WEBPACK_IMPORTED_MODULE_19__.NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_9__.Element.TEXT_FONT);\n\n\n/***/ }),\n\n/***/ \"./src/flow.ts\":\n/*!*********************!*\\\n !*** ./src/flow.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Flow: () => (/* binding */ Flow)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ \"./src/crescendo.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ \"./src/factory.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracetabnote */ \"./src/gracetabnote.ts\");\n/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./keymanager */ \"./src/keymanager.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./stavehairpin */ \"./src/stavehairpin.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./tabslide */ \"./src/tabslide.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tremolo */ \"./src/tremolo.ts\");\n/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./tuning */ \"./src/tuning.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./version */ \"./src/version.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: _version__WEBPACK_IMPORTED_MODULE_78__.VERSION,\n /** git commit ID that this library was built from. */\n ID: _version__WEBPACK_IMPORTED_MODULE_78__.ID,\n /** The date when this library was compiled. */\n DATE: _version__WEBPACK_IMPORTED_MODULE_78__.DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => _font__WEBPACK_IMPORTED_MODULE_18__.Font.load(fontName));\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK = fonts;\n _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.MUSIC_FONT_STACK = fonts.slice();\n _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TIME4_4;\n }\n static get accidentalMap() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.accidentalMap;\n }\n static get unicode() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.unicode;\n }\n static keySignature(spec) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental;\nFlow.Annotation = _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation;\nFlow.Articulation = _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation;\nFlow.Barline = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.Barline;\nFlow.BarNote = _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote;\nFlow.Beam = _beam__WEBPACK_IMPORTED_MODULE_4__.Beam;\nFlow.Bend = _bend__WEBPACK_IMPORTED_MODULE_5__.Bend;\nFlow.BoundingBox = _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox;\nFlow.BoundingBoxComputation = _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation;\nFlow.CanvasContext = _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext;\nFlow.ChordSymbol = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol;\nFlow.Clef = _clef__WEBPACK_IMPORTED_MODULE_10__.Clef;\nFlow.ClefNote = _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote;\nFlow.Crescendo = _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo;\nFlow.Curve = _curve__WEBPACK_IMPORTED_MODULE_13__.Curve;\nFlow.Dot = _dot__WEBPACK_IMPORTED_MODULE_14__.Dot;\nFlow.EasyScore = _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore;\nFlow.Element = _element__WEBPACK_IMPORTED_MODULE_16__.Element;\nFlow.Factory = _factory__WEBPACK_IMPORTED_MODULE_17__.Factory;\nFlow.Font = _font__WEBPACK_IMPORTED_MODULE_18__.Font;\nFlow.Formatter = _formatter__WEBPACK_IMPORTED_MODULE_19__.Formatter;\nFlow.Fraction = _fraction__WEBPACK_IMPORTED_MODULE_20__.Fraction;\nFlow.FretHandFinger = _frethandfinger__WEBPACK_IMPORTED_MODULE_21__.FretHandFinger;\nFlow.GhostNote = _ghostnote__WEBPACK_IMPORTED_MODULE_22__.GhostNote;\nFlow.Glyph = _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph;\nFlow.GlyphNote = _glyphnote__WEBPACK_IMPORTED_MODULE_24__.GlyphNote;\nFlow.GraceNote = _gracenote__WEBPACK_IMPORTED_MODULE_25__.GraceNote;\nFlow.GraceNoteGroup = _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__.GraceNoteGroup;\nFlow.GraceTabNote = _gracetabnote__WEBPACK_IMPORTED_MODULE_27__.GraceTabNote;\nFlow.KeyManager = _keymanager__WEBPACK_IMPORTED_MODULE_28__.KeyManager;\nFlow.KeySignature = _keysignature__WEBPACK_IMPORTED_MODULE_29__.KeySignature;\nFlow.KeySigNote = _keysignote__WEBPACK_IMPORTED_MODULE_30__.KeySigNote;\nFlow.Modifier = _modifier__WEBPACK_IMPORTED_MODULE_31__.Modifier;\nFlow.ModifierContext = _modifiercontext__WEBPACK_IMPORTED_MODULE_32__.ModifierContext;\nFlow.MultiMeasureRest = _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__.MultiMeasureRest;\nFlow.Music = _music__WEBPACK_IMPORTED_MODULE_34__.Music;\nFlow.Note = _note__WEBPACK_IMPORTED_MODULE_35__.Note;\nFlow.NoteHead = _notehead__WEBPACK_IMPORTED_MODULE_36__.NoteHead;\nFlow.NoteSubGroup = _notesubgroup__WEBPACK_IMPORTED_MODULE_37__.NoteSubGroup;\nFlow.Ornament = _ornament__WEBPACK_IMPORTED_MODULE_38__.Ornament;\nFlow.Parenthesis = _parenthesis__WEBPACK_IMPORTED_MODULE_39__.Parenthesis;\nFlow.Parser = _parser__WEBPACK_IMPORTED_MODULE_40__.Parser;\nFlow.PedalMarking = _pedalmarking__WEBPACK_IMPORTED_MODULE_41__.PedalMarking;\nFlow.Registry = _registry__WEBPACK_IMPORTED_MODULE_42__.Registry;\nFlow.RenderContext = _rendercontext__WEBPACK_IMPORTED_MODULE_43__.RenderContext;\nFlow.Renderer = _renderer__WEBPACK_IMPORTED_MODULE_44__.Renderer;\nFlow.RepeatNote = _repeatnote__WEBPACK_IMPORTED_MODULE_45__.RepeatNote;\nFlow.Repetition = _staverepetition__WEBPACK_IMPORTED_MODULE_53__.Repetition;\nFlow.Stave = _stave__WEBPACK_IMPORTED_MODULE_46__.Stave;\nFlow.StaveConnector = _staveconnector__WEBPACK_IMPORTED_MODULE_48__.StaveConnector;\nFlow.StaveHairpin = _stavehairpin__WEBPACK_IMPORTED_MODULE_49__.StaveHairpin;\nFlow.StaveLine = _staveline__WEBPACK_IMPORTED_MODULE_50__.StaveLine;\nFlow.StaveModifier = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifier;\nFlow.StaveNote = _stavenote__WEBPACK_IMPORTED_MODULE_52__.StaveNote;\nFlow.StaveTempo = _stavetempo__WEBPACK_IMPORTED_MODULE_54__.StaveTempo;\nFlow.StaveText = _stavetext__WEBPACK_IMPORTED_MODULE_55__.StaveText;\nFlow.StaveTie = _stavetie__WEBPACK_IMPORTED_MODULE_56__.StaveTie;\nFlow.Stem = _stem__WEBPACK_IMPORTED_MODULE_58__.Stem;\nFlow.StringNumber = _stringnumber__WEBPACK_IMPORTED_MODULE_59__.StringNumber;\nFlow.Stroke = _strokes__WEBPACK_IMPORTED_MODULE_60__.Stroke;\nFlow.SVGContext = _svgcontext__WEBPACK_IMPORTED_MODULE_61__.SVGContext;\nFlow.System = _system__WEBPACK_IMPORTED_MODULE_62__.System;\nFlow.TabNote = _tabnote__WEBPACK_IMPORTED_MODULE_64__.TabNote;\nFlow.TabSlide = _tabslide__WEBPACK_IMPORTED_MODULE_65__.TabSlide;\nFlow.TabStave = _tabstave__WEBPACK_IMPORTED_MODULE_66__.TabStave;\nFlow.TabTie = _tabtie__WEBPACK_IMPORTED_MODULE_67__.TabTie;\nFlow.TextBracket = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracket;\nFlow.TextDynamics = _textdynamics__WEBPACK_IMPORTED_MODULE_69__.TextDynamics;\nFlow.TextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_70__.TextFormatter;\nFlow.TextNote = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextNote;\nFlow.TickContext = _tickcontext__WEBPACK_IMPORTED_MODULE_72__.TickContext;\nFlow.TimeSignature = _timesignature__WEBPACK_IMPORTED_MODULE_73__.TimeSignature;\nFlow.TimeSigNote = _timesignote__WEBPACK_IMPORTED_MODULE_74__.TimeSigNote;\nFlow.Tremolo = _tremolo__WEBPACK_IMPORTED_MODULE_75__.Tremolo;\nFlow.Tuning = _tuning__WEBPACK_IMPORTED_MODULE_76__.Tuning;\nFlow.Tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_77__.Tuplet;\nFlow.Vibrato = _vibrato__WEBPACK_IMPORTED_MODULE_79__.Vibrato;\nFlow.VibratoBracket = _vibratobracket__WEBPACK_IMPORTED_MODULE_80__.VibratoBracket;\nFlow.Voice = _voice__WEBPACK_IMPORTED_MODULE_81__.Voice;\nFlow.Volta = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify;\nFlow.SymbolTypes = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes;\nFlow.SymbolModifiers = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers;\nFlow.CurvePosition = _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition;\nFlow.FontWeight = _font__WEBPACK_IMPORTED_MODULE_18__.FontWeight;\nFlow.FontStyle = _font__WEBPACK_IMPORTED_MODULE_18__.FontStyle;\nFlow.ModifierPosition = _modifier__WEBPACK_IMPORTED_MODULE_31__.ModifierPosition;\nFlow.RendererBackends = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererBackends;\nFlow.RendererLineEndType = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererLineEndType;\nFlow.BarlineType = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.BarlineType;\nFlow.StaveModifierPosition = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifierPosition;\nFlow.VoltaType = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.VoltaType;\nFlow.TextBracketPosition = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracketPosition;\nFlow.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextJustification;\nFlow.VoiceMode = _voice__WEBPACK_IMPORTED_MODULE_81__.VoiceMode;\n\n\n/***/ }),\n\n/***/ \"./src/font.ts\":\n/*!*********************!*\\\n !*** ./src/font.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Font: () => (/* binding */ Font),\n/* harmony export */ FontStyle: () => (/* binding */ FontStyle),\n/* harmony export */ FontWeight: () => (/* binding */ FontWeight)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nvar FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nclass Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/bravura_glyphs.ts\":\n/*!*************************************!*\\\n !*** ./src/fonts/bravura_glyphs.ts ***!\n \\*************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BravuraFont: () => (/* binding */ BravuraFont)\n/* harmony export */ });\nconst BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 341,\n y_min: -350,\n y_max: 348,\n ha: 698,\n o: 'm 403 167 b 420 192 413 171 420 183 l 420 294 b 410 305 420 301 416 305 b 403 304 408 305 406 305 b 367 291 403 304 374 292 b 347 310 357 291 347 298 l 347 485 b 327 501 347 494 338 501 b 304 485 312 501 304 494 l 304 298 b 285 256 302 284 298 265 b 194 220 268 246 219 226 b 177 249 181 220 177 238 l 177 422 b 157 438 177 431 167 438 b 134 422 143 438 134 431 l 134 228 b 117 189 134 207 125 193 b 79 173 108 184 79 173 b 62 150 69 170 62 158 l 62 48 b 75 35 62 39 66 35 l 78 36 b 111 50 79 36 101 45 b 127 55 117 52 122 55 b 132 50 130 55 132 53 l 132 29 b 128 22 132 26 132 23 b 17 -20 125 20 17 -20 b 0 -35 7 -23 0 -26 l 0 -130 b 13 -144 0 -137 4 -144 b 127 -104 17 -144 120 -107 l 128 -102 b 134 -109 134 -102 134 -107 l 134 -127 b 122 -147 134 -138 132 -143 b 79 -166 114 -151 79 -166 b 62 -189 69 -168 62 -180 l 62 -291 b 75 -304 62 -300 66 -304 l 78 -302 b 112 -289 79 -302 99 -294 b 117 -288 114 -288 115 -288 b 134 -311 127 -288 134 -304 l 134 -488 b 153 -504 134 -497 143 -504 b 177 -488 167 -504 177 -497 l 177 -288 b 192 -256 177 -269 184 -259 l 279 -220 b 281 -220 279 -220 281 -220 l 284 -219 b 304 -245 297 -219 304 -236 l 304 -425 b 323 -441 304 -433 312 -441 b 347 -425 338 -441 347 -433 l 347 -220 b 363 -187 347 -209 353 -192 b 403 -171 373 -183 403 -171 b 420 -147 413 -167 420 -156 l 420 -45 b 410 -33 420 -37 416 -33 b 403 -35 408 -33 406 -33 l 366 -49 b 353 -53 360 -52 356 -53 b 347 -40 348 -53 347 -49 l 347 -26 b 351 -19 347 -23 347 -20 l 474 27 b 491 46 485 30 491 37 l 491 137 b 478 153 491 143 488 153 l 475 150 b 474 150 475 150 474 150 l 474 151 b 351 105 474 151 354 107 b 347 109 348 105 347 107 b 346 128 347 117 346 127 b 366 153 346 143 348 145 z m 177 72 b 301 122 196 89 262 122 b 305 111 305 122 305 117 b 307 94 305 105 305 96 b 304 88 307 92 307 89 b 179 40 284 81 180 42 b 174 43 177 40 174 42 b 177 72 176 50 174 69 z m 305 -65 b 184 -121 301 -85 210 -121 b 177 -118 180 -121 179 -120 b 173 -92 174 -115 174 -105 b 179 -84 173 -86 174 -85 b 302 -37 180 -84 279 -46 b 307 -42 304 -37 307 -40 b 305 -65 307 -52 307 -59 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/common_metrics.ts\":\n/*!*************************************!*\\\n !*** ./src/fonts/common_metrics.ts ***!\n \\*************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CommonMetrics: () => (/* binding */ CommonMetrics)\n/* harmony export */ });\nconst CommonMetrics = {\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n scale: 0.8,\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n scale: 0.8,\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n scale: 0.8,\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.8,\n leftSideBearing: 250,\n advanceWidth: 990,\n yOffset: 300,\n },\n csymMinor: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n scale: 0.8,\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n scale: 0.8,\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n scale: 0.8,\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n treble: {\n line: -2,\n shiftX: 12,\n },\n },\n '8vb': {\n treble: {\n line: 6.5,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n width: 7,\n },\n gracenote: {\n width: 3,\n },\n },\n pedalMarking: {},\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n // used by tuplets\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n spacing: 7,\n offsetYStemUp: -8,\n offsetYStemDown: 8,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n spacing: (7 * 3) / 5,\n offsetYStemUp: -(8 * 3) / 5,\n offsetYStemDown: (8 * 3) / 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {},\n clef_small: {\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {},\n clefNote_small: {},\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n breathMarkTick: {\n shiftY: 9,\n },\n breathMarkComma: {},\n segno: {\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {},\n ornamentTurnSlash: {},\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {},\n chordSymbol: {\n scale: 0.8,\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/custom_glyphs.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/custom_glyphs.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CustomFont: () => (/* binding */ CustomFont)\n/* harmony export */ });\nconst CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/gonville_glyphs.ts\":\n/*!**************************************!*\\\n !*** ./src/fonts/gonville_glyphs.ts ***!\n \\**************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GonvilleSmuflFont: () => (/* binding */ GonvilleSmuflFont)\n/* harmony export */ });\nconst GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 412,\n y_min: -18,\n y_max: 223,\n ha: 241,\n o: 'm 569 315 b 583 321 575 319 579 321 b 591 316 586 321 589 319 b 593 310 592 314 593 312 b 579 289 593 306 589 301 b 385 111 517 219 449 156 b 372 101 379 106 373 102 b 244 28 340 78 285 46 b 21 -26 168 -6 88 -26 b 2 -21 6 -26 5 -25 b 0 47 1 -19 0 14 b 2 114 0 79 1 112 b 29 120 5 119 6 119 b 569 315 209 124 395 191 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 412,\n y_min: -223,\n y_max: 18,\n ha: 241,\n o: 'm 5 24 b 21 26 7 25 12 26 b 63 23 32 26 47 25 b 342 -81 155 13 249 -22 b 388 -113 353 -89 382 -108 b 400 -122 389 -114 395 -118 b 578 -289 459 -166 522 -225 b 593 -310 589 -301 593 -306 b 591 -316 593 -312 592 -314 b 583 -321 588 -319 586 -321 b 568 -315 579 -321 575 -319 b 29 -120 395 -191 209 -124 b 1 -114 5 -119 5 -119 b 0 -47 0 -112 0 -111 b 0 -22 0 -37 0 -29 b 5 24 0 25 0 21 z',\n },\n barlineTick: {\n x_min: -59,\n x_max: 59,\n y_min: -139,\n y_max: 139,\n ha: 279,\n o: 'm 24 200 b 34 201 26 200 30 201 b 51 198 40 201 47 200 b 84 152 72 191 84 174 b 84 149 84 151 84 150 b 68 103 84 139 83 137 b -64 -195 3 -44 -63 -194 b -74 -201 -66 -199 -70 -201 b -83 -195 -77 -201 -81 -199 b -84 -191 -84 -194 -84 -193 b -78 -155 -84 -186 -83 -177 b -25 104 -45 8 -35 53 b -11 167 -18 136 -12 164 b 24 200 -6 183 6 195 z',\n },\n breathMarkTick: {\n x_min: -151,\n x_max: 272,\n y_min: 0,\n y_max: 429,\n ha: 429,\n o: 'm 367 613 b 382 618 373 616 378 618 b 392 607 388 618 392 614 b 376 592 392 601 390 599 b 309 546 354 580 331 565 b 46 47 185 439 88 256 b 0 0 39 14 26 0 b -44 39 -23 0 -36 12 b -203 270 -68 118 -125 202 b -217 288 -213 279 -217 284 b -215 294 -217 290 -217 292 b -208 299 -213 297 -211 299 b -193 293 -204 299 -199 297 b -19 144 -124 249 -66 199 b -14 138 -16 141 -14 138 b -9 149 -14 138 -11 143 b 367 613 72 359 220 541 z',\n },\n segno: {\n x_min: 7,\n x_max: 493,\n y_min: -50,\n y_max: 650,\n ha: 699,\n o: 'm 218 934 b 237 935 224 935 231 935 b 394 820 306 935 371 889 b 398 794 397 811 398 802 b 333 730 398 758 372 730 b 269 777 302 730 280 746 b 183 851 254 823 219 851 b 158 846 175 851 166 849 b 120 786 133 835 120 815 b 122 766 120 780 121 773 b 347 511 138 672 227 570 b 368 500 356 506 366 501 l 371 499 l 372 501 b 485 672 373 502 404 550 b 560 786 506 704 540 755 b 617 873 581 818 607 857 b 645 910 639 906 640 907 b 660 915 650 914 655 915 b 687 888 674 915 687 904 b 687 886 687 887 687 887 b 665 844 687 878 687 878 b 610 761 655 830 631 792 b 462 537 551 672 501 595 b 425 480 443 508 426 482 l 422 476 l 431 472 b 628 269 521 423 591 352 b 658 136 649 225 658 179 b 518 -68 658 36 606 -48 b 484 -71 507 -70 495 -71 b 327 43 415 -71 351 -26 b 322 70 324 52 322 61 b 387 134 322 106 348 134 b 451 86 419 134 440 118 b 537 13 466 41 501 13 b 563 18 545 13 554 15 b 600 78 587 29 600 49 b 598 98 600 84 599 91 b 374 353 582 192 493 293 b 352 363 364 358 354 363 l 349 365 l 348 363 b 235 192 347 361 315 313 b 160 77 214 160 180 109 b 103 -9 139 46 113 7 b 75 -47 81 -42 80 -43 b 60 -51 70 -50 65 -51 b 33 -24 46 -51 33 -40 b 33 -22 33 -23 33 -23 b 55 19 33 -14 33 -14 b 259 329 84 63 162 181 b 297 386 279 360 296 385 l 298 388 l 290 392 b 92 594 200 441 130 512 b 62 728 71 639 62 685 b 218 934 62 834 121 922 z m 630 616 b 643 618 634 617 639 618 b 699 589 665 618 687 607 b 709 552 706 578 709 565 b 699 515 709 539 706 526 b 644 486 686 496 665 486 b 596 507 626 486 609 493 b 578 551 584 520 578 536 b 630 616 578 581 598 609 z m 62 376 b 75 378 67 377 71 378 b 124 357 93 378 112 370 b 142 312 136 344 142 328 b 131 275 142 299 138 286 b 76 246 118 256 97 246 b 28 267 59 246 41 253 b 11 311 16 280 11 296 b 62 376 11 341 30 369 z',\n },\n coda: {\n x_min: 22,\n x_max: 478,\n y_min: -31,\n y_max: 531,\n ha: 563,\n o: 'm 350 764 b 359 765 352 765 355 765 b 367 764 362 765 365 765 b 381 753 373 762 378 758 b 386 706 386 746 386 747 b 387 670 386 672 386 670 b 448 647 396 670 430 657 b 597 395 532 601 587 507 l 598 386 l 632 386 b 677 382 670 386 670 386 b 689 359 685 376 689 367 b 677 336 689 350 685 341 b 632 331 670 331 670 331 l 598 331 l 597 322 b 396 50 585 186 504 77 b 387 48 392 49 388 48 b 386 12 386 48 386 46 l 386 8 b 380 -36 386 -29 386 -28 b 359 -45 375 -42 367 -45 b 338 -36 351 -45 342 -42 b 331 8 331 -28 331 -29 l 331 12 b 330 48 331 46 331 48 b 269 70 321 48 288 60 b 120 322 186 117 130 210 l 119 331 l 86 331 b 43 336 50 331 50 331 b 31 359 35 341 31 350 b 50 385 31 370 38 381 b 86 386 53 386 60 386 l 119 386 l 120 395 b 269 647 130 508 186 601 b 330 670 288 657 321 670 b 331 706 331 670 331 672 b 332 746 331 736 332 744 b 350 764 335 754 342 762 z m 331 502 b 331 617 331 565 331 617 b 310 599 329 617 317 607 b 229 393 266 555 235 477 l 229 386 l 280 386 l 331 386 z m 393 613 b 386 617 390 615 387 617 b 386 502 386 617 386 565 l 386 386 l 437 386 l 488 386 l 488 393 b 393 613 482 486 443 575 z m 331 216 l 331 331 l 280 331 l 229 331 l 229 324 b 310 118 235 241 266 162 b 331 100 317 111 329 100 b 331 216 331 100 331 152 z m 488 324 l 488 331 l 437 331 l 386 331 l 386 216 b 386 100 386 152 386 100 b 408 118 388 100 400 111 b 488 324 452 162 482 241 z',\n },\n gClef: {\n x_min: 0,\n x_max: 623,\n y_min: -632,\n y_max: 1082,\n ha: 1713,\n o: 'm 521 1558 b 524 1558 522 1558 523 1558 b 579 1515 537 1558 556 1543 b 718 1118 662 1415 718 1254 b 717 1089 718 1108 718 1098 b 505 667 707 930 639 793 b 470 633 493 655 477 640 l 456 620 l 483 495 b 510 369 498 426 510 369 b 510 369 510 369 510 369 b 519 370 511 369 514 370 b 558 372 525 371 542 372 b 590 371 572 372 585 371 b 897 45 760 350 885 217 b 898 22 897 38 898 30 b 666 -316 898 -120 805 -256 b 657 -320 661 -318 657 -320 b 675 -403 657 -320 665 -357 b 695 -500 685 -448 694 -491 b 704 -596 701 -534 704 -566 b 642 -796 704 -677 683 -744 b 407 -909 582 -871 495 -909 b 176 -804 323 -909 238 -874 b 137 -704 150 -774 137 -739 b 168 -612 137 -672 147 -640 b 291 -550 198 -571 245 -550 b 405 -604 333 -550 376 -568 b 437 -694 427 -632 437 -663 b 305 -834 437 -764 384 -831 l 294 -835 l 298 -836 b 405 -861 330 -853 367 -861 b 539 -823 453 -861 501 -848 b 655 -596 617 -774 655 -699 b 644 -490 655 -564 651 -528 b 611 -336 640 -471 611 -336 b 611 -336 611 -336 611 -336 b 598 -339 610 -336 605 -337 b 536 -349 579 -343 558 -347 b 498 -350 529 -350 514 -350 b 449 -349 478 -350 457 -350 b 0 149 189 -320 0 -110 b 102 460 0 264 33 364 b 342 742 175 562 250 650 l 374 774 l 360 839 b 342 922 352 874 344 912 b 321 1024 329 983 323 1013 b 312 1124 315 1057 312 1091 b 477 1523 312 1275 371 1420 b 521 1558 501 1546 513 1556 z m 591 1349 b 574 1351 586 1350 580 1351 b 471 1297 542 1351 506 1332 b 376 1044 410 1236 376 1145 b 383 967 376 1019 378 993 b 415 814 385 956 414 814 b 415 814 415 814 415 814 b 460 860 416 814 450 848 b 644 1242 578 991 644 1132 b 639 1295 644 1261 643 1278 b 591 1349 632 1327 618 1342 z m 418 565 b 415 577 417 571 416 577 b 290 431 412 577 327 479 b 160 220 210 331 182 284 b 135 74 143 172 135 122 b 209 -162 135 -11 160 -94 b 495 -314 278 -259 385 -314 b 550 -310 514 -314 532 -313 b 602 -296 570 -306 602 -298 b 574 -164 602 -295 590 -236 b 522 81 559 -92 535 18 b 497 196 508 144 497 196 b 497 196 497 196 497 196 b 457 179 493 196 469 186 b 358 16 391 144 358 79 b 438 -128 358 -40 384 -95 b 455 -151 449 -135 455 -143 b 448 -165 455 -156 452 -160 b 434 -172 444 -169 440 -172 b 401 -159 427 -172 417 -168 b 256 82 305 -110 256 -15 b 386 322 256 172 299 264 b 462 358 408 337 453 358 b 462 359 462 358 462 358 b 462 360 462 359 462 359 b 418 565 462 362 422 547 z m 581 203 b 558 204 576 204 565 204 l 545 204 l 546 202 b 589 -1 546 201 565 109 b 634 -214 613 -112 633 -208 b 642 -251 636 -220 639 -237 l 648 -277 l 651 -275 b 776 -137 710 -241 752 -195 b 795 -42 789 -106 795 -73 b 581 203 795 78 707 188 z',\n },\n cClef: {\n x_min: 0,\n x_max: 643,\n y_min: -508,\n y_max: 508,\n ha: 1016,\n o: 'm 0 0 l 0 731 l 87 731 l 175 731 l 175 0 l 175 -731 l 87 -731 l 0 -731 z m 240 0 l 240 731 l 262 731 l 284 731 l 284 382 l 284 32 l 291 38 b 374 145 318 61 351 104 b 439 314 402 196 423 251 b 458 341 444 338 447 341 b 475 319 470 341 474 335 b 647 120 483 206 560 120 b 665 122 653 120 659 121 b 771 330 741 132 766 181 b 772 404 772 357 772 381 b 707 662 772 557 753 630 b 615 687 684 679 651 687 b 517 666 582 687 548 680 b 504 660 509 663 504 660 b 504 660 504 660 504 660 b 578 578 545 658 578 621 b 578 575 578 577 578 576 b 492 494 576 524 534 494 b 419 534 465 494 437 506 b 403 584 408 550 403 567 b 434 651 403 608 413 632 b 616 721 485 698 550 721 b 884 565 720 721 826 665 b 925 406 912 515 925 460 b 719 99 925 272 846 140 b 648 87 694 91 671 87 b 543 122 610 87 576 99 b 536 126 540 124 536 126 b 535 126 535 126 535 126 b 497 63 535 126 518 98 l 459 0 l 497 -63 b 535 -126 518 -98 535 -126 b 536 -126 535 -126 535 -126 b 543 -122 536 -126 540 -124 b 648 -87 575 -99 610 -87 b 677 -89 657 -87 667 -88 b 924 -382 811 -110 913 -230 b 925 -407 925 -391 925 -399 b 639 -720 925 -570 803 -706 b 615 -721 631 -720 623 -721 b 430 -647 545 -721 478 -694 b 403 -585 412 -629 403 -607 b 492 -494 403 -538 439 -494 b 497 -494 493 -494 495 -494 b 578 -578 545 -496 578 -536 b 564 -625 578 -594 574 -610 b 504 -660 551 -644 525 -659 b 504 -660 504 -660 504 -660 b 517 -666 504 -660 509 -663 b 615 -687 548 -680 582 -687 b 707 -662 651 -687 684 -679 b 772 -404 753 -630 772 -557 b 771 -330 772 -381 772 -357 b 665 -122 766 -181 741 -132 b 647 -120 659 -121 653 -120 b 475 -319 560 -120 483 -206 b 458 -341 474 -335 470 -341 b 439 -314 447 -341 444 -338 b 374 -145 423 -251 402 -196 b 291 -38 351 -104 317 -61 l 284 -32 l 284 -382 l 284 -731 l 262 -731 l 240 -731 z',\n },\n fClef: {\n x_min: 0,\n x_max: 661,\n y_min: -545,\n y_max: 254,\n ha: 798,\n o: 'm 326 364 b 356 365 336 365 346 365 b 647 278 464 365 575 332 b 788 -2 740 207 788 112 b 785 -51 788 -18 787 -34 b 161 -747 750 -356 500 -634 b 16 -784 110 -764 31 -784 b 0 -768 7 -784 0 -778 b 24 -747 0 -758 3 -755 b 601 -72 353 -625 575 -364 b 603 -10 602 -51 603 -30 b 469 298 603 133 556 243 b 346 332 432 321 389 332 b 100 185 248 332 146 277 b 89 161 97 178 89 162 b 89 161 89 161 89 161 b 95 164 90 161 92 162 b 169 185 118 179 144 185 b 308 74 232 185 293 142 b 311 42 310 63 311 53 b 167 -101 311 -36 248 -101 b 147 -99 161 -101 154 -100 b 9 79 65 -88 9 -15 l 9 79 b 326 364 9 228 148 353 z m 888 225 b 894 225 889 225 891 225 b 914 223 901 225 910 224 b 952 171 940 214 952 192 b 914 118 952 149 939 127 b 898 116 910 117 904 116 b 881 118 892 116 886 117 b 843 170 856 127 843 149 b 888 225 843 195 859 219 z m 888 -116 b 894 -116 889 -116 891 -116 b 914 -118 901 -116 910 -117 b 952 -170 940 -127 952 -149 b 914 -223 952 -192 939 -214 b 898 -225 910 -224 904 -225 b 881 -223 892 -225 886 -224 b 843 -171 856 -214 843 -193 b 888 -116 843 -146 859 -122 z',\n },\n unpitchedPercussionClef1: {\n x_min: -4,\n x_max: 337,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm -6 0 l -6 360 l 75 360 l 157 360 l 157 0 l 157 -360 l 75 -360 l -6 -360 z m 321 0 l 321 360 l 403 360 l 485 360 l 485 0 l 485 -360 l 403 -360 l 321 -360 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 501,\n y_min: -735,\n y_max: 753,\n ha: 1487,\n o: 'm 633 1083 b 639 1084 635 1084 637 1084 b 669 1072 650 1084 661 1079 b 681 1043 677 1063 681 1053 b 657 1004 681 1028 673 1013 b 467 964 609 980 535 964 l 452 964 l 452 959 b 456 874 455 932 456 903 b 418 611 456 781 443 686 b 245 415 380 495 327 435 b 195 409 228 411 214 409 b 147 412 182 409 167 410 b 110 453 124 414 110 433 b 122 482 110 464 114 474 b 151 494 130 490 141 494 b 184 478 163 494 175 489 b 194 475 186 476 190 475 b 224 486 202 475 213 479 b 283 575 246 500 263 527 b 335 871 317 657 335 760 b 331 967 335 903 334 935 l 330 980 l 321 982 b 260 992 301 989 280 992 b 139 927 206 992 160 968 b 90 895 128 906 109 895 b 42 933 70 895 49 908 b 40 947 40 937 40 942 b 105 1020 40 972 61 996 b 263 1058 150 1045 207 1058 b 350 1047 293 1058 323 1054 b 465 1030 389 1036 429 1030 b 612 1073 526 1030 579 1045 b 633 1083 618 1078 625 1082 z m 441 376 b 448 376 443 376 445 376 b 470 374 456 376 465 375 b 511 321 494 366 509 346 b 534 155 515 283 525 210 b 621 -190 556 21 589 -109 b 668 -253 632 -220 651 -245 l 672 -254 l 676 -253 b 687 -252 680 -252 683 -252 b 721 -287 707 -252 721 -269 b 705 -316 721 -298 716 -309 b 676 -321 699 -320 689 -321 b 650 -319 668 -321 659 -321 b 506 -206 588 -312 533 -269 b 444 0 487 -163 460 -72 b 441 8 443 4 441 8 b 441 8 441 8 441 8 b 436 -3 441 7 438 2 b 381 -99 422 -33 400 -72 b 375 -109 377 -105 375 -107 b 381 -114 375 -111 377 -112 b 435 -133 398 -126 415 -132 b 452 -138 446 -134 448 -134 b 457 -150 455 -141 457 -145 b 446 -166 457 -156 453 -163 b 406 -174 434 -171 420 -174 b 344 -160 385 -174 363 -169 l 337 -156 l 334 -159 b 49 -314 250 -255 145 -311 b 39 -315 45 -315 42 -315 b 10 -305 23 -315 18 -312 b 0 -281 3 -298 0 -290 b 34 -247 0 -264 14 -247 b 40 -248 36 -247 38 -247 b 46 -248 42 -248 44 -248 b 144 -208 69 -248 108 -233 b 390 306 283 -115 381 90 b 394 334 391 320 392 328 b 441 376 401 356 419 372 z m 376 -371 b 408 -371 383 -371 395 -371 b 451 -372 425 -371 444 -371 b 529 -388 482 -376 502 -380 b 689 -546 621 -417 689 -484 b 563 -696 689 -599 639 -658 l 552 -701 l 561 -705 b 700 -882 646 -748 700 -818 b 699 -896 700 -887 700 -892 b 503 -1054 689 -974 608 -1039 b 451 -1058 486 -1057 468 -1058 b 272 -1010 389 -1058 329 -1042 b 248 -972 257 -1001 248 -987 b 249 -963 248 -969 248 -966 l 250 -959 l 249 -960 b 241 -966 248 -961 244 -964 b 124 -1015 208 -992 168 -1009 b 90 -1017 118 -1016 104 -1017 b 48 -1015 72 -1017 52 -1016 b 19 -977 30 -1009 19 -993 b 31 -949 19 -967 23 -957 b 59 -937 39 -941 49 -937 b 85 -947 68 -937 77 -941 l 88 -951 l 94 -951 b 210 -845 134 -951 183 -906 b 220 -821 212 -840 216 -830 b 286 -526 264 -724 286 -623 b 283 -469 286 -507 285 -488 b 282 -459 283 -463 282 -459 b 282 -459 282 -459 282 -459 b 256 -469 281 -459 266 -464 b 141 -563 201 -491 160 -526 b 94 -592 130 -583 112 -592 b 43 -540 68 -592 43 -573 b 88 -476 43 -518 51 -505 b 376 -371 158 -418 261 -381 z m 432 -437 b 411 -437 427 -437 418 -437 l 399 -437 l 400 -440 b 406 -505 402 -448 405 -478 b 407 -527 407 -512 407 -520 b 334 -840 407 -628 382 -737 b 284 -925 315 -881 304 -901 b 280 -930 281 -928 280 -929 b 281 -930 280 -930 280 -930 b 284 -930 281 -930 282 -930 b 291 -929 286 -929 288 -929 b 320 -941 300 -929 310 -933 b 452 -991 362 -975 405 -991 l 452 -991 b 580 -883 531 -991 580 -941 b 538 -791 580 -852 566 -820 b 421 -733 508 -761 470 -742 b 392 -715 405 -730 397 -724 b 388 -698 389 -709 388 -703 b 420 -665 388 -681 401 -667 b 567 -563 490 -658 555 -613 b 569 -546 568 -557 569 -552 b 432 -437 569 -493 510 -444 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 380,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 249 313 b 272 314 256 314 264 314 b 428 259 325 314 385 293 b 547 0 505 196 547 105 b 544 -49 547 -16 546 -32 b 273 -314 526 -197 407 -314 b 32 -149 175 -314 81 -250 b 0 0 11 -105 0 -53 b 32 150 0 53 11 106 b 249 313 78 242 158 302 z m 293 279 b 273 281 286 280 280 281 b 203 251 242 281 216 270 b 170 -3 185 224 170 102 b 172 -59 170 -23 171 -42 b 203 -251 178 -163 189 -231 b 273 -281 216 -270 243 -281 b 306 -277 284 -281 295 -280 b 366 -160 344 -267 356 -243 b 376 0 373 -103 376 -51 b 366 160 376 51 373 103 b 293 279 355 250 341 272 z m 273 -360 l 275 -360 l 272 -360 z m 273 340 l 275 340 l 272 340 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 254,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 135 302 b 210 303 137 303 141 303 b 235 303 219 303 228 303 b 290 298 290 303 286 303 b 295 70 295 293 295 314 b 300 -219 295 -201 295 -202 b 352 -269 307 -239 324 -255 b 366 -287 361 -274 366 -280 b 361 -298 366 -291 364 -295 b 266 -303 357 -303 367 -303 b 210 -303 250 -303 232 -303 b 154 -303 188 -303 170 -303 b 59 -298 53 -303 63 -303 b 54 -287 55 -295 54 -291 b 68 -269 54 -280 59 -274 b 120 -219 96 -255 113 -239 b 125 -50 124 -205 125 -193 b 125 24 125 -29 125 -4 l 125 189 l 120 181 b 90 136 116 176 103 156 b 48 72 77 116 58 87 b 16 38 26 38 26 38 b 0 54 6 38 0 45 b 0 56 0 55 0 55 l 0 60 l 64 178 b 135 302 128 296 130 299 z m 183 -360 l 184 -360 l 182 -360 z m 183 340 l 184 340 l 182 340 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 337,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 210 313 b 232 314 217 314 224 314 b 317 303 261 314 293 310 b 459 147 407 277 459 217 b 441 77 459 124 453 101 b 258 -67 409 10 349 -37 b 76 -181 173 -95 117 -130 l 73 -185 l 77 -182 b 226 -128 121 -146 174 -128 b 322 -152 260 -128 293 -136 b 378 -173 346 -165 359 -170 b 395 -174 383 -174 389 -174 b 454 -149 421 -174 446 -164 b 470 -139 457 -142 464 -139 b 486 -155 478 -139 486 -145 b 462 -217 486 -165 474 -197 b 319 -313 428 -276 373 -313 l 318 -313 b 273 -300 296 -313 290 -311 b 133 -256 226 -271 178 -256 b 93 -260 119 -256 106 -257 b 32 -294 68 -265 41 -280 b 15 -303 28 -300 21 -303 b 1 -292 9 -303 3 -299 b 0 -284 0 -291 0 -288 b 6 -234 0 -271 3 -249 b 180 -36 28 -147 90 -75 b 303 122 246 -7 290 50 b 305 146 305 130 305 138 b 272 225 305 177 294 204 b 185 259 249 248 220 259 b 163 257 178 259 170 258 b 152 256 155 257 152 256 b 155 253 152 255 153 254 b 191 188 180 238 191 213 b 138 112 191 156 173 124 b 112 108 129 109 120 108 b 29 191 67 108 29 146 b 33 214 29 199 30 206 b 210 313 46 263 122 305 z m 243 -360 l 244 -360 l 241 -360 z m 243 340 l 244 340 l 241 340 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 179 313 b 209 314 189 314 199 314 b 429 163 327 314 429 247 b 282 29 429 110 369 56 l 272 26 l 275 25 b 430 -111 354 -1 413 -53 b 435 -147 433 -123 435 -136 b 268 -308 435 -222 369 -288 b 211 -314 249 -312 230 -314 b 24 -241 140 -314 72 -288 b 0 -185 7 -224 0 -204 b 82 -100 0 -142 35 -100 b 97 -101 87 -100 92 -100 b 162 -180 140 -109 162 -145 b 113 -251 162 -209 146 -239 b 110 -253 111 -252 110 -252 b 120 -256 110 -253 113 -254 b 164 -261 136 -260 150 -261 b 248 -228 197 -261 226 -250 b 281 -145 270 -206 281 -178 b 278 -112 281 -135 280 -123 b 157 10 264 -42 215 7 b 135 27 141 11 135 16 b 157 44 135 39 141 43 b 272 137 210 47 257 85 b 276 162 275 145 276 154 b 194 256 276 206 244 245 b 167 258 188 258 178 258 b 124 255 152 258 136 257 l 119 254 l 123 252 b 162 186 149 238 162 212 b 108 110 162 154 144 121 b 83 105 100 107 91 105 b 0 189 37 105 0 144 b 8 224 0 200 3 212 b 179 313 28 266 103 305 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 345,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 184 302 b 304 303 186 303 247 303 b 403 302 354 303 401 303 b 412 286 409 299 412 294 b 392 256 412 280 411 278 b 260 108 374 236 318 173 b 222 67 243 89 226 71 b 165 3 218 62 193 34 b 90 -82 138 -28 104 -66 b 65 -111 77 -97 65 -110 b 64 -111 64 -111 64 -111 b 160 -112 64 -112 74 -112 l 257 -112 l 257 -43 b 259 27 257 24 257 25 b 307 82 259 28 281 53 b 373 156 332 110 362 144 b 409 188 402 189 401 188 b 425 179 416 188 422 185 b 426 32 426 176 426 171 l 426 -112 l 452 -112 b 481 -113 476 -112 477 -112 b 494 -134 489 -116 494 -125 b 488 -149 494 -139 492 -145 b 452 -156 482 -155 481 -156 l 426 -156 l 426 -162 b 427 -183 427 -165 427 -175 b 484 -269 428 -227 441 -248 b 497 -287 493 -274 497 -280 b 493 -298 497 -291 496 -295 b 397 -303 488 -303 499 -303 b 341 -303 382 -303 363 -303 b 285 -303 320 -303 301 -303 b 190 -298 184 -303 195 -303 b 185 -287 187 -295 185 -291 b 199 -269 185 -280 190 -274 b 256 -183 242 -248 255 -227 b 256 -162 256 -175 256 -165 l 257 -156 l 135 -156 b 90 -156 117 -156 102 -156 b 5 -151 2 -156 9 -155 b 0 -140 2 -148 0 -144 b 9 -122 0 -135 3 -129 b 174 272 110 -9 170 134 b 184 302 175 295 176 298 z m 249 -360 l 250 -360 l 247 -360 z m 249 340 l 250 340 l 247 340 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 302,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 51 302 b 57 303 53 302 55 303 b 71 300 61 303 65 302 b 224 275 117 283 170 275 b 391 300 279 275 336 283 b 406 303 398 302 402 303 b 417 298 411 303 414 301 b 421 288 420 295 421 292 b 411 260 421 282 418 274 b 278 157 378 194 340 165 b 226 154 262 155 244 154 b 78 175 177 154 124 161 b 66 179 72 177 66 179 b 56 64 66 178 56 68 b 56 64 56 64 56 64 b 56 64 56 64 56 64 b 63 67 57 64 60 65 b 159 96 89 81 124 92 b 201 98 168 97 185 98 b 227 97 212 98 222 98 b 434 -104 351 80 434 -1 l 434 -105 b 239 -312 434 -208 353 -294 b 212 -314 230 -313 221 -314 b 23 -229 148 -314 76 -282 b 0 -174 7 -213 0 -193 b 82 -89 0 -131 35 -89 b 97 -90 87 -89 92 -89 b 162 -168 140 -98 162 -133 b 108 -242 162 -199 145 -230 l 102 -244 l 109 -247 b 159 -259 127 -255 143 -259 b 215 -241 178 -259 197 -253 b 281 -99 258 -212 281 -161 b 277 -51 281 -84 280 -68 b 211 62 267 6 241 51 l 205 64 l 189 64 b 57 24 142 64 96 50 b 37 14 43 14 42 14 b 20 30 26 14 20 20 b 43 293 20 41 42 290 b 51 302 44 297 48 300 z m 222 -276 b 222 -276 222 -276 222 -276 b 218 -277 221 -276 221 -276 b 216 -279 217 -278 216 -279 b 216 -279 216 -279 216 -279 b 222 -276 217 -279 222 -276 z m 217 -360 l 219 -360 l 216 -360 z m 217 340 l 219 340 l 216 340 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 272 313 b 295 314 278 314 286 314 b 350 308 314 314 336 312 b 473 226 402 295 458 259 b 481 191 479 215 481 203 b 399 108 481 147 444 108 b 373 112 390 108 382 109 b 319 187 337 124 319 156 b 372 260 319 218 337 249 b 378 263 375 262 378 263 b 378 263 378 263 378 263 b 347 275 378 264 358 271 b 305 280 333 278 319 280 b 220 242 270 280 239 267 b 178 110 201 217 187 173 b 170 31 175 88 170 41 b 170 29 170 30 170 29 b 170 29 170 29 170 29 b 180 32 171 29 175 30 b 273 52 213 45 243 52 b 364 33 302 52 332 45 b 487 -64 422 11 466 -24 b 502 -128 497 -83 502 -105 b 479 -208 502 -156 494 -185 b 272 -314 439 -268 345 -314 b 239 -310 260 -314 249 -313 b 9 -77 129 -284 35 -188 b 0 6 3 -53 0 -23 b 5 65 0 26 2 47 b 272 313 27 193 137 296 z m 290 17 b 273 19 284 18 279 19 b 227 2 254 19 236 13 b 198 -122 209 -17 198 -69 b 201 -175 198 -140 199 -158 b 274 -280 214 -258 229 -280 l 274 -280 b 341 -193 315 -280 329 -262 b 349 -123 346 -166 349 -145 b 344 -66 349 -105 347 -87 b 290 17 334 -9 321 12 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 326,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 162 314 b 179 315 168 315 174 315 b 333 260 232 315 290 294 b 361 249 343 252 350 249 b 370 250 364 249 367 249 b 435 291 395 253 417 267 b 453 303 442 299 447 303 b 460 302 455 303 457 303 b 469 288 466 299 469 296 b 456 233 469 279 465 263 b 369 16 433 146 396 56 b 290 -268 322 -53 293 -159 b 280 -302 289 -295 289 -298 b 192 -303 278 -303 235 -303 b 105 -302 150 -303 107 -303 b 96 -281 98 -298 96 -294 b 96 -280 96 -280 96 -280 b 178 -54 96 -212 128 -124 b 279 57 207 -12 235 18 b 399 198 335 107 368 146 b 404 207 402 204 404 206 b 403 207 404 207 404 207 b 400 205 403 207 402 206 b 258 155 357 172 306 155 b 132 201 212 155 167 171 b 90 222 117 215 103 222 b 58 201 78 222 67 215 b 33 141 49 187 41 168 b 16 128 30 133 23 128 b 1 138 10 128 4 131 b 0 216 0 140 0 178 b 1 293 0 253 0 291 b 15 303 4 300 9 303 b 30 298 20 303 25 301 b 52 289 37 292 43 289 b 96 300 62 289 75 293 b 162 314 124 309 140 312 z m 234 -360 l 236 -360 l 233 -360 z m 234 340 l 236 340 l 233 340 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 360,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 246 314 b 260 314 252 314 258 314 b 261 314 261 314 261 314 b 275 313 263 314 269 314 b 399 276 317 312 363 298 b 486 136 456 242 486 189 b 441 29 486 99 471 61 l 435 23 l 441 19 b 518 -119 492 -16 518 -67 b 483 -217 518 -153 507 -187 b 259 -314 435 -279 349 -314 b 138 -291 218 -314 176 -307 b 0 -118 48 -256 0 -187 b 76 18 0 -69 25 -20 l 83 23 l 77 30 b 32 137 48 61 32 99 b 42 189 32 155 36 172 b 246 314 70 260 152 310 z m 282 267 b 260 269 276 269 268 269 b 228 266 249 269 237 268 b 168 214 192 258 168 235 b 171 202 168 210 169 206 b 354 62 190 162 270 101 l 359 60 l 362 65 b 380 136 375 88 380 112 b 282 267 380 196 342 254 z m 148 -20 b 139 -16 144 -18 139 -16 b 139 -16 139 -16 139 -16 b 119 -36 137 -16 124 -29 b 91 -118 100 -62 91 -90 b 188 -255 91 -174 126 -229 b 257 -269 210 -265 234 -269 b 356 -229 298 -269 336 -255 b 368 -196 364 -218 368 -208 b 350 -151 368 -183 362 -168 b 166 -28 317 -101 256 -61 b 148 -20 161 -26 153 -23 z m 259 -360 l 261 -360 l 258 -360 z m 259 340 l 261 340 l 258 340 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 349,\n y_min: -250,\n y_max: 236,\n ha: 486,\n o: 'm 208 313 b 227 314 214 314 220 314 b 332 284 259 314 295 304 b 497 61 420 236 480 155 b 503 -4 501 42 503 19 b 498 -65 503 -26 501 -47 b 279 -303 479 -176 393 -269 b 204 -314 253 -310 228 -314 b 98 -287 166 -314 130 -305 b 25 -216 58 -265 33 -241 b 22 -191 23 -208 22 -199 b 104 -108 22 -146 59 -108 b 130 -112 112 -108 121 -109 b 184 -187 166 -124 184 -156 b 131 -260 184 -218 166 -249 b 125 -263 128 -262 125 -263 b 125 -263 125 -263 125 -263 b 156 -275 125 -264 144 -271 b 197 -280 170 -278 184 -280 b 279 -247 231 -280 260 -269 b 324 -117 300 -223 313 -182 b 333 -31 328 -93 333 -42 b 332 -29 333 -30 333 -29 b 332 -29 332 -29 332 -29 b 323 -32 332 -29 328 -30 b 230 -52 289 -45 260 -52 b 173 -44 211 -52 192 -49 b 23 50 108 -27 51 9 b 0 128 8 74 0 101 b 34 222 0 161 11 194 b 208 313 70 266 142 304 z m 248 278 b 231 281 243 280 237 281 b 195 272 217 281 203 277 b 156 156 176 259 163 221 b 154 124 154 146 154 135 b 183 -2 154 72 166 16 b 230 -19 194 -13 212 -19 b 276 -2 248 -19 266 -13 b 305 122 294 17 305 69 b 301 175 305 140 304 158 b 248 278 290 246 278 270 z m 251 -360 l 253 -360 l 250 -360 z m 251 340 l 253 340 l 250 340 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -233,\n y_max: 233,\n ha: 466,\n o: 'm 315 334 b 343 336 324 335 334 336 b 558 227 431 336 512 296 b 575 174 570 210 575 192 b 475 74 575 122 533 74 b 472 74 474 74 473 74 b 380 167 417 76 380 120 b 402 225 380 187 387 207 b 469 256 418 244 444 256 b 484 254 474 256 479 255 b 487 254 485 254 487 254 b 488 254 488 254 488 254 b 479 260 488 254 485 256 b 346 302 439 289 398 302 l 345 302 b 154 -3 205 302 154 220 b 154 -3 154 -3 154 -3 b 316 -302 154 -225 195 -300 b 321 -302 318 -302 320 -302 b 556 -108 438 -302 536 -221 b 573 -87 558 -92 562 -87 b 589 -105 584 -87 589 -93 b 582 -144 589 -114 587 -127 b 393 -327 556 -233 484 -302 b 321 -336 371 -333 346 -336 b 248 -327 296 -336 271 -333 b 7 -69 125 -296 32 -196 b 0 -1 2 -46 0 -24 b 315 334 0 170 131 317 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 409,\n y_min: -394,\n y_max: 394,\n ha: 788,\n o: 'm 308 566 b 316 568 311 567 314 568 b 337 554 325 568 334 562 b 338 446 338 550 338 549 l 338 341 l 355 341 b 558 232 437 339 514 298 b 575 179 570 216 575 197 b 475 79 575 128 533 79 b 472 79 474 79 473 79 b 380 172 417 81 380 126 b 402 231 380 192 387 213 b 469 261 418 250 444 261 b 484 260 474 261 479 261 b 487 259 485 259 487 259 b 488 259 488 259 488 259 b 479 266 488 260 485 262 b 354 307 442 292 400 306 l 338 308 l 338 6 l 338 -297 l 340 -296 b 347 -296 341 -296 344 -296 b 555 -103 449 -288 538 -205 b 573 -82 558 -87 562 -82 b 589 -100 584 -82 589 -87 b 582 -138 589 -109 587 -121 b 374 -326 554 -234 473 -307 b 342 -330 366 -327 356 -328 l 338 -330 l 338 -440 b 339 -489 338 -460 339 -476 b 332 -561 339 -563 338 -555 b 317 -568 328 -566 322 -568 b 296 -554 308 -568 299 -563 b 295 -440 295 -550 295 -549 l 295 -330 l 293 -329 b 282 -328 291 -329 287 -328 b 7 -63 146 -310 35 -203 b 0 4 2 -41 0 -18 b 259 331 0 156 103 291 b 294 338 269 333 292 338 b 295 444 295 338 295 385 b 296 554 295 549 295 550 b 308 566 298 559 303 564 z m 295 4 b 294 303 295 288 295 303 b 284 301 293 303 288 302 b 154 3 190 276 154 192 l 154 2 b 291 -295 154 -204 190 -283 l 295 -295 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 235,\n y_min: -118,\n y_max: 118,\n ha: 235,\n o: 'm 159 168 b 169 169 162 169 166 169 b 198 153 180 169 192 163 b 202 97 202 146 202 147 l 202 87 l 202 33 l 257 33 l 267 33 b 322 29 317 33 315 33 b 339 0 333 22 339 11 b 323 -28 339 -11 333 -22 b 266 -33 315 -33 317 -33 l 257 -33 l 202 -33 l 202 -87 l 202 -97 b 198 -153 202 -148 202 -146 b 169 -169 191 -164 180 -169 b 141 -153 158 -169 147 -164 b 137 -97 137 -146 137 -147 l 137 -87 l 137 -33 l 82 -33 l 72 -33 b 16 -28 22 -33 23 -33 b 0 0 5 -22 0 -11 b 16 28 0 11 5 22 b 72 33 23 33 22 33 l 82 33 l 137 33 l 137 87 l 137 97 b 141 153 137 148 137 146 b 159 168 145 160 151 165 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 235,\n y_min: -23,\n y_max: 23,\n ha: 46,\n o: 'm 23 32 b 177 33 26 32 103 33 b 315 32 246 33 312 32 b 338 0 331 27 338 14 b 315 -32 338 -14 331 -27 b 169 -33 312 -33 241 -33 b 23 -32 98 -33 26 -33 b 0 0 8 -27 0 -14 b 23 32 0 13 8 26 z',\n },\n timeSigParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensRightSmall: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n timeSigParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n timeSigParensLeftSmall: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 663,\n y_min: -174,\n y_max: 174,\n ha: 349,\n o: 'm 19 250 b 27 251 21 251 24 251 b 36 250 31 251 34 251 b 50 239 41 248 47 244 b 55 93 54 233 55 247 b 55 0 55 67 55 37 b 55 -93 55 -37 55 -67 b 50 -239 55 -247 54 -233 b 28 -251 45 -247 36 -251 b 1 -232 16 -251 5 -244 b 0 4 0 -230 0 -112 b 1 232 0 117 0 230 b 19 250 4 240 11 247 z m 117 250 b 126 251 119 251 122 251 b 134 250 129 251 132 251 b 152 232 142 247 149 240 b 153 128 153 229 153 214 b 154 31 153 48 153 31 b 154 31 154 31 154 31 b 417 191 176 112 281 176 b 478 194 437 193 458 194 b 801 31 636 194 776 127 b 801 31 801 31 801 31 b 802 128 802 31 802 48 b 805 237 802 235 802 232 b 830 251 811 246 821 251 b 852 239 839 251 847 247 b 857 93 857 233 857 247 b 857 0 857 67 857 37 b 857 -93 857 -37 857 -67 b 852 -239 857 -247 857 -233 b 830 -251 847 -247 838 -251 b 807 -239 821 -251 812 -247 b 802 -128 802 -232 802 -239 b 801 -31 802 -48 802 -31 b 801 -31 801 -31 801 -31 b 539 -191 779 -112 675 -176 b 477 -194 518 -193 498 -194 b 154 -31 319 -194 180 -127 b 154 -31 154 -31 154 -31 b 153 -128 153 -31 153 -48 b 148 -239 153 -239 153 -232 b 126 -251 143 -247 134 -251 b 99 -232 114 -251 103 -244 b 98 4 99 -230 98 -112 b 99 232 98 117 99 230 b 117 250 102 240 109 247 z m 458 168 b 439 169 452 169 445 169 b 332 44 375 169 332 116 b 344 -25 332 22 336 -1 b 517 -169 377 -116 452 -169 b 613 -101 558 -169 595 -148 b 623 -44 620 -83 623 -64 b 458 168 623 50 549 154 z m 919 250 b 928 251 921 251 924 251 b 936 250 931 251 934 251 b 951 239 942 248 947 244 b 955 93 955 233 955 247 b 955 0 955 67 955 36 b 955 -93 955 -37 955 -67 b 951 -239 955 -247 955 -233 b 928 -251 945 -247 937 -251 b 902 -232 917 -251 905 -244 b 900 4 901 -230 900 -112 b 901 232 900 117 901 230 b 919 250 904 240 911 247 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 455,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 291 193 b 326 194 303 194 315 194 b 649 38 482 194 619 129 b 655 0 653 25 655 12 b 327 -194 655 -106 513 -194 b 0 0 144 -194 0 -109 b 291 193 0 100 124 182 z m 308 168 b 289 169 301 169 295 169 b 181 44 224 169 181 116 b 194 -26 181 22 185 -1 b 366 -169 226 -116 302 -169 b 463 -101 408 -169 445 -148 b 473 -45 470 -83 473 -64 b 308 168 473 50 398 154 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z m 388 139 b 372 141 383 140 378 141 b 99 -26 307 141 174 61 b 50 -116 68 -62 50 -96 b 60 -136 50 -125 53 -132 b 83 -141 66 -139 74 -141 b 367 40 152 -141 296 -52 b 405 115 392 72 405 98 b 388 139 405 127 399 135 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 316,\n y_min: -135,\n y_max: 135,\n ha: 269,\n o: 'm 270 193 b 281 194 272 194 276 194 b 322 192 294 194 315 193 b 455 53 411 178 455 120 b 307 -156 455 -20 405 -104 b 166 -194 260 -182 211 -194 b 3 -81 84 -194 17 -153 b 0 -52 1 -72 0 -62 b 270 193 0 62 123 178 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 440,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 67 190 b 82 191 71 191 76 191 b 97 190 88 191 94 191 b 216 138 108 188 116 184 l 317 91 l 417 138 b 548 191 529 190 532 191 b 551 191 549 191 550 191 b 634 109 601 191 634 151 b 611 52 634 89 627 69 b 549 17 601 41 597 39 b 513 0 529 8 513 0 b 549 -17 513 0 529 -8 b 611 -52 597 -39 601 -41 b 634 -109 627 -69 634 -89 b 551 -191 634 -151 601 -191 b 548 -191 550 -191 549 -191 b 417 -138 532 -191 529 -190 l 317 -91 l 216 -138 b 86 -191 105 -190 102 -191 b 83 -191 85 -191 84 -191 b 0 -109 33 -191 0 -151 b 23 -52 0 -89 7 -69 b 85 -17 33 -41 37 -39 b 121 0 105 -8 121 0 b 85 17 121 0 105 8 b 23 52 37 39 33 41 b 0 109 7 69 0 89 b 67 190 0 146 26 182 z m 91 141 b 82 142 88 142 85 142 b 49 109 63 142 49 126 b 59 86 49 101 52 92 b 159 37 64 81 55 85 b 238 0 202 17 238 0 b 159 -37 238 0 202 -17 b 59 -86 55 -85 64 -81 b 49 -109 52 -92 49 -101 b 82 -142 49 -126 62 -142 l 82 -142 b 206 -88 91 -142 91 -141 b 317 -37 267 -60 317 -37 b 428 -88 317 -37 367 -60 b 551 -142 542 -141 543 -142 l 552 -142 b 584 -109 572 -142 584 -126 b 574 -86 584 -101 581 -92 b 475 -37 569 -81 578 -85 b 396 0 431 -17 396 0 b 475 37 396 0 431 17 b 574 86 578 85 569 81 b 584 109 581 92 584 101 b 552 142 584 126 572 142 l 551 142 b 428 88 543 142 542 141 b 317 37 367 60 317 37 b 206 88 317 37 267 60 b 91 141 145 117 93 140 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 60 189 b 76 191 65 190 71 191 b 118 179 91 191 106 187 b 169 138 121 177 144 159 l 216 100 l 262 138 b 325 185 312 179 314 181 b 355 191 335 189 345 191 b 431 115 397 191 431 156 b 426 86 431 105 430 96 b 372 29 419 69 415 64 b 337 0 353 14 337 0 b 372 -29 337 0 353 -14 b 426 -86 415 -64 419 -69 b 431 -115 430 -96 431 -105 b 355 -191 431 -156 397 -191 b 325 -185 345 -191 335 -189 b 262 -138 314 -181 312 -179 l 216 -100 l 169 -138 b 106 -185 120 -179 117 -181 b 76 -191 96 -189 86 -191 b 0 -115 35 -191 0 -156 b 6 -86 0 -105 2 -96 b 59 -29 12 -69 17 -64 b 94 0 78 -14 94 0 b 59 29 94 0 78 14 b 20 63 40 45 22 61 b 0 114 6 78 0 97 b 60 189 0 148 23 181 z m 88 140 b 77 142 85 141 81 142 b 56 133 69 142 61 139 b 49 115 51 128 49 121 b 55 98 49 109 51 103 b 114 48 56 96 82 74 b 171 0 146 22 171 0 b 114 -48 171 0 146 -22 b 55 -98 82 -74 56 -96 b 49 -114 51 -103 49 -109 b 65 -140 49 -125 55 -135 b 77 -142 68 -141 72 -142 b 88 -140 81 -142 85 -141 b 154 -87 91 -138 114 -120 b 216 -36 188 -59 216 -36 b 278 -87 216 -36 244 -59 b 343 -140 318 -120 341 -138 b 355 -142 346 -141 350 -142 b 367 -140 359 -142 364 -141 b 382 -114 377 -135 382 -125 b 377 -98 382 -109 381 -103 b 317 -48 376 -96 349 -74 b 260 0 286 -22 260 0 b 317 48 260 0 286 22 b 377 98 349 74 376 96 b 382 114 381 103 382 109 b 367 140 382 125 377 135 b 355 142 364 141 359 142 b 343 140 350 142 346 141 b 278 87 341 138 318 120 b 216 36 244 59 216 36 b 154 87 216 36 188 59 b 88 140 112 121 91 138 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 300,\n y_min: -133,\n y_max: 133,\n ha: 265,\n o: 'm 24 190 b 32 191 26 191 29 191 b 46 189 37 191 43 190 b 135 114 52 186 50 187 b 216 44 179 76 216 44 b 296 114 216 44 252 76 b 396 191 392 197 384 190 b 398 191 397 191 398 191 b 432 158 418 191 432 175 b 422 135 432 150 429 142 b 343 66 420 133 384 102 b 267 0 301 30 267 0 b 343 -66 267 0 301 -30 b 422 -135 384 -102 420 -133 b 432 -158 429 -142 432 -150 b 398 -191 432 -175 418 -191 b 396 -191 398 -191 397 -191 b 296 -114 384 -190 392 -197 b 216 -44 252 -76 216 -44 b 135 -114 216 -44 179 -76 b 35 -191 40 -197 48 -190 b 33 -191 35 -191 34 -191 b 0 -158 13 -191 0 -175 b 10 -135 0 -150 3 -142 b 89 -66 12 -133 48 -102 b 164 0 131 -30 164 0 b 89 66 164 0 131 30 b 10 135 48 102 12 133 b 0 158 3 142 0 150 b 24 190 0 172 9 186 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 357,\n y_min: -178,\n y_max: 178,\n ha: 357,\n o: 'm 242 256 b 256 257 249 257 253 257 b 270 256 260 257 263 257 b 514 0 412 248 514 131 b 496 -95 514 -31 508 -63 b 255 -257 454 -200 355 -257 b 61 -166 184 -257 112 -228 b 0 -2 19 -117 0 -58 b 242 256 0 126 96 248 z m 267 190 b 257 191 262 190 259 191 b 245 190 254 191 251 190 b 153 159 212 188 179 177 l 147 156 l 202 101 l 257 46 l 311 101 l 366 156 l 361 159 b 267 190 334 177 302 188 z m 155 -55 l 210 0 l 155 54 l 101 109 l 97 104 b 66 0 77 74 66 37 b 71 -44 66 -15 68 -30 b 97 -105 77 -66 86 -87 l 101 -110 z m 416 104 b 413 109 414 107 413 109 b 358 54 413 109 388 84 l 304 0 l 358 -55 l 413 -110 l 416 -105 b 447 0 437 -74 447 -37 b 416 104 447 36 437 73 z m 312 -102 b 257 -47 282 -72 257 -47 b 202 -102 257 -47 232 -72 l 147 -156 l 153 -160 b 257 -191 183 -180 220 -191 b 361 -160 294 -191 330 -180 l 366 -156 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 326 213 b 333 214 327 214 330 214 b 355 194 342 214 344 212 b 647 -174 447 44 562 -101 b 659 -184 652 -178 657 -182 b 666 -198 664 -188 666 -193 b 650 -214 666 -207 660 -214 b 598 -200 645 -214 641 -213 b 333 -161 514 -174 423 -161 b 68 -200 242 -161 152 -174 b 16 -214 25 -213 20 -214 b 0 -198 7 -214 0 -208 b 12 -179 0 -190 1 -189 b 311 194 100 -106 216 40 b 326 213 320 208 322 211 z m 338 141 b 333 153 336 147 333 153 b 327 141 333 153 330 147 b 190 -130 285 41 232 -63 b 185 -138 187 -134 185 -138 b 185 -138 185 -138 185 -138 b 185 -138 185 -138 185 -138 b 195 -137 187 -138 190 -138 b 224 -134 201 -136 214 -135 b 333 -128 260 -130 296 -128 b 410 -131 359 -128 384 -129 b 470 -137 425 -132 454 -135 b 480 -138 475 -138 479 -138 b 481 -138 481 -138 481 -138 b 481 -138 481 -138 481 -138 b 478 -133 481 -138 479 -135 b 338 141 436 -67 381 40 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 323,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 225 213 b 232 214 227 214 230 214 b 253 191 242 214 245 212 b 447 -169 316 42 385 -85 b 465 -198 461 -187 465 -193 b 463 -204 465 -200 464 -202 b 450 -214 461 -211 457 -214 b 431 -208 446 -214 439 -212 b 233 -162 368 -178 300 -162 b 33 -208 165 -162 97 -178 b 15 -214 25 -212 19 -214 b 5 -209 11 -214 8 -213 b 0 -199 2 -206 0 -203 b 9 -181 0 -194 3 -188 b 213 194 67 -109 149 42 b 225 213 218 208 220 211 z m 280 51 b 264 85 274 62 267 78 l 258 98 l 248 83 b 93 -135 201 9 143 -73 b 87 -143 90 -139 87 -143 b 87 -144 87 -144 87 -144 b 87 -144 87 -144 87 -144 b 94 -141 87 -144 90 -142 b 297 -98 162 -113 233 -98 b 354 -102 317 -98 336 -99 b 363 -104 359 -103 363 -104 b 363 -104 363 -104 363 -104 b 360 -97 363 -103 361 -101 b 280 51 337 -60 304 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -149,\n y_max: 149,\n ha: 297,\n o: 'm 224 213 b 232 214 226 213 229 214 b 250 197 241 214 244 211 b 277 135 269 152 270 149 b 288 111 280 127 285 117 b 336 12 296 92 330 23 b 344 -3 336 12 340 5 b 376 -60 360 -32 363 -38 b 452 -177 406 -112 430 -148 b 463 -198 463 -191 463 -191 b 447 -214 463 -208 458 -214 l 447 -214 l 441 -214 l 430 -208 b 232 -163 368 -178 300 -163 b 33 -208 163 -163 95 -178 l 22 -214 l 16 -214 l 16 -214 b 0 -198 6 -214 0 -208 b 11 -177 0 -191 0 -191 b 75 -81 29 -154 52 -120 b 119 -3 93 -52 102 -36 b 127 12 123 5 127 12 b 176 111 133 23 167 92 b 186 135 178 117 183 127 b 213 197 193 149 194 152 b 224 213 218 207 220 210 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 462,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 326 198 b 333 199 328 199 330 199 b 350 189 340 199 342 198 b 638 20 417 112 517 53 b 654 16 645 19 652 17 b 666 0 662 14 666 7 b 654 -16 666 -7 662 -14 b 638 -20 652 -17 645 -19 b 352 -186 518 -53 419 -110 b 333 -199 342 -198 340 -199 b 316 -189 326 -199 324 -198 b 28 -20 249 -112 149 -53 b 12 -16 21 -19 14 -17 b 0 0 4 -14 0 -7 b 12 16 0 7 4 14 b 28 20 14 17 21 19 b 316 189 149 53 249 112 b 326 198 321 194 324 197 z m 338 143 b 333 149 335 146 333 149 b 328 143 333 149 331 146 b 172 4 290 85 233 35 b 165 0 168 2 165 0 b 172 -4 165 0 168 -2 b 328 -143 233 -35 290 -85 b 333 -149 331 -147 332 -149 b 335 -146 334 -149 334 -148 b 494 -4 370 -91 432 -35 b 501 0 498 -2 501 0 b 494 4 501 0 498 2 b 338 143 433 35 376 85 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 251 183 240 199 243 197 b 445 19 295 109 362 52 b 464 0 461 13 464 10 b 447 -18 464 -9 460 -13 b 251 -183 365 -49 294 -109 b 232 -199 243 -197 240 -199 b 213 -183 224 -199 221 -197 b 19 -19 169 -109 102 -52 b 0 0 3 -13 0 -10 b 17 18 0 9 3 13 b 213 183 99 50 169 109 b 225 198 218 193 221 196 z m 255 119 b 251 122 253 121 252 122 b 244 114 250 122 249 120 b 98 -17 208 61 151 10 l 95 -19 l 98 -21 b 211 -120 138 -44 176 -78 b 213 -123 212 -122 212 -123 b 213 -122 213 -123 213 -122 b 366 17 244 -72 311 -11 l 369 19 l 366 21 b 255 119 327 44 283 82 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 322,\n y_min: -138,\n y_max: 138,\n ha: 277,\n o: 'm 225 198 b 232 199 227 199 229 199 b 253 180 241 199 243 197 b 444 19 297 107 363 52 b 464 0 461 13 464 10 b 444 -19 464 -10 461 -13 b 253 -180 363 -52 297 -107 b 232 -199 243 -197 241 -199 b 211 -180 223 -199 221 -197 b 19 -19 167 -107 101 -52 b 0 0 3 -13 0 -10 b 19 19 0 10 3 13 b 211 180 101 52 167 107 b 225 198 219 194 221 196 z',\n },\n augmentationDot: {\n x_min: -63,\n x_max: 63,\n y_min: -63,\n y_max: 63,\n ha: 126,\n o: 'm -18 89 b 0 90 -12 90 -6 90 b 90 0 49 90 90 49 b 89 -18 90 -6 90 -12 b -1 -90 79 -64 39 -90 b -70 -57 -26 -90 -52 -80 b -90 -1 -84 -40 -90 -20 b -18 89 -90 40 -63 79 z',\n },\n tremolo1: {\n x_min: -252,\n x_max: 216,\n y_min: -185,\n y_max: 148,\n ha: 333,\n o: 'm 265 211 b 275 213 269 212 272 213 b 311 175 295 213 311 194 b 301 151 311 166 308 158 b 243 110 297 147 295 145 b 175 64 224 97 194 77 b 107 18 156 52 126 31 b 40 -27 89 6 58 -15 b -28 -73 21 -40 -9 -60 b -95 -119 -46 -86 -77 -106 b -162 -164 -113 -131 -144 -152 b -230 -210 -181 -177 -211 -197 b -285 -247 -249 -223 -274 -240 b -310 -263 -297 -255 -308 -263 b -326 -267 -315 -266 -321 -267 b -363 -230 -346 -267 -363 -250 b -357 -212 -363 -224 -361 -218 b -309 -174 -353 -205 -350 -202 b -203 -103 -287 -160 -240 -128 b -68 -11 -167 -78 -106 -37 b 67 80 -30 14 31 55 b 194 166 104 105 161 143 b 265 211 255 207 259 210 z',\n },\n flag8thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -745,\n y_max: -4,\n ha: 741,\n o: 'm -25 -167 l -25 -5 l -21 -5 b 1 -29 -9 -5 -3 -12 b 183 -326 32 -144 91 -241 b 336 -686 285 -421 336 -551 b 219 -1028 336 -802 298 -923 b 172 -1072 191 -1065 183 -1072 b 150 -1052 158 -1072 150 -1063 b 158 -1032 150 -1046 153 -1039 b 284 -707 241 -935 284 -818 b 185 -446 284 -610 251 -517 b -24 -328 144 -402 72 -361 b -25 -167 -24 -328 -25 -295 z',\n },\n flag8thDown: {\n x_min: -15,\n x_max: 271,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 242 1071 b 252 1073 246 1072 249 1073 b 277 1051 260 1073 267 1066 b 390 687 352 938 390 810 b 343 464 390 609 374 533 b 248 331 319 413 285 365 b 60 125 166 256 110 194 b 0 21 35 90 10 47 b -19 5 -4 11 -12 5 l -22 5 l -22 167 l -22 328 l -17 328 b 105 350 13 328 69 338 b 334 722 241 396 334 547 b 240 1027 334 826 301 934 b 229 1050 230 1041 229 1044 b 242 1071 229 1060 234 1068 z',\n },\n flag16thUp: {\n x_min: -17,\n x_max: 234,\n y_min: -847,\n y_max: -4,\n ha: 843,\n o: 'm -25 -151 l -25 -5 l -21 -5 b 0 -23 -11 -5 -5 -11 b 208 -289 31 -96 103 -189 b 336 -592 292 -369 336 -477 b 311 -740 336 -641 328 -691 l 308 -751 l 312 -762 b 336 -906 328 -808 336 -857 b 241 -1185 336 -1004 304 -1103 b 202 -1220 218 -1215 213 -1220 b 180 -1198 188 -1220 180 -1210 b 187 -1181 180 -1193 182 -1187 b 286 -923 252 -1106 286 -1015 b 283 -873 286 -906 285 -890 b 278 -844 281 -861 279 -849 b 274 -830 277 -842 276 -836 b 152 -651 255 -758 210 -692 b -10 -612 119 -628 51 -612 b -22 -611 -16 -612 -21 -612 l -25 -611 l -25 -465 l -25 -319 l -21 -319 b 0 -336 -11 -319 -5 -325 b 207 -602 31 -410 105 -504 b 275 -685 235 -628 260 -658 b 277 -688 276 -687 277 -688 b 280 -680 278 -688 279 -685 b 286 -609 284 -657 286 -633 b 280 -541 286 -586 284 -563 b 278 -530 280 -537 279 -532 b 274 -516 277 -528 276 -522 b 152 -337 255 -444 210 -378 b -10 -298 119 -315 51 -298 b -22 -298 -16 -298 -21 -298 l -25 -297 z',\n },\n flag16thDown: {\n x_min: -15,\n x_max: 267,\n y_min: 4,\n y_max: 745,\n ha: 741,\n o: 'm 319 1071 b 328 1073 322 1072 325 1073 b 350 1054 337 1073 344 1067 b 384 901 373 1008 384 955 b 360 766 384 856 376 810 l 356 756 l 360 745 b 384 615 376 703 384 659 b 273 336 384 516 346 416 b 217 282 258 319 241 302 b -1 19 125 204 42 104 b -19 5 -5 11 -13 5 l -22 5 l -22 146 l -22 287 l -12 288 b 212 369 90 304 162 330 b 339 620 294 433 339 524 b 330 691 339 644 336 668 l 329 699 l 323 690 b 217 569 296 645 265 610 b -1 305 125 491 42 390 b -19 292 -5 297 -13 292 l -22 292 l -22 433 l -22 573 l -12 575 b 194 643 78 589 147 611 b 339 908 286 704 339 806 b 313 1030 339 950 330 991 b 306 1050 306 1045 306 1045 b 319 1071 306 1060 311 1068 z',\n },\n flag32ndUp: {\n x_min: -17,\n x_max: 233,\n y_min: -1005,\n y_max: 96,\n ha: 1101,\n o: 'm -25 -6 l -25 139 l -21 139 b 1 121 -11 139 -6 134 b 172 -93 31 61 97 -21 b 201 -121 182 -103 195 -115 b 328 -375 266 -184 311 -274 b 335 -464 333 -404 335 -434 b 317 -612 335 -513 329 -564 l 313 -626 l 315 -632 b 328 -689 320 -647 325 -670 b 335 -778 333 -717 335 -747 b 317 -926 335 -827 329 -878 l 313 -940 l 315 -946 b 328 -1002 320 -961 325 -984 b 335 -1092 333 -1032 335 -1062 b 280 -1346 335 -1177 316 -1264 b 228 -1441 265 -1380 236 -1432 b 213 -1447 224 -1445 218 -1447 b 191 -1425 202 -1447 191 -1438 b 198 -1406 191 -1419 192 -1416 b 284 -1118 254 -1317 284 -1215 b 281 -1072 284 -1103 283 -1087 b 118 -798 269 -948 207 -844 b 6 -778 93 -785 60 -779 l -25 -778 l -25 -634 l -25 -489 l -21 -489 b 1 -507 -11 -489 -6 -494 b 172 -720 31 -567 97 -649 b 275 -848 229 -774 249 -800 l 281 -858 l 282 -849 b 284 -806 283 -834 284 -820 b 118 -484 284 -663 220 -537 b 6 -465 93 -471 60 -465 l -25 -464 l -25 -320 l -25 -175 l -21 -175 b 1 -193 -11 -175 -6 -180 b 172 -406 31 -253 97 -335 b 275 -534 229 -460 249 -486 l 281 -544 l 282 -535 b 284 -492 283 -521 284 -506 b 118 -170 284 -349 220 -223 b 6 -151 93 -157 60 -151 l -25 -151 z',\n },\n flag32ndDown: {\n x_min: -15,\n x_max: 270,\n y_min: -96,\n y_max: 895,\n ha: 991,\n o: 'm 292 1287 b 300 1288 294 1288 297 1288 b 309 1287 303 1288 306 1288 b 374 1151 324 1281 359 1209 b 388 1039 383 1115 388 1077 b 368 904 388 993 381 947 l 365 896 l 368 886 b 374 864 370 881 372 871 b 388 752 383 828 388 790 b 368 618 388 706 381 660 l 365 609 l 368 599 b 374 578 370 594 372 584 b 388 467 384 541 388 504 b 236 128 388 339 334 215 b 201 99 226 119 226 119 b 0 -122 110 27 36 -55 b -19 -139 -5 -133 -12 -139 l -22 -139 l -22 0 l -22 138 l -16 138 b 200 215 66 150 144 178 b 340 485 287 273 340 376 b 336 531 340 501 339 516 l 335 540 l 333 537 b 236 415 306 488 275 449 b 201 385 226 406 226 405 b 0 164 110 313 36 231 b -19 148 -5 153 -12 148 l -22 148 l -22 286 l -22 424 l -16 425 b 200 501 66 437 144 464 b 340 772 287 559 340 663 b 336 818 340 787 339 803 l 335 827 l 333 823 b 236 701 306 774 275 735 b 201 672 226 692 226 692 b 0 451 110 600 36 518 b -19 434 -5 440 -12 434 l -22 434 l -22 572 l -22 711 l -16 711 b 219 802 77 725 165 759 b 339 1058 298 865 339 959 b 286 1246 339 1122 322 1187 b 278 1267 279 1258 278 1260 b 292 1287 278 1276 284 1284 z',\n },\n flag64thUp: {\n x_min: -17,\n x_max: 233,\n y_min: -933,\n y_max: 296,\n ha: 1230,\n o: 'm -25 282 l -25 427 l -21 427 b 2 404 -9 427 -4 421 b 148 203 25 333 72 268 b 313 -42 230 134 277 64 b 335 -182 328 -86 335 -134 b 309 -332 335 -233 327 -284 l 307 -339 l 312 -354 b 335 -496 328 -399 335 -447 b 309 -646 335 -547 327 -598 l 307 -653 l 312 -668 b 335 -809 328 -713 335 -761 b 309 -960 335 -860 327 -911 l 307 -966 l 312 -981 b 335 -1122 328 -1027 335 -1075 b 288 -1325 335 -1191 320 -1260 b 265 -1344 281 -1340 276 -1344 b 243 -1322 252 -1344 243 -1335 b 251 -1300 243 -1317 243 -1316 b 289 -1125 276 -1244 289 -1184 b 173 -854 289 -1018 248 -915 b 34 -798 127 -816 83 -798 b -9 -802 20 -798 5 -800 b -21 -804 -14 -803 -20 -804 l -25 -804 l -25 -659 l -25 -515 l -21 -515 b 2 -537 -9 -515 -4 -520 b 148 -738 25 -609 72 -673 b 274 -892 204 -785 247 -838 b 279 -900 277 -898 279 -900 b 280 -898 280 -900 280 -899 b 282 -886 280 -897 281 -892 b 289 -811 287 -861 289 -836 b 173 -540 289 -703 246 -600 b 34 -484 127 -502 83 -484 b -9 -489 20 -484 5 -486 b -21 -490 -14 -489 -20 -490 l -25 -490 l -25 -346 l -25 -201 l -21 -201 b 2 -224 -9 -201 -4 -207 b 148 -424 25 -295 72 -360 b 274 -578 204 -471 247 -524 b 279 -586 277 -584 279 -586 b 280 -584 280 -586 280 -585 b 282 -573 280 -583 281 -578 b 289 -497 287 -548 289 -522 b 173 -226 289 -389 246 -286 b 34 -171 127 -188 83 -171 b -9 -175 20 -171 5 -172 b -21 -176 -14 -176 -20 -176 l -25 -176 l -25 -32 l -25 113 l -21 113 b 2 90 -9 113 -4 107 b 148 -110 25 19 72 -46 b 274 -264 204 -158 247 -210 b 279 -272 277 -270 279 -272 b 280 -270 280 -272 280 -272 b 282 -259 280 -269 281 -264 b 289 -184 287 -234 289 -208 b 173 88 289 -75 246 28 b 34 143 127 125 83 143 b -9 139 20 143 5 142 b -21 137 -14 138 -20 137 l -25 137 z',\n },\n flag64thDown: {\n x_min: -15,\n x_max: 271,\n y_min: -296,\n y_max: 820,\n ha: 1116,\n o: 'm 272 1179 b 281 1181 275 1180 278 1181 b 297 1174 286 1181 292 1178 b 359 1098 322 1154 344 1127 b 390 972 380 1059 390 1016 b 357 836 390 926 379 879 l 351 825 l 353 823 b 359 812 354 822 357 817 b 390 685 380 773 390 729 b 357 549 390 639 379 593 l 351 539 l 353 536 b 359 526 354 535 357 530 b 390 399 380 486 390 443 b 357 263 390 353 379 306 l 351 252 l 353 250 b 390 113 374 218 390 162 b 390 113 390 113 390 113 b 246 -148 390 9 339 -84 b -1 -411 129 -228 30 -334 b -18 -426 -4 -420 -11 -426 l -22 -427 l -22 -291 l -22 -156 l -13 -155 b 156 -124 51 -152 115 -140 b 338 126 266 -80 338 23 b 326 195 338 150 334 173 b 321 207 324 204 323 207 b 318 203 321 207 319 205 b 246 139 299 180 276 159 b -1 -125 129 59 30 -48 b -18 -140 -4 -134 -11 -139 l -22 -140 l -22 -5 l -22 131 l -13 131 b 156 163 51 134 115 146 b 338 413 266 206 338 310 b 326 482 338 436 334 459 b 321 493 324 490 323 493 b 318 489 321 493 319 492 b 246 425 299 466 276 446 b -1 162 129 345 30 239 b -18 147 -4 153 -11 147 l -22 146 l -22 282 l -22 417 l -13 418 b 156 449 51 421 115 433 b 338 699 266 493 338 596 b 326 768 338 723 334 746 b 321 780 324 777 323 780 b 318 776 320 780 319 778 b 246 712 299 753 276 732 b -1 448 129 632 30 525 b -19 433 -4 439 -11 434 l -22 433 l -22 568 l -22 704 l -13 704 b 156 736 51 707 115 719 b 338 985 264 778 337 879 l 338 985 b 272 1137 338 1045 313 1103 b 259 1159 262 1146 259 1150 b 272 1179 259 1168 265 1176 z',\n },\n flag128thUp: {\n x_min: -17,\n x_max: 231,\n y_min: -987,\n y_max: 496,\n ha: 1484,\n o: 'm -25 582 l -25 715 l -21 715 b 3 693 -11 715 -6 710 b 150 501 30 639 82 570 b 237 396 191 459 212 434 b 333 93 300 302 333 195 b 311 -46 333 45 326 -2 b 307 -60 308 -54 307 -57 b 310 -72 307 -63 308 -65 b 332 -220 325 -121 332 -171 b 311 -359 332 -269 325 -316 b 307 -374 308 -368 307 -371 b 310 -386 307 -377 308 -379 b 332 -534 325 -434 332 -485 b 311 -673 332 -583 325 -630 b 307 -688 308 -682 307 -685 b 310 -700 307 -690 308 -693 b 332 -848 325 -748 332 -799 b 311 -987 332 -896 325 -944 b 307 -1001 308 -995 307 -998 b 310 -1013 307 -1004 308 -1007 b 333 -1161 325 -1062 333 -1113 b 268 -1391 333 -1246 311 -1326 b 235 -1422 251 -1417 246 -1422 b 213 -1402 221 -1422 213 -1413 b 220 -1382 213 -1396 215 -1389 b 286 -1176 265 -1322 286 -1250 b 163 -883 286 -1073 244 -966 b -16 -806 122 -841 54 -812 b -23 -805 -19 -806 -22 -806 l -25 -805 l -25 -673 l -25 -541 l -21 -541 b 3 -562 -11 -541 -6 -545 b 150 -754 30 -617 82 -685 b 273 -921 209 -814 242 -860 l 280 -933 l 281 -927 b 287 -861 285 -906 287 -884 b 163 -569 287 -756 243 -650 b -16 -492 122 -527 54 -498 b -23 -492 -19 -492 -22 -492 l -25 -491 l -25 -359 l -25 -227 l -21 -227 b 3 -248 -11 -227 -6 -231 b 150 -441 30 -303 82 -372 b 273 -608 209 -500 242 -546 l 280 -620 l 281 -614 b 287 -548 285 -592 287 -570 b 163 -255 287 -442 243 -336 b -16 -179 122 -213 54 -184 b -23 -178 -19 -178 -22 -178 l -25 -178 l -25 -45 l -25 87 l -21 87 b 3 66 -11 87 -6 83 b 150 -127 30 11 82 -58 b 273 -294 209 -186 242 -232 l 280 -306 l 281 -300 b 287 -234 285 -278 287 -256 b 163 59 287 -129 243 -23 b -16 135 122 100 54 129 b -23 136 -19 135 -22 136 l -25 136 l -25 268 l -25 401 l -21 401 b 3 379 -11 401 -6 397 b 150 187 30 325 82 256 b 273 20 209 127 242 82 l 280 8 l 281 14 b 287 80 285 36 287 58 b 163 372 287 185 243 291 b -16 449 122 414 54 443 b -23 450 -19 449 -22 449 l -25 450 z',\n },\n flag128thDown: {\n x_min: -15,\n x_max: 270,\n y_min: -496,\n y_max: 870,\n ha: 1366,\n o: 'm 292 1251 b 301 1253 295 1252 298 1253 b 325 1235 309 1253 316 1247 b 389 1031 368 1174 389 1103 b 364 898 389 986 381 941 l 359 888 l 364 876 b 389 745 381 834 389 789 b 364 612 389 700 381 654 l 359 601 l 364 589 b 389 458 381 547 389 503 b 364 325 389 413 381 368 l 359 315 l 364 303 b 389 172 381 261 389 216 b 364 39 389 127 381 81 l 359 28 l 364 16 b 390 -115 381 -26 390 -71 b 260 -391 390 -219 344 -320 b 0 -698 135 -495 36 -613 b -19 -715 -5 -709 -11 -715 l -22 -715 l -22 -582 l -21 -449 l -14 -447 b 124 -400 25 -439 79 -420 b 213 -349 168 -379 189 -367 b 340 -101 294 -288 340 -196 b 332 -36 340 -79 337 -57 b 330 -27 331 -30 331 -27 b 326 -31 329 -27 328 -29 b 260 -104 309 -57 286 -82 b 0 -412 135 -209 36 -326 b -19 -428 -5 -422 -11 -428 l -22 -428 l -22 -295 l -21 -162 l -14 -161 b 124 -113 25 -153 79 -134 b 213 -63 168 -92 189 -81 b 340 186 294 -2 340 91 b 332 251 340 207 337 229 b 330 259 331 257 331 259 b 326 255 329 259 328 258 b 260 182 309 229 286 204 b 0 -125 135 78 36 -40 b -19 -142 -5 -136 -11 -142 l -22 -142 l -22 -9 l -21 124 l -14 126 b 124 173 25 134 79 152 b 213 224 168 194 189 206 b 340 472 294 285 340 377 b 332 537 340 494 337 516 b 330 546 331 543 331 546 b 326 542 329 546 328 544 b 255 465 307 514 286 491 b 0 161 135 364 35 245 b -19 145 -4 151 -11 145 l -22 145 l -22 278 l -21 411 l -14 412 b 124 460 25 420 79 439 b 213 510 168 481 189 492 b 340 759 294 571 340 664 b 332 824 340 780 337 802 b 330 832 331 830 331 832 b 326 828 329 832 328 831 b 255 751 308 801 286 777 b 0 448 135 650 35 532 b -19 431 -4 437 -11 431 l -22 431 l -22 564 l -21 697 l -14 699 b 124 746 25 707 79 725 b 213 797 168 767 189 779 b 340 1046 295 859 340 953 b 285 1213 340 1105 322 1163 b 278 1232 281 1220 278 1226 b 292 1251 278 1241 283 1248 z',\n },\n accidentalFlat: {\n x_min: -15,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 176,\n y_min: -334,\n y_max: 334,\n ha: 667,\n o: 'm 13 479 b 21 480 16 480 19 480 b 42 467 30 480 39 475 b 44 339 44 463 44 462 b 44 214 44 250 44 214 b 136 237 45 214 86 224 b 234 259 209 255 227 259 b 240 258 237 259 238 259 b 252 246 245 256 251 251 l 254 242 l 254 -111 l 254 -463 l 252 -467 b 232 -480 249 -475 241 -480 b 216 -474 226 -480 221 -478 b 210 -392 211 -468 210 -477 b 210 -336 210 -377 210 -358 b 209 -209 210 -245 210 -209 b 117 -231 209 -209 168 -219 b 19 -254 45 -249 27 -254 b 13 -252 17 -254 15 -253 b 1 -240 8 -251 3 -245 l 0 -237 l 0 113 l 0 463 l 1 467 b 13 479 3 472 8 477 z m 210 23 b 210 74 210 44 210 61 b 209 121 210 118 210 121 l 209 121 b 126 101 208 121 171 112 l 44 81 l 44 -18 b 44 -62 44 -35 44 -50 b 44 -116 44 -104 44 -116 b 128 -96 45 -116 82 -107 l 210 -75 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 239,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 232 557 b 240 558 234 558 237 558 b 261 545 249 558 258 553 b 262 405 262 541 262 540 b 263 269 262 278 262 269 b 263 269 263 269 263 269 b 322 282 275 273 319 282 b 343 269 331 282 340 277 b 344 217 344 266 344 241 b 343 165 344 192 344 168 b 295 144 339 155 337 154 l 262 136 l 262 22 b 263 -91 262 -83 262 -91 b 263 -91 263 -91 263 -91 b 322 -78 275 -88 319 -78 b 338 -84 329 -78 333 -80 b 344 -129 344 -90 344 -88 b 344 -143 344 -133 344 -138 b 344 -157 344 -148 344 -153 b 338 -203 344 -198 344 -197 b 295 -217 333 -207 333 -207 l 262 -225 l 262 -362 b 261 -504 262 -499 262 -500 b 240 -517 258 -512 249 -517 b 225 -511 235 -517 229 -515 b 218 -430 219 -505 218 -514 b 218 -368 218 -413 218 -393 b 218 -235 218 -295 218 -235 b 171 -247 218 -235 197 -241 b 123 -259 145 -253 123 -259 b 123 -400 123 -259 123 -322 b 122 -545 123 -540 123 -541 b 101 -558 118 -553 110 -558 b 86 -552 95 -558 90 -556 b 79 -469 80 -546 79 -556 b 79 -405 79 -452 79 -431 b 78 -270 79 -279 79 -270 b 78 -270 78 -270 78 -270 b 22 -282 65 -273 25 -282 b 2 -269 13 -282 5 -277 b 0 -217 1 -266 0 -242 b 2 -165 0 -192 1 -168 b 48 -144 5 -155 7 -154 l 79 -136 l 79 -23 b 78 90 79 83 79 90 b 78 90 78 90 78 90 b 22 78 65 87 25 78 b 2 91 13 78 5 83 b 0 143 1 94 0 119 b 2 195 0 168 1 192 b 48 216 5 205 7 206 l 79 224 l 79 362 b 81 504 79 499 79 500 b 101 517 84 512 93 517 b 117 511 107 517 112 515 b 123 430 123 505 123 515 b 123 367 123 413 123 392 b 123 235 123 294 123 235 b 171 246 123 235 145 240 b 218 258 197 253 218 258 b 218 399 218 258 218 322 b 220 545 218 540 218 541 b 232 557 222 549 227 555 z m 218 11 b 218 125 218 102 218 125 l 218 125 b 201 121 217 125 210 123 b 154 109 193 119 171 113 l 123 102 l 123 -12 b 123 -126 123 -74 123 -126 b 171 -114 123 -126 145 -120 b 218 -102 197 -107 218 -102 b 218 11 218 -102 218 -51 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 271,\n y_min: -135,\n y_max: 135,\n ha: 271,\n o: 'm 0 130 l 0 195 l 65 195 l 131 195 l 131 145 l 131 96 l 163 64 l 195 32 l 227 64 l 259 96 l 259 145 l 259 195 l 325 195 l 390 195 l 390 130 l 390 64 l 341 64 l 291 64 l 259 32 l 227 0 l 259 -32 l 291 -64 l 341 -64 l 390 -64 l 390 -130 l 390 -195 l 325 -195 l 259 -195 l 259 -145 l 259 -96 l 227 -64 l 195 -32 l 163 -64 l 131 -96 l 131 -145 l 131 -195 l 65 -195 l 0 -195 l 0 -130 l 0 -64 l 50 -64 l 99 -64 l 131 -32 l 163 0 l 131 32 l 99 64 l 50 64 l 0 64 z',\n },\n accidentalDoubleFlat: {\n x_min: -15,\n x_max: 356,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 398 22 640 22 640 l 22 155 l 24 158 b 149 208 64 191 109 208 b 220 187 175 208 200 201 l 223 184 l 224 413 l 224 642 l 226 645 b 246 657 229 653 237 657 b 266 644 254 657 263 653 b 267 398 267 640 267 640 l 267 155 l 270 158 b 392 208 309 191 351 208 b 440 200 408 208 424 205 b 512 89 486 183 512 140 b 488 1 512 61 505 30 b 352 -148 466 -41 436 -73 b 271 -222 307 -188 297 -198 b 246 -237 256 -236 254 -237 b 230 -231 239 -237 234 -236 b 224 -164 224 -225 224 -232 b 224 -125 224 -153 224 -140 l 224 -29 l 218 -36 b 107 -148 194 -67 170 -91 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 l -22 -220 l -22 210 l -22 640 l -20 644 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z m 364 137 b 347 139 360 138 352 139 b 342 139 345 139 343 139 b 272 92 315 135 290 118 l 267 84 l 267 -39 l 267 -161 l 271 -157 b 399 88 349 -73 399 24 b 397 107 399 95 398 101 b 364 137 394 122 382 134 z',\n },\n accidentalParensLeft: {\n x_min: -122,\n x_max: -19,\n y_min: -267,\n y_max: 267,\n ha: 534,\n o: 'm -51 383 b -44 385 -49 384 -46 385 b -29 375 -38 385 -31 381 b -27 369 -28 373 -27 372 b -33 349 -27 365 -29 360 b -98 54 -71 259 -91 167 b -99 0 -98 44 -99 22 b -98 -54 -99 -22 -98 -45 b -33 -349 -91 -167 -71 -259 b -27 -368 -28 -363 -27 -365 b -44 -385 -27 -378 -34 -385 b -65 -367 -52 -385 -55 -383 b -176 0 -139 -251 -176 -125 b -65 367 -176 125 -139 251 b -51 383 -57 379 -55 381 z',\n },\n accidentalParensRight: {\n x_min: 19,\n x_max: 122,\n y_min: -267,\n y_max: 267,\n ha: 535,\n o: 'm 36 384 b 44 385 38 385 41 385 b 65 367 52 385 55 383 b 176 0 139 251 176 126 b 65 -367 176 -125 139 -250 b 44 -385 56 -380 51 -385 b 36 -383 42 -385 39 -384 b 27 -370 30 -380 27 -377 b 33 -349 27 -365 29 -359 b 99 0 77 -242 99 -121 b 33 350 99 122 77 243 b 27 371 29 359 27 366 b 36 384 27 377 30 381 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 200,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 446,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm 258 656 b 266 658 261 657 264 658 b 287 644 275 658 284 652 l 289 640 l 289 210 l 289 -220 l 287 -224 b 267 -237 284 -232 276 -237 b 241 -222 258 -237 256 -236 b 163 -151 216 -199 200 -183 b 24 2 78 -75 47 -41 b 0 88 8 31 0 61 b 73 200 0 140 26 183 b 120 208 88 205 104 208 b 242 158 161 208 203 191 l 245 155 l 245 398 b 246 644 245 640 245 640 b 258 656 248 649 253 654 z m 179 137 b 159 139 174 138 165 139 b 155 139 157 139 156 139 b 115 107 131 134 118 124 b 113 88 114 101 113 95 b 241 -157 113 24 163 -73 l 245 -161 l 245 -39 l 245 84 l 240 92 b 179 137 224 116 203 131 z m 367 656 b 375 658 370 657 373 658 b 396 644 384 658 393 652 b 398 398 398 640 398 640 l 398 155 l 400 158 b 522 208 440 191 482 208 b 570 200 538 208 554 205 b 643 89 617 183 643 140 b 619 1 643 61 635 30 b 483 -148 596 -41 566 -73 b 401 -222 438 -188 427 -198 b 376 -237 386 -236 384 -237 b 355 -224 366 -237 358 -232 l 354 -220 l 354 210 l 354 640 l 355 644 b 367 656 357 649 362 654 z m 495 137 b 477 139 491 138 482 139 b 472 139 475 139 473 139 b 403 92 445 135 420 118 l 398 84 l 398 -39 l 398 -161 l 401 -157 b 529 88 479 -73 529 24 b 528 107 529 95 529 101 b 495 137 525 122 512 134 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 335,\n y_min: -391,\n y_max: 391,\n ha: 782,\n o: 'm 373 562 b 379 563 375 563 377 563 b 399 551 388 563 395 559 l 401 548 l 401 410 l 401 272 l 403 273 b 432 278 403 273 417 275 b 463 282 448 281 457 282 b 477 276 470 282 473 280 b 483 241 482 271 483 271 b 483 216 483 234 483 226 l 483 167 l 481 164 b 471 153 479 160 475 155 b 402 140 469 152 405 140 b 401 25 401 140 401 88 l 401 -91 l 403 -90 b 432 -85 403 -90 417 -88 b 463 -80 448 -82 457 -80 b 477 -87 470 -80 473 -83 b 483 -122 482 -92 483 -91 b 483 -147 483 -128 483 -137 l 483 -196 l 481 -199 b 471 -209 479 -203 475 -207 b 402 -223 469 -210 405 -223 b 401 -359 401 -223 401 -284 l 401 -496 l 399 -500 b 379 -512 395 -507 388 -512 b 359 -500 371 -512 363 -507 l 357 -496 l 357 -363 b 356 -231 357 -240 357 -231 b 356 -231 356 -231 356 -231 b 309 -240 356 -232 334 -235 l 262 -249 l 262 -384 b 262 -448 262 -410 262 -431 b 256 -531 262 -535 261 -526 b 240 -538 251 -536 246 -538 b 220 -525 232 -538 224 -533 l 219 -522 l 218 -389 l 218 -257 l 171 -265 b 123 -274 144 -270 123 -274 b 123 -411 123 -274 123 -336 l 122 -548 l 121 -551 b 101 -563 116 -559 109 -563 b 81 -551 93 -563 85 -559 l 79 -548 l 79 -415 b 79 -282 79 -342 79 -282 b 52 -287 78 -282 66 -285 b 20 -292 36 -290 26 -292 b 6 -286 13 -292 10 -290 b 0 -241 0 -280 0 -282 b 0 -226 0 -236 0 -232 b 0 -212 0 -221 0 -216 b 6 -167 0 -171 0 -173 b 48 -155 11 -162 13 -162 l 79 -150 l 79 -35 b 79 80 79 29 79 80 b 52 76 78 80 66 78 b 20 71 36 73 26 71 b 6 77 13 71 10 73 b 0 122 0 83 0 81 b 0 136 0 126 0 131 b 0 151 0 142 0 146 b 6 196 0 192 0 190 b 48 207 11 201 13 201 l 79 213 l 79 354 l 79 496 l 81 500 b 101 512 85 508 93 512 b 121 500 109 512 116 508 l 122 497 l 123 359 l 123 221 l 171 230 b 218 239 197 235 218 239 b 218 380 218 239 218 302 b 220 524 218 519 218 520 b 240 538 223 533 231 538 b 256 531 246 538 251 536 b 262 448 261 526 262 535 b 262 384 262 431 262 410 b 263 247 262 295 262 247 b 310 255 263 247 284 251 b 357 264 335 260 357 264 b 358 406 357 264 357 328 l 358 548 l 359 551 b 373 562 362 557 367 561 z m 357 16 b 357 132 357 108 357 132 l 357 132 b 309 123 356 132 335 128 l 262 114 l 262 -1 b 263 -116 262 -76 262 -116 b 310 -107 263 -116 284 -112 b 357 -99 335 -103 357 -99 b 357 16 357 -99 357 -48 z m 218 -124 b 218 -56 218 -124 218 -96 b 218 -9 218 -42 218 -26 l 218 106 l 171 97 b 123 88 145 93 123 89 b 123 21 123 88 123 61 b 123 -27 123 6 123 -10 l 123 -142 l 170 -133 b 218 -124 196 -128 218 -124 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -125,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 575 22 640 22 639 b 23 510 22 524 22 510 b 23 510 23 510 23 510 b 164 557 49 520 160 557 b 186 534 177 557 186 546 b 176 516 186 527 183 520 b 98 489 175 515 140 503 l 22 463 l 22 405 b 22 378 22 394 22 386 b 23 347 22 354 22 347 b 23 347 23 347 23 347 b 164 393 49 356 160 393 b 186 371 177 393 186 382 b 176 352 186 364 183 357 b 98 325 175 352 140 339 l 22 300 l 22 228 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 32 -22 -220 -22 -220 b -22 284 -22 171 -22 284 b -88 262 -23 284 -52 274 b -160 240 -141 245 -154 240 b -167 241 -163 240 -164 241 b -180 262 -175 245 -180 254 b -169 281 -180 270 -176 278 b -30 329 -168 282 -92 308 l -22 332 l -22 390 b -22 448 -22 422 -22 448 b -88 426 -23 448 -52 438 b -160 404 -141 408 -154 404 b -167 405 -163 404 -164 404 b -180 426 -175 408 -180 417 b -169 445 -180 434 -176 441 b -30 493 -168 446 -92 472 l -22 495 l -22 568 b -20 644 -22 639 -22 641 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 284,\n y_min: -388,\n y_max: 388,\n ha: 775,\n o: 'm 264 557 b 272 558 267 558 269 558 b 293 545 281 558 290 553 b 294 435 294 541 294 540 b 295 329 294 337 294 329 b 296 329 296 329 296 329 b 355 342 308 333 351 342 b 375 329 364 342 372 337 b 376 277 376 326 376 302 b 375 225 376 252 376 228 b 327 204 371 215 369 214 l 294 196 l 294 142 b 295 89 294 94 294 89 b 296 89 295 89 296 89 b 389 110 314 94 384 110 b 389 110 389 110 389 110 b 407 98 397 110 403 105 l 409 95 l 409 45 b 409 25 409 37 409 30 b 404 -13 409 -11 408 -8 b 345 -32 400 -18 398 -19 b 295 -44 317 -39 295 -44 b 294 -98 294 -44 294 -68 b 295 -151 294 -147 294 -151 b 296 -151 295 -151 296 -151 b 355 -138 308 -148 351 -138 b 375 -151 364 -138 372 -143 b 376 -203 376 -154 376 -179 b 375 -255 376 -228 376 -252 b 327 -277 371 -265 369 -266 l 294 -285 l 294 -392 b 293 -504 294 -499 294 -500 b 272 -517 290 -512 281 -517 b 257 -511 267 -517 261 -515 b 251 -443 251 -505 251 -512 b 251 -398 251 -430 251 -416 b 250 -295 251 -341 251 -295 b 203 -307 250 -295 229 -301 b 156 -319 177 -313 156 -319 b 155 -430 155 -319 155 -369 b 154 -545 155 -540 155 -541 b 133 -558 151 -553 142 -558 b 118 -552 128 -558 122 -556 b 112 -482 112 -546 112 -553 b 112 -435 112 -469 112 -454 b 110 -330 112 -337 111 -330 b 110 -330 110 -330 110 -330 b 54 -342 98 -333 58 -342 b 34 -329 45 -342 37 -337 b 32 -277 33 -326 32 -302 b 34 -225 32 -252 33 -228 b 80 -204 38 -215 39 -214 l 112 -196 l 112 -143 b 111 -90 112 -94 111 -90 b 110 -90 110 -90 110 -90 b 20 -110 89 -96 25 -110 b 20 -110 20 -110 20 -110 b 2 -98 12 -110 5 -105 l 0 -95 l 0 -45 b 0 -25 0 -37 0 -30 b 5 13 0 11 0 8 b 62 32 9 18 10 19 b 111 44 89 38 111 44 b 112 97 111 44 112 68 b 111 150 112 146 111 150 b 110 150 110 150 110 150 b 54 138 98 147 58 138 b 34 151 45 138 37 143 b 32 203 33 154 32 179 b 34 255 32 228 33 252 b 80 276 38 265 39 266 l 112 284 l 112 392 b 113 504 112 499 112 500 b 133 517 116 512 125 517 b 149 511 139 517 145 515 b 155 443 155 505 155 512 b 155 397 155 430 155 415 b 155 295 155 341 155 295 b 203 306 156 295 177 300 b 250 318 229 313 250 318 b 251 429 251 318 251 368 b 252 545 251 540 251 541 b 264 557 254 549 259 555 z m 251 131 b 250 185 251 174 250 185 l 250 185 b 233 181 249 185 242 183 b 186 169 225 179 204 173 l 155 162 l 155 108 b 155 55 155 79 155 55 b 203 66 156 55 177 60 b 250 78 229 73 250 78 b 251 131 251 78 251 102 z m 251 -109 b 250 -55 251 -67 250 -55 l 250 -55 b 233 -59 249 -55 242 -57 b 186 -71 225 -62 204 -67 l 155 -79 l 155 -132 b 155 -186 155 -161 155 -186 b 203 -174 156 -186 177 -180 b 250 -162 229 -168 250 -162 b 251 -109 251 -162 251 -138 z',\n },\n accidentalBakiyeFlat: {\n x_min: -129,\n x_max: 185,\n y_min: -165,\n y_max: 457,\n ha: 622,\n o: 'm -9 656 b 0 658 -6 657 -3 658 b 20 644 9 658 17 652 b 22 524 22 640 22 639 b 22 407 22 460 22 407 b 90 441 22 407 53 422 l 157 474 l 163 475 b 164 475 163 475 163 475 b 186 453 177 475 186 465 b 184 445 186 450 185 447 b 99 396 181 436 184 438 l 22 357 l 22 256 l 22 155 l 24 158 b 146 208 64 191 106 208 b 194 200 163 208 179 205 b 267 89 241 183 267 140 b 243 1 267 61 259 30 b 107 -148 220 -41 190 -73 b 25 -222 62 -188 51 -198 b 0 -237 10 -236 9 -237 b -20 -224 -9 -237 -17 -232 b -22 57 -22 -220 -22 -220 b -22 335 -22 210 -22 335 b -90 301 -22 335 -53 320 l -157 268 l -163 268 b -164 268 -163 268 -163 268 b -186 289 -177 268 -186 277 b -184 298 -186 292 -185 295 b -99 347 -181 306 -184 304 l -22 385 l -22 513 b -20 644 -22 639 -22 640 b -9 656 -19 649 -13 654 z m 119 137 b 101 139 115 138 107 139 b 97 139 99 139 98 139 b 27 92 69 135 45 118 l 22 84 l 22 -39 l 22 -161 l 26 -157 b 153 88 104 -73 153 24 b 152 107 153 95 153 101 b 119 137 149 122 136 134 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 142,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 92 536 b 101 538 95 537 98 538 b 122 524 110 538 118 532 b 123 390 123 520 123 519 l 123 259 l 151 268 b 182 277 175 276 178 277 b 184 277 183 277 183 277 b 203 265 193 276 199 272 l 204 262 l 205 213 b 205 187 205 202 205 194 b 201 154 205 159 204 159 b 158 136 197 149 194 148 l 123 125 l 123 10 b 124 -104 123 -64 123 -104 b 150 -94 124 -104 136 -100 b 179 -85 164 -89 177 -85 b 183 -84 181 -84 182 -84 b 203 -98 192 -84 200 -90 b 205 -157 204 -101 205 -130 b 204 -201 205 -179 205 -199 b 158 -226 200 -211 199 -212 l 123 -239 l 123 -380 l 123 -522 l 121 -525 b 101 -538 117 -533 109 -538 b 85 -531 95 -538 90 -536 b 79 -450 80 -526 79 -535 b 79 -387 79 -433 79 -413 b 79 -254 79 -314 79 -254 b 54 -263 79 -254 67 -258 b 19 -273 36 -270 26 -273 b 6 -267 14 -273 10 -271 b 0 -222 0 -261 0 -263 b 0 -207 0 -217 0 -213 b 0 -195 0 -203 0 -199 b 6 -148 0 -152 0 -154 b 47 -131 10 -144 10 -144 l 79 -120 l 79 -5 b 79 110 79 58 79 110 b 53 101 79 110 67 106 b 19 93 35 95 25 93 b 6 99 14 93 10 95 b 0 144 0 105 0 103 b 0 158 0 148 0 153 b 0 185 0 169 0 178 b 45 233 0 222 3 219 l 79 244 l 79 382 b 81 524 79 519 79 520 b 92 536 82 529 88 534 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 188,\n y_min: -373,\n y_max: 373,\n ha: 747,\n o: 'm 127 536 b 135 538 129 537 132 538 b 156 524 144 538 153 532 b 157 420 157 520 157 519 l 157 319 l 185 328 b 216 337 209 336 212 337 b 218 337 217 337 217 337 b 237 325 227 336 233 332 l 239 322 l 239 273 b 239 247 239 262 239 254 b 235 214 239 219 238 219 b 192 196 231 209 229 208 l 157 185 l 157 129 b 158 75 157 86 157 75 b 158 75 158 75 158 75 b 202 89 158 75 178 81 l 245 103 l 250 103 b 268 91 258 102 265 98 l 270 88 l 270 39 b 270 13 270 28 270 20 b 266 -20 270 -15 270 -15 b 208 -43 262 -25 261 -25 l 157 -60 l 157 -112 b 157 -127 157 -117 157 -122 b 158 -164 157 -151 157 -164 b 184 -154 158 -164 170 -160 b 214 -145 198 -149 212 -145 b 217 -144 215 -144 216 -144 b 238 -158 226 -144 235 -150 b 239 -217 239 -161 239 -190 b 238 -261 239 -239 239 -259 b 192 -286 235 -271 233 -272 l 157 -299 l 157 -410 b 155 -525 157 -522 157 -522 b 135 -538 152 -533 143 -538 b 120 -531 130 -538 124 -536 b 113 -463 114 -525 113 -532 b 113 -417 113 -450 113 -435 b 113 -314 113 -361 113 -314 b 88 -323 113 -314 102 -318 b 53 -333 70 -330 60 -333 b 41 -327 48 -333 45 -331 b 34 -282 35 -321 34 -323 b 34 -267 34 -277 34 -273 b 34 -255 34 -263 34 -259 b 40 -208 34 -212 35 -214 b 81 -191 44 -204 44 -204 l 113 -180 l 113 -127 b 113 -75 113 -86 113 -75 b 113 -75 113 -75 113 -75 b 69 -89 112 -75 92 -81 l 26 -103 l 21 -103 b 1 -89 12 -102 4 -97 b 0 -43 0 -86 0 -65 b 2 15 0 -16 1 12 b 63 43 5 24 4 24 l 113 60 l 113 115 b 113 130 113 120 113 125 b 113 170 113 153 113 170 b 87 161 113 170 101 166 b 53 153 69 156 60 153 b 41 159 48 153 45 155 b 34 204 35 165 34 163 b 34 218 34 208 34 213 b 34 245 34 229 34 238 b 79 293 34 282 38 279 l 113 304 l 113 412 b 115 524 113 519 113 520 b 127 536 117 529 122 534 z',\n },\n articAccentAbove: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articAccentBelow: {\n x_min: -256,\n x_max: 19,\n y_min: -114,\n y_max: 114,\n ha: 227,\n o: 'm -350 163 b -341 164 -348 163 -344 164 b -333 163 -338 164 -335 163 b -312 151 -330 162 -327 160 b -9 30 -231 99 -122 56 b 13 24 8 27 11 26 b 28 0 23 18 28 9 b 3 -28 28 -12 19 -24 b -19 -33 -1 -29 -11 -31 b -315 -153 -129 -58 -238 -102 b -341 -164 -331 -163 -333 -164 b -369 -136 -357 -164 -369 -151 b -364 -121 -369 -131 -367 -126 b -346 -107 -361 -117 -358 -114 b -135 -8 -285 -67 -213 -34 b -111 0 -122 -4 -111 0 b -135 8 -111 0 -122 4 b -346 107 -213 34 -285 67 b -364 121 -358 114 -361 116 b -368 136 -367 126 -368 131 b -350 163 -368 148 -361 159 z',\n },\n articTenutoAbove: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articTenutoBelow: {\n x_min: -154,\n x_max: 154,\n y_min: -15,\n y_max: 15,\n ha: 30,\n o: 'm -208 20 b 2 22 -205 21 -101 22 b 208 20 104 22 205 21 b 221 0 216 17 221 9 b 215 -16 221 -6 219 -11 b 101 -22 209 -21 225 -22 b 0 -22 75 -22 41 -22 b -101 -22 -41 -22 -75 -22 b -215 -16 -225 -22 -209 -21 b -221 0 -219 -11 -221 -6 b -208 20 -221 8 -216 17 z',\n },\n articStaccatoAbove: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatoBelow: {\n x_min: -49,\n x_max: 49,\n y_min: -49,\n y_max: 49,\n ha: 99,\n o: 'm -13 70 b -1 71 -9 71 -5 71 b 59 40 23 71 46 59 b 71 0 67 28 71 14 b 40 -59 71 -23 60 -46 b 0 -71 28 -67 14 -71 b -59 -40 -23 -71 -46 -60 b -71 0 -67 -28 -71 -14 b -13 70 -71 32 -48 64 z',\n },\n articStaccatissimoAbove: {\n x_min: -53,\n x_max: 53,\n y_min: 0,\n y_max: 184,\n ha: 184,\n o: 'm -76 263 l -77 265 l 0 265 l 77 265 l 76 263 b 0 0 75 259 0 0 b -76 263 0 0 -75 259 z',\n },\n articStaccatissimoBelow: {\n x_min: -53,\n x_max: 53,\n y_min: -184,\n y_max: 0,\n ha: 184,\n o: 'm -38 -131 b 0 0 -17 -59 0 0 b 76 -263 0 0 75 -259 l 77 -265 l 0 -265 l -77 -265 l -76 -263 b -38 -131 -76 -262 -59 -203 z',\n },\n articMarcatoAbove: {\n x_min: -114,\n x_max: 114,\n y_min: -256,\n y_max: 19,\n ha: 275,\n o: 'm -9 26 b 0 28 -6 27 -3 28 b 28 3 13 28 24 18 b 33 -19 29 -1 31 -11 b 153 -315 58 -129 102 -238 b 164 -341 163 -331 164 -333 b 136 -368 164 -357 152 -368 b 107 -346 124 -368 118 -364 b 8 -135 67 -285 34 -213 b 0 -111 4 -122 0 -111 b -8 -135 0 -111 -4 -122 b -107 -346 -34 -213 -67 -285 b -136 -368 -118 -364 -124 -368 b -164 -341 -152 -368 -164 -357 b -151 -312 -164 -333 -163 -332 b -30 -9 -99 -231 -56 -122 b -21 18 -26 11 -26 12 b -9 26 -19 21 -13 25 z',\n },\n articMarcatoBelow: {\n x_min: -114,\n x_max: 114,\n y_min: -19,\n y_max: 256,\n ha: 275,\n o: 'm -145 367 b -136 369 -142 368 -139 369 b -107 346 -125 369 -117 362 b -8 135 -67 285 -34 213 b 0 111 -4 122 0 111 b 8 135 0 111 4 122 b 107 346 34 213 67 285 b 121 364 114 358 117 361 b 136 369 126 367 131 369 b 164 341 151 369 164 357 b 153 315 164 333 163 331 b 30 9 101 235 56 124 b 21 -18 26 -11 26 -12 b 0 -27 16 -24 8 -27 b -21 -18 -8 -27 -16 -24 b -30 9 -26 -12 -26 -11 b -151 312 -56 122 -99 231 b -164 341 -163 332 -164 333 b -145 367 -164 353 -156 364 z',\n },\n fermataAbove: {\n x_min: -324,\n x_max: 324,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -33 507 b 0 508 -22 508 -11 508 b 459 112 228 508 419 345 b 467 31 464 85 467 51 b 465 14 467 22 466 16 b 445 0 462 5 453 0 b 429 7 439 0 433 2 b 422 32 424 12 423 15 b 0 365 414 221 231 365 b -63 362 -33 365 -39 365 b -422 32 -265 338 -415 200 b -429 7 -423 15 -424 12 b -445 0 -433 2 -439 0 b -465 14 -453 0 -462 5 b -467 31 -466 16 -467 22 b -459 112 -467 51 -464 85 b -33 507 -422 332 -249 492 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataBelow: {\n x_min: -324,\n x_max: 324,\n y_min: -353,\n y_max: 0,\n ha: 353,\n o: 'm -453 -2 b -445 0 -451 -1 -448 0 b -429 -7 -439 0 -433 -3 b -422 -33 -424 -12 -423 -15 b 0 -365 -414 -221 -231 -365 b 63 -362 33 -365 39 -365 b 422 -33 265 -338 415 -201 b 429 -7 423 -15 424 -12 b 445 0 433 -2 439 0 b 465 -14 453 0 462 -5 b 467 -31 466 -17 467 -23 b 463 -87 467 -46 465 -68 b 35 -507 434 -319 259 -490 b -1 -508 23 -508 11 -508 b -459 -112 -228 -508 -419 -345 b -467 -31 -464 -85 -467 -51 b -465 -14 -467 -23 -466 -17 b -453 -2 -463 -9 -458 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 364,\n ha: 364,\n o: 'm -399 523 b 0 524 -395 524 -392 524 l 395 524 l 399 523 b 411 511 404 521 409 516 b 412 262 412 507 412 507 b 412 141 412 213 412 173 b 406 7 412 -8 412 12 b 390 0 402 2 396 0 b 382 2 387 0 385 1 b 370 14 377 4 372 9 b 368 183 368 17 368 18 l 368 350 l 0 350 l -368 350 l -368 183 b -370 14 -368 18 -368 17 b -390 0 -373 5 -381 0 b -411 14 -399 0 -407 5 b -412 262 -412 17 -412 139 b -411 511 -412 385 -412 508 b -399 523 -409 516 -403 521 z m -15 196 b 0 197 -10 197 -5 197 b 75 163 27 197 56 184 b 98 99 91 145 98 121 b 56 17 98 67 84 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -64 187 z',\n },\n fermataLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -364,\n y_max: 0,\n ha: 364,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -184 -368 -18 -368 -18 l -368 -350 l 0 -350 l 368 -350 l 368 -184 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -262 412 -17 412 -140 b 411 -511 412 -385 412 -508 b 399 -523 409 -516 404 -521 l 395 -524 l 0 -524 l -395 -524 l -399 -523 b -411 -511 -404 -521 -409 -516 b -412 -262 -412 -508 -412 -385 b -411 -14 -412 -140 -412 -17 b -399 -2 -409 -9 -404 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 438,\n ha: 438,\n o: 'm -399 629 b 0 631 -395 631 -392 631 l 395 631 l 399 629 b 411 617 404 627 409 622 b 412 315 412 614 412 465 b 411 14 412 166 412 17 b 390 0 407 5 399 0 b 370 14 382 0 373 5 b 368 237 368 17 368 18 l 368 456 l 0 456 l -368 456 l -368 237 b -370 14 -368 18 -368 17 b -390 0 -373 5 -382 0 b -411 14 -399 0 -407 5 b -412 315 -412 17 -412 166 b -411 617 -412 465 -412 614 b -399 629 -409 622 -404 627 z m -290 384 b 3 385 -287 385 -141 385 b 289 384 145 385 287 385 b 301 372 294 382 300 377 b 303 193 303 369 303 281 b 301 14 303 105 303 17 b 281 0 298 5 290 0 b 265 7 275 0 270 2 b 259 80 260 12 259 4 b 259 130 259 94 259 111 l 259 243 l 0 243 l -259 243 l -259 130 b -259 80 -259 111 -259 94 b -265 7 -259 4 -260 12 b -281 0 -270 2 -275 0 b -301 14 -290 0 -298 5 b -303 193 -303 17 -303 105 b -301 372 -303 281 -303 369 b -290 384 -300 376 -294 382 z m -15 196 b 0 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 91 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataVeryLongBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -438,\n y_max: 0,\n ha: 438,\n o: 'm -399 -2 b -391 0 -396 -1 -393 0 b -370 -14 -382 0 -373 -6 b -368 -237 -368 -18 -368 -18 l -368 -456 l 0 -456 l 368 -456 l 368 -237 b 370 -14 368 -18 368 -18 b 390 0 373 -5 382 0 b 411 -14 399 0 407 -5 b 412 -316 412 -17 412 -166 b 411 -617 412 -465 412 -614 b 399 -629 409 -622 404 -628 l 395 -631 l 0 -631 l -395 -631 l -399 -629 b -411 -617 -404 -628 -409 -622 b -412 -316 -412 -614 -412 -465 b -411 -14 -412 -166 -412 -17 b -399 -2 -409 -9 -404 -4 z m -290 -2 b -281 0 -287 -1 -284 0 b -261 -14 -272 0 -264 -6 b -259 -130 -259 -18 -259 -19 l -259 -243 l 0 -243 l 259 -243 l 259 -130 b 259 -81 259 -111 259 -94 b 265 -7 259 -5 260 -13 b 281 0 270 -2 275 0 b 301 -14 290 0 298 -5 b 303 -193 303 -17 303 -105 b 301 -372 303 -281 303 -369 b 289 -384 300 -377 294 -382 b 0 -385 287 -385 143 -385 b -289 -384 -143 -385 -287 -385 b -301 -372 -294 -382 -300 -377 b -303 -193 -303 -369 -303 -281 b -301 -14 -303 -105 -303 -17 b -290 -2 -300 -9 -294 -4 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -351,\n x_max: 351,\n y_min: 0,\n y_max: 571,\n ha: 571,\n o: 'm -9 820 b 0 822 -6 821 -3 822 b 8 820 3 822 6 821 b 35 785 15 818 17 815 b 68 733 45 770 59 747 b 98 684 76 720 90 698 b 146 606 107 670 128 635 b 193 532 164 578 185 544 b 227 477 200 519 216 495 b 313 337 277 396 301 358 b 362 260 321 325 343 290 b 406 188 380 230 400 197 b 436 140 412 179 425 157 b 505 25 500 37 505 30 b 505 22 505 24 505 23 b 491 2 505 13 499 5 b 450 0 488 1 469 0 b 409 2 431 0 412 1 b 382 37 403 4 400 7 b 350 89 373 52 358 75 b 319 138 342 102 328 124 b 271 216 311 152 289 187 b 225 290 253 244 232 278 b 191 345 217 302 202 327 b 104 485 142 424 117 464 b 8 639 73 534 24 613 b -21 686 -2 655 -15 676 b -33 704 -27 696 -33 704 b -44 686 -33 704 -38 696 b -73 639 -51 676 -64 655 b -170 485 -89 614 -133 543 b -203 430 -177 472 -192 448 b -290 290 -253 351 -277 311 b -337 216 -298 278 -319 244 b -385 138 -355 187 -376 152 b -415 89 -393 124 -407 102 b -448 37 -424 75 -438 52 b -474 2 -466 7 -468 4 b -483 0 -477 1 -480 0 b -505 22 -495 0 -505 9 b -505 25 -505 23 -505 24 b -436 140 -505 30 -500 37 b -406 188 -425 157 -412 179 b -362 260 -400 197 -380 230 b -313 337 -343 290 -321 325 b -227 477 -301 358 -277 396 b -193 532 -216 495 -200 519 b -146 606 -185 544 -164 578 b -98 684 -128 635 -107 670 b -68 733 -90 697 -76 720 b -35 785 -59 747 -45 770 b -9 820 -17 814 -14 818 z m -36 506 b -28 508 -33 507 -30 508 b -12 502 -22 508 -16 506 b 280 30 -8 498 278 36 b 281 22 281 28 281 25 b 268 2 281 14 276 5 b 226 0 265 1 246 0 b 185 2 207 0 188 1 b 58 199 178 4 182 -1 b -60 389 -7 304 -60 389 b -178 199 -60 389 -114 304 b -305 2 -302 -1 -298 4 b -314 0 -308 1 -311 0 b -336 22 -326 0 -336 10 b -334 30 -336 25 -335 27 b -43 502 -332 36 -46 498 b -36 506 -41 504 -38 506 z m -56 196 b -41 197 -51 197 -46 197 b 33 163 -14 197 15 184 b 57 99 50 145 57 121 b 15 17 57 67 43 36 b -41 0 -3 5 -22 0 b -139 99 -92 0 -139 40 b -56 196 -139 148 -105 187 z',\n },\n fermataVeryShortBelow: {\n x_min: -351,\n x_max: 351,\n y_min: -571,\n y_max: 0,\n ha: 571,\n o: 'm 9 -820 b 0 -822 6 -821 3 -822 b -8 -820 -3 -822 -6 -821 b -35 -785 -15 -818 -17 -815 b -68 -733 -45 -770 -59 -747 b -98 -684 -76 -720 -90 -698 b -146 -606 -107 -670 -128 -635 b -193 -532 -164 -578 -185 -544 b -227 -477 -200 -519 -216 -495 b -313 -337 -277 -396 -301 -358 b -362 -260 -321 -325 -343 -290 b -406 -188 -380 -230 -400 -197 b -436 -140 -412 -179 -425 -157 b -505 -25 -500 -37 -505 -30 b -505 -22 -505 -24 -505 -23 b -491 -2 -505 -13 -499 -5 b -450 0 -488 -1 -469 0 b -409 -2 -431 0 -412 -1 b -382 -37 -403 -4 -400 -7 b -350 -89 -373 -52 -358 -75 b -319 -138 -342 -102 -328 -124 b -271 -216 -311 -152 -289 -187 b -225 -290 -253 -244 -232 -278 b -191 -345 -217 -302 -202 -327 b -104 -485 -142 -424 -117 -464 b -8 -639 -73 -534 -24 -613 b 21 -686 2 -655 15 -676 b 33 -704 27 -696 33 -704 b 44 -686 33 -704 38 -696 b 73 -639 51 -676 64 -655 b 170 -485 89 -614 133 -543 b 203 -430 177 -472 192 -448 b 290 -290 253 -351 277 -311 b 337 -216 298 -278 319 -244 b 385 -138 355 -187 376 -152 b 415 -89 393 -124 407 -102 b 448 -37 424 -75 438 -52 b 474 -2 466 -7 468 -4 b 483 0 477 -1 480 0 b 505 -22 495 0 505 -9 b 505 -25 505 -23 505 -24 b 436 -140 505 -30 500 -37 b 406 -188 425 -157 412 -179 b 362 -260 400 -197 380 -230 b 313 -337 343 -290 321 -325 b 227 -477 301 -358 277 -396 b 193 -532 216 -495 200 -519 b 146 -606 185 -544 164 -578 b 98 -684 128 -635 107 -670 b 68 -733 90 -697 76 -720 b 35 -785 59 -747 45 -770 b 9 -820 17 -814 14 -818 z m 36 -506 b 28 -508 33 -507 30 -508 b 12 -502 22 -508 16 -506 b -280 -30 8 -498 -278 -36 b -281 -22 -281 -28 -281 -25 b -268 -2 -281 -14 -276 -5 b -226 0 -265 -1 -246 0 b -185 -2 -207 0 -188 -1 b -58 -199 -178 -4 -182 1 b 60 -389 7 -304 60 -389 b 178 -199 60 -389 114 -304 b 305 -2 302 1 298 -4 b 314 0 308 -1 311 0 b 336 -22 326 0 336 -10 b 334 -30 336 -25 335 -27 b 43 -502 332 -36 46 -498 b 36 -506 41 -504 38 -506 z m 56 -196 b 41 -197 51 -197 46 -197 b -33 -163 14 -197 -15 -184 b -57 -99 -50 -145 -57 -121 b -15 -17 -57 -67 -43 -36 b 41 0 3 -5 22 0 b 139 -99 92 0 139 -40 b 56 -196 139 -148 105 -187 z',\n },\n fermataShortAbove: {\n x_min: -286,\n x_max: 286,\n y_min: 0,\n y_max: 469,\n ha: 469,\n o: 'm -9 674 b 0 676 -6 675 -3 676 b 15 670 6 676 11 674 b 74 576 17 667 37 637 b 233 319 105 526 176 410 b 373 92 290 227 353 125 b 411 30 393 59 410 31 b 412 23 412 27 412 25 b 398 2 412 14 407 5 b 357 0 396 1 376 0 b 316 2 338 0 319 1 b 250 100 309 4 309 4 b 91 357 220 150 148 266 b -22 541 35 449 -17 532 b -33 558 -28 550 -33 558 b -42 544 -33 558 -37 551 b -137 389 -47 536 -89 467 b -240 223 -185 312 -231 237 b -382 2 -387 -16 -374 4 b -390 0 -385 1 -387 0 b -412 22 -402 0 -412 9 l -412 22 b -375 90 -412 29 -412 29 b -253 286 -285 236 -269 261 b -182 402 -244 301 -212 354 b -34 641 -127 491 -64 593 b -9 674 -17 668 -15 672 z m -15 196 b -1 197 -10 197 -5 197 b 74 163 27 197 56 184 b 98 99 90 145 98 121 b 55 17 98 67 83 36 b 0 0 38 5 19 0 b -98 99 -51 0 -98 40 b -15 196 -98 148 -65 187 z',\n },\n fermataShortBelow: {\n x_min: -286,\n x_max: 286,\n y_min: -469,\n y_max: 0,\n ha: 469,\n o: 'm -399 -2 b -390 0 -396 -1 -393 0 b -375 -6 -385 0 -379 -3 b -316 -100 -373 -9 -353 -39 b -157 -358 -285 -150 -214 -266 b -43 -541 -100 -449 -49 -532 b -33 -558 -38 -550 -33 -558 b -24 -544 -32 -558 -28 -552 b 20 -473 -19 -536 1 -505 b 72 -390 39 -442 62 -405 b 143 -274 81 -375 113 -322 b 291 -35 198 -185 261 -83 b 316 -2 308 -8 310 -4 b 357 0 319 -1 338 0 b 399 -2 377 0 396 -1 b 412 -23 407 -5 412 -14 b 411 -30 412 -25 412 -27 b 392 -62 410 -31 402 -46 b 355 -122 382 -78 365 -105 b 253 -287 345 -138 299 -212 b 152 -451 207 -361 162 -435 b 76 -573 142 -467 108 -522 b 4 -676 16 -671 13 -676 b 0 -676 3 -676 1 -676 b -4 -676 -1 -676 -3 -676 b -74 -576 -13 -676 -16 -671 b -233 -319 -105 -526 -176 -411 b -373 -92 -290 -227 -353 -125 b -411 -30 -393 -59 -410 -31 b -412 -23 -412 -27 -412 -25 b -399 -2 -412 -14 -407 -5 z m -15 -1 b 0 0 -10 0 -5 0 b 82 -43 31 0 64 -17 b 99 -98 93 -61 99 -80 b 0 -197 99 -150 58 -197 b -99 -98 -58 -197 -99 -150 b -82 -43 -99 -80 -93 -61 b -15 -1 -67 -21 -43 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n breathMarkUpbow: {\n x_min: -125,\n x_max: 125,\n y_min: 0,\n y_max: 409,\n ha: 409,\n o: 'm -171 588 b -130 589 -168 589 -166 589 l -123 589 b -83 585 -87 589 -88 589 b -23 385 -80 581 -84 594 b 34 193 8 280 34 193 b 91 385 34 193 60 280 b 149 580 122 491 148 579 b 164 590 151 586 157 590 b 179 580 170 590 176 586 b 180 577 179 579 180 579 b 99 292 180 569 169 533 b 13 6 18 16 15 6 b 13 6 13 6 13 6 b 12 5 13 6 13 6 b 0 0 9 2 5 0 b -16 11 -7 0 -13 4 b -180 573 -25 41 -180 570 b -171 588 -180 580 -177 586 z',\n },\n caesura: {\n x_min: 0,\n x_max: 457,\n y_min: -202,\n y_max: 303,\n ha: 504,\n o: 'm 423 434 b 431 436 426 435 428 436 b 453 414 443 436 453 426 b 452 406 453 411 453 409 b 37 -284 450 401 41 -281 b 23 -290 33 -289 28 -290 b 0 -268 11 -290 0 -281 b 1 -261 0 -266 0 -263 b 416 430 3 -256 413 427 b 423 434 418 431 421 433 z m 627 434 b 636 436 630 435 633 436 b 658 414 648 436 658 426 b 657 406 658 411 658 409 b 242 -284 655 401 245 -281 b 227 -290 238 -289 232 -290 b 205 -268 216 -290 205 -281 b 206 -261 205 -266 205 -263 b 621 430 208 -256 618 427 b 627 434 623 431 625 433 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 370,\n y_min: -207,\n y_max: 310,\n ha: 517,\n o: 'm 291 447 b 296 447 293 447 294 447 b 328 410 314 447 328 431 b 328 403 328 408 328 406 b 325 384 328 401 326 392 b 44 -284 299 206 196 -38 b 22 -298 38 -293 30 -298 b 7 -291 16 -298 11 -296 b 0 -278 2 -287 0 -283 b 11 -251 0 -272 3 -264 b 262 409 146 -12 245 246 b 291 447 264 433 273 444 z m 496 447 b 501 447 498 447 499 447 b 533 410 519 447 533 431 b 533 403 533 408 533 406 b 530 384 532 401 531 392 b 248 -284 504 206 401 -38 b 226 -298 242 -293 234 -298 b 211 -291 221 -298 216 -296 b 205 -278 207 -287 205 -283 b 215 -251 205 -272 208 -264 b 466 409 351 -12 449 246 b 496 447 469 433 477 444 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 853,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 0 0 l 0 360 l 205 360 l 409 360 l 409 0 l 409 -360 l 205 -360 l 0 -360 z m 819 0 l 819 360 l 1023 360 l 1228 360 l 1228 0 l 1228 -360 l 1023 -360 l 819 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 0 180 l 0 360 l 205 360 l 409 360 l 409 180 l 409 0 l 205 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 330,\n y_min: -125,\n y_max: 0,\n ha: 125,\n o: 'm 0 -90 l 0 0 l 237 0 l 475 0 l 475 -90 l 475 -180 l 237 -180 l 0 -180 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -125,\n y_max: 11,\n ha: 137,\n o: 'm 9 15 b 427 17 11 16 226 17 b 771 15 603 17 769 16 b 780 0 777 13 780 6 b 771 -15 780 -6 777 -13 b 698 -16 768 -16 760 -16 l 628 -16 l 628 -98 l 628 -180 l 390 -180 l 153 -180 l 153 -98 l 153 -16 l 83 -16 b 10 -15 21 -16 12 -16 b 0 0 3 -13 0 -6 b 9 15 0 6 3 12 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 330,\n y_min: 0,\n y_max: 125,\n ha: 125,\n o: 'm 0 90 l 0 180 l 237 180 l 475 180 l 475 90 l 475 0 l 237 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 542,\n y_min: -11,\n y_max: 125,\n ha: 137,\n o: 'm 153 98 l 153 180 l 390 180 l 628 180 l 628 98 l 628 16 l 698 16 b 771 15 760 16 769 16 b 781 0 777 13 781 6 b 771 -15 781 -6 777 -13 b 427 -17 769 -16 603 -17 b 9 -15 226 -17 11 -16 b 0 0 3 -12 0 -6 b 4 12 0 4 1 8 b 58 16 9 16 5 16 b 83 16 65 16 73 16 l 153 16 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 221,\n y_min: -365,\n y_max: 365,\n ha: 730,\n o: 'm 50 524 b 56 526 52 525 54 526 b 74 516 62 526 67 523 b 96 497 78 513 88 504 b 118 478 105 489 115 481 b 181 423 143 456 154 447 b 311 305 302 317 311 310 b 310 302 311 304 310 303 b 310 299 310 301 310 300 b 298 278 310 295 310 294 b 234 132 268 233 245 181 b 222 39 226 100 222 69 b 306 -177 222 -46 251 -123 b 319 -198 318 -190 319 -191 b 303 -214 319 -208 313 -214 b 291 -212 299 -214 295 -213 b 260 -208 281 -209 270 -208 b 155 -260 221 -208 181 -227 b 122 -353 133 -287 122 -320 b 185 -490 122 -400 143 -450 b 197 -510 193 -498 197 -505 b 191 -521 197 -514 195 -517 b 181 -526 188 -524 185 -526 b 136 -495 173 -526 161 -517 b 0 -270 48 -420 0 -340 l 0 -270 l 0 -253 l 2 -243 b 157 -146 19 -182 78 -146 b 217 -152 176 -146 196 -148 l 228 -155 l 226 -152 b 124 -62 223 -150 168 -101 b 19 37 23 27 19 31 b 19 39 19 38 19 39 l 19 40 b 29 59 19 46 19 47 b 117 312 87 138 117 229 b 53 489 117 382 96 446 b 41 509 42 500 41 503 b 50 524 41 516 44 521 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 258,\n y_min: -197,\n y_max: 219,\n ha: 416,\n o: 'm 98 315 b 110 316 102 315 106 316 b 177 293 132 316 159 307 b 218 207 204 271 218 239 b 191 137 218 182 209 157 l 187 132 l 193 134 b 326 260 251 150 302 198 b 331 270 328 264 330 269 b 349 279 336 276 343 279 b 371 257 360 279 371 270 b 213 -273 371 253 216 -267 b 194 -283 209 -280 202 -283 b 173 -270 185 -283 176 -279 b 172 -265 172 -268 172 -268 b 230 -62 172 -257 180 -228 b 289 134 263 46 289 134 b 289 134 289 134 289 134 b 280 128 289 134 285 131 b 149 84 241 98 194 84 b 39 121 108 84 69 96 b 0 204 13 142 0 173 b 31 282 0 232 10 260 b 98 315 48 300 69 311 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 331,\n y_min: -443,\n y_max: 219,\n ha: 662,\n o: 'm 205 315 b 216 316 208 315 212 316 b 283 293 239 316 265 307 b 324 207 310 271 324 239 b 298 137 324 182 316 157 l 293 132 l 299 134 b 433 260 358 150 409 198 b 438 270 434 264 437 269 b 455 279 443 276 449 279 b 477 257 467 279 477 270 b 213 -627 477 253 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 205 315 155 300 176 311 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 405,\n y_min: -443,\n y_max: 466,\n ha: 909,\n o: 'm 311 670 b 322 670 315 670 318 670 b 390 647 345 670 371 662 b 431 562 417 626 431 594 b 404 492 431 536 422 511 l 400 487 l 406 488 b 539 614 464 504 515 552 b 544 625 541 619 543 623 b 562 633 549 631 555 633 b 584 612 573 633 584 625 b 213 -627 584 607 216 -621 b 194 -638 209 -635 202 -638 b 173 -625 185 -638 176 -634 b 172 -620 172 -623 172 -622 b 230 -417 172 -612 180 -583 b 289 -221 263 -309 289 -221 b 289 -221 289 -221 289 -221 b 280 -227 289 -221 285 -223 b 149 -271 241 -256 194 -271 b 39 -234 108 -271 69 -259 b 0 -150 13 -213 0 -182 b 31 -73 0 -123 10 -95 b 110 -39 52 -50 81 -39 b 207 -100 149 -39 188 -60 b 218 -147 214 -114 218 -131 b 191 -218 218 -173 209 -199 l 187 -223 l 193 -221 b 326 -96 251 -205 302 -157 b 395 134 328 -91 395 133 b 395 134 395 134 395 134 b 387 128 395 134 391 131 b 256 84 347 98 301 84 b 145 121 215 84 175 96 b 106 204 119 142 106 173 b 137 282 106 232 116 260 b 216 315 159 304 187 315 b 314 255 255 315 295 294 b 324 208 321 240 324 224 b 298 137 324 182 315 156 l 293 132 l 299 134 b 432 258 357 149 409 198 b 502 489 434 264 502 487 b 502 489 502 489 502 489 b 493 483 502 489 498 486 b 362 438 454 453 407 438 b 251 475 321 438 282 451 b 213 559 226 496 213 528 b 243 636 213 587 223 615 b 311 670 261 655 282 665 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 479,\n y_min: -689,\n y_max: 466,\n ha: 1155,\n o: 'm 417 670 b 429 670 421 670 425 670 b 496 647 451 670 478 662 b 537 562 523 626 537 594 b 510 492 537 536 529 511 l 506 487 l 512 488 b 646 614 570 504 621 552 b 651 625 647 619 650 623 b 668 633 655 631 662 633 b 690 612 679 633 690 625 b 213 -982 690 607 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 417 670 368 655 388 665 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 553,\n y_min: -689,\n y_max: 712,\n ha: 1401,\n o: 'm 524 1024 b 535 1025 527 1025 531 1025 b 603 1002 558 1025 584 1016 b 644 916 630 981 644 949 b 617 846 644 891 635 866 l 612 841 l 619 843 b 752 969 677 859 728 907 b 757 979 754 973 756 978 b 775 988 762 985 768 988 b 797 966 786 988 797 980 b 213 -982 797 962 216 -976 b 194 -993 209 -989 202 -993 b 173 -979 185 -993 176 -988 b 172 -974 172 -978 172 -977 b 230 -771 172 -966 180 -938 b 289 -575 263 -664 289 -575 b 289 -575 289 -575 289 -575 b 280 -582 289 -575 285 -578 b 149 -626 241 -611 194 -626 b 39 -589 108 -626 69 -613 b 0 -505 13 -568 0 -537 b 31 -428 0 -477 10 -449 b 110 -394 52 -405 81 -394 b 207 -454 149 -394 188 -415 b 218 -502 214 -469 218 -485 b 191 -572 218 -528 209 -553 l 187 -577 l 193 -576 b 326 -451 251 -560 302 -512 b 395 -221 328 -446 395 -222 b 395 -221 395 -221 395 -221 b 387 -227 395 -221 391 -223 b 256 -271 347 -256 301 -271 b 145 -234 215 -271 175 -259 b 106 -150 119 -213 106 -182 b 137 -73 106 -123 116 -95 b 216 -39 159 -50 187 -39 b 314 -100 255 -39 295 -60 b 324 -147 321 -114 324 -131 b 298 -218 324 -173 315 -199 l 293 -223 l 299 -221 b 432 -96 357 -205 409 -157 b 502 134 434 -91 502 133 b 502 134 502 134 502 134 b 493 128 502 134 498 131 b 362 84 454 98 407 84 b 251 121 321 84 282 96 b 213 204 226 142 213 173 b 243 282 213 232 223 260 b 322 315 265 304 294 315 b 420 255 362 315 401 294 b 431 208 427 240 431 224 b 404 137 431 182 422 156 l 400 132 l 406 134 b 539 258 463 149 515 198 b 608 489 541 264 608 487 b 608 489 608 489 608 489 b 599 483 608 489 604 486 b 468 438 560 453 513 438 b 358 475 428 438 388 451 b 319 559 332 496 319 528 b 350 636 319 587 329 615 b 429 670 372 659 400 670 b 526 610 468 670 507 649 b 537 563 534 595 537 579 b 511 492 537 536 528 511 l 506 487 l 512 488 b 645 613 570 504 621 553 b 715 843 647 618 715 842 b 715 843 715 843 715 843 b 706 837 714 843 711 841 b 575 793 667 808 620 793 b 464 830 534 793 495 805 b 426 914 439 851 426 882 b 456 991 426 941 436 969 b 524 1024 474 1010 495 1020 z',\n },\n dynamicPiano: {\n x_min: -39,\n x_max: 378,\n y_min: -178,\n y_max: 277,\n ha: 455,\n o: 'm 197 399 b 208 399 201 399 205 399 b 305 314 255 399 298 362 l 306 308 l 312 315 b 405 382 339 346 376 373 b 430 386 413 385 421 386 b 494 362 451 386 474 378 b 544 249 526 336 544 296 b 377 -30 544 116 475 1 b 334 -37 362 -34 347 -37 b 291 -25 316 -37 300 -33 b 281 -17 289 -23 285 -20 b 240 43 262 -1 248 20 b 237 52 238 47 237 52 b 237 53 237 52 237 53 b 198 -74 236 53 229 30 b 159 -207 166 -181 159 -202 b 160 -209 159 -208 160 -208 b 194 -221 165 -213 179 -218 b 206 -224 198 -222 204 -224 b 217 -240 213 -226 217 -233 b 208 -255 217 -246 214 -252 b 81 -257 206 -256 144 -257 b -46 -255 18 -257 -44 -256 b -56 -240 -52 -252 -56 -246 b -51 -229 -56 -236 -54 -232 b -33 -222 -48 -225 -46 -225 b 29 -191 9 -213 24 -206 b 174 291 34 -177 173 286 b 176 303 174 294 175 299 b 178 317 177 308 178 313 b 163 336 178 329 173 336 b 157 336 161 336 159 336 b 70 239 124 326 90 288 b 56 224 65 225 63 224 b 46 233 49 224 46 227 b 49 248 46 237 47 242 b 149 376 70 302 105 347 b 161 385 154 379 160 383 b 197 399 168 391 184 397 z m 399 318 b 389 320 396 320 393 320 b 318 285 370 320 340 306 b 302 263 306 273 304 270 b 297 253 301 260 299 256 b 273 176 296 250 288 226 l 251 104 l 252 97 b 266 51 253 81 258 64 b 296 29 274 39 288 29 b 298 29 297 29 297 29 b 309 34 299 30 304 32 b 429 230 370 62 420 144 b 431 256 430 240 431 249 b 399 318 431 289 421 307 z',\n },\n dynamicMezzo: {\n x_min: 35,\n x_max: 493,\n y_min: -19,\n y_max: 272,\n ha: 291,\n o: 'm 191 390 b 206 392 196 391 201 392 b 282 350 235 392 265 376 b 291 331 285 345 291 333 b 292 330 291 330 292 330 b 297 337 292 330 294 331 b 329 371 306 350 317 362 b 339 380 332 374 336 377 b 376 392 347 388 361 392 b 434 372 395 392 418 385 b 463 331 447 362 461 341 b 464 330 463 330 463 330 b 469 337 464 330 466 331 b 501 371 478 350 489 362 b 511 380 504 374 508 377 b 548 392 519 388 533 392 b 606 372 567 392 589 385 b 641 295 628 354 641 323 b 633 260 641 282 639 270 b 576 69 631 256 576 72 b 574 59 576 68 575 63 b 573 47 573 55 573 51 b 585 25 573 35 577 25 b 586 26 585 25 585 25 b 684 127 621 30 664 74 b 699 145 690 143 692 145 b 709 135 706 145 709 142 b 696 98 709 128 705 116 b 595 -12 672 47 640 12 b 582 -20 590 -15 584 -19 b 552 -27 573 -25 563 -27 b 481 18 524 -27 495 -10 b 470 63 474 31 470 47 b 478 98 470 76 473 88 b 535 289 480 102 535 285 b 537 298 535 290 536 294 b 538 311 538 303 538 307 b 522 339 538 324 533 333 b 516 341 519 340 517 341 b 507 337 514 341 512 340 b 468 282 491 329 470 300 b 462 261 467 276 464 264 b 422 133 461 259 444 203 b 380 2 383 1 384 4 l 378 0 l 333 0 b 321 0 329 0 324 0 b 283 5 284 0 286 0 b 282 8 282 6 282 7 b 322 149 282 15 288 37 b 363 289 344 224 363 287 b 365 299 364 292 364 296 b 367 311 366 303 367 307 b 350 339 367 324 361 333 b 344 341 347 340 346 341 b 336 337 342 341 340 340 b 296 282 319 329 298 300 b 290 261 295 276 292 264 b 251 133 289 259 272 203 b 208 2 211 1 212 4 l 206 0 l 161 0 b 149 0 157 0 152 0 b 111 5 112 0 114 0 b 110 8 110 6 110 7 b 150 149 110 15 116 37 b 191 289 172 224 191 287 b 193 299 192 292 193 296 b 195 311 194 303 195 307 b 179 338 195 323 189 333 b 171 340 176 339 174 340 b 150 333 166 340 160 338 b 75 240 120 318 92 283 b 60 224 69 225 67 224 b 50 233 53 224 50 227 b 53 248 50 237 51 242 b 162 378 75 306 117 355 b 170 383 164 379 168 381 b 191 390 176 386 183 389 z',\n },\n dynamicForte: {\n x_min: -87,\n x_max: 440,\n y_min: -182,\n y_max: 415,\n ha: 597,\n o: 'm 486 597 b 491 597 487 597 489 597 b 515 596 499 597 512 597 b 528 595 517 596 523 595 b 631 522 576 591 622 559 b 633 506 632 516 633 511 b 559 433 633 466 598 433 b 532 439 550 433 541 435 b 493 499 506 450 493 475 b 518 548 493 517 501 536 b 519 550 519 549 519 549 b 519 550 519 550 519 550 b 496 537 518 550 504 542 b 371 353 445 503 399 436 b 367 341 369 347 367 341 b 407 341 367 341 385 341 b 414 341 410 341 412 341 b 459 335 452 341 451 341 b 468 314 465 330 468 322 b 459 293 468 306 465 298 b 411 286 451 287 453 286 b 399 286 407 286 404 286 l 353 286 l 351 279 b 174 -146 320 120 253 -41 b -24 -262 120 -218 45 -262 b -28 -262 -25 -262 -26 -262 b -125 -165 -83 -260 -125 -217 b -122 -140 -125 -157 -124 -148 b -53 -89 -113 -106 -83 -89 b 17 -142 -23 -89 8 -107 b 19 -158 18 -147 19 -153 b -13 -214 19 -181 7 -202 b -16 -217 -15 -216 -16 -216 b -16 -217 -16 -217 -16 -217 b -10 -215 -15 -217 -13 -216 b 80 -130 25 -205 58 -173 b 102 -74 88 -115 93 -102 b 186 245 126 -3 146 72 b 196 285 191 267 196 285 b 196 285 196 285 196 285 b 151 286 196 286 192 286 b 98 290 103 286 102 287 b 83 314 88 296 83 305 b 98 338 83 323 88 332 b 157 341 102 341 102 341 l 211 341 l 215 353 b 486 597 264 491 372 588 z',\n },\n dynamicRinforzando: {\n x_min: 58,\n x_max: 357,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 383 395 b 401 396 389 395 395 396 b 508 352 446 396 495 377 b 515 327 513 344 515 336 b 490 285 515 310 506 293 b 465 278 482 280 474 278 b 423 301 450 278 434 286 b 365 332 408 322 386 332 b 299 281 335 332 307 314 b 296 272 298 277 297 273 b 294 266 295 271 294 269 b 291 260 293 264 292 261 b 252 133 290 259 273 201 b 210 2 213 1 214 4 l 207 0 l 163 0 b 150 0 158 0 154 0 b 112 5 113 0 115 0 b 111 8 112 6 111 7 b 152 149 111 15 118 37 b 193 289 174 225 192 287 b 195 300 193 292 194 296 b 197 315 196 305 197 310 b 175 344 197 331 189 342 b 170 344 173 344 172 344 b 109 316 149 344 127 334 b 95 306 100 306 99 306 b 84 316 88 306 84 310 b 87 325 84 319 85 322 b 149 372 99 341 127 363 b 211 388 168 381 197 388 b 215 388 213 388 214 388 b 283 349 245 385 267 372 b 285 345 284 347 285 345 b 285 345 285 345 285 345 b 291 350 286 345 288 347 b 383 395 316 374 349 390 z',\n },\n dynamicSforzando: {\n x_min: 52,\n x_max: 278,\n y_min: -22,\n y_max: 270,\n ha: 292,\n o: 'm 259 388 b 271 388 263 388 267 388 b 370 362 305 388 338 379 b 396 338 385 354 391 348 b 401 315 399 331 401 323 b 359 261 401 290 384 266 b 349 260 356 260 352 260 b 300 306 322 260 300 282 b 305 327 300 313 302 320 b 308 332 307 330 308 332 b 308 332 308 332 308 332 b 287 334 308 334 297 334 b 269 333 279 334 272 334 b 220 300 245 329 226 316 b 219 295 219 299 219 297 b 273 232 219 278 243 249 b 301 215 289 223 295 219 b 373 95 347 181 373 136 b 361 49 373 79 369 63 b 219 -32 332 -4 277 -32 b 101 7 179 -32 138 -19 b 75 51 84 19 75 34 b 85 82 75 61 78 71 b 129 106 94 98 112 106 b 164 92 142 106 154 102 b 178 59 173 83 178 71 b 170 34 178 50 175 42 l 166 29 l 168 28 b 203 22 178 24 190 22 b 226 25 211 22 219 23 b 275 68 253 31 275 52 b 274 75 275 70 274 73 b 217 132 264 98 249 114 b 122 262 161 163 127 210 b 122 270 122 265 122 267 b 259 388 122 329 184 384 z',\n },\n dynamicZ: {\n x_min: 23,\n x_max: 309,\n y_min: 2,\n y_max: 250,\n ha: 248,\n o: 'm 124 360 b 222 360 125 360 168 360 b 435 359 312 360 434 360 b 445 344 442 356 445 350 b 440 331 445 339 444 335 b 314 227 438 330 382 283 b 190 124 247 172 191 125 l 188 123 l 201 123 b 205 123 202 123 204 123 b 268 101 231 123 249 117 b 320 79 284 88 305 79 b 326 80 322 79 324 79 b 340 93 330 81 334 84 b 342 97 341 96 342 97 b 342 98 342 98 342 98 b 340 97 342 98 341 97 b 330 96 336 96 333 96 b 294 134 311 96 294 113 b 295 142 294 136 294 139 b 340 176 299 163 320 176 b 371 163 351 176 363 172 b 383 124 380 154 383 139 b 359 60 383 100 375 74 b 322 30 350 51 329 35 b 239 3 295 12 266 3 b 179 21 218 3 197 9 b 117 39 161 33 138 39 b 86 35 106 39 95 38 b 67 23 79 32 76 31 b 49 14 58 15 55 14 b 33 30 39 14 33 21 b 38 42 33 34 34 38 b 73 72 41 46 60 62 b 303 262 80 77 299 258 b 303 262 303 262 303 262 b 246 263 303 262 277 263 b 146 261 203 263 150 262 b 102 239 131 259 117 252 b 88 231 94 232 92 231 b 85 230 87 230 86 230 b 69 246 76 230 69 237 l 69 247 l 69 252 l 92 302 b 116 355 104 330 115 354 b 124 360 118 357 122 359 z',\n },\n ornamentTrill: {\n x_min: -249,\n x_max: 249,\n y_min: 0,\n y_max: 376,\n ha: 376,\n o: 'm -92 502 b -29 542 -33 541 -33 542 b -21 534 -25 542 -21 539 b -70 366 -21 532 -65 383 l -71 364 l -47 364 b 125 383 13 366 71 372 b 149 387 136 386 143 387 b 167 382 156 387 160 385 b 181 370 171 380 179 373 b 182 370 181 370 181 370 b 230 380 185 370 195 372 b 304 394 286 393 290 394 b 305 394 305 394 305 394 b 357 353 330 394 349 379 b 359 336 358 349 359 342 b 354 314 359 326 357 316 b 257 291 352 312 263 291 b 257 291 257 291 257 291 b 250 299 252 292 250 294 b 251 305 250 301 250 303 b 251 314 251 308 251 311 b 234 350 251 329 245 343 l 230 353 l 224 349 b 169 287 202 334 183 313 b 127 156 163 276 166 286 b 88 37 92 43 91 39 b -8 15 84 35 -4 15 b -8 15 -8 15 -8 15 b -14 22 -12 16 -14 17 b -8 47 -14 26 -12 33 b -2 69 -5 59 -2 69 b -2 69 -2 69 -2 69 b -45 44 -2 69 -22 58 b -122 4 -102 10 -105 9 b -151 0 -132 1 -142 0 b -256 105 -208 0 -256 46 b -255 119 -256 110 -256 114 b -223 231 -254 129 -256 121 b -195 325 -208 282 -195 325 b -195 325 -195 325 -195 325 b -198 325 -196 325 -196 325 b -274 324 -206 325 -237 325 b -340 324 -310 324 -329 324 b -354 325 -351 324 -353 324 b -359 332 -357 326 -359 329 b -356 338 -359 334 -358 336 b -308 351 -355 340 -353 340 l -261 361 l -222 362 l -182 363 l -168 411 b -152 461 -160 438 -153 460 b -92 502 -152 462 -125 480 z m 62 348 b 57 349 60 349 59 349 b 40 346 55 349 51 348 b -62 330 8 339 -30 333 b -83 321 -84 329 -82 330 b -115 211 -83 318 -93 283 b -148 88 -149 94 -148 99 b -148 87 -148 88 -148 88 b -123 53 -148 67 -137 53 b -113 55 -120 53 -117 54 b 18 133 -111 57 17 132 b 46 227 19 134 46 225 b 53 251 46 231 48 239 b 78 334 57 261 78 331 b 62 348 78 340 71 347 z',\n },\n ornamentTurn: {\n x_min: -310,\n x_max: 310,\n y_min: -143,\n y_max: 143,\n ha: 286,\n o: 'm -272 205 b -264 206 -270 206 -267 206 b -202 198 -249 206 -221 202 b 44 48 -119 177 -37 127 b 261 -91 117 -24 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -92 396 -51 b 402 11 401 5 402 8 b 321 87 402 58 366 87 b 258 70 301 87 279 81 b 221 60 246 63 233 60 b 157 125 186 60 157 86 b 213 194 157 158 175 179 b 277 206 234 202 256 206 b 437 90 348 206 413 162 b 447 24 444 69 447 47 b 365 -163 447 -46 416 -120 b 257 -206 331 -192 297 -206 b 178 -192 233 -206 207 -201 b -47 -48 101 -168 28 -121 b -250 86 -116 20 -180 62 b -312 99 -275 94 -295 99 b -361 83 -331 99 -346 94 b -402 6 -388 65 -402 36 b -349 -77 -402 -28 -384 -62 b -314 -85 -337 -82 -326 -85 b -260 -70 -297 -85 -280 -80 b -224 -60 -247 -63 -235 -60 b -188 -71 -211 -60 -199 -64 b -160 -126 -169 -84 -160 -105 b -189 -181 -160 -147 -169 -168 b -272 -204 -211 -195 -242 -204 b -293 -202 -279 -204 -286 -203 b -447 -6 -385 -189 -447 -103 b -435 68 -447 18 -443 43 b -280 204 -411 141 -349 196 b -272 205 -277 205 -273 205 z',\n },\n ornamentTurnSlash: {\n x_min: -310,\n x_max: 310,\n y_min: -201,\n y_max: 201,\n ha: 402,\n o: 'm -10 288 b -2 289 -7 289 -4 289 b 19 276 8 289 16 284 b 21 171 21 272 21 271 l 21 71 l 43 49 b 261 -90 120 -26 191 -71 b 307 -100 285 -97 297 -100 b 318 -99 311 -100 314 -99 b 401 2 362 -91 396 -50 b 402 12 402 5 402 8 b 321 87 402 58 367 87 b 258 70 301 87 280 82 b 221 60 246 63 233 60 b 157 125 187 60 157 86 b 214 194 157 158 175 180 b 277 206 235 202 256 206 b 431 106 342 206 402 169 b 447 24 442 82 447 54 b 443 -24 447 9 446 -7 b 258 -206 423 -127 344 -206 b 257 -206 258 -206 258 -206 b 23 -109 190 -205 102 -169 l 21 -107 l 21 -190 b 21 -223 21 -203 21 -214 b 14 -283 21 -282 20 -277 b -1 -289 10 -287 5 -289 b -22 -276 -10 -289 -18 -284 b -23 -171 -23 -272 -23 -271 l -23 -71 l -46 -49 b -250 86 -119 22 -179 62 b -312 99 -275 95 -295 99 b -360 84 -330 99 -345 94 b -401 7 -388 66 -401 36 b -349 -77 -401 -28 -383 -62 b -314 -85 -337 -82 -326 -85 b -260 -69 -297 -85 -279 -80 b -223 -60 -247 -63 -235 -60 b -177 -81 -206 -60 -190 -67 b -159 -125 -165 -93 -159 -109 b -188 -180 -159 -147 -169 -168 b -268 -203 -212 -196 -240 -203 b -376 -165 -306 -203 -345 -190 b -447 -7 -425 -124 -447 -65 b -293 202 -447 86 -390 180 b -260 206 -283 204 -272 206 b -25 109 -194 206 -105 170 l -23 107 l -23 189 b -22 276 -23 271 -23 272 b -10 288 -20 281 -15 286 z',\n },\n ornamentMordent: {\n x_min: -296,\n x_max: 296,\n y_min: -215,\n y_max: 198,\n ha: 413,\n o: 'm -11 284 b -3 285 -9 285 -6 285 b 17 273 5 285 14 280 b 19 164 19 270 19 269 l 19 59 l 68 118 b 118 179 98 155 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b 29 0 29 0 29 0 b 24 -6 29 0 27 -3 l 19 -12 l 19 -152 b 19 -218 19 -179 19 -200 b 13 -303 19 -308 19 -298 b -3 -310 9 -308 3 -310 b -23 -297 -11 -310 -19 -305 b -25 -180 -24 -294 -24 -294 l -25 -66 l -70 -121 b -118 -178 -99 -156 -116 -177 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -224 182 -233 181 -228 182 b -211 179 -219 182 -215 181 b -48 18 -209 177 -116 86 l -29 0 l -27 2 l -25 5 l -25 137 b -23 272 -25 267 -25 268 b -11 284 -21 277 -16 282 z',\n },\n ornamentShortTrill: {\n x_min: -296,\n x_max: 296,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -231 181 b -225 182 -229 182 -227 182 b -211 179 -220 182 -215 181 b -119 89 -210 178 -169 137 b -29 0 -70 40 -30 0 b 44 88 -29 0 4 40 b 118 179 89 144 117 178 b 131 182 122 181 127 182 b 143 179 136 182 140 181 b 307 18 145 177 232 92 l 326 -1 l 356 36 b 404 81 393 81 393 81 l 404 81 b 426 59 417 81 426 71 b 424 50 426 56 426 53 b 236 -179 421 44 241 -176 b 224 -182 233 -181 228 -182 b 211 -178 219 -182 215 -181 b 119 -89 210 -178 169 -137 b 29 0 70 -40 30 0 b -44 -88 29 0 -4 -40 b -118 -179 -89 -144 -117 -178 b -131 -182 -122 -181 -127 -182 b -144 -178 -135 -182 -140 -181 b -307 -18 -145 -177 -233 -91 l -326 1 l -356 -36 b -404 -81 -393 -81 -393 -81 l -404 -81 b -426 -59 -417 -81 -426 -71 b -424 -50 -426 -56 -426 -53 b -236 179 -421 -44 -241 176 b -231 181 -235 179 -233 181 z',\n },\n ornamentTremblement: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm -409 181 b -402 182 -407 182 -404 182 b -389 179 -397 182 -392 181 b -297 89 -387 178 -346 137 b -207 0 -248 40 -207 0 l -207 0 b -134 88 -206 0 -174 40 b -59 179 -88 144 -61 178 b -46 182 -55 181 -51 182 b -34 179 -42 182 -37 181 b 58 89 -33 178 9 137 b 148 0 107 40 148 0 l 148 0 b 221 88 148 0 181 40 b 296 179 267 144 294 178 b 308 182 300 181 304 182 b 321 179 313 182 317 181 b 485 18 323 177 409 92 l 503 -1 l 533 36 b 581 81 570 81 570 81 l 582 81 b 604 59 594 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 418 -176 b 401 -182 410 -181 406 -182 b 388 -178 397 -182 392 -181 b 297 -89 387 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 206 0 174 -40 b 59 -179 88 -144 61 -178 b 46 -182 55 -181 51 -182 b 34 -178 42 -182 37 -181 b -58 -89 33 -178 -9 -137 b -148 0 -107 -40 -148 0 l -148 0 b -221 -88 -148 0 -181 -40 b -296 -179 -267 -144 -294 -178 b -308 -182 -300 -181 -304 -182 b -321 -178 -313 -182 -317 -181 b -485 -18 -323 -177 -411 -91 l -503 1 l -533 -36 b -581 -81 -570 -81 -570 -81 l -582 -81 b -604 -59 -594 -81 -604 -71 b -602 -50 -604 -56 -603 -53 b -414 179 -599 -44 -418 176 b -409 181 -412 179 -410 181 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -419,\n x_max: 419,\n y_min: -127,\n y_max: 255,\n ha: 381,\n o: 'm -591 365 b -582 367 -588 366 -585 367 b -561 352 -573 367 -564 361 b -560 176 -560 351 -560 303 l -559 2 l -527 41 b -456 128 -509 63 -477 102 b -414 177 -435 154 -416 176 b -400 182 -411 181 -405 182 b -388 179 -396 182 -392 181 b -296 89 -387 178 -346 137 b -206 0 -247 40 -207 0 b -133 88 -206 0 -173 40 b -59 179 -88 144 -60 178 b -46 182 -55 181 -50 182 b -33 179 -41 182 -37 181 b 58 89 -32 178 9 137 b 148 0 108 40 148 0 l 148 0 b 221 88 149 0 182 40 b 296 179 267 144 295 178 b 309 182 300 181 304 182 b 321 179 313 182 318 181 b 485 18 323 177 410 92 l 503 -1 l 533 36 b 581 81 570 81 571 81 l 582 81 b 604 59 595 81 604 71 b 602 50 604 56 603 53 b 414 -179 599 44 419 -176 b 402 -182 410 -181 406 -182 b 389 -178 397 -182 393 -181 b 297 -89 388 -178 346 -137 b 207 0 248 -40 207 0 l 207 0 b 134 -88 207 0 174 -40 b 59 -179 89 -144 61 -178 b 47 -182 56 -181 51 -182 b 34 -178 42 -182 38 -181 b -58 -89 33 -178 -8 -137 b -148 0 -107 -40 -147 0 b -220 -88 -148 0 -181 -40 b -295 -179 -266 -144 -294 -178 b -308 -182 -299 -181 -303 -182 b -321 -178 -312 -182 -317 -181 b -484 -18 -322 -177 -426 -76 l -503 1 l -535 -38 b -570 -79 -558 -67 -567 -77 b -582 -83 -573 -81 -578 -83 b -602 -70 -590 -83 -598 -78 l -604 -67 l -604 141 l -604 349 l -603 353 b -591 365 -601 358 -596 363 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 127,\n ha: 370,\n o: 'm -388 181 b -382 182 -386 182 -384 182 b -368 179 -377 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 78 89 -12 178 29 137 b 168 0 127 40 168 0 b 241 88 169 0 201 40 b 316 179 287 144 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 154 -88 227 0 194 -40 b 79 -179 108 -144 81 -178 b 67 -182 75 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -585 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -388 181 -396 176 -394 179 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -433,\n x_max: 433,\n y_min: -243,\n y_max: 198,\n ha: 442,\n o: 'm 186 284 b 194 285 189 285 192 285 b 215 273 203 285 211 280 b 217 164 216 270 216 269 l 217 59 l 265 118 b 316 179 295 155 314 178 b 329 182 320 181 324 182 b 341 179 333 182 337 181 b 505 18 343 177 430 92 l 523 -1 l 553 36 b 601 81 590 81 590 81 l 602 81 b 624 59 614 81 624 71 b 622 50 624 56 623 53 b 434 -179 619 44 439 -176 b 421 -182 430 -181 426 -182 b 409 -178 417 -182 412 -181 b 317 -89 407 -178 366 -137 b 227 0 268 -40 227 0 b 227 0 227 0 227 0 b 222 -6 227 0 224 -3 l 217 -12 l 217 -152 b 217 -218 217 -179 217 -200 b 210 -303 217 -308 216 -298 b 195 -310 206 -308 201 -310 b 175 -297 187 -310 178 -305 b 173 -180 173 -294 173 -294 l 173 -66 l 127 -121 b 79 -178 99 -156 81 -177 b 67 -182 76 -181 71 -182 b 54 -178 62 -182 58 -181 b -38 -89 53 -178 12 -137 b -128 0 -87 -40 -127 0 b -201 -88 -128 0 -161 -40 b -276 -179 -246 -144 -274 -178 b -288 -182 -279 -181 -284 -182 b -301 -178 -293 -182 -297 -181 b -393 -88 -302 -178 -343 -137 b -483 0 -442 -40 -483 0 b -483 0 -483 0 -483 0 b -505 -27 -484 0 -497 -15 b -579 -235 -554 -92 -579 -166 b -567 -315 -579 -263 -575 -290 b -564 -330 -565 -320 -564 -325 b -586 -351 -564 -342 -572 -351 b -610 -326 -598 -351 -604 -345 b -624 -235 -619 -297 -624 -267 b -547 -8 -624 -159 -597 -79 b -492 60 -538 4 -533 10 b -426 140 -472 84 -443 120 b -393 179 -408 162 -395 178 b -381 182 -390 181 -385 182 b -368 179 -376 182 -372 181 b -277 89 -367 178 -326 137 b -187 0 -227 40 -187 0 l -187 0 b -114 88 -186 0 -153 40 b -39 179 -68 144 -40 178 b -26 182 -35 181 -30 182 b -14 179 -22 182 -17 181 b 150 18 -12 177 81 86 l 168 0 l 171 2 l 173 5 l 173 137 b 174 272 173 267 173 268 b 186 284 176 277 181 282 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -433,\n x_max: 433,\n y_min: -127,\n y_max: 244,\n ha: 370,\n o: 'm 577 349 b 585 351 580 350 582 351 b 601 345 591 351 597 349 b 624 229 613 332 624 275 b 622 204 624 220 623 211 b 559 27 615 139 595 83 b 492 -60 546 6 541 0 b 426 -140 472 -84 443 -120 b 393 -179 408 -162 395 -178 b 381 -182 390 -181 385 -182 b 368 -178 376 -182 372 -181 b 277 -89 367 -178 326 -137 b 187 0 227 -40 187 0 l 187 0 b 114 -88 186 0 153 -40 b 39 -179 68 -144 40 -178 b 26 -182 35 -181 31 -182 b 13 -178 22 -182 17 -181 b -78 -89 12 -178 -29 -137 b -168 0 -127 -40 -168 0 b -241 -88 -169 0 -201 -40 b -316 -179 -287 -144 -314 -178 b -329 -182 -320 -181 -324 -182 b -341 -178 -333 -182 -337 -181 b -505 -18 -343 -177 -431 -91 l -523 1 l -553 -36 b -601 -81 -590 -81 -590 -81 l -602 -81 b -624 -59 -614 -81 -624 -71 b -622 -50 -624 -56 -623 -53 b -434 179 -619 -44 -439 176 b -421 182 -430 181 -426 182 b -409 179 -417 182 -412 181 b -317 89 -408 178 -366 137 b -227 0 -268 40 -227 0 b -154 88 -227 0 -194 40 b -79 179 -108 144 -81 178 b -66 182 -75 181 -71 182 b -54 179 -62 182 -58 181 b 38 89 -53 178 -12 137 b 128 0 87 40 127 0 b 201 88 128 0 161 40 b 276 179 246 144 274 178 b 288 182 279 181 284 182 b 301 179 293 182 297 181 b 393 88 302 178 343 137 b 483 0 442 40 483 0 b 483 0 483 0 483 0 b 505 27 484 0 497 15 b 579 235 554 92 579 166 b 567 315 579 263 575 290 b 564 330 565 321 564 326 b 577 349 564 339 568 346 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -439,\n x_max: 439,\n y_min: -127,\n y_max: 236,\n ha: 363,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 86 89 -4 178 37 137 b 176 0 136 40 176 0 l 176 0 b 249 88 177 0 210 40 b 324 179 295 144 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 l 235 0 b 162 -88 235 0 202 -40 b 87 -179 117 -144 89 -178 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -439,\n x_max: 439,\n y_min: -215,\n y_max: 236,\n ha: 451,\n o: 'm -564 338 b -555 340 -561 339 -558 340 b -534 318 -544 340 -534 331 b -534 317 -534 318 -534 317 b -541 296 -534 311 -534 311 b -588 116 -572 236 -588 175 b -583 62 -588 98 -586 80 b -554 -21 -578 34 -566 -2 l -552 -24 l -511 26 b -430 126 -488 54 -452 99 b -386 177 -407 153 -388 176 b -372 182 -382 181 -377 182 b -360 179 -368 182 -364 181 b -268 89 -359 178 -318 137 b -178 0 -219 40 -179 0 b -105 88 -178 0 -145 40 b -30 179 -60 144 -32 178 b -18 182 -27 181 -22 182 b -5 179 -13 182 -9 181 b 158 18 -4 177 89 86 l 177 0 l 179 2 l 181 5 l 181 137 b 183 272 181 267 181 268 b 203 285 186 280 195 285 b 218 279 209 285 214 283 b 225 164 225 273 225 284 l 225 59 l 274 118 b 324 179 304 155 323 178 b 337 182 328 181 333 182 b 349 179 341 182 346 181 b 513 18 351 177 438 92 l 532 -1 l 562 36 b 610 81 599 81 599 81 l 610 81 b 632 59 623 81 632 71 b 630 50 632 56 631 53 b 442 -179 627 44 447 -176 b 430 -182 438 -181 434 -182 b 417 -178 425 -182 421 -181 b 325 -89 416 -178 375 -137 b 235 0 276 -40 236 0 b 235 0 235 0 235 0 b 230 -6 235 0 232 -3 l 225 -12 l 225 -152 b 225 -218 225 -179 225 -200 b 219 -303 225 -308 224 -298 b 203 -310 214 -308 209 -310 b 183 -297 195 -310 187 -305 b 181 -180 182 -294 182 -294 l 181 -66 l 136 -121 b 88 -178 107 -156 89 -177 b 75 -182 84 -181 79 -182 b 62 -178 70 -182 66 -181 b -29 -89 61 -178 20 -137 b -119 0 -79 -40 -119 0 b -192 -88 -120 0 -153 -40 b -267 -179 -238 -144 -266 -178 b -280 -182 -271 -181 -275 -182 b -293 -178 -284 -182 -289 -181 b -456 -18 -294 -177 -398 -76 l -475 1 l -507 -38 b -554 -83 -543 -82 -543 -83 l -554 -83 b -576 -68 -562 -83 -568 -79 b -632 115 -613 -19 -632 46 b -593 292 -632 173 -619 233 b -564 338 -579 323 -571 335 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -439,\n x_max: 439,\n y_min: -236,\n y_max: 127,\n ha: 362,\n o: 'm -437 181 b -430 182 -435 182 -433 182 b -417 179 -426 182 -420 181 b -325 89 -416 178 -375 137 b -235 0 -276 40 -235 0 l -235 0 b -162 88 -235 0 -202 40 b -87 179 -117 144 -89 178 b -75 182 -84 181 -79 182 b -62 179 -70 182 -66 181 b 29 89 -61 178 -20 137 b 119 0 79 40 119 0 b 192 88 120 0 153 40 b 267 179 238 144 266 178 b 280 182 271 181 276 182 b 292 179 284 182 289 181 b 456 18 294 177 396 77 l 475 -1 l 507 38 b 554 83 543 82 543 83 l 554 83 b 576 68 563 83 568 79 b 632 -116 613 19 632 -46 b 607 -257 632 -162 624 -210 b 571 -334 596 -287 578 -327 b 556 -340 567 -338 561 -340 b 535 -326 547 -340 538 -335 b 533 -319 534 -323 533 -321 b 541 -296 533 -314 536 -308 b 588 -117 572 -236 588 -175 b 579 -40 588 -91 585 -65 b 554 21 573 -19 563 7 l 552 24 l 511 -26 b 430 -126 488 -54 452 -99 b 386 -177 407 -153 388 -176 b 373 -182 382 -181 377 -182 b 360 -178 368 -182 364 -181 b 268 -89 359 -178 318 -137 b 178 0 219 -40 179 0 l 178 0 b 105 -88 178 0 145 -40 b 30 -179 60 -144 32 -178 b 18 -182 27 -181 22 -182 b 5 -178 13 -182 9 -181 b -86 -89 4 -178 -37 -137 b -176 0 -136 -40 -176 0 l -176 0 b -249 -88 -177 0 -210 -40 b -324 -179 -295 -144 -323 -178 b -337 -182 -328 -181 -332 -182 b -349 -178 -341 -182 -346 -181 b -513 -18 -351 -177 -439 -91 l -532 1 l -562 -36 b -610 -81 -599 -81 -599 -81 l -610 -81 b -632 -59 -623 -81 -632 -71 b -630 -50 -632 -56 -631 -53 b -442 179 -627 -44 -447 176 b -437 181 -441 179 -438 181 z',\n },\n stringsDownBow: {\n x_min: -168,\n x_max: 168,\n y_min: 0,\n y_max: 353,\n ha: 353,\n o: 'm -228 506 b 3 508 -225 507 -111 508 b 228 506 114 508 225 507 b 240 494 233 504 238 499 b 242 254 241 491 242 373 b 240 14 242 135 241 16 b 220 0 237 5 228 0 b 204 6 214 0 208 2 b 198 89 198 12 198 3 b 198 145 198 104 198 123 l 198 273 l 0 273 l -198 273 l -198 145 b -198 89 -198 123 -198 104 b -204 6 -198 3 -198 12 b -220 0 -208 2 -214 0 b -240 14 -228 0 -237 5 b -242 254 -241 16 -242 135 b -240 494 -242 373 -241 491 b -228 506 -238 499 -233 504 z',\n },\n stringsUpBow: {\n x_min: -110,\n x_max: 110,\n y_min: 0,\n y_max: 277,\n ha: 277,\n o: 'm -144 397 b -137 398 -142 398 -140 398 b -117 387 -129 398 -120 394 b -58 234 -116 385 -90 317 b 0 84 -26 152 0 84 b 58 234 0 84 26 152 b 117 387 90 317 116 385 b 136 398 121 395 128 398 b 158 376 147 398 158 390 l 158 370 l 89 191 b 20 11 51 93 20 12 b 0 0 16 4 8 0 b -19 11 -8 0 -16 4 b -158 375 -25 21 -158 370 b -158 376 -158 375 -158 376 b -144 397 -158 386 -153 394 z',\n },\n stringsHarmonic: {\n x_min: -82,\n x_max: 82,\n y_min: -82,\n y_max: 82,\n ha: 163,\n o: 'm -19 116 b 1 118 -12 117 -6 118 b 118 0 65 118 118 63 b 114 -30 118 -10 116 -20 b -1 -118 100 -85 50 -118 b -83 -83 -30 -118 -60 -107 b -118 -1 -107 -60 -118 -30 b -19 116 -118 53 -81 105 z m 14 99 b 0 100 9 100 4 100 b -101 0 -57 100 -101 53 b -90 -45 -101 -15 -97 -30 b 0 -100 -71 -82 -36 -100 b 90 -45 36 -100 71 -82 b 101 -1 97 -30 101 -15 b 14 99 101 47 65 92 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -110,\n x_max: 110,\n y_min: -110,\n y_max: 205,\n ha: 315,\n o: 'm -9 293 b 0 295 -6 294 -3 295 b 20 281 9 295 17 290 b 22 217 22 278 22 276 l 22 157 l 25 157 b 153 40 85 148 138 100 b 158 0 157 26 158 13 b 40 -153 158 -71 111 -135 b 0 -158 26 -157 13 -158 b -154 -40 -71 -158 -136 -111 b -158 -1 -157 -27 -158 -14 b -25 157 -158 76 -102 146 l -22 157 l -22 217 b -21 281 -22 276 -22 278 b -9 293 -19 286 -13 291 z m -22 54 b -23 112 -22 108 -22 112 b -23 112 -23 112 -23 112 b -81 80 -37 111 -65 96 b -114 1 -104 57 -114 29 b 0 -114 -114 -58 -69 -114 b 114 1 68 -114 114 -58 b 80 80 114 29 104 57 b 22 112 65 96 35 112 b 22 54 22 112 22 92 b 20 -8 22 -3 22 -5 b 0 -22 17 -17 9 -22 b -16 -16 -6 -22 -11 -20 b -22 34 -22 -10 -22 -12 b -22 54 -22 40 -22 46 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -110,\n x_max: 110,\n y_min: -205,\n y_max: 110,\n ha: 315,\n o: 'm 9 -293 b 0 -295 6 -294 3 -295 b -20 -281 -9 -295 -17 -290 b -22 -217 -22 -278 -22 -276 l -22 -157 l -25 -157 b -153 -40 -85 -148 -138 -100 b -158 0 -157 -26 -158 -13 b -40 153 -158 71 -111 135 b 0 158 -26 157 -13 158 b 154 40 71 158 136 111 b 158 1 157 27 158 14 b 25 -157 158 -76 102 -146 l 22 -157 l 22 -217 b 21 -281 22 -276 22 -278 b 9 -293 19 -286 13 -291 z m 22 -54 b 23 -112 22 -108 22 -112 b 23 -112 23 -112 23 -112 b 81 -80 37 -111 65 -96 b 114 -1 104 -57 114 -29 b 0 114 114 58 69 114 b -114 -1 -68 114 -114 58 b -80 -80 -114 -29 -104 -57 b -22 -112 -65 -96 -35 -112 b -22 -54 -22 -112 -22 -92 b -20 8 -22 3 -22 5 b 0 22 -17 17 -9 22 b 16 16 6 22 11 20 b 22 -34 22 10 22 12 b 22 -54 22 -40 22 -46 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -155,\n x_max: 155,\n y_min: -157,\n y_max: 157,\n ha: 315,\n o: 'm -9 225 b 0 227 -6 226 -3 227 b 20 213 9 227 17 221 b 22 116 22 209 22 208 l 22 22 l 114 22 b 152 22 129 22 141 22 b 218 16 218 22 212 21 b 224 0 222 11 224 6 b 210 -20 224 -9 219 -17 b 114 -22 207 -22 205 -22 l 22 -22 l 22 -116 b 22 -154 22 -131 22 -143 b 16 -220 22 -221 21 -214 b 0 -227 11 -225 6 -227 b -20 -213 -9 -227 -17 -222 b -22 -116 -22 -209 -22 -208 l -22 -22 l -114 -22 b -210 -20 -205 -22 -207 -22 b -224 0 -219 -17 -224 -9 b -218 16 -224 6 -222 11 b -152 22 -212 21 -218 22 b -114 22 -141 22 -129 22 l -22 22 l -22 116 b -20 213 -22 208 -22 209 b -9 225 -19 218 -13 223 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 782,\n y_min: -1,\n y_max: 500,\n ha: 501,\n o: 'm 309 719 b 335 720 318 720 327 720 b 521 650 409 720 473 696 b 582 517 561 610 582 560 b 528 423 582 476 564 441 b 483 411 513 415 498 411 b 392 480 443 411 406 437 b 384 516 386 496 384 508 b 400 535 384 529 389 535 b 417 520 409 535 414 530 b 458 494 421 503 438 494 b 498 507 472 494 486 498 b 520 552 513 517 520 533 b 469 645 520 582 502 619 b 349 687 437 670 389 687 l 344 687 l 335 671 b 286 544 299 609 286 577 b 286 543 286 544 286 543 b 341 449 286 511 298 491 b 371 411 359 430 364 424 b 385 358 380 394 385 377 b 378 317 385 345 383 331 b 302 165 365 271 336 212 b 298 159 300 162 298 159 b 298 159 298 159 298 159 b 305 160 299 159 302 159 b 336 162 315 161 326 162 b 486 106 392 162 445 143 l 492 101 l 512 117 b 533 134 523 126 532 133 b 534 136 534 135 534 135 b 533 144 534 138 534 140 b 530 188 531 159 530 174 b 571 320 530 238 544 283 b 657 390 587 342 634 380 b 686 397 666 395 676 397 b 763 335 721 397 755 372 b 766 315 765 328 766 321 b 740 251 766 291 756 267 b 699 219 736 247 702 221 b 636 172 697 218 662 192 b 614 153 618 158 614 154 b 614 153 614 153 614 153 b 645 91 621 129 636 100 b 694 73 657 78 675 73 b 797 123 728 73 769 91 l 800 127 l 799 134 b 795 176 796 148 795 162 b 947 403 795 266 851 351 b 950 405 949 404 950 405 b 944 414 950 407 948 409 b 659 583 875 496 774 556 b 636 603 641 587 636 591 b 654 620 636 614 642 620 b 666 619 658 620 662 620 b 1113 282 884 577 1062 442 b 1126 198 1122 253 1126 225 b 954 -1 1126 87 1054 -1 b 930 1 946 -1 938 0 b 817 83 883 7 841 37 b 815 87 816 85 815 87 b 808 79 814 87 812 84 b 664 0 772 29 717 0 b 620 7 649 0 634 2 b 546 92 584 19 565 40 l 544 99 l 540 97 b 480 49 539 95 512 74 b 414 1 419 0 420 1 l 414 1 b 396 17 404 1 399 5 b 284 110 381 72 333 110 b 266 108 278 110 272 110 l 258 107 l 247 94 b 164 2 213 53 169 4 b 156 0 161 0 159 0 b 139 17 147 0 139 8 b 140 23 139 19 140 21 b 144 34 141 24 142 29 b 234 137 158 79 189 114 b 260 164 244 143 244 142 b 319 290 300 217 319 259 b 281 349 319 312 313 322 b 223 453 250 376 229 414 b 222 472 223 459 222 466 b 296 673 222 522 246 587 l 303 685 l 300 685 b 290 684 299 685 294 684 b 60 496 171 668 77 591 b 59 477 59 490 59 483 b 76 426 59 453 66 431 b 100 420 84 422 92 420 b 162 487 131 420 160 448 b 179 507 163 502 168 507 b 196 479 192 507 196 501 b 196 478 196 478 196 478 b 88 335 195 397 151 338 b 83 335 86 335 84 335 b 0 443 31 335 0 375 l 0 443 b 309 719 0 583 138 706 z m 981 361 b 976 368 978 366 977 368 b 968 362 974 368 972 366 b 872 175 908 318 872 247 b 877 131 872 160 874 145 b 943 34 887 82 914 43 b 949 34 945 34 947 34 b 1018 127 973 34 1004 75 b 1027 198 1024 151 1027 174 b 981 361 1027 253 1011 309 z m 665 338 b 657 339 662 339 660 339 b 641 336 652 339 647 338 b 614 293 635 333 622 312 b 602 221 607 274 602 246 b 604 198 602 213 603 205 b 606 191 605 193 605 191 b 608 193 606 191 607 192 b 666 238 613 197 642 219 b 695 264 690 256 691 257 b 702 290 700 272 702 281 b 665 338 702 312 688 334 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 435,\n y_min: 65,\n y_max: 500,\n ha: 435,\n o: 'm 300 719 b 311 720 303 720 307 720 b 332 718 319 720 327 719 b 379 654 361 709 379 685 b 354 601 379 632 374 620 b 331 558 338 585 331 572 b 336 536 331 551 333 544 b 374 512 344 521 358 512 b 389 514 379 512 384 513 b 422 575 414 523 422 538 b 474 646 422 614 441 639 b 489 648 479 647 484 648 b 555 581 527 648 555 615 b 535 535 555 565 549 549 b 479 515 520 520 508 516 b 450 512 462 515 458 514 b 418 468 429 505 418 487 b 438 433 418 455 425 441 b 464 424 447 427 455 424 b 509 449 477 424 491 432 b 557 473 526 466 538 472 b 561 473 558 473 560 473 b 627 407 599 473 627 442 b 620 378 627 397 625 387 b 561 341 609 354 588 341 l 560 341 b 508 365 538 341 527 346 b 465 390 491 383 478 390 b 457 389 462 390 460 390 b 418 347 433 384 418 367 b 424 325 418 340 420 332 b 479 299 433 306 446 300 b 535 279 509 298 520 294 b 555 233 549 266 555 249 b 489 166 555 199 527 166 b 474 167 484 166 480 166 b 422 239 441 175 422 200 b 393 298 422 273 414 289 b 374 302 386 301 380 302 b 332 266 354 302 337 288 b 331 255 331 262 331 258 b 355 213 331 242 338 230 b 379 160 374 193 379 182 l 379 160 b 313 93 379 120 348 93 b 272 108 299 93 285 98 b 247 160 256 121 247 140 b 259 198 247 173 251 187 b 272 213 260 200 266 206 b 296 255 289 230 296 242 b 295 266 296 258 296 262 b 253 302 290 288 273 302 b 234 298 247 302 241 301 b 205 239 213 289 205 273 b 153 167 205 200 186 175 b 138 166 148 166 143 166 b 73 232 101 166 73 197 b 82 267 73 244 76 256 b 148 299 95 289 113 298 b 182 304 168 299 171 300 b 197 315 189 307 192 309 b 209 346 205 325 209 336 b 179 386 209 364 198 379 b 162 390 173 389 167 390 b 119 365 148 390 136 382 b 104 352 113 360 107 354 b 67 341 92 344 79 341 b 2 390 38 341 10 359 b 0 407 1 396 0 401 b 66 473 0 443 30 473 b 83 471 72 473 77 473 b 118 449 96 468 104 463 b 161 424 136 432 149 424 b 163 424 161 424 162 424 b 209 467 191 427 209 445 b 203 489 209 474 207 482 b 148 515 193 509 180 515 b 92 535 119 516 107 520 b 72 581 78 549 72 565 b 138 648 72 615 100 648 b 153 646 143 648 148 647 b 205 575 186 639 205 614 b 238 514 205 538 213 523 b 253 512 243 513 248 512 b 291 536 269 512 283 521 b 296 558 294 544 296 551 b 273 601 296 572 289 584 b 254 624 261 612 258 616 b 247 654 249 634 247 644 b 300 719 247 684 268 712 z m 327 475 b 313 476 322 476 318 476 b 244 407 274 476 244 443 b 252 376 244 396 247 386 b 313 338 265 350 289 338 b 375 376 338 338 362 350 b 383 407 380 386 383 396 b 327 475 383 438 361 468 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 168,\n y_min: -155,\n y_max: 155,\n ha: 311,\n o: 'm 96 223 b 107 224 100 224 103 224 b 236 104 164 224 218 174 b 242 55 240 88 242 71 b 66 -209 242 -42 175 -144 b 33 -224 48 -219 39 -224 b 25 -219 30 -224 28 -222 b 23 -213 24 -216 23 -215 b 36 -199 23 -208 28 -204 b 130 -56 96 -166 130 -110 b 111 8 130 -34 124 -12 l 110 10 l 100 11 b 6 82 58 12 19 42 b 0 117 2 94 0 105 b 96 223 0 170 40 217 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -8,\n x_max: 269,\n y_min: 0,\n y_max: 126,\n ha: 126,\n o: 'm 103 180 b 118 181 108 181 113 181 b 223 126 151 181 184 164 b 299 69 250 100 280 78 b 311 67 303 68 307 67 b 359 90 325 67 342 75 b 376 102 372 101 372 102 l 376 102 b 388 91 383 102 388 96 b 385 84 388 88 387 86 b 322 25 379 76 342 42 b 258 0 301 8 280 0 b 153 56 226 0 192 18 b 78 112 127 81 97 103 b 65 114 74 114 70 114 b 17 91 51 114 35 106 b 1 80 5 80 5 80 l 0 80 b -11 91 -7 80 -11 85 b -9 97 -11 93 -10 95 b 55 156 -3 105 34 140 b 103 180 71 170 88 178 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2023-04-20T22:11:26.009Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/leland_glyphs.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/leland_glyphs.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LelandFont: () => (/* binding */ LelandFont)\n/* harmony export */ });\nconst LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -332,\n y_max: 334,\n ha: 666,\n o: 'm 494 121 b 482 125 491 122 485 125 b 478 125 481 125 480 125 l 354 91 l 354 148 l 412 164 b 425 183 419 166 425 176 l 425 268 b 408 287 425 278 418 287 b 402 285 406 287 403 285 l 354 272 l 354 481 l 317 481 l 317 262 l 186 226 l 186 436 l 148 436 l 148 216 l 89 200 b 76 183 82 199 76 190 l 76 98 b 84 84 76 92 79 86 b 95 81 86 82 92 81 b 99 81 96 81 98 81 l 148 94 l 148 35 l 14 -1 b 0 -20 7 -3 0 -13 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -120 16 -122 b 23 -121 20 -122 22 -121 l 148 -88 l 148 -147 l 89 -163 b 76 -180 82 -164 76 -173 l 76 -181 l 76 -265 b 95 -282 76 -275 85 -282 b 99 -282 96 -282 98 -282 l 148 -269 l 148 -478 l 186 -478 l 186 -259 l 317 -225 l 317 -433 l 354 -433 l 354 -215 l 412 -199 b 425 -181 419 -197 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -79 409 -76 b 402 -78 405 -76 403 -78 l 354 -91 l 354 -32 l 488 4 b 501 22 495 6 501 14 l 501 107 b 494 121 501 112 498 118 z m 317 138 l 317 81 l 186 45 l 186 104 z m 186 -137 l 186 -78 l 317 -42 l 317 -101 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_all.ts\":\n/*!*******************************!*\\\n !*** ./src/fonts/load_all.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadAllMusicFonts: () => (/* binding */ loadAllMusicFonts)\n/* harmony export */ });\n/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./load_bravura */ \"./src/fonts/load_bravura.ts\");\n/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./load_custom */ \"./src/fonts/load_custom.ts\");\n/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load_gonville */ \"./src/fonts/load_gonville.ts\");\n/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load_leland */ \"./src/fonts/load_leland.ts\");\n/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load_petaluma */ \"./src/fonts/load_petaluma.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\n\n\n\n\n\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nfunction loadAllMusicFonts() {\n (0,_load_bravura__WEBPACK_IMPORTED_MODULE_0__.loadBravura)();\n (0,_load_gonville__WEBPACK_IMPORTED_MODULE_2__.loadGonville)();\n (0,_load_petaluma__WEBPACK_IMPORTED_MODULE_4__.loadPetaluma)();\n (0,_load_custom__WEBPACK_IMPORTED_MODULE_1__.loadCustom)();\n (0,_load_leland__WEBPACK_IMPORTED_MODULE_3__.loadLeland)();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_bravura.ts\":\n/*!***********************************!*\\\n !*** ./src/fonts/load_bravura.ts ***!\n \\***********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadBravura: () => (/* binding */ loadBravura)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bravura_glyphs */ \"./src/fonts/bravura_glyphs.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\n\n\n\nfunction loadBravura() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Bravura', _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__.BravuraFont, _common_metrics__WEBPACK_IMPORTED_MODULE_2__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_custom.ts\":\n/*!**********************************!*\\\n !*** ./src/fonts/load_custom.ts ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadCustom: () => (/* binding */ loadCustom)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./custom_glyphs */ \"./src/fonts/custom_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadCustom() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Custom', _custom_glyphs__WEBPACK_IMPORTED_MODULE_2__.CustomFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_gonville.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/load_gonville.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadGonville: () => (/* binding */ loadGonville)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gonville_glyphs */ \"./src/fonts/gonville_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadGonville() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Gonville', _gonville_glyphs__WEBPACK_IMPORTED_MODULE_2__.GonvilleSmuflFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_leland.ts\":\n/*!**********************************!*\\\n !*** ./src/fonts/load_leland.ts ***!\n \\**********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadLeland: () => (/* binding */ loadLeland)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./leland_glyphs */ \"./src/fonts/leland_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nfunction loadLeland() {\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Leland', _leland_glyphs__WEBPACK_IMPORTED_MODULE_2__.LelandFont, _common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/load_petaluma.ts\":\n/*!************************************!*\\\n !*** ./src/fonts/load_petaluma.ts ***!\n \\************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadPetaluma: () => (/* binding */ loadPetaluma)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _common_metrics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common_metrics */ \"./src/fonts/common_metrics.ts\");\n/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petaluma_glyphs */ \"./src/fonts/petaluma_glyphs.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nconst petalumaChordMetrics = {\n csymDiminished: {\n scale: 0.8,\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n scale: 0.8,\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n scale: 1,\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n scale: 0.8,\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n scale: 0.8,\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n scale: 0.95,\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n scale: 0.7,\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n scale: 0.8,\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n scale: 0.7,\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n scale: 0.8,\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n }\n};\nfunction loadPetaluma() {\n const metrics = JSON.parse(JSON.stringify(_common_metrics__WEBPACK_IMPORTED_MODULE_1__.CommonMetrics));\n const chordMetrics = metrics.chordSymbol;\n if (chordMetrics) {\n chordMetrics.glyphs = petalumaChordMetrics;\n }\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Petaluma', _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaFont, metrics);\n}\n\n\n/***/ }),\n\n/***/ \"./src/fonts/petaluma_glyphs.ts\":\n/*!**************************************!*\\\n !*** ./src/fonts/petaluma_glyphs.ts ***!\n \\**************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PetalumaFont: () => (/* binding */ PetalumaFont)\n/* harmony export */ });\nconst PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBuyukMucennebSharp: {\n x_min: -1,\n x_max: 467,\n y_min: -460,\n y_max: 350,\n ha: 810,\n o: 'm 230 -662 b 256 -615 249 -647 255 -631 b 264 -495 261 -575 264 -534 b 261 -361 264 -451 262 -406 b 415 -324 312 -348 363 -336 b 416 -445 415 -364 416 -405 b 431 -593 416 -492 419 -541 b 458 -533 454 -573 456 -554 b 464 -418 462 -494 464 -455 b 459 -314 464 -383 462 -348 b 531 -298 484 -308 508 -304 b 570 -259 554 -292 566 -278 b 579 -192 575 -236 579 -215 b 576 -164 579 -183 577 -173 b 556 -143 573 -147 567 -143 b 543 -144 553 -143 549 -143 b 459 -164 516 -151 487 -157 b 462 -102 459 -144 461 -122 l 608 -76 b 667 -24 639 -71 660 -53 b 672 19 671 -9 671 9 l 672 46 b 641 108 668 94 662 108 b 605 101 632 108 621 105 l 580 96 b 469 72 544 88 507 79 b 471 131 469 91 471 111 b 521 141 488 135 504 138 b 573 197 550 148 570 167 b 577 271 576 222 577 246 b 553 300 577 291 567 300 b 537 297 549 300 543 298 b 480 285 517 292 498 288 b 491 410 482 327 485 369 b 494 445 492 422 494 433 b 488 482 494 458 492 469 b 477 504 487 490 491 504 b 455 484 467 504 458 495 b 451 464 452 478 452 471 b 433 275 442 402 438 338 b 282 246 383 265 333 255 l 291 346 b 294 382 292 359 294 370 b 287 418 294 395 292 406 b 276 435 284 423 289 435 b 259 423 269 435 264 429 b 251 397 255 416 252 406 b 235 239 242 346 239 292 b 166 228 212 235 189 232 b 118 170 134 223 112 207 b 120 140 120 160 120 150 b 120 84 120 121 118 102 b 131 69 120 75 122 69 b 138 71 132 69 135 71 b 226 85 168 75 197 81 b 223 30 226 66 225 49 l 223 17 l 45 -22 b -1 -92 13 -29 -1 -48 b 1 -171 -1 -118 3 -145 b 12 -187 0 -184 4 -187 b 22 -186 14 -187 17 -187 b 115 -164 53 -179 84 -170 b 217 -145 150 -158 183 -153 b 215 -225 216 -173 216 -199 l 203 -229 b 132 -275 141 -246 132 -249 b 134 -315 132 -285 134 -298 b 135 -382 134 -336 132 -359 b 144 -396 135 -386 134 -396 b 151 -395 145 -396 148 -396 b 215 -376 171 -387 193 -382 b 216 -516 215 -422 215 -468 b 230 -662 217 -563 219 -611 z m 271 27 b 274 94 272 50 274 72 b 425 122 324 102 374 112 l 425 101 b 422 62 423 88 423 75 z m 262 -177 b 264 -137 264 -164 264 -151 b 418 -109 315 -128 366 -120 b 415 -174 416 -131 416 -153 b 262 -213 364 -186 312 -199 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/petalumascript_glyphs.ts\":\n/*!********************************************!*\\\n !*** ./src/fonts/petalumascript_glyphs.ts ***!\n \\********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PetalumaScriptFont: () => (/* binding */ PetalumaScriptFont)\n/* harmony export */ });\nconst PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/robotoslab_glyphs.ts\":\n/*!****************************************!*\\\n !*** ./src/fonts/robotoslab_glyphs.ts ***!\n \\****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RobotoSlabFont: () => (/* binding */ RobotoSlabFont)\n/* harmony export */ });\nconst RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/sans_bold_text_metrics.ts\":\n/*!*********************************************!*\\\n !*** ./src/fonts/sans_bold_text_metrics.ts ***!\n \\*********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SansFontBold: () => (/* binding */ SansFontBold)\n/* harmony export */ });\nconst SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/sans_text_metrics.ts\":\n/*!****************************************!*\\\n !*** ./src/fonts/sans_text_metrics.ts ***!\n \\****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SansFont: () => (/* binding */ SansFont)\n/* harmony export */ });\nconst SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/serif_text_metrics.ts\":\n/*!*****************************************!*\\\n !*** ./src/fonts/serif_text_metrics.ts ***!\n \\*****************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SerifFont: () => (/* binding */ SerifFont)\n/* harmony export */ });\nconst SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n\n\n/***/ }),\n\n/***/ \"./src/fonts/textfonts.ts\":\n/*!********************************!*\\\n !*** ./src/fonts/textfonts.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadTextFonts: () => (/* binding */ loadTextFonts)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ \"./src/font.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petalumascript_glyphs */ \"./src/fonts/petalumascript_glyphs.ts\");\n/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./robotoslab_glyphs */ \"./src/fonts/robotoslab_glyphs.ts\");\n/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sans_bold_text_metrics */ \"./src/fonts/sans_bold_text_metrics.ts\");\n/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sans_text_metrics */ \"./src/fonts/sans_text_metrics.ts\");\n/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serif_text_metrics */ \"./src/fonts/serif_text_metrics.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\nfunction loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__.SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__.SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__.SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__.RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/formatter.ts\":\n/*!**************************!*\\\n !*** ./src/formatter.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Formatter: () => (/* binding */ Formatter)\n/* harmony export */ });\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_9__.log)('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isNote)(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = (0,_util__WEBPACK_IMPORTED_MODULE_9__.midLine)(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nclass Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext());\n const tick = new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new _staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === _voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.STRICT && !voice.isComplete()) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = (0,_util__WEBPACK_IMPORTED_MODULE_9__.defined)(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -(0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/fraction.ts\":\n/*!*************************!*\\\n !*** ./src/fraction.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Fraction: () => (/* binding */ Fraction)\n/* harmony export */ });\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\n\n\n/** Fraction represents a rational number. */\nclass Fraction {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/frethandfinger.ts\":\n/*!*******************************!*\\\n !*** ./src/frethandfinger.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FretHandFinger: () => (/* binding */ FretHandFinger)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\n\n\n\n\n\n\nclass FretHandFinger extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_3__.TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) {\n state.text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 9,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n/***/ }),\n\n/***/ \"./src/ghostnote.ts\":\n/*!**************************!*\\\n !*** ./src/ghostnote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GhostNote: () => (/* binding */ GhostNote)\n/* harmony export */ });\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n\n\n\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nclass GhostNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_0__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isAnnotation)(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/glyph.ts\":\n/*!**********************!*\\\n !*** ./src/glyph.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Glyph: () => (/* binding */ Glyph),\n/* harmony export */ OutlineCode: () => (/* binding */ OutlineCode)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nvar OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nclass Glyph extends _element__WEBPACK_IMPORTED_MODULE_2__.Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n\n\n/***/ }),\n\n/***/ \"./src/glyphnote.ts\":\n/*!**************************!*\\\n !*** ./src/glyphnote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlyphNote: () => (/* binding */ GlyphNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\n\n\nclass GlyphNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/gracenote.ts\":\n/*!**************************!*\\\n !*** ./src/gracenote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceNote: () => (/* binding */ GraceNote)\n/* harmony export */ });\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\n\n\nclass GraceNote extends _stavenote__WEBPACK_IMPORTED_MODULE_0__.StaveNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT + ret) * staveNoteScale - _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/gracenotegroup.ts\":\n/*!*******************************!*\\\n !*** ./src/gracenotegroup.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceNoteGroup: () => (/* binding */ GraceNoteGroup)\n/* harmony export */ });\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\n\n\n\n\n\n\n\n\n\n\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_8__.log)('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nclass GraceNoteGroup extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_7__.Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new _voice__WEBPACK_IMPORTED_MODULE_9__.Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new _beam__WEBPACK_IMPORTED_MODULE_0__.Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note);\n const TieClass = is_stavenote ? _stavetie__WEBPACK_IMPORTED_MODULE_4__.StaveTie : _tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/gracetabnote.ts\":\n/*!*****************************!*\\\n !*** ./src/gracetabnote.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GraceTabNote: () => (/* binding */ GraceTabNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\n\n\n\nclass GraceTabNote extends _tabnote__WEBPACK_IMPORTED_MODULE_1__.TabNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/index.ts\":\n/*!**********************!*\\\n !*** ./src/index.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* reexport safe */ _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental),\n/* harmony export */ Annotation: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify),\n/* harmony export */ Articulation: () => (/* reexport safe */ _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation),\n/* harmony export */ BEAM_BOTH: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_RIGHT),\n/* harmony export */ BarNote: () => (/* reexport safe */ _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote),\n/* harmony export */ Barline: () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.Barline),\n/* harmony export */ BarlineType: () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.BarlineType),\n/* harmony export */ Beam: () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.Beam),\n/* harmony export */ Bend: () => (/* reexport safe */ _bend__WEBPACK_IMPORTED_MODULE_5__.Bend),\n/* harmony export */ BoundingBox: () => (/* reexport safe */ _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox),\n/* harmony export */ BoundingBoxComputation: () => (/* reexport safe */ _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation),\n/* harmony export */ Builder: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Builder),\n/* harmony export */ CanvasContext: () => (/* reexport safe */ _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext),\n/* harmony export */ Category: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.Category),\n/* harmony export */ ChordSymbol: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify),\n/* harmony export */ Clef: () => (/* reexport safe */ _clef__WEBPACK_IMPORTED_MODULE_10__.Clef),\n/* harmony export */ ClefNote: () => (/* reexport safe */ _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote),\n/* harmony export */ Crescendo: () => (/* reexport safe */ _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo),\n/* harmony export */ Curve: () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.Curve),\n/* harmony export */ CurvePosition: () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition),\n/* harmony export */ Dot: () => (/* reexport safe */ _dot__WEBPACK_IMPORTED_MODULE_14__.Dot),\n/* harmony export */ EasyScore: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScoreGrammar),\n/* harmony export */ Element: () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_16__.Element),\n/* harmony export */ Factory: () => (/* reexport safe */ _factory__WEBPACK_IMPORTED_MODULE_17__.Factory),\n/* harmony export */ Flow: () => (/* reexport safe */ _flow__WEBPACK_IMPORTED_MODULE_18__.Flow),\n/* harmony export */ Font: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.Font),\n/* harmony export */ FontStyle: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontStyle),\n/* harmony export */ FontWeight: () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontWeight),\n/* harmony export */ Formatter: () => (/* reexport safe */ _formatter__WEBPACK_IMPORTED_MODULE_20__.Formatter),\n/* harmony export */ Fraction: () => (/* reexport safe */ _fraction__WEBPACK_IMPORTED_MODULE_21__.Fraction),\n/* harmony export */ FretHandFinger: () => (/* reexport safe */ _frethandfinger__WEBPACK_IMPORTED_MODULE_22__.FretHandFinger),\n/* harmony export */ GhostNote: () => (/* reexport safe */ _ghostnote__WEBPACK_IMPORTED_MODULE_23__.GhostNote),\n/* harmony export */ Glyph: () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.Glyph),\n/* harmony export */ GlyphNote: () => (/* reexport safe */ _glyphnote__WEBPACK_IMPORTED_MODULE_25__.GlyphNote),\n/* harmony export */ GraceNote: () => (/* reexport safe */ _gracenote__WEBPACK_IMPORTED_MODULE_26__.GraceNote),\n/* harmony export */ GraceNoteGroup: () => (/* reexport safe */ _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__.GraceNoteGroup),\n/* harmony export */ GraceTabNote: () => (/* reexport safe */ _gracetabnote__WEBPACK_IMPORTED_MODULE_28__.GraceTabNote),\n/* harmony export */ KeyManager: () => (/* reexport safe */ _keymanager__WEBPACK_IMPORTED_MODULE_29__.KeyManager),\n/* harmony export */ KeySigNote: () => (/* reexport safe */ _keysignote__WEBPACK_IMPORTED_MODULE_31__.KeySigNote),\n/* harmony export */ KeySignature: () => (/* reexport safe */ _keysignature__WEBPACK_IMPORTED_MODULE_30__.KeySignature),\n/* harmony export */ Modifier: () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.Modifier),\n/* harmony export */ ModifierContext: () => (/* reexport safe */ _modifiercontext__WEBPACK_IMPORTED_MODULE_33__.ModifierContext),\n/* harmony export */ ModifierPosition: () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.ModifierPosition),\n/* harmony export */ MultiMeasureRest: () => (/* reexport safe */ _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__.MultiMeasureRest),\n/* harmony export */ Music: () => (/* reexport safe */ _music__WEBPACK_IMPORTED_MODULE_35__.Music),\n/* harmony export */ Note: () => (/* reexport safe */ _note__WEBPACK_IMPORTED_MODULE_36__.Note),\n/* harmony export */ NoteHead: () => (/* reexport safe */ _notehead__WEBPACK_IMPORTED_MODULE_37__.NoteHead),\n/* harmony export */ NoteSubGroup: () => (/* reexport safe */ _notesubgroup__WEBPACK_IMPORTED_MODULE_38__.NoteSubGroup),\n/* harmony export */ Ornament: () => (/* reexport safe */ _ornament__WEBPACK_IMPORTED_MODULE_39__.Ornament),\n/* harmony export */ OutlineCode: () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.OutlineCode),\n/* harmony export */ Parenthesis: () => (/* reexport safe */ _parenthesis__WEBPACK_IMPORTED_MODULE_40__.Parenthesis),\n/* harmony export */ Parser: () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_41__.Parser),\n/* harmony export */ PedalMarking: () => (/* reexport safe */ _pedalmarking__WEBPACK_IMPORTED_MODULE_42__.PedalMarking),\n/* harmony export */ Piece: () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Piece),\n/* harmony export */ Registry: () => (/* reexport safe */ _registry__WEBPACK_IMPORTED_MODULE_43__.Registry),\n/* harmony export */ RenderContext: () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.RenderContext),\n/* harmony export */ Renderer: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.Renderer),\n/* harmony export */ RendererBackends: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererLineEndType),\n/* harmony export */ RepeatNote: () => (/* reexport safe */ _repeatnote__WEBPACK_IMPORTED_MODULE_46__.RepeatNote),\n/* harmony export */ Repetition: () => (/* reexport safe */ _staverepetition__WEBPACK_IMPORTED_MODULE_54__.Repetition),\n/* harmony export */ RuntimeError: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.RuntimeError),\n/* harmony export */ SVGContext: () => (/* reexport safe */ _svgcontext__WEBPACK_IMPORTED_MODULE_64__.SVGContext),\n/* harmony export */ Stave: () => (/* reexport safe */ _stave__WEBPACK_IMPORTED_MODULE_47__.Stave),\n/* harmony export */ StaveConnector: () => (/* reexport safe */ _staveconnector__WEBPACK_IMPORTED_MODULE_49__.StaveConnector),\n/* harmony export */ StaveHairpin: () => (/* reexport safe */ _stavehairpin__WEBPACK_IMPORTED_MODULE_50__.StaveHairpin),\n/* harmony export */ StaveLine: () => (/* reexport safe */ _staveline__WEBPACK_IMPORTED_MODULE_51__.StaveLine),\n/* harmony export */ StaveModifier: () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifierPosition),\n/* harmony export */ StaveNote: () => (/* reexport safe */ _stavenote__WEBPACK_IMPORTED_MODULE_53__.StaveNote),\n/* harmony export */ StaveSection: () => (/* reexport safe */ _stavesection__WEBPACK_IMPORTED_MODULE_55__.StaveSection),\n/* harmony export */ StaveTempo: () => (/* reexport safe */ _stavetempo__WEBPACK_IMPORTED_MODULE_56__.StaveTempo),\n/* harmony export */ StaveText: () => (/* reexport safe */ _stavetext__WEBPACK_IMPORTED_MODULE_57__.StaveText),\n/* harmony export */ StaveTie: () => (/* reexport safe */ _stavetie__WEBPACK_IMPORTED_MODULE_58__.StaveTie),\n/* harmony export */ Stem: () => (/* reexport safe */ _stem__WEBPACK_IMPORTED_MODULE_60__.Stem),\n/* harmony export */ StemmableNote: () => (/* reexport safe */ _stemmablenote__WEBPACK_IMPORTED_MODULE_61__.StemmableNote),\n/* harmony export */ StringNumber: () => (/* reexport safe */ _stringnumber__WEBPACK_IMPORTED_MODULE_62__.StringNumber),\n/* harmony export */ Stroke: () => (/* reexport safe */ _strokes__WEBPACK_IMPORTED_MODULE_63__.Stroke),\n/* harmony export */ SymbolModifiers: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes),\n/* harmony export */ System: () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_65__.System),\n/* harmony export */ TabNote: () => (/* reexport safe */ _tabnote__WEBPACK_IMPORTED_MODULE_66__.TabNote),\n/* harmony export */ TabSlide: () => (/* reexport safe */ _tabslide__WEBPACK_IMPORTED_MODULE_67__.TabSlide),\n/* harmony export */ TabStave: () => (/* reexport safe */ _tabstave__WEBPACK_IMPORTED_MODULE_68__.TabStave),\n/* harmony export */ TabTie: () => (/* reexport safe */ _tabtie__WEBPACK_IMPORTED_MODULE_69__.TabTie),\n/* harmony export */ TextBracket: () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracketPosition),\n/* harmony export */ TextDynamics: () => (/* reexport safe */ _textdynamics__WEBPACK_IMPORTED_MODULE_71__.TextDynamics),\n/* harmony export */ TextFormatter: () => (/* reexport safe */ _textformatter__WEBPACK_IMPORTED_MODULE_72__.TextFormatter),\n/* harmony export */ TextJustification: () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextJustification),\n/* harmony export */ TextNote: () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextNote),\n/* harmony export */ TickContext: () => (/* reexport safe */ _tickcontext__WEBPACK_IMPORTED_MODULE_75__.TickContext),\n/* harmony export */ Tickable: () => (/* reexport safe */ _tickable__WEBPACK_IMPORTED_MODULE_74__.Tickable),\n/* harmony export */ TimeSigNote: () => (/* reexport safe */ _timesignote__WEBPACK_IMPORTED_MODULE_78__.TimeSigNote),\n/* harmony export */ TimeSignature: () => (/* reexport safe */ _timesignature__WEBPACK_IMPORTED_MODULE_77__.TimeSignature),\n/* harmony export */ TimeSignatureGlyph: () => (/* reexport safe */ _timesigglyph__WEBPACK_IMPORTED_MODULE_76__.TimeSignatureGlyph),\n/* harmony export */ Tremolo: () => (/* reexport safe */ _tremolo__WEBPACK_IMPORTED_MODULE_79__.Tremolo),\n/* harmony export */ Tuning: () => (/* reexport safe */ _tuning__WEBPACK_IMPORTED_MODULE_80__.Tuning),\n/* harmony export */ Tuplet: () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.Tuplet),\n/* harmony export */ TupletLocation: () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.TupletLocation),\n/* harmony export */ Vex: () => (/* reexport safe */ _vex__WEBPACK_IMPORTED_MODULE_84__.Vex),\n/* harmony export */ Vibrato: () => (/* reexport safe */ _vibrato__WEBPACK_IMPORTED_MODULE_85__.Vibrato),\n/* harmony export */ VibratoBracket: () => (/* reexport safe */ _vibratobracket__WEBPACK_IMPORTED_MODULE_86__.VibratoBracket),\n/* harmony export */ Voice: () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.Voice),\n/* harmony export */ VoiceMode: () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.VoiceMode),\n/* harmony export */ Volta: () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.Volta),\n/* harmony export */ VoltaType: () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.VoltaType),\n/* harmony export */ defined: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.defined),\n/* harmony export */ drawDot: () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.drawDot),\n/* harmony export */ globalObject: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.globalObject),\n/* harmony export */ isAccidental: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAccidental),\n/* harmony export */ isAnnotation: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAnnotation),\n/* harmony export */ isBarline: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isBarline),\n/* harmony export */ isCategory: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isCategory),\n/* harmony export */ isDot: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isDot),\n/* harmony export */ isGraceNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNoteGroup),\n/* harmony export */ isHTMLCanvas: () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLDiv),\n/* harmony export */ isNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isNote),\n/* harmony export */ isRenderContext: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isRenderContext),\n/* harmony export */ isStaveNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStemmableNote),\n/* harmony export */ isTabNote: () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isTabNote),\n/* harmony export */ log: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.log),\n/* harmony export */ midLine: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.midLine),\n/* harmony export */ normalizeAngle: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.normalizeAngle),\n/* harmony export */ prefix: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.prefix),\n/* harmony export */ sumArray: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.sumArray),\n/* harmony export */ warn: () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.warn)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ \"./src/barnote.ts\");\n/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ \"./src/beam.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ \"./src/boundingboxcomputation.ts\");\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ \"./src/clefnote.ts\");\n/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ \"./src/crescendo.ts\");\n/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ \"./src/curve.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ \"./src/easyscore.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ \"./src/factory.ts\");\n/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./flow */ \"./src/flow.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ghostnote */ \"./src/ghostnote.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./gracetabnote */ \"./src/gracetabnote.ts\");\n/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keymanager */ \"./src/keymanager.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./keysignote */ \"./src/keysignote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./modifiercontext */ \"./src/modifiercontext.ts\");\n/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./multimeasurerest */ \"./src/multimeasurerest.ts\");\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./parser */ \"./src/parser.ts\");\n/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./pedalmarking */ \"./src/pedalmarking.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./registry */ \"./src/registry.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./repeatnote */ \"./src/repeatnote.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./staveconnector */ \"./src/staveconnector.ts\");\n/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./stavehairpin */ \"./src/stavehairpin.ts\");\n/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./staveline */ \"./src/staveline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavesection */ \"./src/stavesection.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./system */ \"./src/system.ts\");\n/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabnote */ \"./src/tabnote.ts\");\n/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabslide */ \"./src/tabslide.ts\");\n/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./tabstave */ \"./src/tabstave.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textbracket */ \"./src/textbracket.ts\");\n/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textdynamics */ \"./src/textdynamics.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./tickable */ \"./src/tickable.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./timesigglyph */ \"./src/timesigglyph.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./timesignote */ \"./src/timesignote.ts\");\n/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./tremolo */ \"./src/tremolo.ts\");\n/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./tuning */ \"./src/tuning.ts\");\n/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./tuplet */ \"./src/tuplet.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./vex */ \"./src/vex.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./vibratobracket */ \"./src/vibratobracket.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './fonts/*' because they are used by the entry/* files.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Do not export './version'. It is accessible via Vex.Flow.BUILD.\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ \"./src/keymanager.ts\":\n/*!***************************!*\\\n !*** ./src/keymanager.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeyManager: () => (/* binding */ KeyManager)\n/* harmony export */ });\n/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./music */ \"./src/music.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\n\n\nclass KeyManager {\n constructor(key) {\n this.music = new _music__WEBPACK_IMPORTED_MODULE_0__.Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = _music__WEBPACK_IMPORTED_MODULE_0__.Music.root_indices[this.keyParts.root];\n for (let i = 0; i < _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; ++i) {\n const index = (noteLocation + i) % _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length;\n const rootName = _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/keysignature.ts\":\n/*!*****************************!*\\\n !*** ./src/keysignature.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeySignature: () => (/* binding */ KeySignature)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\n\n\n\n\n\nclass KeySignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.glyphFontScale = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.accidentalCodes(acc.type);\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature((0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/keysignote.ts\":\n/*!***************************!*\\\n !*** ./src/keysignote.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ KeySigNote: () => (/* binding */ KeySigNote)\n/* harmony export */ });\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\n\n\n\nclass KeySigNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new _keysignature__WEBPACK_IMPORTED_MODULE_0__.KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/modifier.ts\":\n/*!*************************!*\\\n !*** ./src/modifier.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Modifier: () => (/* binding */ Modifier),\n/* harmony export */ ModifierPosition: () => (/* binding */ ModifierPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\nvar ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nclass Modifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/modifiercontext.ts\":\n/*!********************************!*\\\n !*** ./src/modifiercontext.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ModifierContext: () => (/* binding */ ModifierContext)\n/* harmony export */ });\n/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ \"./src/accidental.ts\");\n/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ \"./src/annotation.ts\");\n/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ \"./src/articulation.ts\");\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chordsymbol */ \"./src/chordsymbol.ts\");\n/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dot */ \"./src/dot.ts\");\n/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./frethandfinger */ \"./src/frethandfinger.ts\");\n/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gracenotegroup */ \"./src/gracenotegroup.ts\");\n/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./notesubgroup */ \"./src/notesubgroup.ts\");\n/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ornament */ \"./src/ornament.ts\");\n/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./parenthesis */ \"./src/parenthesis.ts\");\n/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavenote */ \"./src/stavenote.ts\");\n/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stringnumber */ \"./src/stringnumber.ts\");\n/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strokes */ \"./src/strokes.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_15__.log)('Vex.Flow.ModifierContext', args);\n}\nclass ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote], state);\n _parenthesis__WEBPACK_IMPORTED_MODULE_10__.Parenthesis.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Parenthesis], state);\n _dot__WEBPACK_IMPORTED_MODULE_5__.Dot.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Dot], state);\n _frethandfinger__WEBPACK_IMPORTED_MODULE_6__.FretHandFinger.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.FretHandFinger], state);\n _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Accidental], state);\n _strokes__WEBPACK_IMPORTED_MODULE_13__.Stroke.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stroke], state);\n _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__.GraceNoteGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.GraceNoteGroup], state);\n _notesubgroup__WEBPACK_IMPORTED_MODULE_8__.NoteSubGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.NoteSubGroup], state);\n _stringnumber__WEBPACK_IMPORTED_MODULE_12__.StringNumber.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StringNumber], state);\n _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Articulation], state);\n _ornament__WEBPACK_IMPORTED_MODULE_9__.Ornament.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Ornament], state);\n _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Annotation], state);\n _chordsymbol__WEBPACK_IMPORTED_MODULE_4__.ChordSymbol.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.ChordSymbol], state);\n _bend__WEBPACK_IMPORTED_MODULE_3__.Bend.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Bend], state);\n _vibrato__WEBPACK_IMPORTED_MODULE_16__.Vibrato.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.postFormat(this.getMembers(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/multimeasurerest.ts\":\n/*!*********************************!*\\\n !*** ./src/multimeasurerest.ts ***!\n \\*********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MultiMeasureRest: () => (/* binding */ MultiMeasureRest)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\n\n\n\n\n\n\n\n\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nclass MultiMeasureRest extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n var _a;\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: (_a = musicFont.lookupMetric('digits.point')) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, line: 2, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isBarline)(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_5__.TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/music.ts\":\n/*!**********************!*\\\n !*** ./src/music.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Music: () => (/* binding */ Music)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n/** Music implements some standard music theory routines. */\nclass Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/note.ts\":\n/*!*********************!*\\\n !*** ./src/note.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Note: () => (/* binding */ Note)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickable */ \"./src/tickable.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nclass Note extends _tickable__WEBPACK_IMPORTED_MODULE_3__.Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n (0,_rendercontext__WEBPACK_IMPORTED_MODULE_1__.drawDot)(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get point for notes. */\n static getPoint(size) {\n // for sizes other than 'default', note is 2/3 of the default value\n return size == 'default' ? _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE : (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE / 5) * 3;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/notehead.ts\":\n/*!*************************!*\\\n !*** ./src/notehead.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NoteHead: () => (/* binding */ NoteHead)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH);\n let fill = false;\n if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nclass NoteHead extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/notesubgroup.ts\":\n/*!*****************************!*\\\n !*** ./src/notesubgroup.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ NoteSubGroup: () => (/* binding */ NoteSubGroup)\n/* harmony export */ });\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ \"./src/voice.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\n\n\n\n\n\nclass NoteSubGroup extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_0__.Formatter();\n this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__.Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/ornament.ts\":\n/*!*************************!*\\\n !*** ./src/ornament.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Ornament: () => (/* binding */ Ornament)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tickcontext */ \"./src/tickcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\n\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nclass Ornament extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Ornament;\n }\n static get minPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) {\n if (note.hasStem()) {\n if (stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = _tickcontext__WEBPACK_IMPORTED_MODULE_4__.TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/parenthesis.ts\":\n/*!****************************!*\\\n !*** ./src/parenthesis.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Parenthesis: () => (/* binding */ Parenthesis)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\n\n\n\n\n\n/** Parenthesis implements parenthesis modifiers for notes. */\nclass Parenthesis extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n var _a;\n super();\n this.position = position !== null && position !== void 0 ? position : _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT;\n this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n var _a, _b;\n this.note = note;\n this.point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point')) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('default');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note)) {\n this.point = (_b = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point')) !== null && _b !== void 0 ? _b : _note__WEBPACK_IMPORTED_MODULE_2__.Note.getPoint('gracenote');\n this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/parser.ts\":\n/*!***********************!*\\\n !*** ./src/parser.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Parser: () => (/* binding */ Parser)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\n\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_0__.log)('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nclass Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/pedalmarking.ts\":\n/*!*****************************!*\\\n !*** ./src/pedalmarking.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PedalMarking: () => (/* binding */ PedalMarking)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n // Center the middle of the glyph with the middle of the note head (Tables.STAVE_LINE_DISTANCE / 2)\n glyph.render(context, x - (glyph.getMetrics().width - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE) / 2, y);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nclass PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n let text_width = 0;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n var _a, _b, _c, _d, _e;\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n let x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n // This happens sometimes if the pedal marking is bigger than the note width. Just go with it.\n if (x < prev_x) {\n // throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n x = x + (prev_x - x) + 5;\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n let x_shift = 0;\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x, y);\n x_shift = text_width + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n // For MIXED style, start with text instead of bracket\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n const noteNdx = note.getVoice().getTickables().indexOf(note);\n const voiceNotes = note.getVoice().getTickables().length;\n const noteEndX = noteNdx + 1 < voiceNotes\n ? // If the next note is in the same voice, use the x position of the next note\n note.getVoice().getTickables()[noteNdx + 1].getAbsoluteX()\n : // If this is the last note is the voice, use the x position of the next stave\n ((_c = (_b = note.getStave()) === null || _b === void 0 ? void 0 : _b.getX()) !== null && _c !== void 0 ? _c : 0) + ((_e = (_d = note.getStave()) === null || _d === void 0 ? void 0 : _d.getWidth()) !== null && _e !== void 0 ? _e : 0);\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(next_is_same ? x - 5 : noteEndX - 5, y);\n ctx.lineTo(next_is_same ? x : noteEndX - 5, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let text_width = 0;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n var _a, _b, _c, _d, _e;\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = (_a = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`)) !== null && _a !== void 0 ? _a : _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n const noteNdx = note.getVoice().getTickables().indexOf(note);\n const voiceNotes = note.getVoice().getTickables().length;\n // Get the shift for the next note\n const noteEndX = noteNdx + 1 < voiceNotes\n ? // If the next note is in the same voice, use the x position of the next note\n note.getVoice().getTickables()[noteNdx + 1].getAbsoluteX()\n : // If this is the last note is the voice, use the x position of the next stave\n ((_c = (_b = note.getStave()) === null || _b === void 0 ? void 0 : _b.getX()) !== null && _c !== void 0 ? _c : 0) + ((_e = (_d = note.getStave()) === null || _d === void 0 ? void 0 : _d.getWidth()) !== null && _e !== void 0 ? _e : 0);\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, noteEndX - text_width, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n\n\n/***/ }),\n\n/***/ \"./src/registry.ts\":\n/*!*************************!*\\\n !*** ./src/registry.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Registry: () => (/* binding */ Registry)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\n\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nclass Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/rendercontext.ts\":\n/*!******************************!*\\\n !*** ./src/rendercontext.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RenderContext: () => (/* binding */ RenderContext),\n/* harmony export */ drawDot: () => (/* binding */ drawDot)\n/* harmony export */ });\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\n\nclass RenderContext {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nfunction drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n\n\n/***/ }),\n\n/***/ \"./src/renderer.ts\":\n/*!*************************!*\\\n !*** ./src/renderer.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Renderer: () => (/* binding */ Renderer),\n/* harmony export */ RendererBackends: () => (/* binding */ RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* binding */ RendererLineEndType)\n/* harmony export */ });\n/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canvascontext */ \"./src/canvascontext.ts\");\n/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgcontext */ \"./src/svgcontext.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web */ \"./src/web.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\nvar RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nvar RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nclass Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_2__.isRenderContext)(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLCanvas)(element)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new _canvascontext__WEBPACK_IMPORTED_MODULE_0__.CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLDiv)(element)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new _svgcontext__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element);\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n\n\n/***/ }),\n\n/***/ \"./src/repeatnote.ts\":\n/*!***************************!*\\\n !*** ./src/repeatnote.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RepeatNote: () => (/* binding */ RepeatNote)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyphnote */ \"./src/glyphnote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\n\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nclass RepeatNote extends _glyphnote__WEBPACK_IMPORTED_MODULE_1__.GlyphNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyphCode, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stave.ts\":\n/*!**********************!*\\\n !*** ./src/stave.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stave: () => (/* binding */ Stave)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clef */ \"./src/clef.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keysignature */ \"./src/keysignature.ts\");\n/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stavebarline */ \"./src/stavebarline.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./staverepetition */ \"./src/staverepetition.ts\");\n/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavesection */ \"./src/stavesection.ts\");\n/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stavetempo */ \"./src/stavetempo.ts\");\n/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./stavetext */ \"./src/stavetext.ts\");\n/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavevolta */ \"./src/stavevolta.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 0,\n [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 1,\n [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 2,\n [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 0,\n [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 1,\n [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 2,\n [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 3,\n};\nclass Stave extends _element__WEBPACK_IMPORTED_MODULE_2__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.left_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n // end bar\n this.addEndModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.right_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_7__.Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new _stavevolta__WEBPACK_IMPORTED_MODULE_11__.Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new _stavesection__WEBPACK_IMPORTED_MODULE_8__.StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new _stavetempo__WEBPACK_IMPORTED_MODULE_9__.StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new _stavetext__WEBPACK_IMPORTED_MODULE_10__.StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n /**\n * treat the stave as if the clef is clefSpec, but don't display the clef\n * @param clefSpec\n */\n setClefLines(clefSpec) {\n this.clef = clefSpec;\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, _clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN;\n }\n this.addModifier(new _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new _clef__WEBPACK_IMPORTED_MODULE_1__.Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = (0,_typeguard__WEBPACK_IMPORTED_MODULE_14__.isBarline)(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Clef);\n // Align key signatures\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF,\n size: 8,\n weight: _font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_3__.FontStyle.NORMAL,\n};\n\n\n/***/ }),\n\n/***/ \"./src/stavebarline.ts\":\n/*!*****************************!*\\\n !*** ./src/stavebarline.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Barline: () => (/* binding */ Barline),\n/* harmony export */ BarlineType: () => (/* binding */ BarlineType)\n/* harmony export */ });\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\n\n\n\nvar BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nclass Barline extends _stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/staveconnector.ts\":\n/*!*******************************!*\\\n !*** ./src/staveconnector.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveConnector: () => (/* binding */ StaveConnector)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nclass StaveConnector extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 16,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n\n\n/***/ }),\n\n/***/ \"./src/stavehairpin.ts\":\n/*!*****************************!*\\\n !*** ./src/stavehairpin.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveHairpin: () => (/* binding */ StaveHairpin)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\n\n\n\n\nclass StaveHairpin extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE || position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n\n\n/***/ }),\n\n/***/ \"./src/staveline.ts\":\n/*!**************************!*\\\n !*** ./src/staveline.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveLine: () => (/* binding */ StaveLine)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\n\n\n\n\n\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nclass StaveLine extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification;\n\n\n/***/ }),\n\n/***/ \"./src/stavemodifier.ts\":\n/*!******************************!*\\\n !*** ./src/stavemodifier.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveModifier: () => (/* binding */ StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* binding */ StaveModifierPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\n\n\n\nvar StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nclass StaveModifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stavenote.ts\":\n/*!**************************!*\\\n !*** ./src/stavenote.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveNote: () => (/* binding */ StaveNote)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ \"./src/notehead.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\n\n\n\n\n\n\n\n\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.log)('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nclass StaveNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n var _a, _b;\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n const noteUHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_a = noteU.note.sortedKeyProps[0].keyProps.code) !== null && _a !== void 0 ? _a : 'N', noteU.note.duration);\n const noteLHead = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.codeNoteHead((_b = noteL.note.sortedKeyProps[noteL.note.sortedKeyProps.length - 1].keyProps.code) !== null && _b !== void 0 ? _b : 'N', noteL.note.duration);\n if (\n // If unison is not configured, shift\n !_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.UNISON ||\n // If we have different noteheads, shift\n noteUHead !== noteLHead ||\n // If we have different dot values, shift\n noteU.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0)\n .length !==\n noteL.note.getModifiers().filter((item) => item.getCategory() === _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot && item.getIndex() === 0)\n .length ||\n // If the notes are quite close but not on the same line, shift\n (lineDiff < 1 && lineDiff > 0) ||\n // If styles are different, shift\n JSON.stringify(noteU.note.getStyle()) !== JSON.stringify(noteL.note.getStyle())) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.note.duration < noteL.note.duration) {\n // upper voice is shorter, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this.setStave(stave);\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/staverepetition.ts\":\n/*!********************************!*\\\n !*** ./src/staverepetition.ts ***!\n \\********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Repetition: () => (/* binding */ Repetition)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\n\n\nclass Repetition extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n\n\n/***/ }),\n\n/***/ \"./src/stavesection.ts\":\n/*!*****************************!*\\\n !*** ./src/stavesection.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveSection: () => (/* binding */ StaveSection)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\n\nclass StaveSection extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 10,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n/***/ }),\n\n/***/ \"./src/stavetempo.ts\":\n/*!***************************!*\\\n !*** ./src/stavetempo.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveTempo: () => (/* binding */ StaveTempo)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ \"./src/textformatter.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\n\n\n\n\n\n\nclass StaveTempo extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n const scale = options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(duration);\n x += 3 * scale;\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 14,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n/***/ }),\n\n/***/ \"./src/stavetext.ts\":\n/*!**************************!*\\\n !*** ./src/stavetext.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveText: () => (/* binding */ StaveText)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ \"./src/textnote.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n\n\n\n\n\nclass StaveText extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: _textnote__WEBPACK_IMPORTED_MODULE_2__.TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT:\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE:\n case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 16,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n/***/ }),\n\n/***/ \"./src/stavetie.ts\":\n/*!*************************!*\\\n !*** ./src/stavetie.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StaveTie: () => (/* binding */ StaveTie)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\n\nclass StaveTie extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT);\n\n\n/***/ }),\n\n/***/ \"./src/stavevolta.ts\":\n/*!***************************!*\\\n !*** ./src/stavevolta.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Volta: () => (/* binding */ Volta),\n/* harmony export */ VoltaType: () => (/* binding */ VoltaType)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\n\n\nvar VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nclass Volta extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 9,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n/***/ }),\n\n/***/ \"./src/stem.ts\":\n/*!*********************!*\\\n !*** ./src/stem.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stem: () => (/* binding */ Stem)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Stem', args);\n}\nclass Stem extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/stemmablenote.ts\":\n/*!******************************!*\\\n !*** ./src/stemmablenote.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StemmableNote: () => (/* binding */ StemmableNote)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\n\n\n\n\n\n\nclass StemmableNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP;\n if (direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/stringnumber.ts\":\n/*!*****************************!*\\\n !*** ./src/stringnumber.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StringNumber: () => (/* binding */ StringNumber)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\n\n\n\n\n\n\n\nclass StringNumber extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(note)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE && leg <= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\n\n\n/***/ }),\n\n/***/ \"./src/strokes.ts\":\n/*!************************!*\\\n !*** ./src/strokes.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stroke: () => (/* binding */ Stroke)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\n\n\n\n\n\n\nclass Stroke extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT;\n this.render_options = {\n font_scale: _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isNote)(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC,\n};\n\n\n/***/ }),\n\n/***/ \"./src/svgcontext.ts\":\n/*!***************************!*\\\n !*** ./src/svgcontext.ts ***!\n \\***************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SVGContext: () => (/* binding */ SVGContext)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ \"./src/rendercontext.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\n\n\n\n\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nclass SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n 'font-size': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE + 'pt',\n 'font-weight': _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n 'font-style': _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(cls));\n if (id)\n group.setAttribute('id', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(startAngle);\n const tmpEndTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style);\n this.fontCSSString = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n\n\n/***/ }),\n\n/***/ \"./src/system.ts\":\n/*!***********************!*\\\n !*** ./src/system.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ System: () => (/* binding */ System)\n/* harmony export */ });\n/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ \"./src/boundingbox.ts\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\n\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nclass System extends _element__WEBPACK_IMPORTED_MODULE_1__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n _note__WEBPACK_IMPORTED_MODULE_3__.Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tables.ts\":\n/*!***********************!*\\\n !*** ./src/tables.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tables: () => (/* binding */ Tables)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\n\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'accidentalBuyukMucennebSharp', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nclass Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.UNISON = true;\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n\n\n/***/ }),\n\n/***/ \"./src/tabnote.ts\":\n/*!************************!*\\\n !*** ./src/tabnote.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabNote: () => (/* binding */ TabNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ \"./src/stemmablenote.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\n\n\n\n\n\n\n\n\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nclass TabNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE}pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` });\n this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType);\n (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.BELOW || position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isDot)(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tabslide.ts\":\n/*!*************************!*\\\n !*** ./src/tabslide.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabSlide: () => (/* binding */ TabSlide)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabtie */ \"./src/tabtie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\n\n\nclass TabSlide extends _tabtie__WEBPACK_IMPORTED_MODULE_1__.TabTie {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF,\n size: 10,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC,\n};\n\n\n/***/ }),\n\n/***/ \"./src/tabstave.ts\":\n/*!*************************!*\\\n !*** ./src/tabstave.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabStave: () => (/* binding */ TabStave)\n/* harmony export */ });\n/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stave */ \"./src/stave.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n\nclass TabStave extends _stave__WEBPACK_IMPORTED_MODULE_0__.Stave {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tabtie.ts\":\n/*!***********************!*\\\n !*** ./src/tabtie.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TabTie: () => (/* binding */ TabTie)\n/* harmony export */ });\n/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavetie */ \"./src/stavetie.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\n\nclass TabTie extends _stavetie__WEBPACK_IMPORTED_MODULE_0__.StaveTie {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/textbracket.ts\":\n/*!****************************!*\\\n !*** ./src/textbracket.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextBracket: () => (/* binding */ TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* binding */ TextBracketPosition)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ \"./src/renderer.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\n\n\n\n\n\n\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.TextBracket', args);\n}\nvar TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nclass TextBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_1__.Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF,\n size: 15,\n weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC,\n};\n\n\n/***/ }),\n\n/***/ \"./src/textdynamics.ts\":\n/*!*****************************!*\\\n !*** ./src/textdynamics.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextDynamics: () => (/* binding */ TextDynamics)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nclass TextDynamics extends _note__WEBPACK_IMPORTED_MODULE_1__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Invalid dynamics character: ' + letter);\n const size = (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.render_options.glyph_font_size);\n const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/textformatter.ts\":\n/*!******************************!*\\\n !*** ./src/textformatter.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextFormatter: () => (/* binding */ TextFormatter)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nclass TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isBold(requestedFont.weight);\n const italic = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD : _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL;\n const style = this.italic ? _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC : _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/textnote.ts\":\n/*!*************************!*\\\n !*** ./src/textnote.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextJustification: () => (/* binding */ TextJustification),\n/* harmony export */ TextNote: () => (/* binding */ TextNote)\n/* harmony export */ });\n/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ \"./src/font.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n\nvar TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nclass TextNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(struct.code, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF,\n size: 12,\n weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL,\n style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n\n\n/***/ }),\n\n/***/ \"./src/tickable.ts\":\n/*!*************************!*\\\n !*** ./src/tickable.ts ***!\n \\*************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tickable: () => (/* binding */ Tickable)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nclass Tickable extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tickcontext.ts\":\n/*!****************************!*\\\n !*** ./src/tickcontext.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TickContext: () => (/* binding */ TickContext)\n/* harmony export */ });\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\n\n\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nclass TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n this.maxTicks = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesigglyph.ts\":\n/*!*****************************!*\\\n !*** ./src/timesigglyph.ts ***!\n \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSignatureGlyph: () => (/* binding */ TimeSignatureGlyph)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\n\n\nclass TimeSignatureGlyph extends _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n let height = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n height = Math.max(height, topGlyph.getMetrics().height);\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(botGlyph.getMetrics().width);\n height = Math.max(height, botGlyph.getMetrics().height);\n }\n // If the height of the digits is more than two staff spaces (20), shift to the next line\n // in order to center the digits on lines 1 and 5 rather than 2 and 4.\n this.lineShift = height > 22 ? 1 : 0;\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine - this.lineShift);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine + this.lineShift);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width);\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesignature.ts\":\n/*!******************************!*\\\n !*** ./src/timesignature.ts ***!\n \\******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSignature: () => (/* binding */ TimeSignature)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ \"./src/stavemodifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./timesigglyph */ \"./src/timesigglyph.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\n\n\n\n\n\n\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nclass TimeSignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point') || _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE;\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new _timesigglyph__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/timesignote.ts\":\n/*!****************************!*\\\n !*** ./src/timesignote.ts ***!\n \\****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TimeSigNote: () => (/* binding */ TimeSigNote)\n/* harmony export */ });\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timesignature */ \"./src/timesignature.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n\n\n\nclass TimeSigNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_1__.TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tremolo.ts\":\n/*!************************!*\\\n !*** ./src/tremolo.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tremolo: () => (/* binding */ Tremolo)\n/* harmony export */ });\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gracenote */ \"./src/gracenote.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ \"./src/note.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\n\n\n\n\n\n\n\n/** Tremolo implements tremolo notation. */\nclass Tremolo extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isGraceNote)(note);\n const scale = gn ? _gracenote__WEBPACK_IMPORTED_MODULE_1__.GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = (_a = musicFont.lookupMetric(`${category}.point`)) !== null && _a !== void 0 ? _a : _note__WEBPACK_IMPORTED_MODULE_3__.Note.getPoint(gn ? 'grace' : 'default');\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tuning.ts\":\n/*!***********************!*\\\n !*** ./src/tuning.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tuning: () => (/* binding */ Tuning)\n/* harmony export */ });\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n/** `Tuning` implements varies types of tunings for tablature. */\nclass Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = _tables__WEBPACK_IMPORTED_MODULE_0__.Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${_tables__WEBPACK_IMPORTED_MODULE_0__.Tables.integerToNote(value)}/${octave}`;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/tuplet.ts\":\n/*!***********************!*\\\n !*** ./src/tuplet.ts ***!\n \\***********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Tuplet: () => (/* binding */ Tuplet),\n/* harmony export */ TupletLocation: () => (/* binding */ TupletLocation)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ \"./src/formatter.ts\");\n/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ \"./src/glyph.ts\");\n/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ \"./src/stem.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\n\n\n\n\n\n\n\nvar TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nclass Tuplet extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE * 3) / 5;\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width);\n });\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/typeguard.ts\":\n/*!**************************!*\\\n !*** ./src/typeguard.ts ***!\n \\**************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Category: () => (/* binding */ Category),\n/* harmony export */ isAccidental: () => (/* binding */ isAccidental),\n/* harmony export */ isAnnotation: () => (/* binding */ isAnnotation),\n/* harmony export */ isBarline: () => (/* binding */ isBarline),\n/* harmony export */ isCategory: () => (/* binding */ isCategory),\n/* harmony export */ isDot: () => (/* binding */ isDot),\n/* harmony export */ isGraceNote: () => (/* binding */ isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* binding */ isGraceNoteGroup),\n/* harmony export */ isNote: () => (/* binding */ isNote),\n/* harmony export */ isRenderContext: () => (/* binding */ isRenderContext),\n/* harmony export */ isStaveNote: () => (/* binding */ isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* binding */ isStemmableNote),\n/* harmony export */ isTabNote: () => (/* binding */ isTabNote)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nfunction isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nconst isAccidental = (obj) => isCategory(obj, Category.Accidental);\nconst isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nconst isBarline = (obj) => isCategory(obj, Category.Barline);\nconst isDot = (obj) => isCategory(obj, Category.Dot);\nconst isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nconst isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nconst isNote = (obj) => isCategory(obj, Category.Note);\nconst isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nconst isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nconst isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nconst isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nvar Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n\n\n/***/ }),\n\n/***/ \"./src/util.ts\":\n/*!*********************!*\\\n !*** ./src/util.ts ***!\n \\*********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RuntimeError: () => (/* binding */ RuntimeError),\n/* harmony export */ defined: () => (/* binding */ defined),\n/* harmony export */ globalObject: () => (/* binding */ globalObject),\n/* harmony export */ log: () => (/* binding */ log),\n/* harmony export */ midLine: () => (/* binding */ midLine),\n/* harmony export */ normalizeAngle: () => (/* binding */ normalizeAngle),\n/* harmony export */ prefix: () => (/* binding */ prefix),\n/* harmony export */ sumArray: () => (/* binding */ sumArray),\n/* harmony export */ warn: () => (/* binding */ warn)\n/* harmony export */ });\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nclass RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nfunction globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof __webpack_require__.g !== 'undefined') {\n return __webpack_require__.g;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nfunction defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nfunction log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nfunction warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nfunction midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nfunction prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nfunction normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nfunction sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n\n\n/***/ }),\n\n/***/ \"./src/vex.ts\":\n/*!********************!*\\\n !*** ./src/vex.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Vex: () => (/* binding */ Vex)\n/* harmony export */ });\n/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flow */ \"./src/flow.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\n\n\nclass Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = _flow__WEBPACK_IMPORTED_MODULE_0__.Flow;\n\n\n/***/ }),\n\n/***/ \"./src/vibrato.ts\":\n/*!************************!*\\\n !*** ./src/vibrato.ts ***!\n \\************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Vibrato: () => (/* binding */ Vibrato)\n/* harmony export */ });\n/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bend */ \"./src/bend.ts\");\n/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ \"./src/modifier.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n/** `Vibrato` implements diverse vibratos. */\nclass Vibrato extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(_bend__WEBPACK_IMPORTED_MODULE_0__.Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/vibratobracket.ts\":\n/*!*******************************!*\\\n !*** ./src/vibratobracket.ts ***!\n \\*******************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ VibratoBracket: () => (/* binding */ VibratoBracket)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vibrato */ \"./src/vibrato.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\n\n\n\n\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n (0,_util__WEBPACK_IMPORTED_MODULE_2__.log)('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nclass VibratoBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n _vibrato__WEBPACK_IMPORTED_MODULE_3__.Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n\n\n/***/ }),\n\n/***/ \"./src/voice.ts\":\n/*!**********************!*\\\n !*** ./src/voice.ts ***!\n \\**********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Voice: () => (/* binding */ Voice),\n/* harmony export */ VoiceMode: () => (/* binding */ VoiceMode)\n/* harmony export */ });\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ \"./src/element.ts\");\n/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ \"./src/fraction.ts\");\n/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ \"./src/tables.ts\");\n/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ \"./src/typeguard.ts\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n\n\n\n\n\nvar VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nclass Voice extends _element__WEBPACK_IMPORTED_MODULE_0__.Element {\n static get CATEGORY() {\n return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_4__.sumArray)(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n\n\n/***/ }),\n\n/***/ \"./src/web.ts\":\n/*!********************!*\\\n !*** ./src/web.ts ***!\n \\********************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isHTMLCanvas: () => (/* binding */ isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* binding */ isHTMLDiv)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./src/util.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\n\n// eslint-disable-next-line\nfunction isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nfunction isHTMLDiv(element) {\n if (!element)\n return false;\n const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n(() => {\n/*!********************************!*\\\n !*** ./entry/vexflow-debug.ts ***!\n \\********************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accidental: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Accidental),\n/* harmony export */ Annotation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Annotation),\n/* harmony export */ AnnotationHorizontalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationHorizontalJustify),\n/* harmony export */ AnnotationVerticalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationVerticalJustify),\n/* harmony export */ Articulation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Articulation),\n/* harmony export */ BEAM_BOTH: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_BOTH),\n/* harmony export */ BEAM_LEFT: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_LEFT),\n/* harmony export */ BEAM_RIGHT: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_RIGHT),\n/* harmony export */ BarNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarNote),\n/* harmony export */ Barline: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Barline),\n/* harmony export */ BarlineType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarlineType),\n/* harmony export */ Beam: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Beam),\n/* harmony export */ Bend: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Bend),\n/* harmony export */ BoundingBox: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBox),\n/* harmony export */ BoundingBoxComputation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBoxComputation),\n/* harmony export */ Builder: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Builder),\n/* harmony export */ CanvasContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CanvasContext),\n/* harmony export */ Category: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Category),\n/* harmony export */ ChordSymbol: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbol),\n/* harmony export */ ChordSymbolHorizontalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolHorizontalJustify),\n/* harmony export */ ChordSymbolVerticalJustify: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolVerticalJustify),\n/* harmony export */ Clef: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Clef),\n/* harmony export */ ClefNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ClefNote),\n/* harmony export */ Crescendo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Crescendo),\n/* harmony export */ Curve: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Curve),\n/* harmony export */ CurvePosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CurvePosition),\n/* harmony export */ Dot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Dot),\n/* harmony export */ EasyScore: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScore),\n/* harmony export */ EasyScoreGrammar: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScoreGrammar),\n/* harmony export */ Element: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Element),\n/* harmony export */ Factory: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Factory),\n/* harmony export */ Flow: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Flow),\n/* harmony export */ Font: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Font),\n/* harmony export */ FontStyle: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontStyle),\n/* harmony export */ FontWeight: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontWeight),\n/* harmony export */ Formatter: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Formatter),\n/* harmony export */ Fraction: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Fraction),\n/* harmony export */ FretHandFinger: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger),\n/* harmony export */ GhostNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GhostNote),\n/* harmony export */ Glyph: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Glyph),\n/* harmony export */ GlyphNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GlyphNote),\n/* harmony export */ GraceNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNote),\n/* harmony export */ GraceNoteGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup),\n/* harmony export */ GraceTabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceTabNote),\n/* harmony export */ KeyManager: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeyManager),\n/* harmony export */ KeySigNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySigNote),\n/* harmony export */ KeySignature: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySignature),\n/* harmony export */ Modifier: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Modifier),\n/* harmony export */ ModifierContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierContext),\n/* harmony export */ ModifierPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierPosition),\n/* harmony export */ MultiMeasureRest: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.MultiMeasureRest),\n/* harmony export */ Music: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Music),\n/* harmony export */ Note: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Note),\n/* harmony export */ NoteHead: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteHead),\n/* harmony export */ NoteSubGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteSubGroup),\n/* harmony export */ Ornament: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Ornament),\n/* harmony export */ OutlineCode: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.OutlineCode),\n/* harmony export */ Parenthesis: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parenthesis),\n/* harmony export */ Parser: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parser),\n/* harmony export */ PedalMarking: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.PedalMarking),\n/* harmony export */ Piece: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Piece),\n/* harmony export */ Registry: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Registry),\n/* harmony export */ RenderContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RenderContext),\n/* harmony export */ Renderer: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Renderer),\n/* harmony export */ RendererBackends: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererBackends),\n/* harmony export */ RendererLineEndType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererLineEndType),\n/* harmony export */ RepeatNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RepeatNote),\n/* harmony export */ Repetition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Repetition),\n/* harmony export */ RuntimeError: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RuntimeError),\n/* harmony export */ SVGContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SVGContext),\n/* harmony export */ Stave: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stave),\n/* harmony export */ StaveConnector: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveConnector),\n/* harmony export */ StaveHairpin: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveHairpin),\n/* harmony export */ StaveLine: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveLine),\n/* harmony export */ StaveModifier: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifier),\n/* harmony export */ StaveModifierPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition),\n/* harmony export */ StaveNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveNote),\n/* harmony export */ StaveSection: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveSection),\n/* harmony export */ StaveTempo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTempo),\n/* harmony export */ StaveText: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveText),\n/* harmony export */ StaveTie: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTie),\n/* harmony export */ Stem: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stem),\n/* harmony export */ StemmableNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StemmableNote),\n/* harmony export */ StringNumber: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StringNumber),\n/* harmony export */ Stroke: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stroke),\n/* harmony export */ SymbolModifiers: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolModifiers),\n/* harmony export */ SymbolTypes: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolTypes),\n/* harmony export */ System: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.System),\n/* harmony export */ TabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabNote),\n/* harmony export */ TabSlide: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabSlide),\n/* harmony export */ TabStave: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabStave),\n/* harmony export */ TabTie: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabTie),\n/* harmony export */ TextBracket: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracket),\n/* harmony export */ TextBracketPosition: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracketPosition),\n/* harmony export */ TextDynamics: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextDynamics),\n/* harmony export */ TextFormatter: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextFormatter),\n/* harmony export */ TextJustification: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextJustification),\n/* harmony export */ TextNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextNote),\n/* harmony export */ TickContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TickContext),\n/* harmony export */ Tickable: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tickable),\n/* harmony export */ TimeSigNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSigNote),\n/* harmony export */ TimeSignature: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignature),\n/* harmony export */ TimeSignatureGlyph: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph),\n/* harmony export */ Tremolo: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tremolo),\n/* harmony export */ Tuning: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuning),\n/* harmony export */ Tuplet: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuplet),\n/* harmony export */ TupletLocation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TupletLocation),\n/* harmony export */ Vex: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vex),\n/* harmony export */ Vibrato: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vibrato),\n/* harmony export */ VibratoBracket: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VibratoBracket),\n/* harmony export */ Voice: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Voice),\n/* harmony export */ VoiceMode: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoiceMode),\n/* harmony export */ Volta: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Volta),\n/* harmony export */ VoltaType: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoltaType),\n/* harmony export */ \"default\": () => (/* reexport module object */ _src_index__WEBPACK_IMPORTED_MODULE_3__),\n/* harmony export */ defined: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.defined),\n/* harmony export */ drawDot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.drawDot),\n/* harmony export */ globalObject: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.globalObject),\n/* harmony export */ isAccidental: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAccidental),\n/* harmony export */ isAnnotation: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAnnotation),\n/* harmony export */ isBarline: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isBarline),\n/* harmony export */ isCategory: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isCategory),\n/* harmony export */ isDot: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isDot),\n/* harmony export */ isGraceNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNote),\n/* harmony export */ isGraceNoteGroup: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNoteGroup),\n/* harmony export */ isHTMLCanvas: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas),\n/* harmony export */ isHTMLDiv: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLDiv),\n/* harmony export */ isNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isNote),\n/* harmony export */ isRenderContext: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isRenderContext),\n/* harmony export */ isStaveNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStaveNote),\n/* harmony export */ isStemmableNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStemmableNote),\n/* harmony export */ isTabNote: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isTabNote),\n/* harmony export */ log: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.log),\n/* harmony export */ midLine: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.midLine),\n/* harmony export */ normalizeAngle: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle),\n/* harmony export */ prefix: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.prefix),\n/* harmony export */ sumArray: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.sumArray),\n/* harmony export */ warn: () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.warn)\n/* harmony export */ });\n/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/flow */ \"./src/flow.ts\");\n/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/fonts/load_all */ \"./src/fonts/load_all.ts\");\n/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/fonts/textfonts */ \"./src/fonts/textfonts.ts\");\n/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/index */ \"./src/index.ts\");\n// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-debug.ts is the entry point for the build output file vexflow-debug.js.\n// It statically bundles all the music engraving fonts.\n// Currently, it is identical to vexflow.ts, but the webpack config inside Gruntfile.js\n// sets the webpack mode to 'development' to produce an unminified build.\n// In the future, we could do something different with this entry file, such as turn on flags for logging.\n\n\n\n(0,_src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__.loadAllMusicFonts)();\n_src_flow__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont('Bravura', 'Gonville', 'Custom');\n(0,_src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__.loadTextFonts)();\n// Re-export all exports from index.ts.\n\n// Also collect all exports into a default export for CJS projects.\n\n\n})();\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=vexflow-debug.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Smoosic relies on dynamic creation of almost everything. This class exports all the symbols\r\n// that need to be created via reflection.\r\n// ui application components\r\n// vexflow interface\r\nimport { TextFormatter } from '../common/textformatter';\r\nimport { VexFlow } from '../common/vex';\r\nimport { SuiApplication } from './application';\r\nimport { SuiEventHandler } from './eventHandler';\r\nimport { SuiExceptionHandler } from '../ui/exceptions';\r\nimport { Qwerty } from '../ui/qwerty';\r\nimport { SuiPiano } from '../render/sui/piano';\r\nimport { SuiDom } from './dom';\r\nimport { SuiHelp } from '../ui/help';\r\nimport { ArticulationButtons } from '../ui/buttons/articulation';\r\nimport { BeamButtons } from '../ui/buttons/beam';\r\nimport { ChordButtons } from '../ui/buttons/chord';\r\nimport { CollapseRibbonControl, ExtendedCollapseParent } from '../ui/buttons/collapsable';\r\nimport { DisplaySettings } from '../ui/buttons/display';\r\nimport { DurationButtons } from '../ui/buttons/duration';\r\nimport { MeasureButtons } from '../ui/buttons/measure';\r\nimport { NavigationButtons } from '../ui/buttons/navigation';\r\nimport { NoteButtons } from '../ui/buttons/note';\r\nimport { PlayerButtons } from '../ui/buttons/player';\r\nimport { StaveButtons } from '../ui/buttons/stave';\r\nimport { TextButtons } from '../ui/buttons/text';\r\nimport { VoiceButtons } from '../ui/buttons/voice';\r\nimport { SmoTranslationEditor } from '../ui/i18n/translationEditor';\r\nimport { SmoConfiguration } from './configuration';\r\nimport { RibbonButtons } from '../ui/buttons/ribbon';\r\nimport { simpleRibbonLayout } from '../ui/ribbonLayout/default/tabletRibbon';\r\nimport { ModalEventHandler } from './common';\r\n// Language strings\r\nimport { cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn\r\n} from '../ui/i18n/language_en';\r\n\r\n// ui dialogs and menus\r\n// Dialogs\r\nimport { SuiDialogBase } from '../ui/dialogs/dialog';\r\nimport { SuiGraceNoteAdapter, SuiGraceNoteDialog, SuiGraceNoteButtonsComponent } from '../ui/dialogs/gracenote';\r\nimport { SuiModifierDialogFactory } from '../ui/dialogs/factory';\r\nimport { SuiTransposeScoreDialog, SuiTransposeScoreAdapter } from '../ui/dialogs/transposeScore';\r\nimport { SuiMeasureDialog } from '../ui/dialogs/measureFormat';\r\nimport { SuiInsertMeasures } from '../ui/dialogs/addMeasure';\r\nimport { SuiInstrumentDialog } from '../ui/dialogs/instrument';\r\nimport { SuiTimeSignatureDialog } from '../ui/dialogs/timeSignature';\r\nimport { SuiTempoDialog } from '../ui/dialogs/tempo';\r\nimport { SuiNoteHeadAdapter, SuiNoteHeadDialog, SuiNoteHeadButtonComponent, SuiStemButtonComponent } from '../ui/dialogs/noteHead';\r\nimport { SuiEndingsAdapter, SuiEndingsDialog, \r\n SuiEndBarButtonComponent, SuiStartBarButtonComponent, SuiRepeatSymbolButtonComponent } from '../ui/dialogs/endings';\r\nimport { SuiScoreIdentificationDialog } from '../ui/dialogs/scoreId';\r\nimport { SuiScorePreferencesDialog } from '../ui/dialogs/preferences';\r\nimport { SuiPageLayoutDialog } from '../ui/dialogs/pageLayout';\r\nimport { SuiTextBracketDialog } from '../ui/dialogs/textBracket';\r\nimport { SuiScoreFontDialog } from '../ui/dialogs/fonts';\r\nimport { SuiGlobalLayoutDialog } from '../ui/dialogs/globalLayout';\r\nimport { SuiScoreViewDialog } from '../ui/dialogs/scoreView';import { SuiLibraryDialog } from '../ui/dialogs/library';\r\nimport { SuiChordChangeDialog } from '../ui/dialogs/chordChange';\r\nimport { SuiLyricDialog } from '../ui/dialogs/lyric';\r\nimport { SuiTextBlockDialog, helpModal } from '../ui/dialogs/textBlock';\r\nimport { SuiDynamicModifierDialog } from '../ui/dialogs/dynamics';\r\nimport { SuiSlurAttributesDialog } from '../ui/dialogs/slur';\r\nimport { SuiPedalMarkingDialog } from '../ui/dialogs/pedalMarking';\r\nimport { SuiTieAttributesDialog } from '../ui/dialogs/tie';\r\nimport { SuiVoltaAttributeDialog } from '../ui/dialogs/volta';\r\nimport { SuiHairpinAttributesDialog } from '../ui/dialogs/hairpin';\r\nimport { SuiStaffGroupDialog } from '../ui/dialogs/staffGroup';\r\nimport { SuiOrnamentDialog, SuiOrnamentButtonComponent } from '../ui/dialogs/ornament';\r\nimport { SuiArticulationDialog, SuiArticulationButtonComponent, SuiArticulationAdapter } from '../ui/dialogs/articulation';\r\nimport { SuiMicrotoneAdapter, SuiMicrotoneButtonComponent, SuiMicrotoneDialog } from '../ui/dialogs/microtones';\r\nimport { SuiArpeggioDialog } from '../ui/dialogs/arpeggio';\r\nimport { SuiClefChangeDialog } from '../ui/dialogs/clefChange';\r\nimport { SuiPartInfoDialog } from '../ui/dialogs/partInfo';\r\nimport { SuiLoadMxmlDialog, SuiLoadFileDialog,\r\n /* SuiLoadActionsDialog, SuiSaveActionsDialog, */\r\n SuiPrintFileDialog, SuiSaveFileDialog, SuiSaveXmlDialog,\r\n SuiSaveMidiDialog, SuiSaveVexDialog } from '../ui/dialogs/fileDialogs';\r\n // Dialog components\r\n\r\nimport { SuiTextInputComponent, SuiTextInputComposite, SuiReadOnlyTextComponent } from '../ui/dialogs/components/textInput';\r\nimport { SuiDropdownComponent, SuiDropdownComposite } from '../ui/dialogs/components/dropdown';\r\nimport { SuiButtonComposite, SuiButtonComponent } from '../ui/dialogs/components/button';\r\nimport { SuiButtonArrayComponent, SuiButtonArrayMSComponent } from '../ui/dialogs/components/buttonArray';\r\nimport { SuiToggleComponent, SuiToggleComposite } from '../ui/dialogs/components/toggle';\r\nimport { SuiFileDownloadComponent } from '../ui/dialogs/components/fileDownload';\r\nimport { SuiRockerComponent, SuiRockerComposite } from '../ui/dialogs/components/rocker';\r\nimport { SuiFontComponent } from '../ui/dialogs/components/fontComponent';\r\nimport { SuiTextBlockComponent } from '../ui/dialogs/components/textInPlace';\r\nimport { SuiTreeComponent } from '../ui/dialogs/components/tree';\r\nimport { SuiPitchArrayComponent, SuiPitchArrayComponentTab, \r\n SuiPitchComponent, SuiPitchComposite } from '../ui/dialogs/components/pitch';\r\nimport {\r\n SuiLyricComponent, SuiChordComponent,\r\n SuiNoteTextComponent\r\n} from '../ui/dialogs/components/noteText';\r\nimport { SuiDragText } from '../ui/dialogs/components/dragText';\r\nimport { SuiTextInPlace } from '../ui/dialogs/components/textInPlace';\r\nimport { CheckboxDropdownComponent } from '../ui/dialogs/components/checkdrop';\r\nimport { TieMappingComponent } from '../ui/dialogs/components/tie';\r\nimport { StaffAddRemoveComponent,\r\n StaffCheckComponent} from '../ui/dialogs/components/staffComponents';\r\nimport { SuiKeySignatureDialog, SuiKeySignatureAdapter } from '../ui/dialogs/keySignature';\r\nimport { TextCheckComponent } from '../ui/dialogs/components/textCheck';\r\n// menus\r\nimport { SuiMenuManager} from '../ui/menus/manager';\r\nimport { SuiMenuBase } from '../ui/menus/menu';\r\nimport { SuiScoreMenu } from '../ui/menus/score';\r\nimport { SuiTextMenu } from '../ui/menus/text';\r\nimport { SuiPartMenu } from '../ui/menus/parts';\r\nimport { SuiVoiceMenu } from '../ui/menus/voices';\r\nimport { SuiBeamMenu } from '../ui/menus/beams';\r\nimport { SuiPartSelectionMenu } from '../ui/menus/partSelection';\r\nimport { SuiDynamicsMenu } from '../ui/menus/dynamics';\r\nimport { SuiTimeSignatureMenu } from '../ui/menus/timeSignature';\r\nimport { SuiKeySignatureMenu } from '../ui/menus/keySignature';\r\nimport { SuiStaffModifierMenu } from '../ui/menus/staffModifier';\r\nimport { SuiFileMenu } from '../ui/menus/file';\r\nimport { SuiLanguageMenu } from '../ui/menus/language';\r\nimport { SmoLanguage, SmoTranslator } from '../ui/i18n/language';\r\nimport { SuiMeasureMenu } from '../ui/menus/measure';\r\nimport { SuiNoteMenu } from '../ui/menus/note';\r\nimport { SuiXhrLoader } from '../ui/fileio/xhrLoader';\r\nimport { PromiseHelpers } from '../common/promiseHelpers';\r\n// render library\r\nimport { SuiScoreView } from '../render/sui/scoreView';\r\nimport { SuiScoreViewOperations } from '../render/sui/scoreViewOperations';\r\nimport { SuiScoreRender } from '../render/sui/scoreRender';\r\nimport { layoutDebug } from '../render/sui/layoutDebug';\r\nimport { SuiMapper } from '../render/sui/mapper';\r\nimport { SuiScroller } from '../render/sui/scroller';\r\nimport { SvgHelpers } from '../render/sui/svgHelpers';\r\n\r\n// audio library\r\nimport { SuiAudioPlayer } from '../render/audio/player';\r\nimport { SuiOscillator, SuiSampler, SuiReverb } from '../render/audio/oscillator';\r\nimport { SuiSampleMedia } from '../render/audio/samples';\r\n\r\n\r\n// SMO object model\r\nimport { SmoScore, engravingFontTypes, isEngravingFont } from '../smo/data/score';\r\nimport { UndoBuffer } from '../smo/xform/undo';\r\nimport { SmoNote } from '../smo/data/note';\r\n// import { SmoDuration } from '../smo/xform/tickDuration';\r\nimport { createLoadTests } from '../../tests/file-load';\r\nimport { SmoStaffHairpin, StaffModifierBase, SmoInstrument, SmoSlur, SmoTie, SmoStaffTextBracket,\r\n SmoTabStave, SmoPedalMarking\r\n } from '../smo/data/staffModifiers';\r\nimport { SmoMeasure } from '../smo/data/measure';\r\nimport { SmoMusic } from '../smo/data/music';\r\nimport { SmoAudioPitch } from '../smo/data/music';\r\nimport { SmoSelection, SmoSelector } from '../smo/xform/selections';\r\nimport { SmoOrnament, SmoArticulation, SmoDynamicText, SmoGraceNote, SmoMicrotone, SmoLyric,\r\n SmoArpeggio, SmoClefChange } from '../smo/data/noteModifiers';\r\nimport { SmoSystemStaff } from '../smo/data/systemStaff';\r\nimport { SmoSystemGroup, SmoAudioPlayerSettings, SmoScorePreferences } from '../smo/data/scoreModifiers';\r\nimport { SmoTextGroup, SmoTextGroupParams } from '../smo/data/scoreText';\r\nimport { SmoOperation } from '../smo/xform/operations';\r\nimport {\r\n SmoRehearsalMark, SmoMeasureFormat, SmoBarline, SmoRepeatSymbol,\r\n SmoVolta, SmoMeasureText, SmoTempoText, TimeSignature\r\n} from '../smo/data/measureModifiers';\r\nimport { SmoToXml } from '../smo/mxml/smoToXml';\r\nimport { MidiToSmo } from '../smo/midi/midiToSmo';\r\nimport { SmoToMidi } from '../smo/midi/smoToMidi';\r\nimport { XmlToSmo } from '../smo/mxml/xmlToSmo';\r\nimport { SmoToVex } from '../render/vex/toVex';\r\n// utilities\r\nimport { buildDom, addFileLink, InputTrapper, draggable, closeDialogPromise, getDomContainer, createTopDomContainer } from '../common/htmlHelpers';\r\n\r\nimport { renderVexTests } from './generateVexTests';\r\nimport { SuiDurationAdapter, SuiDurationButtonComponent, SuiDurationDialog } from '../ui/dialogs/durations';\r\nimport { SuiPitchAdapter, SuiPitchDialog, SuiLetterButtonComponent, SuiIntervalButtonComponent, SuiTransposeButtonComponent } from '../ui/dialogs/pitch';\r\nconst getClass = (jsonString: string) => {\r\n return eval('Smo.' + jsonString);\r\n};\r\nexport const Smo = {\r\n // Application-level classes\r\n SmoConfiguration,\r\n SuiApplication,\r\n SuiDom, SuiEventHandler, SuiExceptionHandler,\r\n Qwerty, SuiHelp, SmoTranslationEditor, ModalEventHandler,\r\n // Ribbon buttons\r\n simpleRibbonLayout,\r\n RibbonButtons, NoteButtons, TextButtons, ChordButtons,\r\n StaveButtons, BeamButtons, MeasureButtons, DurationButtons,\r\n VoiceButtons, PlayerButtons, ArticulationButtons, NavigationButtons,\r\n DisplaySettings, ExtendedCollapseParent, CollapseRibbonControl,\r\n // Menus\r\n SuiMenuManager, SuiMenuBase, SuiScoreMenu, SuiFileMenu,\r\n SuiDynamicsMenu, SuiTimeSignatureMenu, SuiKeySignatureMenu, SuiStaffModifierMenu,\r\n SuiLanguageMenu, SuiMeasureMenu, SuiNoteMenu, SmoLanguage, SmoTranslator, SuiPartMenu,\r\n SuiPartSelectionMenu, SuiTextMenu, SuiVoiceMenu, SuiBeamMenu,\r\n // Dialogs\r\n SuiGraceNoteAdapter, SuiGraceNoteDialog, SuiGraceNoteButtonsComponent,\r\n SuiDurationAdapter, SuiDurationDialog, SuiDurationButtonComponent,\r\n SuiTempoDialog, SuiInstrumentDialog, SuiModifierDialogFactory, SuiLibraryDialog,\r\n SuiTextBracketDialog, SuiKeySignatureDialog, SuiKeySignatureAdapter,\r\n SuiScoreViewDialog, SuiGlobalLayoutDialog, SuiScoreIdentificationDialog, SuiTransposeScoreAdapter,\r\n SuiTransposeScoreDialog,\r\n SuiScoreFontDialog, SuiPageLayoutDialog, SuiMeasureDialog, SuiInsertMeasures,\r\n SuiTimeSignatureDialog,SuiTextBlockDialog, SuiLyricDialog, SuiChordChangeDialog,\r\n SuiSlurAttributesDialog, SuiPedalMarkingDialog, SuiTieAttributesDialog, SuiVoltaAttributeDialog,\r\n SuiHairpinAttributesDialog, SuiStaffGroupDialog, helpModal,\r\n SuiLoadFileDialog, SuiLoadMxmlDialog, SuiScorePreferencesDialog,\r\n SuiPartInfoDialog, SuiOrnamentDialog, SuiOrnamentButtonComponent, \r\n SuiArticulationDialog, SuiArticulationButtonComponent, SuiArticulationAdapter,\r\n SuiMicrotoneAdapter, SuiMicrotoneButtonComponent, SuiMicrotoneDialog,\r\n SuiNoteHeadAdapter, SuiNoteHeadDialog, SuiStemButtonComponent, SuiNoteHeadButtonComponent, \r\n SuiEndingsAdapter, SuiEndingsDialog, \r\n SuiEndBarButtonComponent, SuiStartBarButtonComponent, SuiRepeatSymbolButtonComponent, \r\n /* SuiLoadActionsDialog, SuiSaveActionsDialog, */\r\n SuiPrintFileDialog, SuiSaveFileDialog, SuiSaveXmlDialog, SuiSaveVexDialog,\r\n SuiSaveMidiDialog, SuiDialogBase, \r\n SuiPitchDialog, SuiPitchAdapter,SuiIntervalButtonComponent, SuiLetterButtonComponent,\r\n SuiTransposeButtonComponent,\r\n // Dialog components\r\n SuiTreeComponent,\r\n SuiDropdownComponent,\r\n SuiRockerComponent, SuiFileDownloadComponent, SuiButtonArrayComponent, SuiButtonArrayMSComponent,\r\n SuiToggleComponent, SuiButtonComponent, SuiDropdownComposite,\r\n SuiToggleComposite, SuiButtonComposite, SuiRockerComposite, SuiTextInputComposite,\r\n SuiFontComponent, SuiTextInPlace, SuiLyricComponent, SuiChordComponent, SuiDragText,\r\n SuiNoteTextComponent, SuiTextBlockComponent, SuiTextInputComponent, SuiReadOnlyTextComponent,\r\n SuiDynamicModifierDialog, CheckboxDropdownComponent, TieMappingComponent, StaffAddRemoveComponent,\r\n StaffCheckComponent, TextCheckComponent, SuiArpeggioDialog, SuiClefChangeDialog,\r\n SuiPitchArrayComponent, SuiPitchArrayComponentTab, SuiPitchComponent,\r\n\r\n SuiPitchComposite, \r\n SuiXhrLoader,PromiseHelpers,\r\n // Rendering components\r\n SuiPiano, layoutDebug, SuiScoreView,SuiScroller, SvgHelpers, SuiMapper, SuiScoreRender,\r\n SuiScoreViewOperations, TextFormatter, VexFlow,\r\n\r\n // Audio components\r\n SuiAudioPlayer, SuiOscillator, SuiSampleMedia, SuiSampler, SuiReverb,\r\n\r\n // Smo Music Objects\r\n SmoScore,\r\n SmoScorePreferences, \r\n engravingFontTypes, isEngravingFont,\r\n XmlToSmo,\r\n SmoToXml,\r\n MidiToSmo,\r\n SmoToMidi,\r\n SmoMusic,\r\n SmoAudioPitch,\r\n SmoMeasure,\r\n SmoSystemStaff,\r\n SmoNote,\r\n // staff modifier\r\n SmoStaffHairpin, StaffModifierBase,\r\n SmoStaffTextBracket,\r\n SmoInstrument, SmoSlur, SmoPedalMarking, SmoTie, SmoTabStave,\r\n // score modifiers\r\n SmoSystemGroup, SmoAudioPlayerSettings, SmoTextGroup,\r\n // measure modifiers\r\n SmoRehearsalMark, SmoMeasureFormat, SmoBarline, SmoRepeatSymbol,\r\n SmoVolta, SmoMeasureText, SmoTempoText, TimeSignature,\r\n // note modifiers\r\n SmoOrnament,\r\n SmoArticulation, SmoDynamicText, SmoGraceNote, SmoMicrotone, SmoLyric, SmoArpeggio, SmoClefChange,\r\n // Smo Transformers\r\n SmoSelection, SmoSelector, /*SmoDuration,*/ UndoBuffer, SmoToVex, SmoOperation,\r\n // new score bootstrap\r\n // help strings\r\n cardKeysHtmlEn, cardNotesLetterHtmlEn, cardNotesChromaticHtmlEn, cardNotesChordsHtmlEn,\r\n cardNotesRestsHtmlEn, cardDurationNotesHtmlEn, cardDurationTupletsHtmlEn,\r\n cardSelectionsNotesHtmlEn, cardSelectionsModifiersHtmlEn, cardSelectionsNonSelectableHtmlEn, cardSelectionsSlashHtmlEn,\r\n cardBeamsAndStemsDirectionHtmlEn, cardBeamsAndStemsGroupingHtmlEn,\r\n cardMeasuresAddDeleteHtmlEn, cardVoicesCreateDeleteHtmlEn, cardPartAddDeleteHtmlEn,\r\n getClass,\r\n createLoadTests,\r\n // utilities\r\n buildDom, addFileLink, InputTrapper, draggable, closeDialogPromise, getDomContainer, createTopDomContainer,\r\n renderVexTests\r\n}\r\nexport default Smo;\r\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/release/styles/bravura-font-codes.css b/release/styles/bravura-font-codes.css index 9af984ba..d325249f 100644 --- a/release/styles/bravura-font-codes.css +++ b/release/styles/bravura-font-codes.css @@ -3,25 +3,456 @@ font-family: 'Bravura'!important; font-size: 24px; position: absolute; - top: calc(50% - 12px); + top: calc(50% - 8px); + pointer-events: none; } - -.icon-accidentalFlat:before { - content: "\e260"; -} - -.icon-caesura:before { - content: "\e4d2" -} - -.icon-breath-mark:before { - content: "\e4ce" -} - -.icon-pedal-open:before { - content: "\e650" +.oversize .icon-bravura { + font-size: 16px; + left: 4px; } +/* not in file */ +.icon-note:before {content: "\2669";} +.icon-grace-note:before {content: "\e562";} +.icon-grace-note-strike:before {content: "\e560";} -.icon-pedal-closed:before { - content: "\e655" -} \ No newline at end of file +.icon-bracketTop:before {content: "\e003";} +.icon-bracketBottom:before {content: "\e004";} +.icon-barlineTick:before {content: "\e039";} +.icon-breathMarkTick:before {content: "\e4cf";} +.icon-segno:before {content: "\e047";} +.icon-coda:before {content: "\e048";} +.icon-gClef:before {content: "\e050";} +.icon-cClef:before {content: "\e05c";} +.icon-fClef:before {content: "\e062";} +.icon-unpitchedPercussionClef1:before {content: "\e069";} +.icon-6stringTabClef:before {content: "\e06d";} +.icon-timeSig0:before {content: "\e080";} +.icon-timeSig1:before {content: "\e081";} +.icon-timeSig2:before {content: "\e082";} +.icon-timeSig3:before {content: "\e083";} +.icon-timeSig4:before {content: "\e084";} +.icon-timeSig5:before {content: "\e085";} +.icon-timeSig6:before {content: "\e086";} +.icon-timeSig7:before {content: "\e087";} +.icon-timeSig8:before {content: "\e088";} +.icon-timeSig9:before {content: "\e089";} +.icon-timeSigCommon:before {content: "\e08a";} +.icon-timeSigCutCommon:before {content: "\e08b";} +.icon-timeSigPlus:before {content: "\e08c";} +.icon-timeSigPlusSmall:before {content: "\e08d";} +.icon-timeSigMinus:before {content: "\e090";} +.icon-timeSigParensRight:before {content: "\e095";} +.icon-timeSigParensRightSmall:before {content: "\e093";} +.icon-timeSigParensLeft:before {content: "\e094";} +.icon-timeSigParensLeftSmall:before {content: "\e092";} +.icon-noteheadDoubleWhole:before {content: "\e0a0";} +.icon-noteheadWhole:before {content: "\e0a2";} +.icon-noteheadHalf:before {content: "\e0a3";} +.icon-noteheadBlack:before {content: "\e0a4";} +.icon-noteheadXDoubleWhole:before {content: "\e0a6";} +.icon-noteheadXWhole:before {content: "\e0a7";} +.icon-noteheadXHalf:before {content: "\e0a8";} +.icon-noteheadXBlack:before {content: "\e0a9";} +.icon-noteheadCircleXDoubleWhole:before {content: "\e0b0";} +.icon-noteheadCircleXWhole:before {content: "\e0b1";} +.icon-noteheadCircleXHalf:before {content: "\e0b2";} +.icon-noteheadCircleX:before {content: "\e0b3";} +.icon-noteheadCircledDoubleWhole:before {content: "\e0e7";} +.icon-noteheadCircledWhole:before {content: "\e0e6";} +.icon-noteheadCircledHalf:before {content: "\e0e5";} +.icon-noteheadCircledBlack:before {content: "\e0e4";} +.icon-noteheadDoubleWholeSquare:before {content: "\e0a1";} +.icon-noteheadSquareWhite:before {content: "\e0b8";} +.icon-noteheadSquareBlack:before {content: "\e0b9";} +.icon-noteheadTriangleDownDoubleWhole:before {content: "\e0c3";} +.icon-noteheadTriangleDownWhole:before {content: "\e0c4";} +.icon-noteheadTriangleDownHalf:before {content: "\e0c5";} +.icon-noteheadTriangleDownBlack:before {content: "\e0c7";} +.icon-noteheadTriangleUpDoubleWhole:before {content: "\e0ba";} +.icon-noteheadTriangleUpWhole:before {content: "\e0bb";} +.icon-noteheadTriangleUpHalf:before {content: "\e0bc";} +.icon-noteheadTriangleUpBlack:before {content: "\e0be";} +.icon-noteheadSlashedDoubleWhole1:before {content: "\e0d5";} +.icon-noteheadSlashedWhole1:before {content: "\e0d3";} +.icon-noteheadSlashedHalf1:before {content: "\e0d1";} +.icon-noteheadSlashedBlack1:before {content: "\e0cf";} +.icon-noteheadSlashedDoubleWhole2:before {content: "\e0d6";} +.icon-noteheadSlashedWhole2:before {content: "\e0d4";} +.icon-noteheadSlashedHalf2:before {content: "\e0d2";} +.icon-noteheadSlashedBlack2:before {content: "\e0d0";} +.icon-noteheadDiamondDoubleWhole:before {content: "\e0d7";} +.icon-noteheadDiamondWhole:before {content: "\e0d8";} +.icon-noteheadDiamondHalf:before {content: "\e0d9";} +.icon-noteheadDiamondBlack:before {content: "\e0db";} +.icon-noteheadParenthesis:before {content: "\e0ce";} +.icon-noteheadParenthesisRight:before {content: "\e0f6";} +.icon-noteheadParenthesisLeft:before {content: "\e0f5";} +.icon-noteheadMoonBlack:before {content: "\e0cb";} +.icon-noteheadTriangleLeftBlack:before {content: "\e0c0";} +.icon-noteheadTriangleRightBlack:before {content: "\e0c2";} +.icon-noteheadTriangleRoundDownBlack:before {content: "\e0cd";} +.icon-augmentationDot:before {content: "\e1e7";} +.icon-tremolo1:before {content: "\e220";} +.icon-flag8thUp:before {content: "\e240";} +.icon-flag8thDown:before {content: "\e241";} +.icon-flag16thUp:before {content: "\e242";} +.icon-flag16thDown:before {content: "\e243";} +.icon-flag32ndUp:before {content: "\e244";} +.icon-flag32ndDown:before {content: "\e245";} +.icon-flag64thUp:before {content: "\e246";} +.icon-flag64thDown:before {content: "\e247";} +.icon-flag128thUp:before {content: "\e248";} +.icon-flag128thDown:before {content: "\e249";} +.icon-accidentalFlat:before {content: "\e260";} +.icon-accidentalNatural:before {content: "\e261";} +.icon-accidentalSharp:before {content: "\e262";} +.icon-accidentalDoubleSharp:before {content: "\e263";} +.icon-accidentalDoubleFlat:before {content: "\e264";} +.icon-accidentalParensLeft:before {content: "\e26a";} +.icon-accidentalParensRight:before {content: "\e26b";} +.icon-accidentalQuarterToneFlatStein:before {content: "\e280";} +.icon-accidentalThreeQuarterTonesFlatZimmermann:before {content: "\e281";} +.icon-accidentalQuarterToneSharpStein:before {content: "\e282";} +.icon-accidentalThreeQuarterTonesSharpStein:before {content: "\e283";} +.icon-accidentalBuyukMucennebFlat:before {content: "\e440";} +.icon-accidentalBakiyeFlat:before {content: "\e442";} +.icon-accidentalKomaSharp:before {content: "\e444";} +.icon-accidentalKucukMucennebSharp:before {content: "\e446";} +.icon-accidentalKoron:before {content: "\e460";} +.icon-accidentalSori:before {content: "\e461";} +.icon-articAccentAbove:before {content: "\e4a0";} +.icon-articAccentBelow:before {content: "\e4a1";} +.icon-articTenutoAbove:before {content: "\e4a4";} +.icon-articTenutoBelow:before {content: "\e4a5";} +.icon-articStaccatoAbove:before {content: "\e4a2";} +.icon-articStaccatoBelow:before {content: "\e4a3";} +.icon-articStaccatissimoAbove:before {content: "\e4a6";} +.icon-articStaccatissimoBelow:before {content: "\e4a7";} +.icon-articMarcatoAbove:before {content: "\e4ac";} +.icon-articMarcatoBelow:before {content: "\e4ad";} +.icon-fermataAbove:before {content: "\e4c0";} +.icon-fermataBelow:before {content: "\e4c1";} +.icon-fermataLongAbove:before {content: "\e4c6";} +.icon-fermataLongBelow:before {content: "\e4c7";} +.icon-fermataVeryLongAbove:before {content: "\e4c8";} +.icon-fermataVeryLongBelow:before {content: "\e4c9";} +.icon-fermataShortAbove:before {content: "\e4c4";} +.icon-fermataShortBelow:before {content: "\e4c5";} +.icon-breathMarkComma:before {content: "\e4ce";} +.icon-breathMarkUpbow:before {content: "\e4d0";} +.icon-caesura:before {content: "\e4d1";} +.icon-caesuraCurved:before {content: "\e4d4";} +.icon-restMaxima:before {content: "\e4e0";} +.icon-restDoubleWhole:before {content: "\e4e2";} +.icon-restWhole:before {content: "\e4e3";} +.icon-restWholeLegerLine:before {content: "\e4f4";} +.icon-restHalf:before {content: "\e4e4";} +.icon-restHalfLegerLine:before {content: "\e4f5";} +.icon-restQuarter:before {content: "\e4e5";} +.icon-rest8th:before {content: "\e4e6";} +.icon-rest16th:before {content: "\e4e7";} +.icon-rest32nd:before {content: "\e4e8";} +.icon-rest64th:before {content: "\e4e9";} +.icon-rest128th:before {content: "\e4ea";} +.icon-ottavaAlta:before { content: "\e511";} +.icon-ottavaBassa:before { content: "\e512";} +.icon-dynamicPiano:before {content: "\e520";} +.icon-dynamicMezzo:before {content: "\e521";} +.icon-dynamicForte:before {content: "\e522";} +.icon-dynamicRinforzando:before {content: "\e523";} +.icon-dynamicSforzando:before {content: "\e524";} +.icon-dynamicZ:before {content: "\e525";} +.icon-ornamentTrill:before {content: "\e566";} +.icon-ornamentTurn:before {content: "\e567";} +.icon-ornamentTurnSlash:before {content: "\e569";} +.icon-ornamentMordent:before {content: "\e56d";} +.icon-ornamentShortTrill:before {content: "\e56c";} +.icon-ornamentTremblement:before {content: "\e56e";} +.icon-ornamentPrecompAppoggTrill:before {content: "\e5b2";} +.icon-ornamentPrecompSlideTrillDAnglebert:before {content: "\e5b5";} +.icon-ornamentPrecompSlideTrillBach:before {content: "\e5b8";} +.icon-ornamentPrecompTrillSuffixDandrieu:before {content: "\e5bb";} +.icon-ornamentPrecompDoubleCadenceUpperPrefix:before {content: "\e5c3";} +.icon-ornamentPrecompDoubleCadenceUpperPrefixTurn:before {content: "\e5c4";} +.icon-ornamentPrecompTrillLowerSuffix:before {content: "\e5c8";} +.icon-brassScoop:before {content: "\e5d0";} +.icon-brassDoitMedium:before {content: "\e5d5";} +.icon-brassFallLipShort:before {content: "\e5d7";} +.icon-brassLiftMedium:before {content: "\e5d2";} +.icon-brassFallRoughMedium:before {content: "\e5de";} +.icon-brassBend:before {content: "\e5e3";} +.icon-brassMuteClosed:before {content: "\e5e5";} +.icon-brassMuteOpen:before {content: "\e5e7";} +.icon-brassFlip:before {content: "\e5e1";} +.icon-brassJazzTurn:before {content: "\e5e4";} +.icon-brassSmear:before {content: "\e5e2";} +.icon-stringsDownBow:before {content: "\e610";} +.icon-stringsUpBow:before {content: "\e612";} +.icon-stringsHarmonic:before {content: "\e614";} +.icon-pluckedSnapPizzicatoAbove:before {content: "\e631";} +.icon-pluckedSnapPizzicatoBelow:before {content: "\e630";} +.icon-pluckedLeftHandPizzicato:before {content: "\e633";} +.icon-keyboardPedalPed:before {content: "\e650";} +.icon-keyboardPedalUp:before {content: "\e655";} +.icon-pictChokeCymbal:before {content: "\e805";} +.icon-wiggleArpeggiatoUp:before {content: "\eaa9";} +.icon-arrowheadBlackUp:before {content: "\eb78";} +.icon-arrowheadBlackDown:before {content: "\eb7c";} +.icon-arpeggiatoUp:before {content: "\e634";} +.icon-arpeggiatoDown:before {content: "\e635";} +.icon-repeat1Bar:before {content: "\e500";} +.icon-repeat2Bars:before {content: "\e501";} +.icon-repeat4Bars:before {content: "\e502";} +.icon-repeatBarSlash:before {content: "\e504";} +.icon-csymDiminished:before {content: "\e870";} +.icon-csymHalfDiminished:before {content: "\e871";} +.icon-csymAugmented:before {content: "\e872";} +.icon-csymMajorSeventh:before {content: "\e873";} +.icon-csymMinor:before {content: "\e874";} +.icon-csymParensLeftTall:before {content: "\e875";} +.icon-csymParensRightTall:before {content: "\e876";} +.icon-csymBracketLeftTall:before {content: "\e877";} +.icon-csymBracketRightTall:before {content: "\e878";} +.icon-csymParensLeftVeryTall:before {content: "\e879";} +.icon-csymParensRightVeryTall:before {content: "\e87a";} +.icon-csymDiagonalArrangementSlash:before {content: "\e87c";} +.icon-accSagittal5v7KleismaUp:before {content: "\e300";} +.icon-accSagittal5v7KleismaDown:before {content: "\e301";} +.icon-accSagittal5CommaUp:before {content: "\e302";} +.icon-accSagittal5CommaDown:before {content: "\e303";} +.icon-accSagittal7CommaUp:before {content: "\e304";} +.icon-accSagittal7CommaDown:before {content: "\e305";} +.icon-accSagittal25SmallDiesisUp:before {content: "\e306";} +.icon-accSagittal25SmallDiesisDown:before {content: "\e307";} +.icon-accSagittal35MediumDiesisUp:before {content: "\e308";} +.icon-accSagittal35MediumDiesisDown:before {content: "\e309";} +.icon-accSagittal11MediumDiesisUp:before {content: "\e30a";} +.icon-accSagittal11MediumDiesisDown:before {content: "\e30b";} +.icon-accSagittal11LargeDiesisUp:before {content: "\e30c";} +.icon-accSagittal11LargeDiesisDown:before {content: "\e30d";} +.icon-accSagittal35LargeDiesisUp:before {content: "\e30e";} +.icon-accSagittal35LargeDiesisDown:before {content: "\e30f";} +.icon-accSagittalSharp25SDown:before {content: "\e310";} +.icon-accSagittalFlat25SUp:before {content: "\e311";} +.icon-accSagittalSharp7CDown:before {content: "\e312";} +.icon-accSagittalFlat7CUp:before {content: "\e313";} +.icon-accSagittalSharp5CDown:before {content: "\e314";} +.icon-accSagittalFlat5CUp:before {content: "\e315";} +.icon-accSagittalSharp5v7kDown:before {content: "\e316";} +.icon-accSagittalFlat5v7kUp:before {content: "\e317";} +.icon-accSagittalSharp:before {content: "\e318";} +.icon-accSagittalFlat:before {content: "\e319";} +.icon-accSagittalSharp5v7kUp:before {content: "\e31c";} +.icon-accSagittalFlat5v7kDown:before {content: "\e31d";} +.icon-accSagittalSharp5CUp:before {content: "\e31e";} +.icon-accSagittalFlat5CDown:before {content: "\e31f";} +.icon-accSagittalSharp7CUp:before {content: "\e320";} +.icon-accSagittalFlat7CDown:before {content: "\e321";} +.icon-accSagittalSharp25SUp:before {content: "\e322";} +.icon-accSagittalFlat25SDown:before {content: "\e323";} +.icon-accSagittalSharp35MUp:before {content: "\e324";} +.icon-accSagittalFlat35MDown:before {content: "\e325";} +.icon-accSagittalSharp11MUp:before {content: "\e326";} +.icon-accSagittalFlat11MDown:before {content: "\e327";} +.icon-accSagittalSharp11LUp:before {content: "\e328";} +.icon-accSagittalFlat11LDown:before {content: "\e329";} +.icon-accSagittalSharp35LUp:before {content: "\e32a";} +.icon-accSagittalFlat35LDown:before {content: "\e32b";} +.icon-accSagittalDoubleSharp25SDown:before {content: "\e32c";} +.icon-accSagittalDoubleFlat25SUp:before {content: "\e32d";} +.icon-accSagittalDoubleSharp7CDown:before {content: "\e32e";} +.icon-accSagittalDoubleFlat7CUp:before {content: "\e32f";} +.icon-accSagittalDoubleSharp5CDown:before {content: "\e330";} +.icon-accSagittalDoubleFlat5CUp:before {content: "\e331";} +.icon-accSagittalDoubleSharp5v7kDown:before {content: "\e332";} +.icon-accSagittalDoubleFlat5v7kUp:before {content: "\e333";} +.icon-accSagittalDoubleSharp:before {content: "\e334";} +.icon-accSagittalDoubleFlat:before {content: "\e335";} +.icon-accSagittal7v11KleismaUp:before {content: "\e340";} +.icon-accSagittal7v11KleismaDown:before {content: "\e341";} +.icon-accSagittal17CommaUp:before {content: "\e342";} +.icon-accSagittal17CommaDown:before {content: "\e343";} +.icon-accSagittal55CommaUp:before {content: "\e344";} +.icon-accSagittal55CommaDown:before {content: "\e345";} +.icon-accSagittal7v11CommaUp:before {content: "\e346";} +.icon-accSagittal7v11CommaDown:before {content: "\e347";} +.icon-accSagittal5v11SmallDiesisUp:before {content: "\e348";} +.icon-accSagittal5v11SmallDiesisDown:before {content: "\e349";} +.icon-accSagittalSharp5v11SDown:before {content: "\e34a";} +.icon-accSagittalFlat5v11SUp:before {content: "\e34b";} +.icon-accSagittalSharp7v11CDown:before {content: "\e34c";} +.icon-accSagittalFlat7v11CUp:before {content: "\e34d";} +.icon-accSagittalSharp55CDown:before {content: "\e34e";} +.icon-accSagittalFlat55CUp:before {content: "\e34f";} +.icon-accSagittalSharp17CDown:before {content: "\e350";} +.icon-accSagittalFlat17CUp:before {content: "\e351";} +.icon-accSagittalSharp7v11kDown:before {content: "\e352";} +.icon-accSagittalFlat7v11kUp:before {content: "\e353";} +.icon-accSagittalSharp7v11kUp:before {content: "\e354";} +.icon-accSagittalFlat7v11kDown:before {content: "\e355";} +.icon-accSagittalSharp17CUp:before {content: "\e356";} +.icon-accSagittalFlat17CDown:before {content: "\e357";} +.icon-accSagittalSharp55CUp:before {content: "\e358";} +.icon-accSagittalFlat55CDown:before {content: "\e359";} +.icon-accSagittalSharp7v11CUp:before {content: "\e35a";} +.icon-accSagittalFlat7v11CDown:before {content: "\e35b";} +.icon-accSagittalSharp5v11SUp:before {content: "\e35c";} +.icon-accSagittalFlat5v11SDown:before {content: "\e35d";} +.icon-accSagittalDoubleSharp5v11SDown:before {content: "\e35e";} +.icon-accSagittalDoubleFlat5v11SUp:before {content: "\e35f";} +.icon-accSagittalDoubleSharp7v11CDown:before {content: "\e360";} +.icon-accSagittalDoubleFlat7v11CUp:before {content: "\e361";} +.icon-accSagittalDoubleSharp55CDown:before {content: "\e362";} +.icon-accSagittalDoubleFlat55CUp:before {content: "\e363";} +.icon-accSagittalDoubleSharp17CDown:before {content: "\e364";} +.icon-accSagittalDoubleFlat17CUp:before {content: "\e365";} +.icon-accSagittalDoubleSharp7v11kDown:before {content: "\e366";} +.icon-accSagittalDoubleFlat7v11kUp:before {content: "\e367";} +.icon-accSagittal23CommaUp:before {content: "\e370";} +.icon-accSagittal23CommaDown:before {content: "\e371";} +.icon-accSagittal5v19CommaUp:before {content: "\e372";} +.icon-accSagittal5v19CommaDown:before {content: "\e373";} +.icon-accSagittal5v23SmallDiesisUp:before {content: "\e374";} +.icon-accSagittal5v23SmallDiesisDown:before {content: "\e375";} +.icon-accSagittalSharp5v23SDown:before {content: "\e376";} +.icon-accSagittalFlat5v23SUp:before {content: "\e377";} +.icon-accSagittalSharp5v19CDown:before {content: "\e378";} +.icon-accSagittalFlat5v19CUp:before {content: "\e379";} +.icon-accSagittalSharp23CDown:before {content: "\e37a";} +.icon-accSagittalFlat23CUp:before {content: "\e37b";} +.icon-accSagittalSharp23CUp:before {content: "\e37c";} +.icon-accSagittalFlat23CDown:before {content: "\e37d";} +.icon-accSagittalSharp5v19CUp:before {content: "\e37e";} +.icon-accSagittalFlat5v19CDown:before {content: "\e37f";} +.icon-accSagittalSharp5v23SUp:before {content: "\e380";} +.icon-accSagittalFlat5v23SDown:before {content: "\e381";} +.icon-accSagittalDoubleSharp5v23SDown:before {content: "\e382";} +.icon-accSagittalDoubleFlat5v23SUp:before {content: "\e383";} +.icon-accSagittalDoubleSharp5v19CDown:before {content: "\e384";} +.icon-accSagittalDoubleFlat5v19CUp:before {content: "\e385";} +.icon-accSagittalDoubleSharp23CDown:before {content: "\e386";} +.icon-accSagittalDoubleFlat23CUp:before {content: "\e387";} +.icon-accSagittal19SchismaUp:before {content: "\e390";} +.icon-accSagittal19SchismaDown:before {content: "\e391";} +.icon-accSagittal17KleismaUp:before {content: "\e392";} +.icon-accSagittal17KleismaDown:before {content: "\e393";} +.icon-accSagittal143CommaUp:before {content: "\e394";} +.icon-accSagittal143CommaDown:before {content: "\e395";} +.icon-accSagittal11v49CommaUp:before {content: "\e396";} +.icon-accSagittal11v49CommaDown:before {content: "\e397";} +.icon-accSagittal19CommaUp:before {content: "\e398";} +.icon-accSagittal19CommaDown:before {content: "\e399";} +.icon-accSagittal7v19CommaUp:before {content: "\e39a";} +.icon-accSagittal7v19CommaDown:before {content: "\e39b";} +.icon-accSagittal49SmallDiesisUp:before {content: "\e39c";} +.icon-accSagittal49SmallDiesisDown:before {content: "\e39d";} +.icon-accSagittal23SmallDiesisUp:before {content: "\e39e";} +.icon-accSagittal23SmallDiesisDown:before {content: "\e39f";} +.icon-accSagittal5v13MediumDiesisUp:before {content: "\e3a0";} +.icon-accSagittal5v13MediumDiesisDown:before {content: "\e3a1";} +.icon-accSagittal11v19MediumDiesisUp:before {content: "\e3a2";} +.icon-accSagittal11v19MediumDiesisDown:before {content: "\e3a3";} +.icon-accSagittal49MediumDiesisUp:before {content: "\e3a4";} +.icon-accSagittal49MediumDiesisDown:before {content: "\e3a5";} +.icon-accSagittal5v49MediumDiesisUp:before {content: "\e3a6";} +.icon-accSagittal5v49MediumDiesisDown:before {content: "\e3a7";} +.icon-accSagittal49LargeDiesisUp:before {content: "\e3a8";} +.icon-accSagittal49LargeDiesisDown:before {content: "\e3a9";} +.icon-accSagittal11v19LargeDiesisUp:before {content: "\e3aa";} +.icon-accSagittal11v19LargeDiesisDown:before {content: "\e3ab";} +.icon-accSagittal5v13LargeDiesisUp:before {content: "\e3ac";} +.icon-accSagittal5v13LargeDiesisDown:before {content: "\e3ad";} +.icon-accSagittalSharp23SDown:before {content: "\e3b0";} +.icon-accSagittalFlat23SUp:before {content: "\e3b1";} +.icon-accSagittalSharp49SDown:before {content: "\e3b2";} +.icon-accSagittalFlat49SUp:before {content: "\e3b3";} +.icon-accSagittalSharp7v19CDown:before {content: "\e3b4";} +.icon-accSagittalFlat7v19CUp:before {content: "\e3b5";} +.icon-accSagittalSharp19CDown:before {content: "\e3b6";} +.icon-accSagittalFlat19CUp:before {content: "\e3b7";} +.icon-accSagittalSharp11v49CDown:before {content: "\e3b8";} +.icon-accSagittalFlat11v49CUp:before {content: "\e3b9";} +.icon-accSagittalSharp143CDown:before {content: "\e3ba";} +.icon-accSagittalFlat143CUp:before {content: "\e3bb";} +.icon-accSagittalSharp17kDown:before {content: "\e3bc";} +.icon-accSagittalFlat17kUp:before {content: "\e3bd";} +.icon-accSagittalSharp19sDown:before {content: "\e3be";} +.icon-accSagittalFlat19sUp:before {content: "\e3bf";} +.icon-accSagittalSharp19sUp:before {content: "\e3c0";} +.icon-accSagittalFlat19sDown:before {content: "\e3c1";} +.icon-accSagittalSharp17kUp:before {content: "\e3c2";} +.icon-accSagittalFlat17kDown:before {content: "\e3c3";} +.icon-accSagittalSharp143CUp:before {content: "\e3c4";} +.icon-accSagittalFlat143CDown:before {content: "\e3c5";} +.icon-accSagittalSharp11v49CUp:before {content: "\e3c6";} +.icon-accSagittalFlat11v49CDown:before {content: "\e3c7";} +.icon-accSagittalSharp19CUp:before {content: "\e3c8";} +.icon-accSagittalFlat19CDown:before {content: "\e3c9";} +.icon-accSagittalSharp7v19CUp:before {content: "\e3ca";} +.icon-accSagittalFlat7v19CDown:before {content: "\e3cb";} +.icon-accSagittalSharp49SUp:before {content: "\e3cc";} +.icon-accSagittalFlat49SDown:before {content: "\e3cd";} +.icon-accSagittalSharp23SUp:before {content: "\e3ce";} +.icon-accSagittalFlat23SDown:before {content: "\e3cf";} +.icon-accSagittalSharp5v13MUp:before {content: "\e3d0";} +.icon-accSagittalFlat5v13MDown:before {content: "\e3d1";} +.icon-accSagittalSharp11v19MUp:before {content: "\e3d2";} +.icon-accSagittalFlat11v19MDown:before {content: "\e3d3";} +.icon-accSagittalSharp49MUp:before {content: "\e3d4";} +.icon-accSagittalFlat49MDown:before {content: "\e3d5";} +.icon-accSagittalSharp5v49MUp:before {content: "\e3d6";} +.icon-accSagittalFlat5v49MDown:before {content: "\e3d7";} +.icon-accSagittalSharp49LUp:before {content: "\e3d8";} +.icon-accSagittalFlat49LDown:before {content: "\e3d9";} +.icon-accSagittalSharp11v19LUp:before {content: "\e3da";} +.icon-accSagittalFlat11v19LDown:before {content: "\e3db";} +.icon-accSagittalSharp5v13LUp:before {content: "\e3dc";} +.icon-accSagittalFlat5v13LDown:before {content: "\e3dd";} +.icon-accSagittalDoubleSharp23SDown:before {content: "\e3e0";} +.icon-accSagittalDoubleFlat23SUp:before {content: "\e3e1";} +.icon-accSagittalDoubleSharp49SDown:before {content: "\e3e2";} +.icon-accSagittalDoubleFlat49SUp:before {content: "\e3e3";} +.icon-accSagittalDoubleSharp7v19CDown:before {content: "\e3e4";} +.icon-accSagittalDoubleFlat7v19CUp:before {content: "\e3e5";} +.icon-accSagittalDoubleSharp19CDown:before {content: "\e3e6";} +.icon-accSagittalDoubleFlat19CUp:before {content: "\e3e7";} +.icon-accSagittalDoubleSharp11v49CDown:before {content: "\e3e8";} +.icon-accSagittalDoubleFlat11v49CUp:before {content: "\e3e9";} +.icon-accSagittalDoubleSharp143CDown:before {content: "\e3ea";} +.icon-accSagittalDoubleFlat143CUp:before {content: "\e3eb";} +.icon-accSagittalDoubleSharp17kDown:before {content: "\e3ec";} +.icon-accSagittalDoubleFlat17kUp:before {content: "\e3ed";} +.icon-accSagittalDoubleSharp19sDown:before {content: "\e3ee";} +.icon-accSagittalDoubleFlat19sUp:before {content: "\e3ef";} +.icon-accSagittalShaftUp:before {content: "\e3f0";} +.icon-accSagittalShaftDown:before {content: "\e3f1";} +.icon-accSagittalAcute:before {content: "\e3f2";} +.icon-accSagittalGrave:before {content: "\e3f3";} +.icon-accSagittal1MinaUp:before {content: "\e3f4";} +.icon-accSagittal1MinaDown:before {content: "\e3f5";} +.icon-accSagittal2MinasUp:before {content: "\e3f6";} +.icon-accSagittal2MinasDown:before {content: "\e3f7";} +.icon-accSagittal1TinaUp:before {content: "\e3f8";} +.icon-accSagittal1TinaDown:before {content: "\e3f9";} +.icon-accSagittal2TinasUp:before {content: "\e3fa";} +.icon-accSagittal2TinasDown:before {content: "\e3fb";} +.icon-accSagittal3TinasUp:before {content: "\e3fc";} +.icon-accSagittal3TinasDown:before {content: "\e3fd";} +.icon-accSagittal4TinasUp:before {content: "\e3fe";} +.icon-accSagittal4TinasDown:before {content: "\e3ff";} +.icon-accSagittal5TinasUp:before {content: "\e400";} +.icon-accSagittal5TinasDown:before {content: "\e401";} +.icon-accSagittal6TinasUp:before {content: "\e402";} +.icon-accSagittal6TinasDown:before {content: "\e403";} +.icon-accSagittal7TinasUp:before {content: "\e404";} +.icon-accSagittal7TinasDown:before {content: "\e405";} +.icon-accSagittal8TinasUp:before {content: "\e406";} +.icon-accSagittal8TinasDown:before {content: "\e407";} +.icon-accSagittal9TinasUp:before {content: "\e408";} +.icon-accSagittal9TinasDown:before {content: "\e409";} +.icon-accSagittalFractionalTinaUp:before {content: "\e40a";} +.icon-accSagittalFractionalTinaDown:before {content: "\e40b";} +.icon-accidentalNarrowReversedFlat:before {content: "\e284";} +.icon-accidentalNarrowReversedFlatAndFlat:before {content: "\e285";} +.icon-accidentalWilsonPlus:before {content: "\e47b";} +.icon-accidentalWilsonMinus:before {content: "\e47c";} \ No newline at end of file diff --git a/release/styles/dialogs.css b/release/styles/dialogs.css index ece0e6b3..0d7098ca 100644 --- a/release/styles/dialogs.css +++ b/release/styles/dialogs.css @@ -195,10 +195,12 @@ body.showAttributeDialog .attributeDialog { top: 0; display:none; } - +button.nav-link { + width: 100%; +} .attributeModal { position:absolute; - width:380px; + min-width:380px; background: #fff; border-style: groove; border-width: 2px; @@ -223,72 +225,29 @@ body.showAttributeDialog .attributeDialog { .attributeModal .buttonContainer .button-right { margin-left:5px; } - - -.attributeModal .buttonContainer button { - border-radius:3px; - padding: 2px 4px; - width:100px; - height:25px; -} - -.attributeModal .buttonContainer .ok-button { - border:#9cee9d 1px ridge; -} - -.attributeModal .buttonContainer .ok-button:hover { - background:#334488; - color: #fff; - transition-duration: 0.5s; - transition-timing-function:ease; -} - -.attributeModal .buttonContainer .cancel-button:hover { - background:#884433; - color: #fff; - transition-duration: 0.5s; - transition-timing-function:ease; -} - -.attributeModal .buttonContainer .remove-button:hover { - background:#664433; - color: #ded; - transition-duration: 0.5s; - transition-timing-function:ease; -} - -.attributeModal .buttonContainer .remove-button:hover .icon-cancel-circle { - background:#664433; - color: #ded; -} - -.attributeModal .buttonContainer .remove-button .icon-cancel-circle { - float:left; - color:#933; -} - -.attributeModal .buttonContainer .ok-button:hover { - background:#334488; - color: #fff; - transition-duration: 0.5s; - transition-timing-function:ease; -} - - -.attributeModal .buttonContainer .cancel-button { - border:#dc8899 1px ridge; -} - -.attributeModal .buttonContainer .remove-button { - border:#dc8899 1px ridge; -} - - .attributeModal h2 { text-align:center; font-size:1.2em; + user-select: none; } +.smoControlContainer .button-array-buttons button.repetext { + font-size: 0.8em; + font-style: italic; + flex: 4 1 auto; + max-width: 70px; +} +.smoControl button.icon-bravura { + position: inherit; + top: inherit; + left: inherit; + pointer-events: inherit; +} +.smoControlContainer .button-array-buttons button.repetext .icon-bravura .button-text { + font-size: 12px; + min-width: 35px; + user-select: none; +} .attributeModal.tempoTextMode #dialog-tempo-duration, .attributeModal.tempoTextMode #dialog-tempo-bpm , .attributeModal.tempoDurationMode #dialog-tempo-tempoText { @@ -329,6 +288,14 @@ body.showAttributeDialog .attributeDialog { margin-left:15px; } +.smoControlContainer .smoControl.hide-input { + min-width: 600px; + user-select: none; +} +.smoControlContainer .text-input.hide-input input { + display: none; +} + .smoControl.toggleControl { display:flex; align-items:center; @@ -402,8 +369,89 @@ body.showAttributeDialog .attributeDialog { flex: 1 1 100%; flex-flow: row wrap; justify-content: space-around; + margin: 5px 0; border: 2px #ddd outset; } +.attributeModal .smoControl.buttonArray { + flex-flow: column nowrap; + border: 2px #ddd outset; +} +.pad-span { + padding: 5px; + user-select: none; +} +.attributeModal .smoControl.buttonArray .button-array-row{ + display: flex; + flex-flow: row nowrap; + justify-content:flex-start; +} +.button-array-buttons { + display: flex; + align-items: center; + flex: 1 2 auto; +} +.button-row-container { + display:flex; + flex-flow: column; + flex: 1 1 auto; +} +.button-array-label { + display: flex; + flex: 0 0 100px; + min-width: 100px; + justify-content: flex-end; +} +.nav-item { + border-bottom: 1px solid #eee; +} +.attributeModal .smoControl.button-hotkey { + display: flex; + flex-flow: row; +} +.attributeModal .smoControl.button-hotkey button { + width: 70px; + text-align: left; +} +.attributeModal .smoControl.button-hotkey span.button-text { + float: right; + user-select: none; +} +.attributeModal .smoControl.buttonArray .icon-bravura { + left:calc(50% - 12px); +} +.attributeModal .smoControl.buttonArray .icon-bravura.icon-mid { + top: 0; + left:8px; +} +.attributeModal .smoControl.buttonArray .icon-bravura.icon-transparent { + color: #333333aa; +} +.attributeModal .smoControl.buttonArray .icon-bravura.icon-lg { + font-size: 24px; + top:inherit; +} +.attributeModal .smoControl.buttonArray .icon-bravura.icon-top { + left:8px; +} + +.attributeModal .smoControl.buttonArray .icon-bravura.icon-brassFallRoughMedium, +.attributeModal .smoControl.buttonArray .icon-bravura.icon-brassLiftMedium { + font-size:20px; + top:50%; +} +.smoControl.buttonArray button:hover { + background:#334488; + color: #fff; + transition-duration: 0.5s; + transition-timing-function:ease; +} +button.button-array.pushed { + background-color: #dee; + border: 2px #222 inset; +} +button.button-array.initial { + background-color: #999; +} .attributeModal .smoControl.multiControl.textCheckContainer .smoControl { margin: 5px; } @@ -429,12 +477,20 @@ body.showAttributeDialog .attributeDialog { } .smoControl button, .smoControl input,.smoControl select { - margin-right:2px; - height: 30px; - border-radius: 5%; border: 1px solid #52ba73; } - +.smoControl button.button-array { + width: 35px; + height: 35px; + position:relative; + user-select: none; +} +.smoControl button.button-array.pushed { + font-weight: bold; +} +.smoControl button.button-array .icon-bravura { + font-size: 30px; +} .smoControl.cbTextInPlace,.smoControl.cbDragTextDialog ,.smoControl.cbResizeTextBox { position:relative; min-width:110px; diff --git a/release/styles/fonts.css b/release/styles/fonts.css index 267cffbb..5cc5e0d3 100644 --- a/release/styles/fonts.css +++ b/release/styles/fonts.css @@ -24,6 +24,12 @@ -moz-osx-font-smoothing: grayscale; } +.icon-metronome4:before { + content: "\e99f"; +} +.icon-enter2:before { + content: "\e99a"; +} .icon-radio-checked2:before { content: "\ea55"; } diff --git a/release/styles/fonts/smoosic.json b/release/styles/fonts/smoosic.json index dee27667..42847f79 100644 --- a/release/styles/fonts/smoosic.json +++ b/release/styles/fonts/smoosic.json @@ -1 +1 @@ -{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 640c-70.692 0-128-57.306-128-128 0-70.692 57.308-128 128-128 70.694 0 128 57.308 128 128 0 70.694-57.306 128-128 128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["radio-checked","radio-button"],"defaultCode":59989,"grid":16},"attrs":[],"properties":{"ligatures":"radio-checked2, radio-button2","name":"radio-checked2","id":341,"order":1101,"prevSize":32,"code":59989},"setIdx":0,"setId":2,"iconIdx":341},{"icon":{"paths":["M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["radio-unchecked","radio-button","circle"],"defaultCode":59990,"grid":16},"attrs":[],"properties":{"ligatures":"radio-unchecked, radio-button3","name":"radio-unchecked","id":342,"order":1100,"prevSize":32,"code":59990},"setIdx":0,"setId":2,"iconIdx":342},{"icon":{"paths":["M896 128v832h-672c-53.026 0-96-42.98-96-96s42.974-96 96-96h608v-768h-640c-70.398 0-128 57.6-128 128v768c0 70.4 57.602 128 128 128h768v-896h-64z","M224.056 832v0c-0.018 0.002-0.038 0-0.056 0-17.672 0-32 14.326-32 32s14.328 32 32 32c0.018 0 0.038-0.002 0.056-0.002v0.002h607.89v-64h-607.89z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["book"]},"attrs":[{},{}],"properties":{"order":1097,"id":191,"name":"book","prevSize":32,"code":59801},"setIdx":1,"setId":1,"iconIdx":0},{"icon":{"paths":["M108.164 929.093h155.45c14.231 0 25.179-13.137 32.842-21.894l629.463-788.198c4.379-6.568 7.663-10.947 7.663-16.421 0-4.379-3.284-7.663-9.852-7.663h-166.397c-9.852 0-17.516 9.852-28.463 24.084l-629.463 788.198c-3.284 3.284-4.379 7.663-4.379 10.947 0 6.568 4.379 10.947 13.137 10.947z"],"attrs":[{}],"width":1028,"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["slash"]},"attrs":[{}],"properties":{"order":1096,"id":190,"name":"slash","prevSize":32,"code":59800},"setIdx":1,"setId":1,"iconIdx":1},{"icon":{"paths":["M664.2 572.62l-311.197-521.074-299.617 521.074z","M56.959 570.39c-1.722 134.014-3.541 268.035-5.412 402.063l75.003-0.574c1.871-134.029 3.69-268.049 5.412-402.063z"],"attrs":[{},{}],"width":716,"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["notehead-triangleup"]},"attrs":[{},{}],"properties":{"order":1095,"id":188,"name":"notehead-triangleup","prevSize":32,"code":59792},"setIdx":1,"setId":1,"iconIdx":2},{"icon":{"paths":["M66.726 374.982l284.674 286.358c5.053 5.053 6.738 5.053 11.791 5.053 1.684 0 6.738 0 11.791-5.053l286.358-288.043c3.369-3.369 5.053-8.422 5.053-11.791 0-5.053-1.684-10.107-5.053-13.476l-282.989-282.989c-3.369-3.369-8.422-5.053-15.16-5.053-5.053 0-11.791 1.684-15.16 5.053l-282.989 282.989c-5.053 5.053-5.053 8.422-5.053 13.476 0 3.369 1.684 8.422 6.738 13.476z","M70.438 364.048c-1.413 199.977-2.905 399.965-4.441 599.965l61.536-0.857c1.535-200 3.028-399.987 4.441-599.965z"],"attrs":[{},{}],"width":726,"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["notehead-diamondblack"]},"attrs":[{},{}],"properties":{"order":1092,"id":185,"name":"notehead-diamondblack","prevSize":32,"code":59794},"setIdx":1,"setId":1,"iconIdx":3},{"icon":{"paths":["M109.299 648.531c0 19.809 10.35 36.317 28.094 36.317 5.914 0 10.35-1.651 14.786-6.603l263.195-250.919 269.109 250.919c4.436 4.952 10.35 6.603 14.786 6.603 16.265 0 28.094-19.809 28.094-33.016 0-11.555-4.436-21.46-11.829-28.063l-252.844-236.062 252.844-237.713c7.393-4.952 11.829-16.508 11.829-26.413 0-18.159-14.786-33.016-28.094-33.016-4.436 0-10.35 1.651-14.786 4.952l-269.109 249.268-263.195-249.268c-4.436-3.301-10.35-4.952-17.743-4.952-14.786 0-25.137 16.508-25.137 31.365 0 8.254 4.436 21.46 10.35 28.063l254.323 237.713-254.323 236.062c-8.872 6.603-10.35 16.508-10.35 24.762z","M89.088 86.439c-1.23 284.097-2.529 568.21-3.866 852.339l53.575-1.217c1.337-284.13 2.636-568.241 3.866-852.339z"],"attrs":[{},{}],"width":813,"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["notehead-xblack"]},"attrs":[{},{}],"properties":{"order":1091,"id":184,"name":"notehead-xblack1","prevSize":32,"code":59797},"setIdx":1,"setId":1,"iconIdx":4},{"icon":{"paths":["M62.886 376.615c0 172.925 141.484 314.41 312.663 314.41 172.925 0 314.41-141.484 314.41-314.41s-141.484-314.41-314.41-314.41c-171.179 0-312.663 141.484-312.663 314.41zM183.41 229.891l143.231 144.978-144.978 148.471c-33.188-41.921-48.908-94.323-48.908-146.725 0-55.895 17.467-104.803 50.655-146.725zM377.296 423.777l143.231 146.725c-40.175 29.694-90.83 47.161-144.978 47.161s-103.057-17.467-146.725-47.161zM427.951 374.868l143.231-144.978c27.948 41.921 45.415 94.323 45.415 146.725s-15.72 103.057-43.668 143.231zM375.549 135.568c54.148 0 103.057 17.467 143.231 45.415l-141.484 143.231-143.231-143.231c40.175-27.948 87.336-45.415 141.484-45.415z","M66.757 339.647c-1.465 207.369-3.013 414.749-4.605 622.141l63.81-0.888c1.592-207.392 3.14-414.772 4.605-622.141z"],"attrs":[{},{}],"width":752,"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["notehead-circlex"]},"attrs":[{},{}],"properties":{"order":1088,"id":181,"name":"notehead-circlex","prevSize":32,"code":59799},"setIdx":1,"setId":1,"iconIdx":5},{"icon":{"paths":["M522.421 150.455v723.244c0 26.26 10.942 31.731 25.166 31.731h144.43c16.412 0 27.354-5.471 27.354-31.731v-723.244c0-27.354-10.942-31.731-27.354-31.731h-144.43c-14.224 0-25.166 4.379-25.166 31.731zM143.84 905.43h145.524c15.318 0 26.26-5.471 26.26-31.731v-723.244c0-27.354-10.942-31.731-26.26-31.731h-145.524c-14.224 0-25.166 4.377-25.166 31.731v723.244c0 26.26 10.942 31.731 25.166 31.731z"],"attrs":[{}],"width":838,"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["percussion"]},"attrs":[{}],"properties":{"order":1086,"id":179,"name":"percussion","prevSize":32,"code":59798},"setIdx":1,"setId":1,"iconIdx":6},{"icon":{"paths":["M112 866.931c0 26.957 15.725 49.421 42.682 49.421 8.986 0 15.725-2.246 22.464-8.986l399.859-341.453 408.845 341.453c6.739 6.739 15.725 8.986 22.464 8.986 24.71 0 42.682-26.957 42.682-44.928 0-15.725-6.739-29.203-17.971-38.189l-384.134-321.235 384.134-323.482c11.232-6.739 17.971-22.464 17.971-35.942 0-24.71-22.464-44.928-42.682-44.928-6.739 0-15.725 2.246-22.464 6.739l-408.845 339.206-399.859-339.206c-6.739-4.493-15.725-6.739-26.957-6.739-22.464 0-38.189 22.464-38.189 42.682 0 11.232 6.739 29.203 15.725 38.189l386.381 323.482-386.381 321.235c-13.478 8.986-15.725 22.464-15.725 33.696z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["notehead-xblack"]},"attrs":[{}],"properties":{"order":1082,"id":175,"name":"notehead-xblack","prevSize":32,"code":59796},"setIdx":1,"setId":1,"iconIdx":7},{"icon":{"paths":["M336.247 643.977c3.903 0 9.758 0 10.734 0 0 0 0.976 0 0.976 0s5.855 0 10.734 0c87.82 3.992 139.536 51.096 139.536 110.175 0 28.741-11.709 61.474-40.983 92.611-55.619 61.474-146.367 95.006-225.405 95.006-61.474 0-114.166-19.959-139.536-60.676-7.806-15.967-11.709-31.136-11.709-47.902 0-87.022 119.045-183.625 255.654-189.213z","M399.213 173.203h96.951v609.503h-96.951v-609.503z","M559.755 185.916c5.139 0 12.848-3.875 24.84-11.626 16.275-11.626 24.84-22.478 47.967-22.478 28.266 0 59.103 30.228 77.947 48.055 0.858 0.775 3.426 2.325 5.139 3.875l3.426 3.875c22.271 22.478 60.816 61.232 98.504 61.232 75.377 0 111.353-79.059 112.209-90.685 0-3.1 1.712-5.426 1.712-8.526 0-5.426-1.712-10.076-6.852-10.076-3.426 0-8.566 3.1-14.561 8.526-22.271 17.827-39.402 27.903-62.529 27.903-23.984 0-41.971-20.927-63.385-45.73l-3.426-3.875c-22.271-24.803-72.807-67.433-103.644-67.433-70.238 0-114.779 79.059-118.205 86.035-2.57 6.976-4.283 12.401-4.283 15.502 0 4.651 2.57 5.426 5.139 5.426z","M997.107 643.977c3.903 0 9.758 0 10.734 0 0 0 0.976 0 0.976 0s5.855 0 10.734 0c87.82 3.992 139.536 51.096 139.536 110.175 0 28.741-11.709 61.474-40.983 92.611-55.619 61.474-146.367 95.006-225.405 95.006-61.474 0-114.166-19.959-139.536-60.676-7.806-15.967-11.709-31.136-11.709-47.902 0-87.022 119.045-183.625 255.654-189.213z","M1060.073 173.203h96.951v609.503h-96.951v-609.503z"],"width":1240,"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["smear"],"grid":16},"attrs":[{},{},{},{},{}],"properties":{"order":910,"id":0,"name":"smear","prevSize":32,"code":59790},"setIdx":1,"setId":1,"iconIdx":8},{"icon":{"paths":["M302.553 695.35c3.512 0 8.78 0 9.658 0 0 0 0.879 0 0.879 0s5.268 0 9.658 0c79.020 3.592 125.554 45.976 125.554 99.135 0 25.861-10.536 55.314-36.876 83.331-50.046 55.314-131.7 85.486-202.818 85.486-55.314 0-102.726-17.959-125.554-54.596-7.024-14.367-10.536-28.016-10.536-43.102 0-78.302 107.116-165.225 230.036-170.253z","M359.21 271.749h87.236v548.428h-87.236v-548.428z","M518.898 367.488c10.019 0 17.727-6.974 17.727-16.041v-218.99l356.076 232.241c3.854 2.092 6.937 2.79 11.561 2.79 5.395 0 10.019-2.092 13.873-6.277 2.313-2.79 3.854-5.579 3.854-9.066 0-4.882-3.854-9.764-7.707-13.948l-385.364-251.072c-2.313-2.092-6.937-2.79-10.019-2.79-8.478 0-17.727 7.672-17.727 16.041v251.072c0 9.066 7.707 16.041 17.727 16.041z","M940.702 695.002c3.512 0 8.78 0 9.658 0 0 0 0.879 0 0.879 0s5.268 0 9.658 0c79.020 3.592 125.554 45.976 125.554 99.135 0 25.861-10.536 55.314-36.876 83.331-50.046 55.314-131.7 85.486-202.818 85.486-55.314 0-102.726-17.959-125.554-54.596-7.024-14.367-10.536-28.016-10.536-43.102 0-78.302 107.116-165.225 230.036-170.253z","M997.359 271.402h87.236v548.428h-87.236v-548.428z"],"width":1159,"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["flip"],"grid":16},"attrs":[{},{},{},{},{}],"properties":{"order":911,"id":1,"name":"flip","prevSize":32,"code":59791},"setIdx":1,"setId":1,"iconIdx":9},{"icon":{"paths":["M357.527 86.38c4.15 0 10.375 0 11.413 0 0 0 1.038 0 1.038 0s6.225 0 11.413 0c93.378 4.244 148.367 54.329 148.367 117.147 0 30.56-12.45 65.365-43.576 98.472-59.139 65.365-155.63 101.018-239.67 101.018-65.365 0-121.391-21.222-148.367-64.516-8.3-16.978-12.45-33.107-12.45-50.934 0-92.529 126.579-195.246 271.834-201.188z","M92.31 290.168h103.087v648.076h-103.087v-648.076z","M594.804 129.37c4.265 0 9.748 6.48 9.748 11.016 1.828 11.664 4.265 20.736 13.403 29.809 18.887 20.736 50.567-2.592 85.903 33.697 10.966 12.312 16.45 29.161 16.45 46.009 0 5.184-0.61 10.368-1.828 15.552 1.828 9.72 4.265 16.848 12.185 25.273 19.496 20.736 51.177-2.592 85.903 33.697 11.576 12.312 17.059 29.161 17.059 46.009 0 5.184-1.218 9.72-1.828 15.552 1.828 9.072 4.265 16.848 12.185 25.273 19.496 20.736 51.177-2.592 85.903 33.697 11.576 11.664 17.059 28.513 17.059 45.361 0 5.832-1.218 10.368-1.828 16.2 1.828 9.072 4.265 16.848 12.185 25.273 19.496 20.088 50.567-1.944 85.903 33.049 11.576 12.312 16.45 29.161 16.45 46.009 0 5.832-0.61 10.368-1.828 16.2 1.828 9.072 4.874 16.2 12.794 24.624 18.887 20.736 50.567-1.296 85.903 33.697 10.966 12.312 16.45 29.161 16.45 46.009 0 5.184-0.61 10.368-1.828 15.552 1.828 9.72 4.265 16.848 12.185 25.273 19.496 20.736 51.177-1.944 85.903 34.345 12.794 13.608 17.059 29.161 17.059 46.009 0 29.809-14.013 58.969-18.277 67.393-1.828 1.944-1.828 2.592-1.828 3.24-1.218 1.296-3.046 1.296-3.655 1.296-4.265 0-7.311-9.72-7.311-12.96v-3.888c0-9.072 0-18.792-4.874-23.976-1.218-1.944-3.046-3.888-5.483-5.184-25.588-18.144-63.971-10.368-85.903-33.697-14.013-14.904-18.277-31.105-18.277-46.657 0-5.184 0.61-11.016 1.828-16.2 0-7.776-1.218-14.256-5.483-20.088l-5.483-3.24c-24.979-18.792-63.971-10.368-85.903-33.697-14.013-14.904-18.277-31.753-18.277-46.657 0-5.832 0.61-11.664 1.828-16.848 0-7.776-1.218-14.256-5.483-19.44l-4.874-5.184c-25.588-17.496-63.971-9.072-85.903-32.401-14.622-14.904-18.887-31.753-18.887-46.657 0-5.832 1.218-11.016 1.828-16.848 0-7.128-0.61-14.904-4.874-19.44l-5.483-4.536c-25.588-18.144-63.971-9.72-85.903-33.049-14.013-14.904-18.277-31.753-18.277-46.657 0-5.184 0.61-11.016 1.218-16.848 0-7.128-0.61-14.904-4.874-19.44l-5.483-4.536c-25.588-18.144-63.971-9.72-85.903-33.049-14.013-14.904-18.277-31.753-18.277-46.657 0-5.184 0.61-11.016 1.828-16.2 0-7.776-1.218-15.552-5.483-20.088-1.828-0.648-3.655-2.592-5.483-4.536-24.979-17.496-63.971-9.072-85.903-32.401-14.013-14.904-18.277-31.105-18.277-46.657 0-10.368 8.529-67.393 20.105-67.393z"],"width":1372,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["drop-long"],"grid":16},"attrs":[{},{},{}],"properties":{"order":912,"id":2,"name":"drop-long","prevSize":32,"code":59782},"setIdx":1,"setId":1,"iconIdx":10},{"icon":{"paths":["M351.565 628.718c4.081 0 10.202 0 11.223 0 0 0 1.021 0 1.021 0s6.121 0 11.223 0c91.821 4.174 145.893 53.423 145.893 115.194 0 30.051-12.243 64.275-42.85 96.829-58.153 64.275-153.034 99.334-235.673 99.334-64.274 0-119.367-20.868-145.893-63.44-8.162-16.695-12.243-32.555-12.243-50.084 0-90.986 124.468-191.989 267.3-197.833z","M413.461 85.34h101.368v637.268h-101.368v-637.268z","M600.623 909.774c4.194 0 9.585-6.372 9.585-10.832 1.798-11.47 4.194-20.391 13.18-29.311 18.572-20.391 49.724 2.549 84.471-33.135 10.784-12.107 16.175-28.674 16.175-45.242 0-5.098-0.6-10.195-1.798-15.293 1.798-9.558 4.194-16.567 11.982-24.851 19.171-20.391 50.323 2.549 84.471-33.135 11.383-12.107 16.774-28.674 16.774-45.242 0-5.098-1.198-9.558-1.798-15.293 1.798-8.921 4.194-16.567 11.982-24.851 19.171-20.391 50.323 2.549 84.471-33.135 11.383-11.47 16.774-28.037 16.774-44.604 0-5.735-1.198-10.195-1.798-15.93 1.798-8.921 4.194-16.567 11.982-24.851 19.171-19.753 49.724 1.912 84.471-32.497 11.383-12.107 16.175-28.674 16.175-45.242 0-5.735-0.6-10.195-1.798-15.93 1.798-8.921 4.793-15.93 12.581-24.214 18.572-20.391 49.724 1.274 84.471-33.135 10.784-12.107 16.175-28.674 16.175-45.242 0-5.098-0.6-10.195-1.798-15.293 1.798-9.558 4.194-16.567 11.982-24.851 19.171-20.391 50.323 1.912 84.471-33.772 12.581-13.381 16.774-28.674 16.774-45.242 0-29.311-13.779-57.986-17.973-66.269-1.798-1.912-1.798-2.549-1.798-3.186-1.198-1.274-2.995-1.274-3.595-1.274-4.194 0-7.189 9.558-7.189 12.744v3.823c0 8.921 0 18.479-4.793 23.577-1.198 1.912-2.995 3.823-5.392 5.098-25.162 17.842-62.904 10.195-84.471 33.135-13.779 14.656-17.973 30.586-17.973 45.879 0 5.098 0.6 10.832 1.798 15.93 0 7.646-1.198 14.019-5.392 19.753l-5.392 3.186c-24.562 18.479-62.904 10.195-84.471 33.135-13.779 14.656-17.973 31.223-17.973 45.879 0 5.735 0.6 11.47 1.798 16.567 0 7.646-1.198 14.019-5.392 19.116l-4.793 5.098c-25.162 17.205-62.904 8.921-84.471 31.86-14.378 14.656-18.572 31.223-18.572 45.879 0 5.735 1.198 10.832 1.798 16.567 0 7.009-0.6 14.656-4.793 19.116l-5.392 4.46c-25.162 17.842-62.904 9.558-84.471 32.497-13.779 14.656-17.973 31.223-17.973 45.879 0 5.098 0.6 10.832 1.198 16.567 0 7.009-0.6 14.656-4.793 19.116l-5.392 4.46c-25.162 17.842-62.904 9.558-84.471 32.497-13.779 14.656-17.973 31.223-17.973 45.879 0 5.098 0.6 10.832 1.798 15.93 0 7.646-1.198 15.293-5.392 19.753-1.798 0.637-3.595 2.549-5.392 4.46-24.562 17.205-62.904 8.921-84.471 31.86-13.779 14.656-17.973 30.586-17.973 45.879 0 10.195 8.387 66.269 19.77 66.269z"],"width":1365,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["doit-long"],"grid":16},"attrs":[{},{},{}],"properties":{"order":913,"id":3,"name":"doit-long","prevSize":32,"code":59784},"setIdx":1,"setId":1,"iconIdx":11},{"icon":{"paths":["M311.137 514.079c3.612 0 9.029 0 9.932 0 0 0 0.904 0 0.904 0s5.417 0 9.932 0c81.262 3.694 129.116 47.28 129.116 101.947 0 26.595-10.835 56.884-37.922 85.695-51.466 56.884-135.437 87.911-208.573 87.911-56.883 0-105.641-18.469-129.116-56.145-7.223-14.775-10.835-28.811-10.835-44.325 0-80.524 110.155-169.912 236.563-175.083z","M369.401 78.461h89.711v563.988h-89.711v-563.988z","M529.624 593.338v-16.496c0-14.344 0.794-22.951 19.022-22.951h7.133c175.956 0 515.186 174.999 531.83 377.251 0 18.647-8.719 21.516-18.23 21.516-10.304 0-18.23-7.172-21.4-19.365-82.43-253.174-446.23-283.297-492.201-298.358-16.644-6.455-26.156-9.324-26.156-41.598z"],"width":1162,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["drop"],"grid":16},"attrs":[{},{},{}],"properties":{"order":914,"id":4,"name":"drop","prevSize":32,"code":59786},"setIdx":1,"setId":1,"iconIdx":12},{"icon":{"paths":["M370.052 600.946c4.296 0 10.739 0 11.813 0 0 0 1.075 0 1.075 0s6.443 0 11.813 0c96.649 4.393 153.565 56.232 153.565 121.251 0 31.631-12.887 67.655-45.103 101.921-61.211 67.655-161.082 104.557-248.066 104.557-67.654 0-125.644-21.966-153.565-66.776-8.591-17.573-12.887-34.267-12.887-52.718 0-95.771 131.013-202.085 281.357-208.236z","M439.348 82.843h106.698v670.78h-106.698v-670.78z","M609.943 776.149v19.619c0 17.060 0.944 27.296 22.624 27.296h8.484c209.273 0 612.738-208.135 632.534-448.685 0-22.178-10.369-25.59-21.681-25.59-12.255 0-21.681 8.53-25.452 23.031-98.038 301.113-530.725 336.94-585.4 354.853-19.796 7.677-31.108 11.089-31.108 49.475z"],"width":1362,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["doit"],"grid":16},"attrs":[{},{},{}],"properties":{"order":915,"id":5,"name":"doit","prevSize":32,"code":59788},"setIdx":1,"setId":1,"iconIdx":13},{"icon":{"paths":["M774.981 452.661c3.372 0 8.431 0 9.274 0 0 0 0.844 0 0.844 0s5.059 0 9.274 0c75.878 3.449 120.562 44.147 120.562 95.193 0 24.833-10.117 53.115-35.41 80.017-48.056 53.115-126.463 82.087-194.754 82.087-53.115 0-98.641-17.245-120.562-52.425-6.745-13.796-10.117-26.902-10.117-41.388 0-75.189 102.857-158.655 220.889-163.483z","M829.385 45.905h83.768v526.621h-83.768v-526.621z","M50.167 972.328c175.292-38.842 314.705-100.453 402.864-204.925 38.954-44.869 57.406-94.426 57.406-145.322 0-8.706 0-16.742-1.027-25.448-2.049-10.045 0-27.457-15.376-27.457-23.577 0-21.527 17.412-25.627 28.797-5.125 13.394-6.151 28.797-12.301 42.19-51.255 118.535-191.693 181.486-359.81 221.667-32.803 8.036-45.104 17.412-46.129 36.163-1.027 22.769 0 46.209 0 74.335z"],"width":965,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["scoop"],"grid":16},"attrs":[{},{},{}],"properties":{"order":916,"id":6,"name":"scoop","prevSize":32,"code":59789},"setIdx":1,"setId":1,"iconIdx":14},{"icon":{"paths":["M501.181 91.308h55.686v589.698h-55.686v-589.698z","M102.962 677.4l22.827-13.18 434.531 250.882-22.827 13.18-434.531-250.882z","M558.263 677.949l-22.827-13.18-434.531 250.882 22.827 13.18 434.531-250.882z"],"width":661,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["notex"],"grid":16},"attrs":[{},{},{}],"properties":{"order":917,"id":7,"name":"notex","prevSize":32,"code":59783},"setIdx":1,"setId":1,"iconIdx":15},{"icon":{"paths":["M978.757 389.48l-228.067 152.090v-91.254h-243.271v-121.672h243.271v-91.254z","M1051.281 611.859c3.717 0 9.292 0 10.232 0 0 0 1.021 0 1.021 0s5.596 0 10.232 0c83.674 4.559 132.952 58.334 132.952 125.783 0 32.813-11.151 70.183-39.050 105.73-52.996 70.183-139.462 108.465-214.77 108.465-58.575 0-108.782-22.787-132.954-69.272-7.454-18.229-11.151-35.547-11.151-54.688 0-99.35 113.428-209.638 243.594-216.018z","M1118.874 70.72h84.124v685.637h-84.124v-685.637z","M313.523 611.859c3.717 0 9.292 0 10.232 0 0 0 1.021 0 1.021 0s5.596 0 10.232 0c83.674 4.559 132.952 58.334 132.952 125.783 0 32.813-11.151 70.183-39.050 105.73-52.996 70.183-139.462 108.465-214.77 108.465-58.575 0-108.782-22.787-132.954-69.272-7.454-18.229-11.151-35.547-11.151-54.688 0-99.35 113.428-209.638 243.594-216.018z","M381.117 70.72h84.124v685.637h-84.124v-685.637z","M1309.63 679.501c-30.129 0-57.118 24.402-57.118 55.944s26.989 55.944 57.118 55.944c30.129 0 57.118-24.402 57.118-55.944s-26.989-55.944-57.118-55.944zM1309.63 721.459c5.658 0 12.811 5.617 12.811 13.986s-7.153 13.986-12.811 13.986c-5.658 0-12.811-5.617-12.811-13.986s7.153-13.986 12.811-13.986z","M1285.145 690.181c-2.11 28.655-4.272 57.33-6.486 86.013l51.889 0.274c2.214-28.687 4.376-57.354 6.486-86.013z"],"width":1418,"attrs":[{},{},{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["duration_grow_dot"],"grid":16},"attrs":[{},{},{},{},{},{},{}],"properties":{"order":918,"id":8,"name":"duration_grow_dot","prevSize":32,"code":59695},"setIdx":1,"setId":1,"iconIdx":16},{"icon":{"paths":["M1039.945 389.48l-228.067 152.090v-91.254h-243.271v-121.672h243.271v-91.254z","M1102.675 610.717c3.717 0 9.292 0 10.232 0 0 0 1.021 0 1.021 0s5.596 0 10.232 0c83.674 4.559 132.952 58.334 132.952 125.783 0 32.813-11.151 70.183-39.050 105.73-52.996 70.183-139.462 108.465-214.77 108.465-58.575 0-108.782-22.787-132.954-69.272-7.454-18.229-11.151-35.547-11.151-54.688 0-99.35 113.428-209.638 243.594-216.018z","M1170.268 69.578h84.124v685.637h-84.124v-685.637z","M313.523 611.859c3.717 0 9.292 0 10.232 0 0 0 1.021 0 1.021 0s5.596 0 10.232 0c83.674 4.559 132.952 58.334 132.952 125.783 0 32.813-11.151 70.183-39.050 105.73-52.996 70.183-139.462 108.465-214.77 108.465-58.575 0-108.782-22.787-132.954-69.272-7.454-18.229-11.151-35.547-11.151-54.688 0-99.35 113.428-209.638 243.594-216.018z","M381.117 70.72h84.124v685.637h-84.124v-685.637z","M568.561 701.947c-30.129 0-57.118 24.402-57.118 55.944s26.989 55.944 57.118 55.944c30.129 0 57.118-24.402 57.118-55.944s-26.989-55.944-57.118-55.944zM568.561 743.905c5.658 0 12.811 5.617 12.811 13.986s-7.153 13.986-12.811 13.986c-5.658 0-12.811-5.617-12.811-13.986s7.153-13.986 12.811-13.986z","M544.076 712.627c-2.11 28.655-4.272 57.33-6.486 86.013l51.889 0.274c2.214-28.687 4.376-57.354 6.486-86.013z"],"width":1418,"attrs":[{},{},{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["duration_less_dot"],"grid":16},"attrs":[{},{},{},{},{},{},{}],"properties":{"order":919,"id":9,"name":"duration_less_dot","prevSize":32,"code":59696},"setIdx":1,"setId":1,"iconIdx":17},{"icon":{"paths":["M1023.057 390.283l-228.611 152.452v-91.471h-243.852v-121.962h243.852v-91.472z","M1069.395 613.193c3.726 0 9.314 0 10.256 0 0 0 1.024 0 1.024 0s5.609 0 10.256 0c83.874 4.57 133.269 58.473 133.269 126.083 0 32.891-11.177 70.351-39.143 105.983-53.122 70.351-139.795 108.724-215.282 108.724-58.715 0-109.041-22.842-133.271-69.437-7.472-18.273-11.177-35.632-11.177-54.819 0-99.587 113.698-210.138 244.175-216.534z","M1137.149 70.762h84.325v687.273h-84.325v-687.273z","M336.783 611.475c-183.404 0-266.687 172.408-266.687 209.609 0 58.572 68.028 132.564 133.032 132.564 165.605 0 275.549-165.557 275.549-224.129 0-60.947-69.5-118.044-131.409-118.044zM404.931 728.852c0 55.406-161.736 145.639-213.584 145.639-21.668 0-33.276-10.29-41.788-23.746-3.094-7.124-6.191-14.247-6.191-22.162 0-49.074 157.093-148.805 210.489-148.805 23.216 0 37.145 12.664 44.884 26.12 3.094 6.332 6.191 15.039 6.191 22.954z","M409.492 71.241h66.953v659.364h-66.953v-659.364z"],"width":1294,"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["duration_less"],"grid":16},"attrs":[{},{},{},{},{}],"properties":{"order":920,"id":10,"name":"duration_less","prevSize":32,"code":59699},"setIdx":1,"setId":1,"iconIdx":18},{"icon":{"paths":["M322.388 616.241c3.698 0 9.246 0 10.18 0 0 0 1.016 0 1.016 0s5.568 0 10.18 0c83.255 4.536 132.285 58.041 132.285 125.152 0 32.649-11.095 69.831-38.854 105.2-52.73 69.831-138.763 107.921-213.693 107.921-58.282 0-108.236-22.673-132.287-68.924-7.417-18.138-11.095-35.369-11.095-54.414 0-98.852 112.859-208.587 242.372-214.935z","M1006.207 386.234l-226.923 151.327v-90.796h-242.051v-121.062h242.051v-90.796z","M389.642 77.816h83.702v682.199h-83.702v-682.199z","M1107.426 614.49c-182.050 0-264.718 171.135-264.718 208.062 0 58.14 67.525 131.585 132.049 131.585 164.383 0 273.515-164.335 273.515-222.475 0-60.497-68.987-117.172-130.439-117.172zM1175.071 731.001c0 54.997-160.542 144.564-212.008 144.564-21.508 0-33.030-10.214-41.48-23.57-3.071-7.071-6.145-14.142-6.145-21.999 0-48.712 155.933-147.707 208.935-147.707 23.044 0 36.871 12.571 44.552 25.927 3.071 6.285 6.145 14.928 6.145 22.785z","M1179.598 78.245h66.459v654.496h-66.459v-654.496z"],"width":1320,"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["duration_grow"],"grid":16},"attrs":[{},{},{},{},{}],"properties":{"order":921,"id":11,"name":"duration_grow","prevSize":32,"code":59698},"setIdx":1,"setId":1,"iconIdx":19},{"icon":{"paths":["M487.408 81.611c0.872-1.021 3.478-1.021 5.22-1.021 7.83 0 8.7 3.064 16.53 17.364 54.81 101.122 83.52 199.18 91.35 319.71 0 7.15 0 24.514 0 40.857s0 34.729 0 40.857c-7.83 120.53-36.54 218.588-91.35 319.71-5.22 13.279-10.44 18.386-16.53 18.386-1.739 0-3.478-1.023-5.22-1.023-5.22-3.065-7.83-7.15-7.83-12.257 0-6.129 1.739-11.236 5.22-21.45 35.67-105.208 53.070-224.716 53.070-344.225 0-118.487-17.4-237.995-53.070-342.181-3.478-10.214-5.22-17.364-5.22-21.45 0-7.15 2.611-10.214 7.83-13.279z","M220.217 1.021c1.739-1.021 3.478-1.021 6.090-1.021 7.83 0 14.79 4.086 17.4 12.257 0.872 4.086 0.872 4.086 0.872 242.081v240.038l0.872-3.064c33.060-32.686 67.86-49.029 100.92-49.029 13.050 0 26.1 2.043 39.15 8.171 39.15 15.322 60.030 58.222 60.030 109.294 0 26.557-6.96 56.179-20.010 85.801-19.14 40.857-43.5 73.543-111.36 145.044l-66.99 74.565c-12.18 14.3-14.79 14.3-20.010 14.3-7.83 0-14.79-5.107-17.4-13.279l-0.872-4.084v-845.75l0.872-4.086c2.611-4.086 6.090-10.214 10.44-11.236zM322.881 511.742c-3.478-2.043-8.7-2.043-12.18-2.043-2.611 0-4.35 0-6.090 0-22.62 4.086-42.63 20.429-56.55 46.986l-3.478 7.15v241.059l2.611-4.084c63.51-81.715 105.27-175.687 105.27-237.995v-2.043c0-30.643-8.7-43.922-29.58-49.029z","M118.289 91.081c2.611 0 4.35-1.021 6.090-1.021 5.22 0 11.31 4.086 13.050 10.214 0 1.021 1.739 2.043 1.739 5.107 0 4.086-2.611 8.171-6.090 20.429-29.58 88.865-47.85 179.773-52.2 289.067-0.872 9.193-0.872 32.686-0.872 54.136 0 22.472 0 44.943 0.872 54.136 6.090 110.315 22.62 201.223 52.2 289.067 4.35 12.257 6.090 15.322 6.090 18.386 0 10.214-6.090 16.343-14.79 16.343-6.96 0-7.83-2.042-16.53-18.386-50.46-92.951-80.040-192.030-88.74-296.217-2.611-26.557-2.611-32.686-2.611-63.329 0-31.665 0-37.793 2.611-64.351 8.7-103.165 38.28-202.245 88.74-296.217 6.090-13.279 8.7-14.3 10.44-17.364z"],"width":610,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["courtesy"],"grid":16},"attrs":[{},{},{}],"properties":{"order":922,"id":12,"name":"courtesy","prevSize":32,"code":59648},"setIdx":1,"setId":1,"iconIdx":20},{"icon":{"paths":["M381.684 731.526c4.034 0 10.086 0 11.095 0 0 0 1.009 0 1.009 0s6.052 0 11.095 0c90.775 4.126 144.232 52.815 144.232 113.882 0 29.708-12.103 63.543-42.362 95.727-57.491 63.543-151.292 98.203-232.99 98.203-63.543 0-118.008-20.631-144.232-62.718-8.069-16.505-12.103-32.184-12.103-49.514 0-89.951 123.051-189.804 264.257-195.58zM446.77 52.621h100.214v822.303h-100.214v-822.303z"],"width":768,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["note"],"defaultCode":59648,"grid":16},"attrs":[],"properties":{"id":13,"order":923,"ligatures":"","prevSize":32,"code":59649,"name":"note"},"setIdx":1,"setId":1,"iconIdx":21},{"icon":{"paths":["M1024.972 459.741l-218.819 160.803v-96.482h-233.407v-128.642h233.407v-96.482zM8.678 464.080l218.819 160.803v-96.482h233.407v-128.642h-233.407v-96.482z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["navigate"],"defaultCode":59649,"grid":16},"attrs":[],"properties":{"id":14,"order":924,"ligatures":"","prevSize":32,"code":59650,"name":"navigate"},"setIdx":1,"setId":1,"iconIdx":22},{"icon":{"paths":["M350.145 189.381v577.765h15.463v-577.765zM297.409 684.512c1.737 0 4.342 0 4.776 0 0 0 0.435 0 0.435 0s2.605 0 4.776 0c39.079 2.221 62.093 28.433 62.093 61.309 0 15.994-5.211 34.209-18.237 51.535-24.75 34.209-65.132 52.868-100.303 52.868-27.355 0-50.803-11.107-62.093-33.764-3.474-8.885-5.211-17.327-5.211-26.656 0-48.425 52.974-102.182 113.764-105.292zM709.766 189.842v577.765h15.463v-577.765zM657.030 684.973c1.737 0 4.342 0 4.776 0 0 0 0.435 0 0.435 0s2.605 0 4.776 0c39.079 2.221 62.093 28.433 62.093 61.309 0 15.994-5.211 34.209-18.237 51.535-24.75 34.209-65.132 52.868-100.303 52.868-27.355 0-50.803-11.107-62.093-33.764-3.474-8.885-5.211-17.327-5.211-26.656 0-48.425 52.974-102.182 113.764-105.292zM303.424 89.015l0.021 8.094 16.188-0.040-0.021-8.114zM327.726 97.049l16.188 0.021 0.021-8.094-16.208-0.021zM352.029 97.089l16.188 0.021 0.021-8.094-16.208-0.021zM279.121 89.076l0.021 8.094 16.188-0.040-0.021-8.094zM376.311 97.13l16.208 0.040 0.021-8.114-16.208-0.021zM400.614 97.17l16.208 0.040v-8.114l-16.188-0.021zM254.819 89.156l0.021 8.094 16.208-0.040-0.040-8.114zM424.916 97.21l16.208 0.040v-8.114l-16.188-0.021zM449.219 97.25l16.188 0.040 0.021-8.094-16.188-0.040zM230.516 89.217l0.021 8.094 16.208-0.040-0.021-8.094zM473.521 97.311l16.188 0.021 0.021-8.094-16.208-0.040zM206.213 89.297l0.021 8.094 16.208-0.040-0.021-8.114zM497.824 97.351l16.188 0.021 0.021-8.094-16.208-0.040zM522.106 97.391h3.222l12.967 0.101 0.061-8.094-16.229-0.122zM181.911 89.357l0.021 8.094c11.395-0.286 16.218 3.74 16.188-8.134zM157.608 89.418l0.040 8.114 16.188-0.061-0.021-8.094zM133.326 89.499l0.021 8.094 16.188-0.040-0.021-8.094zM546.389 97.553l16.208 0.141 0.061-8.094-16.208-0.141zM109.023 89.559l0.021 8.114 16.188-0.061-0.021-8.094zM84.721 89.639l0.021 8.094 16.208-0.040-0.040-8.094zM60.418 89.7l0.021 5.235h-4.047l0.061 16.208 8.114-0.040-0.061-13.309 12.141-0.040-0.021-8.094zM570.691 97.754l16.188 0.121 0.080-8.094-16.208-0.121zM594.994 97.956l16.188 0.121 0.061-8.094-16.188-0.141zM619.297 98.137l16.188 0.141 0.061-8.094-16.188-0.141zM643.579 98.338l16.208 0.121 0.061-8.094-16.188-0.121zM667.882 98.539h0.342l15.826 0.262 0.141-8.094-16.25-0.282zM692.144 98.942l16.188 0.282 0.141-8.114-16.188-0.262zM716.446 99.365l16.188 0.262 0.141-8.094-16.188-0.282zM740.729 99.768l16.208 0.282 0.141-8.094-16.208-0.282zM764.971 100.191l16.188 0.503 0.262-8.094-16.188-0.503zM789.274 100.956l16.188 0.503 0.242-8.094-16.188-0.503zM813.556 101.701l8.497 0.262 7.591 0.443 0.443-8.094-7.772-0.443-8.517-0.262zM837.718 102.848l14.075 0.786 1.873 0.221 0.906-8.054-2.094-0.221-0.121-0.021h-0.101l-14.074-0.805zM862.101 101.278h-1.571l-0.121 13.692 8.094 0.080 0.141-13.712 0.021-3.020-4.47-1.369-0.362-0.101-0.362-0.040-0.866-0.101zM56.492 119.238l0.080 16.208 8.094-0.040-0.080-16.208zM860.188 139.272l8.094 0.061 0.161-16.188-8.114-0.080zM56.613 143.541l0.061 16.208 8.094-0.040-0.061-16.208zM859.966 163.575l8.114 0.061 0.141-16.188-8.094-0.080zM56.713 167.843l0.080 16.208 8.094-0.040-0.080-16.208zM859.745 187.857l8.114 0.080 0.141-16.208-8.094-0.061zM56.814 192.146l0.080 16.188 8.094-0.021-0.061-16.208zM859.524 212.16l8.114 0.080 0.141-16.208-8.094-0.061zM56.935 216.448l0.061 16.188 8.114-0.040-0.080-16.188zM859.322 236.462l8.094 0.080 0.141-16.208-8.094-0.080zM57.036 240.731l0.080 16.208 8.094-0.040-0.080-16.188zM859.101 260.765l8.094 0.061 0.141-16.188-8.094-0.080zM57.156 265.033l0.061 16.208 8.114-0.040-0.080-16.188zM858.879 285.067l8.094 0.061 0.141-16.188-8.094-0.080zM57.257 289.336l0.080 16.208 8.094-0.040-0.080-16.208zM858.658 309.35l8.094 0.080 0.141-16.188-8.094-0.080zM57.358 313.638l0.080 16.208 8.094-0.040-0.061-16.208zM858.436 333.652l8.094 0.080 0.141-16.208-8.094-0.061zM57.479 337.941l0.061 16.188 8.114-0.021-0.080-16.208zM858.215 357.955l8.094 0.080 0.141-16.208-8.094-0.080zM57.579 362.243l0.080 16.188 8.094-0.040-0.061-16.188zM857.993 382.257l8.094 0.061 0.161-16.188-8.114-0.080zM57.7 386.546l0.061 16.188 8.114-0.040-0.080-16.188zM857.772 406.56l8.094 0.061 0.161-16.188-8.114-0.080zM57.801 410.828l0.080 16.208 8.094-0.040-0.080-16.188zM857.55 430.842l8.094 0.080 0.161-16.188-8.114-0.080zM57.921 435.131l0.061 16.208 8.094-0.040-0.061-16.208zM857.329 455.145l8.094 0.080 0.161-16.208-8.094-0.061zM58.022 459.434l0.080 16.208 8.094-0.040-0.080-16.208zM857.107 479.447l8.114 0.080 0.141-16.208-8.094-0.061zM58.123 483.736l0.080 16.188 8.094-0.021-0.061-16.208zM856.886 503.75l8.114 0.080 0.141-16.208-8.094-0.080zM58.244 508.039l0.061 16.188 8.114-0.021-0.080-16.208zM856.664 528.053l8.114 0.061 0.141-16.188-8.094-0.080zM58.344 532.341l0.080 16.188 8.094-0.040-0.080-16.188zM856.463 552.335l8.094 0.080 0.141-16.188-8.094-0.080zM58.465 556.623l0.061 16.208 8.094-0.040-0.061-16.188zM856.242 576.637l8.094 0.080 0.141-16.208-8.094-0.061zM58.566 580.926l0.080 16.208 8.094-0.040-0.080-16.188zM856.020 600.94l8.094 0.080 0.141-16.208-8.094-0.061zM58.666 605.228l0.080 16.208 8.094-0.040-0.061-16.208zM855.799 625.242l8.094 0.080 0.141-16.208-8.094-0.080zM58.787 629.531l0.061 16.208 8.114-0.040-0.080-16.208zM855.577 649.545l8.094 0.061 0.141-16.188-8.094-0.080zM58.888 653.834l0.080 16.188 8.094-0.021-0.061-16.208zM855.356 673.847l8.094 0.061 0.141-16.188-8.094-0.080zM59.009 678.136l0.061 16.188 8.114-0.040-0.080-16.188zM855.134 698.13l8.094 0.080 0.161-16.208-8.114-0.061zM59.109 702.439l0.080 16.188 8.094-0.040-0.080-16.188zM854.913 722.432l8.094 0.080 0.161-16.208-8.114-0.061zM59.21 726.721l0.080 16.208 8.094-0.040-0.061-16.188zM854.691 746.735l8.094 0.080 0.161-16.208-8.114-0.080zM59.331 751.024l0.061 16.208 8.114-0.040-0.080-16.208zM854.47 771.038l8.114 0.061 0.141-16.188-8.094-0.080zM59.432 775.326l0.080 16.208 8.094-0.040-0.061-16.208zM854.248 795.34l8.114 0.061 0.141-16.188-8.094-0.080zM59.552 799.629l0.061 16.188 8.114-0.021-0.080-16.208zM854.027 819.623l8.114 0.080 0.141-16.208-8.094-0.061zM59.653 823.931l0.080 16.188 8.094-0.021-0.080-16.208zM853.805 843.925l8.114 0.080 0.141-16.208-8.094-0.061zM59.774 848.234l0.061 16.188 8.094-0.040-0.061-16.188zM853.604 868.228l8.094 0.080 0.141-16.208-8.094-0.080zM59.875 872.516l0.080 16.208 8.094-0.040-0.080-16.188zM853.382 892.53l8.094 0.061 0.141-16.188-8.094-0.080zM59.975 896.819l0.080 16.208 8.094-0.040-0.061-16.208zM853.161 916.833l8.094 0.061 0.141-16.188-8.094-0.080zM60.096 921.122l0.061 14.557 0.021 4.027h5.678v-4.047l2.396-0.021-0.061-14.557zM853.020 931.612h-1.49v8.094h9.524l0.040-4.007 0.080-10.692-8.094-0.080zM73.949 939.706h16.208v-8.094h-16.208zM98.251 939.706h16.188v-8.094h-16.188zM122.554 939.706h16.188v-8.094h-16.188zM146.856 939.706h16.188v-8.094h-16.188zM171.139 939.706h16.208v-8.094h-16.208zM195.441 939.706h16.208v-8.094h-16.208zM219.744 939.706h16.208v-8.094h-16.208zM244.046 939.706h16.208v-8.094h-16.208zM268.349 939.706h16.188v-8.094h-16.188zM292.652 939.706h16.188v-8.094h-16.188zM316.954 939.706h16.188v-8.094h-16.188zM341.237 939.706h16.208v-8.094h-16.208zM365.539 939.706h16.208v-8.094h-16.208zM389.842 939.706h16.208v-8.094h-16.208zM414.144 939.706h16.208v-8.094h-16.208zM438.447 939.706h16.188v-8.094h-16.188zM462.749 939.706h16.188v-8.094h-16.188zM487.052 939.706h16.188v-8.094h-16.188zM511.334 939.706h16.208v-8.094h-16.208zM535.637 939.706h16.208v-8.094h-16.208zM559.94 939.706h16.208v-8.094h-16.208zM584.242 939.706h16.208v-8.094h-16.208zM608.545 939.706h16.188v-8.094h-16.188zM632.847 939.706h16.188v-8.094h-16.188zM657.15 939.706h16.188v-8.094h-16.188zM681.432 939.706h16.208v-8.094h-16.208zM705.735 939.706h16.208v-8.094h-16.208zM730.037 939.706h16.208v-8.094h-16.208zM754.34 939.706h16.208v-8.094h-16.208zM778.643 939.706h16.188v-8.094h-16.188zM802.945 939.706h16.188v-8.094h-16.188zM827.248 939.706h16.188v-8.094h-16.188zM76.566 69.404l-19.994 0.061-0.201 19.994-0.061 5.839 20.336 0.221 0.040 14.396 24.283-0.061 80.8 0.564 0.282-40.511-81.002-0.564-0.141 19.188-0.040-19.188zM222.261 110.7l81.002 0.564 0.282-40.491-81.002-0.584zM343.753 111.546l81.002 0.564 0.282-40.491-81.002-0.564zM465.246 112.392l81.002 0.564 0.282-40.491-81.002-0.564zM586.759 113.237l80.982 0.584 0.282-40.511-80.982-0.564zM708.252 114.103l80.982 0.564 0.302-40.511-81.002-0.564zM829.885 94.653l-11.96-0.161-0.946 72.686 40.491 0.544 0.966-72.706 0.262-20.376-28.672-0.202zM55.082 216.79l40.491 0.423 0.826-81.002-40.491-0.403zM815.388 288.671l40.511 0.523 1.047-80.982-40.491-0.523zM53.854 338.283l40.491 0.423 0.826-81.002-40.491-0.403zM813.818 410.164l40.491 0.523 1.047-80.982-40.491-0.544zM52.626 459.775l40.491 0.423 0.826-81.002-40.491-0.403zM812.227 531.656l40.491 0.523 1.067-81.002-40.511-0.523zM51.378 581.268l40.511 0.423 0.826-81.002-40.511-0.403zM810.637 653.129l40.491 0.544 1.067-81.002-40.511-0.523zM50.149 702.761l40.511 0.423 0.805-81.002-40.491-0.403zM809.046 774.622l40.491 0.523 1.067-80.982-40.491-0.523zM48.921 824.254l40.491 0.423 0.826-81.002-40.491-0.403zM807.455 896.114l40.491 0.523 1.067-80.982-40.491-0.544zM47.935 920.88l-0.201 20.175 45.061 0.624 0.544-40.511-4.691-0.061 0.362-35.94-40.491-0.403zM133.286 942.243l80.982 1.107 0.564-40.491-80.982-1.128zM254.758 943.914l81.002 1.128 0.564-40.491-81.002-1.128zM376.251 945.605l81.002 1.128 0.564-40.491-81.002-1.128zM497.744 947.297l80.982 1.128 0.564-40.511-80.982-1.107zM619.236 948.968l80.982 1.128 0.564-40.491-81.002-1.127zM740.709 950.659l81.002 1.127 0.564-40.491-81.002-1.128z"],"width":913,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["note_select"],"defaultCode":59650,"grid":16},"attrs":[],"properties":{"id":15,"order":925,"ligatures":"","prevSize":32,"code":59651,"name":"note_select"},"setIdx":1,"setId":1,"iconIdx":23},{"icon":{"paths":["M282.469 265.898c-125.908 6.295-238.014 98.194-271.822 196.687h-3.974v12.148c-4.296 15.596-6.674 31.259-6.674 46.716 0 15.331 2.718 29.658 6.674 44.016v458.76h115.178v-360.68c14.426 2.901 29.497 4.499 45.216 4.499 87.323 0 187.652-45.289 249.101-128.3 32.342-42.044 45.216-86.265 45.216-125.076 0-79.777-57.144-143.381-154.17-148.771h-24.745zM222.526 0c-52.921 0-98.094 45.569-98.094 102.692s45.173 102.692 98.094 102.692c52.921 0 98.094-45.569 98.094-102.692s-45.173-102.692-98.094-102.692zM222.526 80.988c13.718 0 22.544 10.141 22.544 21.704s-8.826 21.704-22.544 21.704c-13.718 0-22.601-10.141-22.601-21.704s8.884-21.704 22.601-21.704zM193.268 122.436c-20.723-19.034-3.086-52.836 27.568-52.836 31.157 0 49.278 36.582 26.579 53.658-13.811 10.389-42.414 9.955-54.147-0.822z"],"width":461,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["staccato_above"],"defaultCode":59651,"grid":16},"attrs":[],"properties":{"id":16,"order":926,"ligatures":"","prevSize":32,"code":59652,"name":"staccato_above"},"setIdx":1,"setId":1,"iconIdx":24},{"icon":{"paths":["M347.28 0v368.892c-14.735-2.958-30.192-4.602-46.246-4.602-89.311 0-191.848 46.32-254.696 131.221-33.078 43.002-46.322 88.229-46.322 127.923 0 81.593 58.445 146.645 157.68 152.158h25.385c128.775-6.439 243.357-100.43 277.934-201.165h4.065v-12.424c4.394-15.951 6.826-31.97 6.826-47.78 0-15.708-2.766-30.384-6.826-45.095v-469.129h-117.8zM249.582 814.098c-54.126 0-100.327 46.606-100.327 105.030s46.201 105.030 100.327 105.030c54.126 0 100.327-46.606 100.327-105.030s-46.201-105.030-100.327-105.030zM249.582 896.93c14.030 0 23.057 10.372 23.057 22.198s-9.027 22.198-23.057 22.198c-14.030 0-23.116-10.372-23.116-22.198s9.086-22.198 23.116-22.198zM219.658 939.321c-21.194-19.467-3.156-54.039 28.196-54.039 31.867 0 50.4 37.415 27.184 54.879-14.126 10.626-43.379 10.182-55.38-0.841z"],"width":472,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["staccato_below"],"defaultCode":59652,"grid":16},"attrs":[],"properties":{"id":17,"order":927,"ligatures":"","prevSize":32,"code":59653,"name":"staccato_below"},"setIdx":1,"setId":1,"iconIdx":25},{"icon":{"paths":["M188.24 951.195q1.751 1.943 2.627 1.943h2.627q7.005 0 10.507-2.915t5.253-8.744l1.751-1.943v-223.464l21.014 5.829q7.005 1.943 14.009 2.915t10.507 0.972q5.253 0 7.88-1.943t4.378-7.773v-85.499q-1.751-5.829-6.129-7.773t-20.138-7.773q-19.263-5.829-25.392-6.801l-6.129-0.972v-186.544l21.014 7.773q8.756 1.943 14.885 2.915t9.631 0.972 5.253-0.972 3.502-2.915q3.502-3.886 3.502-8.744v-82.584q0 0-3.502-5.829-1.751-3.886-6.129-4.858t-30.645-8.744q-7.005-1.943-11.383-3.886l-4.378-1.943h-1.751v-225.407l-1.751-3.886q-1.751-5.829-6.129-7.773t-9.631-1.943q-1.751 0-7.005 1.943t-7.005 7.773v221.52h-1.751l-17.512-5.829-33.272-9.716q-5.253-1.943-10.507-2.915l-5.253-0.972-0.876-16.517q0 0-0.876-100.073v-118.533q-1.751-5.829-6.129-8.744t-7.88-2.915q-5.253 0-9.631 2.915t-7.88 8.744v225.407q-7.005-1.943-22.765-6.801t-19.263-4.858q-5.253 0-8.756 3.886t-5.253 7.773v87.442q3.502 5.829 8.756 8.744t38.526 10.687l8.756 3.886v184.6q-7.005-1.943-22.765-6.801t-19.263-4.858q-5.253 0-8.756 2.915t-5.253 8.744v85.499q3.502 7.773 8.756 9.716t38.526 11.659l8.756 1.943v229.293q3.502 5.829 7.88 8.744t9.631 2.915q1.751 0 2.627-0.972t2.627-0.972q1.751-1.943 4.378-3.886t4.378-5.829v-219.577h5.253q1.751 0 10.507 2.915t19.263 4.858l29.77 9.716 5.253 1.943v233.179q1.751 3.886 3.502 6.801t5.253 2.915zM179.485 504.267v93.272q-1.751 0-6.129-1.943t-11.383-3.886l-35.023-7.773-15.76-5.829-0.876-12.631q0 0-0.876-78.698v-93.272h5.253q1.751 1.943 10.507 3.886t19.263 3.886l29.77 9.716 5.253 1.943z"],"width":292,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sharp"],"defaultCode":59653,"grid":16},"attrs":[],"properties":{"id":18,"order":928,"ligatures":"","prevSize":32,"code":59654,"name":"sharp"},"setIdx":1,"setId":1,"iconIdx":26},{"icon":{"paths":["M14.004 0h8.756q7.005 0 12.258 2.915t8.756 10.687v561.574l1.751-3.886q31.521-27.204 63.042-41.778t61.291-14.574q12.258 0 24.516 1.943t24.516 7.773q35.023 13.602 54.286 48.579t19.263 79.67q0 21.375-6.129 47.607t-18.387 51.494q-17.512 34.977-46.406 70.925t-91.936 98.13l-82.305 87.442q-10.507 11.659-14.885 13.602t-9.631 1.943q-7.005 0-13.134-3.886t-7.88-11.659l-1.751-3.886v-987.126l1.751-3.886q1.751-3.886 5.253-7.773t7.005-5.829zM141.839 596.551q-3.502-1.943-7.88-2.915t-7.88-0.972h-7.005q-21.014 3.886-39.401 18.46t-30.645 37.892l-5.253 7.773v281.758l3.502-5.829q59.539-71.897 94.563-147.68t35.023-130.192v-1.943q0-27.204-7.88-39.835t-27.143-16.517z"],"width":292,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flat"],"defaultCode":59654,"grid":16},"attrs":[],"properties":{"id":19,"order":929,"ligatures":"","prevSize":32,"code":59655,"name":"flat"},"setIdx":1,"setId":1,"iconIdx":27},{"icon":{"paths":["M64.896 1.010c1.324 0 2.648-1.010 5.293-1.010 6.616 0 11.909 3.030 22.495 10.099 3.968 4.040 10.586 8.080 14.556 11.109l19.849 12.119 19.849 14.139 14.556 10.099 15.879 11.109 63.516 42.418 96.597 66.657c48.96 32.318 48.96 32.318 48.96 39.388v7.070l-11.909 14.139c-64.839 73.726-97.92 158.562-97.92 236.328 0 80.796 34.404 156.542 104.536 208.049 9.263 9.090 14.556 11.109 14.556 14.139 1.324 3.028 1.324 4.040 1.324 7.070 0 8.080-7.939 15.149-19.849 15.149-2.648 0-5.293 0-6.616 0-13.232-4.040-27.788-5.050-43.667-5.050-31.758 0-66.162 7.070-93.95 21.209-52.93 27.269-82.041 70.696-82.041 119.174 0 44.438 26.465 93.925 76.748 132.303 13.232 10.099 17.202 16.159 17.202 21.209 0 4.040-2.648 7.070-5.293 10.099-6.616 3.028-9.263 6.060-13.232 6.060-6.616 0-14.556-5.050-25.142-10.099-115.122-70.696-185.254-147.452-201.133-216.129 0-6.060 0-14.139 0-24.239 0-8.080 0-18.179 1.324-22.219 19.849-61.607 95.273-98.975 194.517-98.975 25.142 0 54.253 2.021 80.718 8.080 3.968 0 7.939 1.011 7.939 1.011s0 0 0 0v0c0-1.011-7.939-7.070-18.525-13.129l-58.223-39.388-80.718-56.557c-99.243-65.647-104.536-70.696-104.536-75.746 0-2.020 0-2.020 0-3.030 0 0 0-1.010 0-1.010 0-6.060 0-6.060 10.586-18.179 74.102-75.746 112.476-164.621 112.476-244.407 0-69.686-29.111-134.323-84.688-177.751-7.939-6.060-10.586-13.129-10.586-17.169 0-7.070 5.293-11.109 14.556-14.139z"],"width":397,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["rest"],"defaultCode":59655,"grid":16},"attrs":[],"properties":{"id":20,"order":930,"ligatures":"","prevSize":32,"code":59656,"name":"rest"},"setIdx":1,"setId":1,"iconIdx":28},{"icon":{"paths":["M232.072 261.481c7.442-1.353 14.884-1.353 22.327-1.353 106.897 0 196.203 47.359 209.058 110.956 0.677 6.089 2.029 11.502 2.029 15.561 0 69.686-92.013 125.841-210.411 125.841s-208.381-57.508-208.381-125.841c0-8.119 0.677-16.238 3.383-25.033 16.238-53.448 92.013-94.719 181.995-100.131zM242.22 277.042c-3.383-0.677-8.119-0.677-11.502-0.677-42.623 0-68.333 36.534-68.333 81.864 0 24.356 7.442 50.742 23.003 77.128 25.709 40.594 62.92 60.891 94.719 60.891 27.063 0 50.742-14.208 61.567-43.977 4.736-12.178 6.766-24.356 6.766-37.211 0-60.891-46.683-128.547-106.22-138.019zM232.072 20.54c7.442-1.353 14.884-1.353 22.327-1.353 106.897 0 196.203 47.359 209.058 110.956 0.677 6.089 2.029 11.502 2.029 15.561 0 69.686-92.013 125.841-210.411 125.841s-208.381-57.508-208.381-125.841c0-8.119 0.677-16.238 3.383-25.033 16.238-53.448 92.013-94.719 181.995-100.131zM242.22 36.101c-3.383-0.677-8.119-0.677-11.502-0.677-42.623 0-68.333 36.534-68.333 81.864 0 24.356 7.442 50.742 23.003 77.128 25.709 40.594 62.92 60.891 94.719 60.891 27.063 0 50.742-14.208 61.567-43.977 4.736-12.178 6.766-24.356 6.766-37.211 0-60.891-46.683-128.547-106.22-138.019zM225.192 522.469c7.442-1.354 14.884-1.354 22.327-1.354 106.897 0 196.203 47.359 209.058 110.956 0.677 6.089 2.029 11.502 2.029 15.561 0 69.686-92.013 125.841-210.411 125.841s-208.381-57.508-208.381-125.841c0-8.119 0.677-16.238 3.383-25.033 16.238-53.448 92.013-94.719 181.995-100.131zM235.339 538.029c-3.383-0.677-8.119-0.677-11.502-0.677-42.623 0-68.333 36.534-68.333 81.864 0 24.356 7.442 50.742 23.003 77.128 25.709 40.594 62.92 60.891 94.719 60.891 27.063 0 50.742-14.208 61.567-43.977 4.736-12.178 6.766-24.356 6.766-37.211 0-60.891-46.683-128.547-106.22-138.019zM530.712 0l-500.282 2.353 0.096 24.094 500.282-2.353zM508.594 250.165l-500.282 2.306 0.145 24.094 500.235-2.306zM508.594 501.459l-500.282 2.306 0.145 24.094 500.235-2.306zM502.727 762.6l-500.282 2.306 0.145 24.094 500.235-2.306zM500.4 997.615l-500.282 2.306 0.145 24.094 500.235-2.306z"],"width":531,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["chords"],"defaultCode":59656,"grid":16},"attrs":[],"properties":{"id":21,"order":931,"ligatures":"","prevSize":32,"code":59657,"name":"chords"},"setIdx":1,"setId":1,"iconIdx":29},{"icon":{"paths":["M94.493 375.421c0.806-0.572 3.221-0.572 6.441-0.572 2.416 0 4.026 0 5.636 0 3.221 0.572 5.636 1.145 13.688 5.152 59.583 28.052 141.711 52.669 224.644 66.981l16.909 2.29c12.078 2.29 17.714 7.442 17.714 15.457s-5.636 12.595-17.714 14.885l-16.909 2.29c-82.933 14.312-165.061 38.929-224.644 66.981-12.078 5.725-13.688 5.725-19.324 5.725-12.883 0-20.935-7.442-20.935-15.457 0-2.29 0.806-5.152 3.221-8.015s4.831-3.435 12.883-7.442c47.505-22.327 101.452-40.647 161.84-54.959 9.662-2.29 16.909-4.007 16.909-4.58 0 0-7.247-1.145-16.909-3.435-60.388-14.312-114.335-32.632-161.84-54.959-8.052-4.007-10.467-5.152-12.883-8.015-2.416-2.29-3.221-4.58-3.221-8.015 0-6.297 5.636-12.595 14.493-14.312zM185.252 77.692c2.234-1.185 3.722-1.185 6.7-1.185 5.956 0 10.422 2.37 14.145 7.11 0.746 1.777 0.746 2.37 0.746 37.327v34.364h2.234c43.178 5.925 78.912 31.994 90.079 65.766 2.234 7.702 2.978 15.997 2.978 23.107 0 40.289-33.5 77.616-83.379 87.096-8.935 2.37-17.868 3.555-26.802 3.555-50.623 0-96.034-27.254-107.945-68.136-2.234-7.702-2.978-14.812-2.978-21.33 0-43.844 37.967-84.133 93.056-90.058h2.234v-34.364c0.746-34.957 0.746-35.549 1.488-37.327 1.488-2.37 4.467-4.74 7.445-5.925zM176.319 213.964c0-30.809 0-33.179-1.488-33.179 0 0 0 0 0 0-8.933 0.592-29.034 8.887-39.456 17.775-16.378 13.035-23.822 29.032-23.822 45.029 0 33.772 32.011 65.766 79.656 65.766s80.401-31.994 80.401-65.766c0-15.997-8.189-31.994-24.567-45.029-9.678-8.887-31.267-17.775-40.2-17.775 0 0 0 15.405 0 33.179 0 33.772 0 33.772-0.746 34.957-3.722 5.332-9.678 7.702-14.145 7.702-5.956 0-11.911-2.37-14.145-7.702-0.746-1.185-0.746-1.185-1.488-34.957zM650.718 442.642l-244.062 3.25 0.656 48 244.062-3.281zM509.496 139.969c-43.606 0-80.954 34.128-80.954 77.708s37.348 77.708 80.954 77.708c43.606 0 80.926-34.128 80.926-77.708s-37.321-77.708-80.926-77.708zM509.496 183.42c22.151 0 38.093 16.014 38.093 34.257s-15.942 34.257-38.093 34.257c-22.151 0-38.121-16.014-38.121-34.257s15.97-34.257 38.121-34.257zM488.943 272.132c-28.636-12.845-44.574-58.991-27.987-81.036 27.414-36.436 77.021-38.046 103.84-3.37 24.335 31.465-0.456 82.478-42.355 87.152-12.058 1.345-27.132 0.11-33.498-2.746zM417.499 591.149c3.431 0 8.577 0 9.435 0 0 0 0.858 0 0.858 0s5.146 0 9.435 0c77.195 4.388 122.653 56.165 122.653 121.106 0 31.593-10.292 67.574-36.024 101.799-48.89 67.574-128.657 104.432-198.132 104.432-54.036 0-100.353-21.94-122.653-66.696-6.862-17.552-10.293-34.226-10.293-52.655 0-95.656 104.641-201.844 224.722-207.987zM195.304 770.757v73.75l63.070-3-1.412-67.75zM211.026 787.538l30.553 1.469 0.768 37.25-31.32 1.5zM195.304 770.757h89.333v252.427h-89.333v-252.427z"],"width":768,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["articulation"],"defaultCode":59657,"grid":16},"attrs":[],"properties":{"id":22,"order":932,"ligatures":"","prevSize":32,"code":59658,"name":"articulation"},"setIdx":1,"setId":1,"iconIdx":30},{"icon":{"paths":["M433.241 185.907c5.302-3.152 8.834-3.152 15.902-3.152 14.135 0 24.737 6.305 33.571 18.914 1.769 4.729 1.769 6.305 1.769 99.299v91.418h5.302c102.48 15.762 187.291 85.113 213.795 174.955 5.302 20.49 7.068 42.557 7.068 61.471 0 107.18-79.51 206.479-197.893 231.698-21.207 6.305-42.409 9.457-63.612 9.457-120.149 0-227.93-72.504-256.2-181.26-5.302-20.49-7.068-39.404-7.068-56.742 0-116.637 90.112-223.817 220.862-239.578h5.302v-91.418c1.769-92.994 1.769-94.57 3.533-99.299 3.533-6.305 10.601-12.609 17.669-15.762zM412.038 548.427c0-81.961 0-88.266-3.533-88.266 0 0 0 0 0 0-21.203 1.576-68.909 23.643-93.646 47.285-38.872 34.676-56.541 77.233-56.541 119.789 0 89.842 75.977 174.955 189.058 174.955s190.825-85.113 190.825-174.955c0-42.557-19.436-85.113-58.308-119.789-22.97-23.643-74.21-47.285-95.413-47.285 0 0 0 40.981 0 88.266 0 89.842 0 89.842-1.769 92.994-8.834 14.186-22.97 20.49-33.571 20.49-14.135 0-28.27-6.305-33.571-20.49-1.769-3.152-1.769-3.152-3.533-92.994z"],"width":939,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pizzicato"],"defaultCode":59658,"grid":16},"attrs":[],"properties":{"id":23,"order":933,"ligatures":"","prevSize":32,"code":59659,"name":"pizzicato"},"setIdx":1,"setId":1,"iconIdx":31},{"icon":{"paths":["M431.96 252.656c6.42-0.642 13.483-0.642 19.261-0.642 139.324 0 255.535 101.444 279.291 246.546 2.568 16.051 4.494 36.597 4.494 49.438 0 4.494-1.284 7.705-1.284 9.631-2.568 5.136-7.705 7.705-12.841 7.705-3.852 0-7.063-0.642-9.631-3.21-2.568-3.852-3.852-5.136-3.852-16.051-5.136-117.495-118.779-206.097-255.535-206.097-12.841 0-25.040 1.284-37.881 1.926-123.273 15.409-214.444 100.802-218.938 204.171 0 10.915-0.642 12.199-3.21 16.051-2.568 2.568-6.42 3.21-9.631 3.21-5.136 0-10.273-2.568-13.483-7.705 0-1.926-0.642-5.136-0.642-9.631 0-12.841 1.926-33.386 4.494-49.438 21.83-136.114 128.41-237.558 259.387-245.904zM443.517 481.225c2.568-1.284 5.136-1.284 7.705-1.284 12.841 0 25.682 6.42 33.386 17.977 4.494 6.42 6.42 14.125 6.42 22.472 0 7.705-1.926 16.051-6.42 23.114-7.705 11.557-20.546 17.977-33.386 17.977-10.273 0-21.188-4.494-28.892-13.483-7.063-7.063-10.273-17.335-10.273-26.966 0-18.619 11.557-35.313 31.46-39.807z"],"width":939,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fermata"],"defaultCode":59659,"grid":16},"attrs":[],"properties":{"id":24,"order":934,"ligatures":"","prevSize":32,"code":59660,"name":"fermata"},"setIdx":1,"setId":1,"iconIdx":32},{"icon":{"paths":["M138.744 265.169c1.799-1.371 7.187-1.371 14.374-1.371 5.392 0 8.984 0 12.577 0 7.187 1.371 12.577 2.743 30.544 12.342 132.958 67.195 316.224 126.162 501.287 160.446l37.731 5.485c26.951 5.485 39.528 17.827 39.528 37.026s-12.577 30.169-39.528 35.655l-37.731 5.485c-185.063 34.283-368.329 93.25-501.287 160.446-26.951 13.713-30.544 13.713-43.121 13.713-28.748 0-46.715-17.827-46.715-37.026 0-5.485 1.799-12.342 7.187-19.199 5.392-6.857 10.78-8.228 28.748-17.827 106.007-53.482 226.388-97.364 361.143-131.648 21.561-5.485 37.731-9.599 37.731-10.971 0 0-16.171-2.743-37.731-8.228-134.755-34.283-255.136-78.166-361.143-131.648-17.967-9.599-23.357-12.342-28.748-19.199-5.392-5.485-7.187-10.971-7.187-19.199 0-15.085 12.577-30.169 32.341-34.283z"],"width":939,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["accent"],"defaultCode":59660,"grid":16},"attrs":[],"properties":{"id":25,"order":935,"ligatures":"","prevSize":32,"code":59661,"name":"accent"},"setIdx":1,"setId":1,"iconIdx":33},{"icon":{"paths":["M47.201 448q1587.908 512 3175.816 0-1587.908 768-3175.816 0z"],"width":3072,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["slur"],"defaultCode":59661,"grid":16},"attrs":[],"properties":{"id":26,"order":936,"ligatures":"","prevSize":32,"code":59662,"name":"slur"},"setIdx":1,"setId":1,"iconIdx":34},{"icon":{"paths":["M309.723 185.185c2.241 0 6.724-1.121 12.327-1.121 38.103 0 70.602 21.293 90.774 56.033 4.483 11.207 12.327 31.379 12.327 36.982 0 3.362 0 4.483 0 4.483 1.121 0 3.362-2.241 6.724-5.603 32.499-40.344 81.809-72.843 112.067-76.205 4.483 0 7.845-1.121 11.207-1.121 54.913 0 105.343 48.189 118.791 110.946 3.362 11.207 3.362 23.534 3.362 39.223 0 22.413-2.241 50.43-6.724 72.843-22.413 126.635-106.463 221.892-202.84 230.857-4.483 2.241-8.965 2.241-13.448 2.241-17.931 0-34.741-5.603-44.827-13.448l-10.086-8.965c-21.293-16.81-36.982-40.344-45.947-67.24 0-3.362-1.121-5.603-1.121-5.603s0 0 0 0c-2.241 1.121-82.929 272.322-82.929 275.684 0 0 0 1.121 0 1.121 0 4.483 6.724 7.845 23.534 13.448 4.483 0 5.603 2.241 19.051 5.603 15.689 4.483 19.051 7.845 19.051 17.931s-2.241 12.327-7.845 15.689l-3.362 3.362h-264.477l-4.483-3.362c-5.603-3.362-7.845-5.603-7.845-15.689s4.483-15.689 20.172-17.931c15.689-3.362 16.81-3.362 24.655-5.603 3.362-1.121 5.603-2.241 7.845-2.241 0 0 4.483-2.241 6.724-2.241 14.569-5.603 23.534-12.327 28.017-20.172 3.362-5.603 154.652-519.989 154.652-524.472 0-3.362 1.121-7.845 3.362-12.327 1.121-4.483 1.121-8.965 1.121-12.327 0-14.569-6.724-24.655-13.448-24.655 0 0 0 0 0 0-33.62 2.241-78.447 49.309-100.86 105.343-4.483 14.569-7.845 16.81-13.448 16.81 0 0-2.241 0-2.241 0-5.603 0-10.086-2.241-10.086-10.086s5.603-22.413 16.81-43.706c22.413-47.068 52.671-82.929 93.015-108.705 4.483-5.603 10.086-10.086 13.448-11.207 5.603-6.724 22.413-12.327 36.982-14.569zM521.529 271.476c-3.362-2.241-6.724-2.241-8.965-2.241-20.172 0-50.43 15.689-73.964 39.223-13.448 12.327-14.569 15.689-17.931 21.293-1.121 5.603-3.362 10.086-4.483 13.448-1.121 2.241-11.207 32.499-25.775 81.809l-23.534 79.567v5.603c2.241 17.931 7.845 35.861 16.81 50.43 7.845 12.327 23.534 23.534 31.379 23.534 0 0 1.121 0 2.241 0 0 0 6.724-3.362 11.207-4.483 48.189-23.534 97.498-87.412 117.67-155.773 6.724-30.258 11.207-60.516 11.207-86.291 0-13.448-1.121-25.775-5.603-33.62-4.483-14.569-20.172-29.137-30.258-32.499z"],"width":819,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["piano"],"defaultCode":59662,"grid":16},"attrs":[],"properties":{"id":27,"order":937,"ligatures":"","prevSize":32,"code":59663,"name":"piano"},"setIdx":1,"setId":1,"iconIdx":35},{"icon":{"paths":["M11 748q1 0 2-0.5t4-0.5q4 0 7 2t5 6v150l16-4t38-10q31-8 42-10.5t15-2.5q1 0 2 0.5t2 0.5q2 1 3.5 2.5l3.5 3.5v422q-2 3-5.5 5t-6.5 2q-4 0-7.5-2t-5.5-5l-1-2v-151l-15.5 3.5t-37.5 9.5q-31 8-42.5 11t-14.5 3q-2 0-2.5-0.5l-1.5-1.5q-2-1-3.5-2.5t-2.5-3.5v-418q1-2 2.5-4t3.5-3v0zM125 1017v-58l-14.5 4t-33.5 8l-48 12v116l49-12 47-12v-58z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["natural"],"defaultCode":59663,"grid":16},"attrs":[],"properties":{"id":28,"order":938,"ligatures":"","prevSize":32,"code":59664,"name":"natural"},"setIdx":1,"setId":1,"iconIdx":36},{"icon":{"paths":["M174 621h5q4 0 7 1.5t5 5.5v289l1-2q18-14 36-21.5t35-7.5q7 0 14 1t14 4q20 7 31 25t11 41q0 11-3.5 24.5t-10.5 26.5q-10 18-26.5 36.5t-52.5 50.5l-47 45q-6 6-8.5 7t-5.5 1q-4 0-7.5-2t-4.5-6l-1-2v-508l1-2q1-2 3-4t4-3v0zM247 928q-2-1-4.5-1.5t-4.5-0.5h-4q-12 2-22.5 9.5t-17.5 19.5l-3 4v145l2-3q34-37 54-76t20-67v-1q0-14-4.5-20.5t-15.5-8.5v0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-f"],"defaultCode":59664,"grid":16},"attrs":[],"properties":{"id":29,"order":939,"ligatures":"","prevSize":32,"code":59665,"name":"key-sig-f"},"setIdx":1,"setId":1,"iconIdx":37},{"icon":{"paths":["M124 460q1-1 2-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 25.5-16t25.5-5q5 0 10 0.5t10 2.5q14 5 22 18t8 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-5 5-6.5 5.5t-3.5 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t2.5-1.5v0zM176 679q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM260 220q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM311 439q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-bb"],"defaultCode":59665,"grid":16},"attrs":[],"properties":{"id":30,"order":940,"ligatures":"","prevSize":32,"code":59666,"name":"key-sig-bb"},"setIdx":1,"setId":1,"iconIdx":38},{"icon":{"paths":["M722.739 137.452c0.876 0 1.751 0 3.502 0 5.253 0 14.884 0 21.012 0 2.627 0 8.755 0 10.506 0.876 37.647 2.627 77.046 30.643 82.299 61.286 1.751 4.378 2.627 7.88 2.627 13.133 0 34.145-28.892 62.162-60.411 62.162-7.88 0-15.759-1.751-22.764-5.253-21.888-9.631-32.394-30.643-32.394-50.78 0-15.759 6.129-30.643 20.137-41.149 1.751-1.751 1.751-1.751 1.751-1.751s0 0 0 0c-1.751 0-13.133 6.129-19.261 11.382-42.9 28.017-79.672 84.925-104.187 154.967-0.876 5.253-1.751 8.755-1.751 8.755 0 1.751 14.008 1.751 31.519 1.751 35.021 0 35.896 0 39.398 1.751 8.755 5.253 12.257 12.257 12.257 21.012 0 7.004-3.502 14.884-10.506 18.386-5.253 3.502-3.502 4.378-39.398 4.378h-46.403l-1.751 6.129c-23.639 125.199-70.042 243.395-133.079 337.951-42.9 67.415-95.432 105.062-154.967 115.569-6.129 1.751-12.257 1.751-18.386 1.751-39.398 0-70.042-21.012-82.299-56.033-2.627-8.755-3.502-18.386-3.502-27.141 0-35.021 23.639-63.037 58.66-63.037 4.378 0 10.506 1.751 17.51 2.627 27.141 7.004 41.149 32.394 41.149 56.909 0 18.386-7.004 36.772-24.515 46.403-1.751 0.876-3.502 2.627-3.502 2.627s1.751 0 1.751 0c0 0 1.751 0 4.378-1.751 28.017-7.88 55.158-35.021 72.668-71.793 21.012-39.398 44.652-127.826 85.801-304.681 5.253-24.515 9.631-43.776 11.382-45.527 0 0 0 0 0 0s-3.502 0-38.523 0c-39.398 0-39.398 0-43.776-3.502-7.004-4.378-12.257-12.257-12.257-19.261 0-8.755 5.253-15.759 12.257-21.012 3.502-1.751 4.378-1.751 49.905-1.751l43.776-1.751 3.502-9.631c41.149-115.569 130.452-196.992 225.884-203.996z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["forte"],"defaultCode":59666,"grid":16},"attrs":[],"properties":{"id":31,"order":941,"ligatures":"","prevSize":32,"code":59667,"name":"forte"},"setIdx":1,"setId":1,"iconIdx":39},{"icon":{"paths":["M213.627 201.073c2.335 0 4.669 0 7.004 0 9.339 0 22.18 0 26.849 2.335 25.682 5.837 47.862 22.18 61.87 43.192 3.502 7.004 9.339 19.845 10.506 23.347 0 0 0 1.167 0 1.167 2.335 0 2.335-3.502 7.004-8.172 9.339-16.343 22.18-29.184 36.188-40.858 4.669-2.335 8.172-8.172 9.339-9.339 8.172-8.172 24.515-11.674 43.192-11.674 9.339 0 21.012 2.335 30.351 5.837 21.012 5.837 40.858 22.18 53.699 39.69 3.502 7.004 9.339 19.845 9.339 23.347 0 0 0 1.167 2.335 1.167 0 0 1.167-3.502 4.669-8.172 10.506-16.343 23.347-29.184 38.523-40.858 2.335-2.335 7.004-8.172 9.339-9.339 5.837-8.172 23.347-11.674 40.858-11.674 11.674 0 21.012 0 30.351 3.502 40.858 15.176 70.042 54.866 70.042 102.728 0 14.008-3.502 31.519-8.172 42.025-1.167 2.335-61.87 208.957-63.037 217.129 0 2.335-2.335 9.339-2.335 10.506-1.167 3.502-1.167 8.172-1.167 11.674 0 12.841 5.837 24.515 14.008 24.515 0 0 0 0 0 0 39.69-7.004 87.552-57.201 110.899-120.238 4.669-11.674 7.004-14.008 12.841-14.008 2.335 0 2.335 0 2.335 0 7.004 1.167 10.506 2.335 10.506 10.506s-4.669 23.347-17.51 47.862c-26.849 52.531-60.703 92.221-107.397 116.736l-15.176 8.172c-10.506 5.837-22.18 9.339-32.686 9.339-36.188 0-73.544-26.849-86.385-66.54-2.335-9.339-4.669-21.012-4.669-32.686 0-16.343 3.502-30.351 8.172-40.858 3.502-4.669 63.037-208.957 63.037-215.962 2.335-5.837 2.335-10.506 3.502-11.674 0-4.669 2.335-8.172 2.335-11.674 0-14.008-8.172-25.682-21.012-32.686-1.167-1.167-3.502-1.167-4.669-1.167-3.502 0-4.669 1.167-9.339 3.502-19.845 9.339-42.025 42.025-44.36 63.037 0 5.837-5.837 18.678-7.004 24.515-1.167 1.167-18.678 63.037-43.192 142.418-22.18 77.046-42.025 142.418-42.025 143.585-3.502 5.837 0 5.837-39.69 5.837-5.837 0-10.506 0-16.343 0-4.669 0-9.339 0-14.008 0-42.025 0-38.523 0-42.025-5.837-1.167-1.167-1.167-1.167-1.167-2.335 0-8.172 8.172-32.686 44.36-161.096 25.682-84.050 46.694-154.092 46.694-156.426 0-3.502 1.167-8.172 1.167-11.674 1.167-3.502 1.167-8.172 1.167-11.674 0-14.008-5.837-25.682-17.51-32.686-2.335-1.167-5.837-1.167-8.172-1.167-1.167 0-2.335 1.167-7.004 3.502-19.845 9.339-42.025 42.025-44.36 63.037 0 5.837-5.837 18.678-7.004 24.515-1.167 1.167-21.012 63.037-43.192 142.418-23.347 77.046-42.025 142.418-42.025 143.585-3.502 5.837-2.335 5.837-42.025 5.837-3.502 0-9.339 0-15.176 0-4.669 0-10.506 0-12.841 0-42.025 0-39.69 0-43.192-5.837 0-1.167 0-1.167 0-2.335 0-8.172 5.837-32.686 44.36-161.096 23.347-84.050 44.36-154.092 46.694-156.426 0-3.502 0-8.172 1.167-11.674 0-3.502 1.167-8.172 1.167-11.674 0-14.008-5.837-25.682-17.51-30.351-2.335-2.335-5.837-3.502-9.339-3.502-4.669 0-10.506 3.502-22.18 8.172-33.853 17.51-65.372 56.033-84.050 105.062-4.669 15.176-8.172 17.51-14.008 17.51 0 0-2.335 0-2.335 0-7.004 0-10.506-2.335-10.506-10.506s4.669-21.012 15.176-42.025c25.682-53.699 61.87-94.556 107.397-120.238 4.669-2.335 10.506-4.669 11.674-7.004 5.837-2.335 15.176-5.837 25.682-8.172z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mezzo"],"defaultCode":59667,"grid":16},"attrs":[],"properties":{"id":32,"order":942,"ligatures":"","prevSize":32,"code":59668,"name":"mezzo"},"setIdx":1,"setId":1,"iconIdx":40},{"icon":{"paths":["M371 166.405c1.932 0 3.864 0 5.797 0 7.729 0 18.356 0 22.22 1.932 21.254 4.83 39.61 18.356 51.203 35.745 2.898 5.797 7.729 16.424 8.695 19.322 0 0 0 0.966 0 0.966 1.932 0 1.932-2.898 5.797-6.763 7.729-13.525 18.356-24.152 29.949-33.813 3.864-1.932 6.763-6.763 7.729-7.729 6.763-6.763 20.288-9.661 35.745-9.661 7.729 0 17.39 1.932 25.118 4.83 17.39 4.83 33.813 18.356 44.44 32.847 2.898 5.797 7.729 16.424 7.729 19.322 0 0 0 0.966 1.932 0.966 0 0 0.966-2.898 3.864-6.763 8.695-13.525 19.322-24.152 31.881-33.813 1.932-1.932 5.797-6.763 7.729-7.729 4.83-6.763 19.322-9.661 33.813-9.661 9.661 0 17.39 0 25.118 2.898 33.813 12.559 57.965 45.406 57.965 85.016 0 11.593-2.898 26.084-6.763 34.779-0.966 1.932-51.203 172.93-52.169 179.693 0 1.932-1.932 7.729-1.932 8.695-0.966 2.898-0.966 6.763-0.966 9.661 0 10.627 4.83 20.288 11.593 20.288 0 0 0 0 0 0 32.847-5.797 72.457-47.338 91.779-99.507 3.864-9.661 5.797-11.593 10.627-11.593 1.932 0 1.932 0 1.932 0 5.797 0.966 8.695 1.932 8.695 8.695s-3.864 19.322-14.491 39.61c-22.22 43.474-50.237 76.321-88.88 96.609l-12.559 6.763c-8.695 4.83-18.356 7.729-27.051 7.729-29.949 0-60.864-22.22-71.491-55.067-1.932-7.729-3.864-17.39-3.864-27.051 0-13.525 2.898-25.118 6.763-33.813 2.898-3.864 52.169-172.93 52.169-178.727 1.932-4.83 1.932-8.695 2.898-9.661 0-3.864 1.932-6.763 1.932-9.661 0-11.593-6.763-21.254-17.39-27.051-0.966-0.966-2.898-0.966-3.864-0.966-2.898 0-3.864 0.966-7.729 2.898-16.424 7.729-34.779 34.779-36.711 52.169 0 4.83-4.83 15.457-5.797 20.288-0.966 0.966-15.457 52.169-35.745 117.863-18.356 63.762-34.779 117.863-34.779 118.829-2.898 4.83 0 4.83-32.847 4.83-4.83 0-8.695 0-13.525 0-3.864 0-7.729 0-11.593 0-34.779 0-31.881 0-34.779-4.83-0.966-0.966-0.966-0.966-0.966-1.932 0-6.763 6.763-27.051 36.711-133.321 21.254-69.559 38.644-127.524 38.644-129.456 0-2.898 0.966-6.763 0.966-9.661 0.966-2.898 0.966-6.763 0.966-9.661 0-11.593-4.83-21.254-14.491-27.051-1.932-0.966-4.83-0.966-6.763-0.966-0.966 0-1.932 0.966-5.797 2.898-16.424 7.729-34.779 34.779-36.711 52.169 0 4.83-4.83 15.457-5.797 20.288-0.966 0.966-17.39 52.169-35.745 117.863-19.322 63.762-34.779 117.863-34.779 118.829-2.898 4.83-1.932 4.83-34.779 4.83-2.898 0-7.729 0-12.559 0-3.864 0-8.695 0-10.627 0-34.779 0-32.847 0-35.745-4.83 0-0.966 0-0.966 0-1.932 0-6.763 4.83-27.051 36.711-133.321 19.322-69.559 36.711-127.524 38.644-129.456 0-2.898 0-6.763 0.966-9.661 0-2.898 0.966-6.763 0.966-9.661 0-11.593-4.83-21.254-14.491-25.118-1.932-1.932-4.83-2.898-7.729-2.898-3.864 0-8.695 2.898-18.356 6.763-28.017 14.491-54.101 46.372-69.559 86.948-3.864 12.559-6.763 14.491-11.593 14.491 0 0-1.932 0-1.932 0-5.797 0-8.695-1.932-8.695-8.695s3.864-17.39 12.559-34.779c21.254-44.44 51.203-78.253 88.88-99.507 3.864-1.932 8.695-3.864 9.661-5.797 4.83-1.932 12.559-4.83 21.254-6.763zM973.209 159.642c1.932 0 5.797-0.966 10.627-0.966 32.847 0 60.864 18.356 78.253 48.305 3.864 9.661 10.627 27.051 10.627 31.881 0 2.898 0 3.864 0 3.864 0.966 0 2.898-1.932 5.797-4.83 28.017-34.779 70.525-62.796 96.609-65.694 3.864 0 6.763-0.966 9.661-0.966 47.338 0 90.813 41.542 102.406 95.643 2.898 9.661 2.898 20.288 2.898 33.813 0 19.322-1.932 43.474-5.797 62.796-19.322 109.168-91.779 191.286-174.862 199.015-3.864 1.932-7.729 1.932-11.593 1.932-15.457 0-29.949-4.83-38.644-11.593l-8.695-7.729c-18.356-14.491-31.881-34.779-39.61-57.965 0-2.898-0.966-4.83-0.966-4.83s0 0 0 0c-1.932 0.966-71.491 234.76-71.491 237.658 0 0 0 0.966 0 0.966 0 3.864 5.797 6.763 20.288 11.593 3.864 0 4.83 1.932 16.424 4.83 13.525 3.864 16.424 6.763 16.424 15.457s-1.932 10.627-6.763 13.525l-2.898 2.898h-227.997l-3.864-2.898c-4.83-2.898-6.763-4.83-6.763-13.525s3.864-13.525 17.39-15.457c13.525-2.898 14.491-2.898 21.254-4.83 2.898-0.966 4.83-1.932 6.763-1.932 0 0 3.864-1.932 5.797-1.932 12.559-4.83 20.288-10.627 24.152-17.39 2.898-4.83 133.321-448.266 133.321-452.131 0-2.898 0.966-6.763 2.898-10.627 0.966-3.864 0.966-7.729 0.966-10.627 0-12.559-5.797-21.254-11.593-21.254 0 0 0 0 0 0-28.983 1.932-67.626 42.508-86.948 90.813-3.864 12.559-6.763 14.491-11.593 14.491 0 0-1.932 0-1.932 0-4.83 0-8.695-1.932-8.695-8.695s4.83-19.322 14.491-37.678c19.322-40.576 45.406-71.491 80.186-93.711 3.864-4.83 8.695-8.695 11.593-9.661 4.83-5.797 19.322-10.627 31.881-12.559zM1155.8 234.031c-2.898-1.932-5.797-1.932-7.729-1.932-17.39 0-43.474 13.525-63.762 33.813-11.593 10.627-12.559 13.525-15.457 18.356-0.966 4.83-2.898 8.695-3.864 11.593-0.966 1.932-9.661 28.017-22.22 70.525l-20.288 68.592v4.83c1.932 15.457 6.763 30.915 14.491 43.474 6.763 10.627 20.288 20.288 27.051 20.288 0 0 0.966 0 1.932 0 0 0 5.797-2.898 9.661-3.864 41.542-20.288 84.050-75.355 101.44-134.287 5.797-26.084 9.661-52.169 9.661-74.389 0-11.593-0.966-22.22-4.83-28.983-3.864-12.559-17.39-25.118-26.084-28.017z"],"width":1483,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mezzopiano"],"defaultCode":59668,"grid":16},"attrs":[],"properties":{"id":33,"order":943,"ligatures":"","prevSize":32,"code":59669,"name":"mezzopiano"},"setIdx":1,"setId":1,"iconIdx":41},{"icon":{"paths":["M514.578 129.366c0.824 0 1.648 0 3.296 0 4.944 0 14.008 0 19.776 0 2.472 0 8.24 0 9.888 0.824 35.433 2.472 72.514 28.841 77.458 57.681 1.648 4.12 2.472 7.416 2.472 12.36 0 32.137-27.193 58.505-56.857 58.505-7.416 0-14.832-1.648-21.424-4.944-20.6-9.064-30.489-28.841-30.489-47.793 0-14.832 5.768-28.841 18.952-38.729 1.648-1.648 1.648-1.648 1.648-1.648s0 0 0 0c-1.648 0-12.36 5.768-18.128 10.712-40.377 26.369-74.986 79.93-98.058 145.851-0.824 4.944-1.648 8.24-1.648 8.24 0 1.648 13.184 1.648 29.665 1.648 32.961 0 33.785 0 37.081 1.648 8.24 4.944 11.536 11.536 11.536 19.776 0 6.592-3.296 14.008-9.888 17.304-4.944 3.296-3.296 4.12-37.081 4.12h-43.673l-1.648 5.768c-22.249 117.835-65.922 229.077-125.251 318.071-40.377 63.449-89.818 98.882-145.851 108.77-5.768 1.648-11.536 1.648-17.304 1.648-37.081 0-65.922-19.776-77.458-52.737-2.472-8.24-3.296-17.304-3.296-25.545 0-32.961 22.249-59.329 55.209-59.329 4.12 0 9.888 1.648 16.48 2.472 25.545 6.592 38.729 30.489 38.729 53.561 0 17.304-6.592 34.609-23.073 43.673-1.648 0.824-3.296 2.472-3.296 2.472s1.648 0 1.648 0c0 0 1.648 0 4.12-1.648 26.369-7.416 51.913-32.961 68.394-67.57 19.776-37.081 42.025-120.307 80.754-286.759 4.944-23.073 9.064-41.201 10.712-42.849 0 0 0 0 0 0s-3.296 0-36.257 0c-37.081 0-37.081 0-41.201-3.296-6.592-4.12-11.536-11.536-11.536-18.128 0-8.24 4.944-14.832 11.536-19.776 3.296-1.648 4.12-1.648 46.969-1.648l41.201-1.648 3.296-9.064c38.729-108.77 122.779-185.404 212.597-191.996zM875.99 129.366c0.824 0 1.648 0 3.296 0 4.944 0 14.008 0 19.776 0 2.472 0 8.24 0 9.888 0.824 35.433 2.472 72.514 28.841 77.458 57.681 1.648 4.12 2.472 7.416 2.472 12.36 0 32.137-27.193 58.505-56.857 58.505-7.416 0-14.832-1.648-21.424-4.944-20.6-9.064-30.489-28.841-30.489-47.793 0-14.832 5.768-28.841 18.952-38.729 1.648-1.648 1.648-1.648 1.648-1.648s0 0 0 0c-1.648 0-12.36 5.768-18.128 10.712-40.377 26.369-74.986 79.93-98.058 145.851-0.824 4.944-1.648 8.24-1.648 8.24 0 1.648 13.184 1.648 29.665 1.648 32.961 0 33.785 0 37.081 1.648 8.24 4.944 11.536 11.536 11.536 19.776 0 6.592-3.296 14.008-9.888 17.304-4.944 3.296-3.296 4.12-37.081 4.12h-43.673l-1.648 5.768c-22.249 117.835-65.922 229.077-125.251 318.071-40.377 63.449-89.818 98.882-145.851 108.77-5.768 1.648-11.536 1.648-17.304 1.648-37.081 0-65.922-19.776-77.458-52.737-2.472-8.24-3.296-17.304-3.296-25.545 0-32.961 22.249-59.329 55.209-59.329 4.12 0 9.888 1.648 16.48 2.472 25.545 6.592 38.729 30.489 38.729 53.561 0 17.304-6.592 34.609-23.073 43.673-1.648 0.824-3.296 2.472-3.296 2.472s1.648 0 1.648 0c0 0 1.648 0 4.12-1.648 26.369-7.416 51.913-32.961 68.394-67.57 19.776-37.081 42.025-120.307 80.754-286.759 4.944-23.073 9.064-41.201 10.712-42.849 0 0 0 0 0 0s-3.296 0-36.257 0c-37.081 0-37.081 0-41.201-3.296-6.592-4.12-11.536-11.536-11.536-18.128 0-8.24 4.944-14.832 11.536-19.776 3.296-1.648 4.12-1.648 46.969-1.648l41.201-1.648 3.296-9.064c38.729-108.77 122.779-185.404 212.597-191.996z"],"width":1114,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fortissimo"],"defaultCode":59669,"grid":16},"attrs":[],"properties":{"id":34,"order":944,"ligatures":"","prevSize":32,"code":59670,"name":"fortissimo"},"setIdx":1,"setId":1,"iconIdx":42},{"icon":{"paths":["M372.933 159.642c1.932 0 5.797-0.966 10.627-0.966 32.847 0 60.864 18.356 78.253 48.305 3.864 9.661 10.627 27.051 10.627 31.881 0 2.898 0 3.864 0 3.864 0.966 0 2.898-1.932 5.797-4.83 28.017-34.779 70.525-62.796 96.609-65.694 3.864 0 6.763-0.966 9.661-0.966 47.338 0 90.813 41.542 102.406 95.643 2.898 9.661 2.898 20.288 2.898 33.813 0 19.322-1.932 43.474-5.797 62.796-19.322 109.168-91.779 191.286-174.862 199.015-3.864 1.932-7.729 1.932-11.593 1.932-15.457 0-29.949-4.83-38.644-11.593l-8.695-7.729c-18.356-14.491-31.881-34.779-39.61-57.965 0-2.898-0.966-4.83-0.966-4.83s0 0 0 0c-1.932 0.966-71.491 234.76-71.491 237.658 0 0 0 0.966 0 0.966 0 3.864 5.797 6.763 20.288 11.593 3.864 0 4.83 1.932 16.424 4.83 13.525 3.864 16.424 6.763 16.424 15.457s-1.932 10.627-6.763 13.525l-2.898 2.898h-227.997l-3.864-2.898c-4.83-2.898-6.763-4.83-6.763-13.525s3.864-13.525 17.39-15.457c13.525-2.898 14.491-2.898 21.254-4.83 2.898-0.966 4.83-1.932 6.763-1.932 0 0 3.864-1.932 5.797-1.932 12.559-4.83 20.288-10.627 24.152-17.39 2.898-4.83 133.321-448.266 133.321-452.131 0-2.898 0.966-6.763 2.898-10.627 0.966-3.864 0.966-7.729 0.966-10.627 0-12.559-5.797-21.254-11.593-21.254 0 0 0 0 0 0-28.983 1.932-67.626 42.508-86.948 90.813-3.864 12.559-6.763 14.491-11.593 14.491 0 0-1.932 0-1.932 0-4.83 0-8.695-1.932-8.695-8.695s4.83-19.322 14.491-37.678c19.322-40.576 45.406-71.491 80.186-93.711 3.864-4.83 8.695-8.695 11.593-9.661 4.83-5.797 19.322-10.627 31.881-12.559zM555.524 234.031c-2.898-1.932-5.797-1.932-7.729-1.932-17.39 0-43.474 13.525-63.762 33.813-11.593 10.627-12.559 13.525-15.457 18.356-0.966 4.83-2.898 8.695-3.864 11.593-0.966 1.932-9.661 28.017-22.22 70.525l-20.288 68.592v4.83c1.932 15.457 6.763 30.915 14.491 43.474 6.763 10.627 20.288 20.288 27.051 20.288 0 0 0.966 0 1.932 0 0 0 5.797-2.898 9.661-3.864 41.542-20.288 84.050-75.355 101.44-134.287 5.797-26.084 9.661-52.169 9.661-74.389 0-11.593-0.966-22.22-4.83-28.983-3.864-12.559-17.39-25.118-26.084-28.017zM867.277 159.642c1.932 0 5.797-0.966 10.627-0.966 32.847 0 60.864 18.356 78.253 48.305 3.864 9.661 10.627 27.051 10.627 31.881 0 2.898 0 3.864 0 3.864 0.966 0 2.898-1.932 5.797-4.83 28.017-34.779 70.525-62.796 96.609-65.694 3.864 0 6.763-0.966 9.661-0.966 47.338 0 90.813 41.542 102.406 95.643 2.898 9.661 2.898 20.288 2.898 33.813 0 19.322-1.932 43.474-5.797 62.796-19.322 109.168-91.779 191.286-174.862 199.015-3.864 1.932-7.729 1.932-11.593 1.932-15.457 0-29.949-4.83-38.644-11.593l-8.695-7.729c-18.356-14.491-31.881-34.779-39.61-57.965 0-2.898-0.966-4.83-0.966-4.83s0 0 0 0c-1.932 0.966-71.491 234.76-71.491 237.658 0 0 0 0.966 0 0.966 0 3.864 5.797 6.763 20.288 11.593 3.864 0 4.83 1.932 16.424 4.83 13.525 3.864 16.424 6.763 16.424 15.457s-1.932 10.627-6.763 13.525l-2.898 2.898h-227.997l-3.864-2.898c-4.83-2.898-6.763-4.83-6.763-13.525s3.864-13.525 17.39-15.457c13.525-2.898 14.491-2.898 21.254-4.83 2.898-0.966 4.83-1.932 6.763-1.932 0 0 3.864-1.932 5.797-1.932 12.559-4.83 20.288-10.627 24.152-17.39 2.898-4.83 133.321-448.266 133.321-452.131 0-2.898 0.966-6.763 2.898-10.627 0.966-3.864 0.966-7.729 0.966-10.627 0-12.559-5.797-21.254-11.593-21.254 0 0 0 0 0 0-28.983 1.932-67.626 42.508-86.948 90.813-3.864 12.559-6.763 14.491-11.593 14.491 0 0-1.932 0-1.932 0-4.83 0-8.695-1.932-8.695-8.695s4.83-19.322 14.491-37.678c19.322-40.576 45.406-71.491 80.186-93.711 3.864-4.83 8.695-8.695 11.593-9.661 4.83-5.797 19.322-10.627 31.881-12.559zM1049.869 234.031c-2.898-1.932-5.797-1.932-7.729-1.932-17.39 0-43.474 13.525-63.762 33.813-11.593 10.627-12.559 13.525-15.457 18.356-0.966 4.83-2.898 8.695-3.864 11.593-0.966 1.932-9.661 28.017-22.22 70.525l-20.288 68.592v4.83c1.932 15.457 6.763 30.915 14.491 43.474 6.763 10.627 20.288 20.288 27.051 20.288 0 0 0.966 0 1.932 0 0 0 5.797-2.898 9.661-3.864 41.542-20.288 84.050-75.355 101.44-134.287 5.797-26.084 9.661-52.169 9.661-74.389 0-11.593-0.966-22.22-4.83-28.983-3.864-12.559-17.39-25.118-26.084-28.017z"],"width":1483,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pianissimo"],"defaultCode":59670,"grid":16},"attrs":[],"properties":{"id":35,"order":945,"ligatures":"","prevSize":32,"code":59671,"name":"pianissimo"},"setIdx":1,"setId":1,"iconIdx":43},{"icon":{"paths":["M388.657 342.957c1.932 0 3.864 0 5.797 0 7.729 0 18.356 0 22.22 1.932 21.254 4.83 39.61 18.356 51.203 35.745 2.898 5.797 7.729 16.424 8.695 19.322 0 0 0 0.966 0 0.966 1.932 0 1.932-2.898 5.797-6.763 7.729-13.525 18.356-24.152 29.949-33.813 3.864-1.932 6.763-6.763 7.729-7.729 6.763-6.763 20.288-9.661 35.745-9.661 7.729 0 17.39 1.932 25.118 4.83 17.39 4.83 33.813 18.356 44.44 32.847 2.898 5.797 7.729 16.424 7.729 19.322 0 0 0 0.966 1.932 0.966 0 0 0.966-2.898 3.864-6.763 8.695-13.525 19.322-24.152 31.881-33.813 1.932-1.932 5.797-6.763 7.729-7.729 4.83-6.763 19.322-9.661 33.813-9.661 9.661 0 17.39 0 25.118 2.898 33.813 12.559 57.965 45.406 57.965 85.016 0 11.593-2.898 26.084-6.763 34.779-0.966 1.932-51.203 172.93-52.169 179.693 0 1.932-1.932 7.729-1.932 8.695-0.966 2.898-0.966 6.763-0.966 9.661 0 10.627 4.83 20.288 11.593 20.288 0 0 0 0 0 0 32.847-5.797 72.457-47.338 91.779-99.507 3.864-9.661 5.797-11.593 10.627-11.593 1.932 0 1.932 0 1.932 0 5.797 0.966 8.695 1.932 8.695 8.695s-3.864 19.322-14.491 39.61c-22.22 43.474-50.237 76.321-88.88 96.609l-12.559 6.763c-8.695 4.83-18.356 7.729-27.051 7.729-29.949 0-60.864-22.22-71.491-55.067-1.932-7.729-3.864-17.39-3.864-27.051 0-13.525 2.898-25.118 6.763-33.813 2.898-3.864 52.169-172.93 52.169-178.727 1.932-4.83 1.932-8.695 2.898-9.661 0-3.864 1.932-6.763 1.932-9.661 0-11.593-6.763-21.254-17.39-27.051-0.966-0.966-2.898-0.966-3.864-0.966-2.898 0-3.864 0.966-7.729 2.898-16.424 7.729-34.779 34.779-36.711 52.169 0 4.83-4.83 15.457-5.797 20.288-0.966 0.966-15.457 52.169-35.745 117.863-18.356 63.762-34.779 117.863-34.779 118.829-2.898 4.83 0 4.83-32.847 4.83-4.83 0-8.695 0-13.525 0-3.864 0-7.729 0-11.593 0-34.779 0-31.881 0-34.779-4.83-0.966-0.966-0.966-0.966-0.966-1.932 0-6.763 6.763-27.051 36.711-133.321 21.254-69.559 38.644-127.524 38.644-129.456 0-2.898 0.966-6.763 0.966-9.661 0.966-2.898 0.966-6.763 0.966-9.661 0-11.593-4.83-21.254-14.491-27.051-1.932-0.966-4.83-0.966-6.763-0.966-0.966 0-1.932 0.966-5.797 2.898-16.424 7.729-34.779 34.779-36.711 52.169 0 4.83-4.83 15.457-5.797 20.288-0.966 0.966-17.39 52.169-35.745 117.863-19.322 63.762-34.779 117.863-34.779 118.829-2.898 4.83-1.932 4.83-34.779 4.83-2.898 0-7.729 0-12.559 0-3.864 0-8.695 0-10.627 0-34.779 0-32.847 0-35.745-4.83 0-0.966 0-0.966 0-1.932 0-6.763 4.83-27.051 36.711-133.321 19.322-69.559 36.711-127.524 38.644-129.456 0-2.898 0-6.763 0.966-9.661 0-2.898 0.966-6.763 0.966-9.661 0-11.593-4.83-21.254-14.491-25.118-1.932-1.932-4.83-2.898-7.729-2.898-3.864 0-8.695 2.898-18.356 6.763-28.017 14.491-54.101 46.372-69.559 86.948-3.864 12.559-6.763 14.491-11.593 14.491 0 0-1.932 0-1.932 0-5.797 0-8.695-1.932-8.695-8.695s3.864-17.39 12.559-34.779c21.254-44.44 51.203-78.253 88.88-99.507 3.864-1.932 8.695-3.864 9.661-5.797 4.83-1.932 12.559-4.83 21.254-6.763zM1256.54 151.671c0.966 0 1.932 0 3.864 0 5.797 0 16.424 0 23.186 0 2.898 0 9.661 0 11.593 0.966 41.542 2.898 85.016 33.813 90.813 67.626 1.932 4.83 2.898 8.695 2.898 14.491 0 37.678-31.881 68.592-66.66 68.592-8.695 0-17.39-1.932-25.118-5.797-24.152-10.627-35.745-33.813-35.745-56.033 0-17.39 6.763-33.813 22.22-45.406 1.932-1.932 1.932-1.932 1.932-1.932s0 0 0 0c-1.932 0-14.491 6.763-21.254 12.559-47.338 30.915-87.914 93.711-114.965 170.998-0.966 5.797-1.932 9.661-1.932 9.661 0 1.932 15.457 1.932 34.779 1.932 38.644 0 39.61 0 43.474 1.932 9.661 5.797 13.525 13.525 13.525 23.186 0 7.729-3.864 16.424-11.593 20.288-5.797 3.864-3.864 4.83-43.474 4.83h-51.203l-1.932 6.763c-26.084 138.151-77.287 268.573-146.846 372.911-47.338 74.389-105.304 115.931-170.998 127.524-6.763 1.932-13.525 1.932-20.288 1.932-43.474 0-77.287-23.186-90.813-61.83-2.898-9.661-3.864-20.288-3.864-29.949 0-38.644 26.084-69.559 64.728-69.559 4.83 0 11.593 1.932 19.322 2.898 29.949 7.729 45.406 35.745 45.406 62.796 0 20.288-7.729 40.576-27.051 51.203-1.932 0.966-3.864 2.898-3.864 2.898s1.932 0 1.932 0c0 0 1.932 0 4.83-1.932 30.915-8.695 60.864-38.644 80.186-79.219 23.186-43.474 49.271-141.049 94.677-336.2 5.797-27.051 10.627-48.305 12.559-50.237 0 0 0 0 0 0s-3.864 0-42.508 0c-43.474 0-43.474 0-48.305-3.864-7.729-4.83-13.525-13.525-13.525-21.254 0-9.661 5.797-17.39 13.525-23.186 3.864-1.932 4.83-1.932 55.067-1.932l48.305-1.932 3.864-10.627c45.406-127.524 143.948-217.37 249.251-225.099z"],"width":1660,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mezzoforte"],"defaultCode":59671,"grid":16},"attrs":[],"properties":{"id":36,"order":946,"ligatures":"","prevSize":32,"code":59672,"name":"mezzoforte"},"setIdx":1,"setId":1,"iconIdx":44},{"icon":{"paths":["M353.298 294.994c2.472 0 4.12 0 6.592 0 40.377 0 87.346 18.128 97.234 40.377 4.12 5.768 4.944 12.36 4.944 18.128 0 19.776-13.184 38.729-32.961 42.025-3.296 1.648-4.944 1.648-8.24 1.648-20.6 0-37.081-17.304-37.081-37.081 0-5.768 0.824-11.536 4.12-17.304 0.824-1.648 0.824-3.296 0.824-3.296s0 0 0 0c0-0.824-1.648-0.824-4.944-0.824-3.296-1.648-7.416-1.648-10.712-1.648-23.073 0-45.321 11.536-52.737 28.017 0 0.824 0 2.472 0 4.12 0 13.184 19.776 37.081 42.025 49.441 12.36 8.24 16.48 10.712 22.249 14.008 36.257 27.193 55.209 62.625 55.209 95.586 0 13.184-2.472 25.545-9.064 35.433-21.424 40.377-62.625 63.449-111.243 63.449-5.768 0-12.36 0-18.952-0.824-28.841-4.12-65.097-19.776-80.754-36.257-8.24-7.416-11.536-17.304-11.536-27.193 0-18.128 12.36-37.905 31.313-42.025 3.296-1.648 7.416-2.472 10.712-2.472 21.424 0 37.905 18.128 37.905 37.905 0 6.592-2.472 13.184-6.592 20.6l-2.472 4.12h0.824c8.24 3.296 17.304 4.944 27.193 4.944 9.064 0 18.128-1.648 24.721-4.944 18.952-6.592 31.313-20.6 31.313-32.137 0-0.824 0-3.296-0.824-4.12-6.592-19.776-18.952-32.137-43.673-46.145-46.145-26.369-74.162-68.394-74.162-108.77 0-12.36 3.296-24.721 9.064-36.257 18.128-32.961 56.033-56.033 99.706-58.505zM830.814 129.366c0.824 0 1.648 0 3.296 0 4.944 0 14.008 0 19.776 0 2.472 0 8.24 0 9.888 0.824 35.433 2.472 72.514 28.841 77.458 57.681 1.648 4.12 2.472 7.416 2.472 12.36 0 32.137-27.193 58.505-56.857 58.505-7.416 0-14.832-1.648-21.424-4.944-20.6-9.064-30.489-28.841-30.489-47.793 0-14.832 5.768-28.841 18.952-38.729 1.648-1.648 1.648-1.648 1.648-1.648s0 0 0 0c-1.648 0-12.36 5.768-18.128 10.712-40.377 26.369-74.986 79.93-98.058 145.851-0.824 4.944-1.648 8.24-1.648 8.24 0 1.648 13.184 1.648 29.665 1.648 32.961 0 33.785 0 37.081 1.648 8.24 4.944 11.536 11.536 11.536 19.776 0 6.592-3.296 14.008-9.888 17.304-4.944 3.296-3.296 4.12-37.081 4.12h-43.673l-1.648 5.768c-22.249 117.835-65.922 229.077-125.251 318.071-40.377 63.449-89.818 98.882-145.851 108.77-5.768 1.648-11.536 1.648-17.304 1.648-37.081 0-65.922-19.776-77.458-52.737-2.472-8.24-3.296-17.304-3.296-25.545 0-32.961 22.249-59.329 55.209-59.329 4.12 0 9.888 1.648 16.48 2.472 25.545 6.592 38.729 30.489 38.729 53.561 0 17.304-6.592 34.609-23.073 43.673-1.648 0.824-3.296 2.472-3.296 2.472s1.648 0 1.648 0c0 0 1.648 0 4.12-1.648 26.369-7.416 51.913-32.961 68.394-67.57 19.776-37.081 42.025-120.307 80.754-286.759 4.944-23.073 9.064-41.201 10.712-42.849 0 0 0 0 0 0s-3.296 0-36.257 0c-37.081 0-37.081 0-41.201-3.296-6.592-4.12-11.536-11.536-11.536-18.128 0-8.24 4.944-14.832 11.536-19.776 3.296-1.648 4.12-1.648 46.969-1.648l41.201-1.648 3.296-9.064c38.729-108.77 122.779-185.404 212.597-191.996zM907.94 318.066c1.648 0 42.025-1.648 87.346-1.648 70.042 0 154.916 1.648 156.564 1.648 4.12 2.472 7.416 8.24 7.416 12.36 0 3.296-0.824 7.416-4.12 9.064-14.832 13.184-194.468 165.628-195.292 165.628 0 0 0 0.824 0 0.824s0 0 2.472 0c0.824 0 3.296 0 6.592 0 0.824 0 1.648 0 3.296 0 18.128 0 32.137 4.944 44.497 15.656 15.656 12.36 27.193 18.128 40.377 18.952 2.472 0 3.296 0 4.944 0 7.416 0 10.712-3.296 16.48-13.184 0 0 0 0 0 0s0 0 0 0-0.824 0-2.472 0c-0.824 0.824-3.296 0.824-4.944 0.824-10.712 0-20.6-5.768-24.721-14.008-3.296-5.768-4.944-11.536-4.944-15.656 0-18.952 14.832-33.785 34.609-33.785 0 0 0 0 0 0 23.073 0 35.433 16.48 35.433 40.377 0 8.24-2.472 18.128-5.768 29.665-4.944 14.008-12.36 22.249-36.257 40.377-22.249 17.304-47.793 26.369-71.69 26.369-9.064 0-16.48-0.824-24.721-3.296-9.064-2.472-13.184-4.944-21.424-10.712-14.008-9.888-31.313-14.832-47.793-14.832-18.128 0-34.609 5.768-43.673 17.304-2.472 2.472-4.944 3.296-8.24 3.296-5.768 0-10.712-1.648-13.184-7.416 0-1.648-1.648-4.12-1.648-4.944 0-8.24 8.24-15.656 32.137-32.961 4.12-4.12 175.516-149.971 178.812-151.619 0 0 0 0 0 0 0-1.648-19.776-1.648-44.497-1.648-33.785 0-74.162 1.648-77.458 1.648-12.36 1.648-22.249 7.416-36.257 18.952-4.12 4.12-8.24 5.768-12.36 5.768-3.296 0-6.592-1.648-9.888-5.768-0.824-1.648-2.472-3.296-2.472-5.768 0-5.768 4.944-14.832 18.128-46.969 18.952-42.025 18.952-43.673 24.721-44.497z"],"width":1265,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sfz"],"defaultCode":59672,"grid":16},"attrs":[],"properties":{"id":37,"order":947,"ligatures":"","prevSize":32,"code":59673,"name":"sfz"},"setIdx":1,"setId":1,"iconIdx":45},{"icon":{"paths":["M86.78 433.898v-351.395h81.976v703.79h-81.976v-352.395zM199.246 433.898v-351.395h21.494v336.4l2.999-2.999c4.999-3.999 13.996-13.496 19.994-21.494 21.494-28.991 38.988-66.98 49.485-111.467 2.999-10.997 3.999-12.496 9.497-12.496s7.498 2.499 8.497 10.497c3.999 55.483 39.988 95.472 80.976 95.472 6.498 0 13.496-1 19.994-3.499 26.992-8.997 36.489-32.99 38.489-96.971 0-12.996 0.5-24.993 0.5-35.989 0-72.478-8.997-106.968-28.991-123.463-10.997-8.497-27.492-13.496-44.987-13.496-17.995 0-35.489 4.499-51.984 12.496l-1 1 1 0.5c5.498 1 8.997 1.5 12.996 3.499 14.496 7.498 20.994 21.494 20.994 35.489 0 15.995-9.497 32.49-26.992 37.989-4.999 1.999-8.997 2.999-12.996 2.999-23.993 0-42.987-20.994-42.987-44.487 0-6.498 1.5-12.496 4.999-19.494 9.997-19.494 44.987-39.488 75.977-44.487 6.998-0.5 13.496-1.5 20.494-1.5 65.98 0 125.962 47.986 141.458 115.965 2.999 10.997 3.999 22.993 3.999 34.99 0 12.496-1 25.492-3.999 37.489-12.996 61.482-58.483 107.968-112.966 116.465-4.499 0.5-9.497 0.5-13.496 0.5-17.495 0-34.49-5.498-50.485-16.495-1-1.5-2.499-1.999-3.499-1.999 0 0 0 0 0 0s-7.998 13.496-17.495 30.491l-18.494 29.991 18.494 29.991c9.497 16.495 17.495 30.491 17.495 30.491s0 0 0 0c1 0 2.499-1 3.499-2.499 15.995-10.997 32.99-16.495 50.485-16.495 8.997 0 17.495 1.5 26.492 3.499 52.984 15.495 92.472 62.481 101.97 123.463 1.5 8.997 1.999 17.995 1.999 26.992 0 38.489-12.996 73.478-37.489 101.47-28.491 33.49-68.979 49.985-108.468 49.985-31.99 0-63.481-11.996-87.474-34.49-8.497-9.497-12.496-20.494-12.496-31.491 0-21.993 15.995-42.987 41.987-42.987 24.493 0 39.988 20.994 39.988 40.988 0 13.996-6.498 26.992-20.994 34.49-3.999 1.999-7.498 2.999-12.996 3.499l-1 1 1 0.5c16.495 8.497 33.99 12.496 51.984 12.496 17.495 0 33.99-4.999 44.987-12.996 19.994-16.995 28.991-51.485 28.991-122.963 0-11.996-0.5-23.493-0.5-36.989-2.999-71.979-14.996-96.471-52.484-99.97-1.999-0.5-3.999-0.5-5.998-0.5-41.488 0-76.977 40.988-80.976 95.971-1 7.498-2.999 9.997-8.497 9.997s-6.498-1-9.497-12.496c-10.497-43.987-27.992-82.475-49.485-111.467-5.998-7.498-14.996-17.495-19.994-21.494l-2.999-2.999v336.899h-21.494v-352.395zM0 260.339h781.017v17.356h-781.017zM0 433.898h781.017v17.356h-781.017zM0 607.458h781.017v17.356h-781.017zM0 781.017h781.017v17.356h-781.017zM0 954.576h781.017v17.356h-781.017z"],"width":729,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["tenor"],"defaultCode":59673,"grid":16},"attrs":[],"properties":{"id":38,"order":948,"ligatures":"","prevSize":32,"code":59674,"name":"tenor"},"setIdx":1,"setId":1,"iconIdx":46},{"icon":{"paths":["M334.093 80.245v754.77h17.697v-754.77zM273.74 727.064c1.988 0 4.969 0 5.466 0 0 0 0.497 0 0.497 0s2.982 0 5.466 0c44.723 2.902 71.060 37.144 71.060 80.092 0 20.894-5.963 44.689-20.871 67.324-28.325 44.689-74.539 69.065-114.789 69.065-31.306 0-58.14-14.509-71.060-44.109-3.975-11.608-5.963-22.635-5.963-34.823 0-63.261 60.625-133.487 130.194-137.549zM390.654 301.818l0.013 4.4 9.888-0.022-0.013-4.411zM405.499 306.185l9.888 0.011 0.013-4.4-9.901-0.011zM420.344 306.207l9.888 0.011 0.013-4.4-9.901-0.011zM375.809 301.851l0.013 4.4 9.888-0.022-0.013-4.4zM435.177 306.228l9.901 0.022 0.013-4.411-9.901-0.011zM450.022 306.25l9.901 0.022v-4.411l-9.888-0.011zM360.965 301.894l0.013 4.4 9.901-0.022-0.025-4.411zM464.866 306.272l9.901 0.022v-4.411l-9.888-0.011zM479.711 306.294l9.888 0.022 0.013-4.4-9.888-0.022zM346.12 301.927l0.013 4.4 9.901-0.022-0.013-4.4zM494.556 306.327l9.888 0.011 0.013-4.4-9.901-0.022zM331.275 301.971l0.013 4.4 9.901-0.022-0.013-4.411zM509.401 306.349l9.888 0.011 0.013-4.4-9.901-0.022zM524.234 306.371h1.968l7.921 0.055 0.038-4.4-9.913-0.066zM316.43 302.004l0.013 4.4c6.961-0.156 9.907 2.033 9.888-4.422zM301.585 302.037l0.025 4.411 9.888-0.033-0.013-4.4zM286.752 302.080l0.013 4.4 9.888-0.022-0.013-4.4zM539.066 306.458l9.901 0.077 0.038-4.4-9.901-0.077zM271.908 302.113l0.013 4.411 9.888-0.033-0.013-4.4zM257.063 302.157l0.013 4.4 9.901-0.022-0.025-4.4zM242.218 302.19l0.013 2.846h-2.472l0.037 8.81 4.956-0.022-0.037-7.234 7.416-0.022-0.013-4.4zM553.911 306.568l9.888 0.066 0.050-4.4-9.901-0.066zM568.756 306.677l9.888 0.066 0.038-4.4-9.888-0.077zM583.601 306.776l9.888 0.077 0.038-4.4-9.888-0.077zM598.433 306.885l9.901 0.066 0.038-4.4-9.888-0.066zM613.278 306.995h0.21l9.667 0.142 0.086-4.4-9.926-0.153zM628.099 307.214l9.888 0.153 0.086-4.411-9.888-0.142zM642.944 307.444l9.888 0.142 0.086-4.4-9.888-0.153zM657.776 307.662l9.901 0.153 0.086-4.4-9.901-0.153zM672.584 307.892l9.888 0.274 0.16-4.4-9.888-0.274zM687.429 308.308l9.888 0.274 0.147-4.4-9.888-0.274zM702.262 308.713l5.192 0.142 4.637 0.241 0.271-4.4-4.749-0.241-5.202-0.142zM717.020 309.337l8.598 0.427 1.144 0.12 0.554-4.378-1.279-0.12-0.074-0.011h-0.063l-8.597-0.438zM731.914 308.483h-0.959l-0.074 7.442 4.944 0.044 0.086-7.453 0.013-1.642-2.73-0.744-0.222-0.055-0.222-0.022-0.529-0.055zM239.819 318.246l0.049 8.81 4.944-0.022-0.049-8.81zM730.746 329.136l4.944 0.033 0.098-8.8-4.956-0.044zM239.893 331.456l0.037 8.81 4.944-0.022-0.037-8.81zM730.611 342.346l4.956 0.033 0.086-8.8-4.944-0.044zM239.955 344.667l0.049 8.81 4.944-0.022-0.049-8.81zM730.475 355.546l4.956 0.044 0.086-8.81-4.944-0.033zM240.016 357.877l0.049 8.8 4.944-0.011-0.037-8.81zM730.34 368.756l4.956 0.044 0.086-8.81-4.944-0.033zM240.090 371.087l0.037 8.8 4.956-0.022-0.049-8.8zM730.217 381.966l4.944 0.044 0.086-8.81-4.944-0.044zM240.152 384.286l0.049 8.81 4.944-0.022-0.049-8.8zM730.082 395.176l4.944 0.033 0.086-8.8-4.944-0.044zM240.225 397.497l0.037 8.81 4.956-0.022-0.049-8.8zM729.947 408.387l4.944 0.033 0.086-8.8-4.944-0.044zM240.287 410.707l0.049 8.81 4.944-0.022-0.049-8.81zM729.811 421.586l4.944 0.044 0.086-8.8-4.944-0.044zM240.348 423.917l0.049 8.81 4.944-0.022-0.037-8.81zM729.676 434.796l4.944 0.044 0.086-8.81-4.944-0.033zM240.422 437.127l0.037 8.8 4.956-0.011-0.049-8.81zM729.541 448.007l4.944 0.044 0.086-8.81-4.944-0.044zM240.484 450.338l0.049 8.8 4.944-0.022-0.037-8.8zM729.405 461.217l4.944 0.033 0.098-8.8-4.956-0.044zM240.557 463.548l0.037 8.8 4.956-0.022-0.049-8.8zM729.27 474.427l4.944 0.033 0.098-8.8-4.956-0.044zM240.619 476.747l0.049 8.81 4.944-0.022-0.049-8.8zM729.135 487.626l4.944 0.044 0.098-8.8-4.956-0.044zM240.693 489.958l0.037 8.81 4.944-0.022-0.037-8.81zM729 500.837l4.944 0.044 0.098-8.81-4.944-0.033zM240.754 503.168l0.049 8.811 4.944-0.022-0.049-8.811zM728.864 514.047l4.956 0.045 0.086-8.811-4.944-0.033zM240.816 516.378l0.049 8.8 4.944-0.011-0.037-8.811zM728.729 527.257l4.956 0.045 0.086-8.811-4.944-0.045zM240.889 529.588l0.037 8.8 4.956-0.011-0.049-8.811zM728.594 540.467l4.956 0.034 0.086-8.8-4.944-0.045zM240.951 542.799l0.049 8.8 4.944-0.022-0.049-8.8zM728.471 553.667l4.944 0.045 0.086-8.8-4.944-0.045zM241.025 555.998l0.037 8.811 4.944-0.022-0.037-8.8zM728.335 566.877l4.944 0.045 0.086-8.811-4.944-0.034zM241.086 569.208l0.049 8.811 4.944-0.022-0.049-8.8zM728.2 580.087l4.944 0.045 0.086-8.811-4.944-0.034zM241.148 582.418l0.049 8.811 4.944-0.022-0.037-8.811zM728.065 593.297l4.944 0.045 0.086-8.81-4.944-0.045zM241.222 595.629l0.037 8.81 4.956-0.022-0.049-8.81zM727.93 606.508l4.944 0.034 0.086-8.8-4.944-0.045zM241.283 608.839l0.049 8.8 4.944-0.011-0.037-8.81zM727.794 619.718l4.944 0.034 0.086-8.8-4.944-0.045zM241.357 622.049l0.037 8.8 4.956-0.022-0.049-8.8zM727.659 632.917l4.944 0.045 0.098-8.81-4.956-0.034zM241.418 635.259l0.049 8.8 4.944-0.022-0.049-8.8zM727.524 646.128l4.944 0.045 0.098-8.811-4.956-0.034zM241.48 648.459l0.049 8.811 4.944-0.022-0.037-8.8zM727.388 659.338l4.944 0.045 0.098-8.811-4.956-0.045zM241.554 661.669l0.037 8.811 4.956-0.022-0.049-8.811zM727.253 672.548l4.956 0.034 0.086-8.8-4.944-0.045zM241.615 674.879l0.049 8.811 4.944-0.022-0.037-8.811zM727.118 685.758l4.956 0.034 0.086-8.8-4.944-0.045zM241.689 688.090l0.037 8.8 4.956-0.011-0.049-8.811zM726.983 698.958l4.956 0.045 0.086-8.811-4.944-0.034zM241.75 701.3l0.049 8.8 4.944-0.011-0.049-8.81zM726.847 712.168l4.956 0.045 0.086-8.81-4.944-0.034zM241.824 714.51l0.037 8.8 4.944-0.022-0.037-8.8zM726.724 725.378l4.944 0.045 0.086-8.81-4.944-0.045zM241.886 727.709l0.049 8.81 4.944-0.022-0.049-8.8zM726.589 738.589l4.944 0.034 0.086-8.8-4.944-0.045zM241.947 740.92l0.049 8.811 4.944-0.022-0.037-8.811zM726.454 751.799l4.944 0.034 0.086-8.8-4.944-0.045zM242.021 754.13l0.037 7.913 0.013 2.189h3.468v-2.2l1.464-0.011-0.037-7.913zM726.368 759.832h-0.91v4.4h5.817l0.025-2.178 0.050-5.812-4.944-0.045zM250.483 764.232h9.901v-4.4h-9.901zM265.328 764.232h9.888v-4.4h-9.888zM280.172 764.232h9.888v-4.4h-9.888zM295.017 764.232h9.888v-4.4h-9.888zM309.85 764.232h9.901v-4.4h-9.901zM324.695 764.232h9.901v-4.4h-9.901zM339.54 764.232h9.901v-4.4h-9.901zM354.385 764.232h9.901v-4.4h-9.901zM369.229 764.232h9.888v-4.4h-9.888zM384.074 764.232h9.888v-4.4h-9.888zM398.919 764.232h9.888v-4.4h-9.888zM413.752 764.232h9.901v-4.4h-9.901zM428.597 764.232h9.901v-4.4h-9.901zM443.442 764.232h9.901v-4.4h-9.901zM458.286 764.232h9.901v-4.4h-9.901zM473.131 764.232h9.888v-4.4h-9.888zM487.976 764.232h9.888v-4.4h-9.888zM502.821 764.232h9.888v-4.4h-9.888zM517.654 764.232h9.901v-4.4h-9.901zM532.499 764.232h9.901v-4.4h-9.901zM547.343 764.232h9.901v-4.4h-9.901zM562.188 764.232h9.901v-4.4h-9.901zM577.033 764.232h9.888v-4.4h-9.888zM591.878 764.232h9.888v-4.4h-9.888zM606.723 764.232h9.888v-4.4h-9.888zM621.556 764.232h9.901v-4.4h-9.901zM636.4 764.232h9.901v-4.4h-9.901zM651.245 764.232h9.901v-4.4h-9.901zM666.090 764.232h9.901v-4.4h-9.901zM680.935 764.232h9.888v-4.4h-9.888zM695.78 764.232h9.888v-4.4h-9.888zM710.625 764.232h9.888v-4.4h-9.888zM765.775 74.618v760.988h17.697v-760.988zM705.422 726.767c1.988 0 4.969 0 5.466 0 0 0 0.497 0 0.497 0s2.982 0 5.466 0c44.723 2.926 71.060 37.45 71.060 80.752 0 21.066-5.963 45.057-20.871 67.878-28.325 45.057-74.539 69.634-114.789 69.634-31.306 0-58.14-14.629-71.060-44.472-3.975-11.703-5.963-22.821-5.963-35.109 0-63.782 60.625-134.586 130.194-138.682zM898.337-20.842l-59.011 0.697 0.682 41.465 34.104-0.403 0.026 12.212 49.22-0.073-0.073-33.201-0.042-21.002zM691.696-18.398l0.696 41.465 98.41-1.161-0.696-41.477zM544.081-16.649l0.682 41.465 98.425-1.161-0.696-41.477zM477.077-15.855l0.348 20.733-24.617 0.037 0.189 82.942 49.205-0.073-0.174-82.942-6.803 0.013-0.348-20.928zM874.242 74.593l0.174 82.942 49.219-0.073-0.189-82.942zM453.084 129.322l0.189 82.942 49.205-0.073-0.174-82.942zM874.518 199.013l0.174 82.942 49.219-0.086-0.189-82.93zM453.359 253.742l0.189 82.942 49.205-0.086-0.174-82.942zM874.793 323.421l0.174 82.942 49.219-0.073-0.189-82.943zM453.635 378.149l0.189 82.943 49.205-0.073-0.174-82.943zM875.054 447.841l0.189 82.942 49.22-0.086-0.189-82.942zM453.911 502.557l0.189 82.942 49.205-0.073-0.174-82.942zM875.33 572.248l0.189 82.942 49.205-0.073-0.174-82.943zM454.186 626.977l0.189 82.942 49.205-0.086-0.189-82.942zM875.606 696.656l0.189 82.943 49.205-0.073-0.174-82.942zM454.462 751.384l0.189 82.943 49.205-0.073-0.189-82.942zM875.881 821.075l0.189 82.942 49.205-0.086-0.174-82.942zM454.737 875.804l0.189 82.93 49.205-0.073-0.189-82.942zM876.157 945.483l0.174 77.124 17.698-0.021 0.116 20.745 31.435-0.124-0.042-20.684-0.174-77.111zM455.013 1000.212l0.058 24.058 0.044 20.794 94.551-0.378-0.232-41.465-45.201 0.171-0.016-3.252zM746.283 1002.436l0.218 41.477 98.425-0.391-0.232-41.465zM598.639 1003.023l0.232 41.465 98.425-0.379-0.232-41.477zM457.021-15.375l0.24 39.208-437.429 3.117-1.579 977.433 440.598 1.559-0.126 39.208-477.664-1.692 1.705-1055.451z"],"width":917,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["note_select_right"],"defaultCode":59674,"grid":16},"attrs":[],"properties":{"id":39,"order":949,"ligatures":"","prevSize":32,"code":59675,"name":"note_select_right"},"setIdx":1,"setId":1,"iconIdx":47},{"icon":{"paths":["M264.54 496.937c1.665 0 4.162 0 4.578 0 0 0 0.416 0 0.416 0s2.497 0 4.578 0c37.456 1.679 59.514 21.495 59.514 46.349 0 12.091-4.994 25.861-17.48 38.96-23.722 25.861-62.427 39.968-96.138 39.968-26.219 0-48.693-8.397-59.514-25.526-3.329-6.717-4.994-13.099-4.994-20.152 0-36.609 50.774-77.249 109.039-79.6zM303.84 160.61h28.202v394.679h-28.202v-394.679zM532.761 758.53c2.92 0 7.301 0 8.031 0 0 0 0.731 0 0.731 0s4.381 0 8.031 0c65.709 2.979 104.405 38.133 104.405 82.225 0 21.45-8.761 45.879-30.664 69.117-41.616 45.879-109.516 70.904-168.654 70.904-45.997 0-85.422-14.896-104.405-45.283-5.841-11.917-8.761-23.238-8.761-35.75 0-64.946 89.073-137.042 191.287-141.213zM601.704 161.872h49.475v700.175h-49.475v-700.175zM304.324 113.993v386.095h20.463v-294.054c23.303 9.447 41.621 22.723 52.477 32.693 21.703 19.779 32.205 45.958 32.205 73.299 0 30.832-13.302 63.118-39.906 89.878-3.5 3.2-3.851 3.782-3.851 6.399 0 3.49 2.801 6.108 7.001 6.108 3.501 0 3.851 0 9.101-5.818 30.455-30.541 45.506-67.481 45.506-102.967 0-37.522-17.153-73.881-51.108-100.35-22.658-17.745-40.664-39.838-51.426-61.965v-29.319zM317.282 124.041h0.666v2.213c-0.232-0.739-0.452-1.477-0.666-2.213zM311.163 201.166c2.302 0.712 4.561 1.472 6.785 2.265v286.607h-6.785zM307.419 141.515v351.448h18.699v-351.448zM70.435 70.478h-14.205v85.053h28.374v-70.883h42.544v-28.374h-56.713zM155.487 84.647h85.088v-28.374h-85.088zM268.949 84.647h85.053v-28.374h-85.053zM382.376 84.647h85.088v-28.374h-85.088zM495.803 70.478h-14.17v85.053h28.374v-99.257h-14.205zM56.23 268.993h28.374v-85.088h-28.374zM481.634 268.993h28.374v-85.088h-28.374zM56.23 382.42h28.374v-85.088h-28.374zM481.634 382.42h28.374v-85.088h-28.374zM56.23 495.846h28.374v-85.053h-28.374zM481.634 495.846h28.374v-85.053h-28.374zM56.23 609.309h28.374v-85.088h-28.374zM481.634 609.309h28.374v-85.088h-28.374zM70.435 651.817h85.053v-28.339h-85.053zM183.861 651.817h85.088v-28.339h-85.088zM297.288 651.817h85.088v-28.339h-85.088zM410.751 651.817h99.257v-14.17h-14.205v-14.17h-85.053z"],"width":710,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["grace_select"],"defaultCode":59675,"grid":16},"attrs":[],"properties":{"id":40,"order":950,"ligatures":"","prevSize":32,"code":59676,"name":"grace_select"},"setIdx":1,"setId":1,"iconIdx":48},{"icon":{"paths":["M263.672 25.307c0.797-0.399 1.594-0.399 2.79-0.399 4.782 0 10.362 3.985 18.332 13.949 32.281 37.063 54.997 101.625 54.997 154.231 0 3.985-0.797 7.174-0.797 11.159-3.587 62.569-29.093 113.98-79.706 162.6l-13.55 13.151-4.782 5.181v1.594l2.79 11.956 4.384 21.521 4.384 19.926c5.978 27.1 8.369 41.049 8.369 41.049s0 0 0 0 1.594 0 3.587-0.399c1.993 0 8.369-0.797 15.144-0.797 4.782 0 9.565 0.797 11.956 0.797 56.193 7.174 99.632 47.425 111.987 104.016 2.391 9.166 3.188 19.129 3.188 29.093 0 53.802-32.281 105.212-86.082 129.522-3.188 1.993-4.384 2.391-4.384 2.391v0.399c0 0 2.391 9.166 4.384 19.528l5.978 30.288 5.579 24.31c3.188 15.543 4.782 26.701 4.782 36.665 0 8.768-1.196 16.738-3.188 25.904-13.55 55.396-61.772 88.474-111.987 88.474-24.709 0-50.215-7.971-72.532-25.904-19.926-16.738-28.694-31.882-28.694-51.809 0-35.071 28.296-59.779 57.787-59.779 10.362 0 20.724 3.188 30.687 9.166 16.738 11.557 24.31 29.093 24.31 46.229 0 26.303-18.332 52.207-49.816 54.2h-3.188l2.391 1.594c13.151 5.579 26.303 8.369 39.056 8.369 32.281 0 62.569-16.34 80.902-44.635 10.362-15.941 15.941-34.672 15.941-53.403 0-7.174-1.196-14.347-2.79-22.318 0-0.797-1.196-7.174-2.79-13.151-8.768-43.041-13.949-68.149-13.949-68.149s0 0 0 0c-0.797 0-2.391 0-3.587 0.797-3.985 0.797-12.354 2.79-15.941 3.188-8.768 1.196-17.137 1.594-25.107 1.594-78.112 0-150.644-52.606-175.752-130.319-6.376-20.724-9.963-41.447-9.963-62.171 0-41.447 13.151-82.097 38.657-118.363 27.897-39.454 55.794-73.329 90.068-108.4l11.956-12.354-2.79-14.746-5.181-24.31-6.775-31.085c-1.993-11.557-4.384-22.716-4.782-25.107-1.993-13.151-3.188-25.904-3.188-39.056 0-50.215 16.34-98.437 47.027-137.094 9.166-11.956 25.506-27.897 29.89-29.093zM287.982 104.216c-0.797 0-1.993 0-3.188 0-16.34 0-37.462 15.144-51.809 37.462-14.746 21.919-22.318 51.012-22.318 80.902 0 7.971 0.399 16.34 1.594 24.709 1.196 5.978 1.594 9.963 4.782 24.31l5.579 25.107c1.594 7.572 2.79 13.55 2.79 14.347v0c0.399 0 12.753-13.55 16.738-18.332 39.853-45.034 63.765-92.459 68.946-134.305 0.399-3.985 0.399-7.174 0.399-11.159 0-12.354-1.594-24.31-4.384-30.687-3.188-6.376-10.362-11.557-19.129-12.354zM227.804 412.279c-0.797-5.579-1.993-9.963-1.993-10.76 0 0 0 0-0.399 0-0.797 0-17.934 19.926-29.89 33.875-20.325 24.709-41.846 54.2-50.613 68.547-16.738 28.296-25.107 59.779-25.107 90.865 0 20.325 3.985 39.853 11.159 58.584 21.521 55.396 70.938 90.068 124.74 90.068 6.376 0 13.55-0.399 20.325-1.594 8.768-1.594 19.528-4.782 19.528-5.978v0c0 0-0.797-3.985-1.993-8.369l-11.557-56.99-9.166-42.643-5.978-29.491-6.376-28.694c-3.188-17.137-4.384-21.521-4.384-21.521s0-0.399-0.399-0.399c-2.391 0-15.144 6.376-20.724 10.362-20.724 14.347-31.484 37.063-31.484 59.381 0 21.122 10.362 42.244 30.288 54.599 4.384 2.79 5.978 5.181 5.978 7.971 0 0.399 0 1.594 0 1.993-0.797 4.782-3.587 6.775-7.572 6.775-1.594 0-3.587-0.399-5.978-1.594-36.665-15.941-61.374-53.802-61.374-95.249v0c0-47.824 29.89-89.271 75.721-105.61l2.391-0.797-3.985-19.926-11.159-53.403zM287.583 545.388c-3.188-0.399-6.376-0.399-8.768-0.399-0.797 0-1.993 0-2.79 0h-1.993l1.594 7.174 8.369 39.056 5.181 25.506 5.579 25.107 11.159 55.396 4.384 21.122c1.594 5.579 2.391 10.362 2.79 10.362 0 0 0 0 0 0 0.399 0 7.174-3.985 11.557-7.174 20.325-14.347 35.469-36.665 41.049-59.779 1.993-7.572 2.79-15.543 2.79-23.115 0-46.229-34.274-88.075-80.902-93.256z"],"width":581,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["treble"],"defaultCode":59676,"grid":16},"attrs":[],"properties":{"id":41,"order":951,"ligatures":"","prevSize":32,"code":59677,"name":"treble"},"setIdx":1,"setId":1,"iconIdx":49},{"icon":{"paths":["M124 460q1-1 2-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 25.5-16t25.5-5q5 0 10 0.5t10 2.5q14 5 22 18t8 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-5 5-6.5 5.5t-3.5 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t2.5-1.5v0zM176 679q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM260 220q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM311 439q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM395 540q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM446 759q-1-1-3-1h-6q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-eb"],"defaultCode":59677,"grid":16},"attrs":[],"properties":{"id":42,"order":952,"ligatures":"","prevSize":32,"code":59678,"name":"key-sig-eb"},"setIdx":1,"setId":1,"iconIdx":50},{"icon":{"paths":["M124 460q1-1 2-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 25.5-16t25.5-5q5 0 10 0.5t10 2.5q14 5 22 18t8 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-5 5-6.5 5.5t-3.5 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t2.5-1.5v0zM176 679q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM260 220q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM311 439q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM395 540q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM446 759q-1-1-3-1h-6q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM530 300q0-1 1-1h2q3 0 5.5 1.5t3.5 4.5v205q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM581 519q-1-1-2.5-1h-6.5q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-ab"],"defaultCode":59678,"grid":16},"attrs":[],"properties":{"id":43,"order":953,"ligatures":"","prevSize":32,"code":59679,"name":"key-sig-ab"},"setIdx":1,"setId":1,"iconIdx":51},{"icon":{"paths":["M124 460q1-1 2-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 25.5-16t25.5-5q5 0 10 0.5t10 2.5q14 5 22 18t8 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-5 5-6.5 5.5t-3.5 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t2.5-1.5v0zM176 679q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM260 220q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM311 439q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM395 540q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM446 759q-1-1-3-1h-6q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM530 300q0-1 1-1h2q3 0 5.5 1.5t3.5 4.5v205q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM581 519q-1-1-2.5-1h-6.5q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM665 620q0-1 1-1h2q3 0 5.5 1.5t3.5 4.5v205q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5-1.5t-3-3.5l-1-2v-363l1-1q1-2 2-3.5t3-1.5v0zM716 839q-1-1-2.5-1h-6.5q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-db"],"defaultCode":59679,"grid":16},"attrs":[],"properties":{"id":44,"order":954,"ligatures":"","prevSize":32,"code":59680,"name":"key-sig-db"},"setIdx":1,"setId":1,"iconIdx":52},{"icon":{"paths":["M112 414q1 0 1.5-0.5t1.5-0.5q2 0 4.5 1.5t3.5 3.5v185q12-10 23.5-14.5t22.5-4.5q5 0 9 0.5t9 2.5q13 5 20 16.5t7 25.5q0 8-2.5 16.5t-6.5 16.5q-6 12-16.5 24t-33.5 32l-31 29q-4 4-5.5 5t-3.5 1-4.5-1.5-3.5-3.5v-330l2.5-2.5t2.5-1.5v0zM159 611q-2-1-3.5-1h-5.5q-7 1-14 5.5t-11 12.5l-2 3v93l1-2q22-23 35-48t13-44v0q0-9-3-13.5t-10-5.5v0zM234 198l0.5-0.5t1.5-0.5q3 0 5 1.5t3 3.5q1 1 1 13v172q11-10 23-14.5t23-4.5q4 0 8.5 0.5t8.5 2.5q14 5 21 16.5t7 25.5q0 8-2.5 16.5t-6.5 16.5q-7 12-17.5 24t-33.5 32l-30 29q-4 4-5.5 5t-3.5 1q-3 0-5-1.5t-3-3.5l-1-2v-326l1-2q1-1 2-2.5t3-1.5v0zM280 395q-1-1-2.5-1h-5.5q-8 1-14.5 5.5t-11.5 12.5l-1 3v93l1-2q21-23 34-48t13-44v0q0-9-3-13.5t-10-5.5zM355 486q1 0 1.5-0.5t1.5-0.5q3 0 5 1.5t3 3.5v186l1-1q11-10 22.5-14.5t22.5-4.5q5 0 9.5 0.5t8.5 2.5q13 5 20 16.5t7 25.5q0 8-2 16.5t-7 16.5q-6 12-16.5 24t-33.5 32l-31 29q-4 4-5.5 5t-3.5 1-4.5-1.5-3.5-3.5v-330l2.5-2.5t2.5-1.5v0zM402 683q-2-1-3.5-1h-5.5q-7 1-13.5 5.5t-11.5 12.5l-2 3v93l1-2q22-23 35-48t13-44v0q0-9-3-13.5t-10-5.5v0zM477 270l2-1q3 0 5 1.5t3 3.5q1 1 1 13v172q11-10 23-14.5t23-4.5q4 0 8.5 0.5t9.5 2.5q13 5 20 16.5t7 25.5q0 8-2.5 16.5t-6.5 16.5q-7 12-17.5 24t-33.5 32l-30 29q-4 4-5.5 5t-3.5 1q-3 0-5-1.5t-3-3.5v-330q1-1 2-2.5t3-1.5v0zM523 467q-1-1-2.5-1h-5.5q-8 1-14.5 5.5t-11.5 12.5l-1 3v93l1-2q22-23 35-48t13-44v0q0-9-3.5-13.5t-10.5-5.5v0zM598 558q1 0 1.5-0.5t1.5-0.5q3 0 5 1.5t3 3.5v186l1-1q11-10 22.5-14.5t22.5-4.5q5 0 9.5 0.5t8.5 2.5q13 5 20 16.5t7 25.5q0 8-2 16.5t-7 16.5q-6 12-16.5 24t-33.5 32l-30 29q-5 4-6.5 5t-3.5 1-4.5-1.5-2.5-3.5l-1-2v-326l1-2q0-1 1.5-2.5t2.5-1.5v0zM645 755q-1-1-3-1h-5q-8 1-14.5 5.5t-11.5 12.5l-2 3v93l2-2q21-23 34-48t13-44v0q0-9-3-13.5t-10-5.5zM720 342l1-0.5t2-0.5q2 0 4.5 1.5t3.5 3.5v185q12-10 23.5-14.5t22.5-4.5q4 0 8.5 0.5t9.5 2.5q13 5 20 16.5t7 25.5q0 8-2.5 16.5t-6.5 16.5q-7 12-17.5 24t-33.5 32l-30 29q-4 4-5.5 5t-3.5 1q-3 0-5-1.5t-3-3.5v-330q1-1 2-2.5t3-1.5v0zM766 539q-1-1-2.5-1h-5.5q-8 1-14.5 5.5t-11.5 12.5l-1 3v93l1-2q22-23 35-48t13-44v0q0-9-3.5-13.5t-10.5-5.5z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-gg"],"defaultCode":59680,"grid":16},"attrs":[],"properties":{"id":45,"order":955,"ligatures":"","prevSize":32,"code":59681,"name":"key-sig-gg"},"setIdx":1,"setId":1,"iconIdx":53},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-g"],"defaultCode":59681,"grid":16},"attrs":[],"properties":{"id":46,"order":956,"ligatures":"","prevSize":32,"code":59682,"name":"key-sig-g"},"setIdx":1,"setId":1,"iconIdx":54},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47zM252 326q1-1 2-1h2q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q1 1 1 7.5v29.5t-1 7q-1 3-3.5 4t-11.5 4q-11 3-14 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t5.5-0.5 3.5 0.5 2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1v0 58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 2 0.5l1 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t2-1.5v0zM247 556v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h2q1-1 6-2t11-2l17-5 3-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-d"],"defaultCode":59682,"grid":16},"attrs":[],"properties":{"id":47,"order":957,"ligatures":"","prevSize":32,"code":59683,"name":"key-sig-d"},"setIdx":1,"setId":1,"iconIdx":55},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47zM252 326q1-1 2-1h2q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q1 1 1 7.5v29.5t-1 7q-1 3-3.5 4t-11.5 4q-11 3-14 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t5.5-0.5 3.5 0.5 2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1v0 58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 2 0.5l1 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t2-1.5v0zM247 556v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h2q1-1 6-2t11-2l17-5 3-1v-47zM410 6q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5 4.5 1 2.5 4v44q-2 3-4 4t-11 4q-11 3-14.5 3.5l-3.5 0.5v96l11-4 9-1.5t6-0.5q1 0 2.5 0.5t2.5 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5q-1 0-1 8.5v112.5q-2 3-4 4.5t-5 1.5q-2 0-4.5-1.5t-4.5-4.5v-107.5t-1-8.5v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t21-5.5l6-2v-88t-1-7v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t21-6l6-1v-118q2-3 4.5-4.5t4.5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t2.5 3v113h3l5-1.5t11-2.5l17-5 4-1v-120q1-2 2-3.5t3-1.5v0zM405 236v-48q-1 0-4 1t-7 2l-19 4-9 3q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 4-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-a"],"defaultCode":59683,"grid":16},"attrs":[],"properties":{"id":48,"order":958,"ligatures":"","prevSize":32,"code":59684,"name":"key-sig-a"},"setIdx":1,"setId":1,"iconIdx":56},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47zM252 326q1-1 2-1h2q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q1 1 1 7.5v29.5t-1 7q-1 3-3.5 4t-11.5 4q-11 3-14 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t5.5-0.5 3.5 0.5 2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1v0 58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 2 0.5l1 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t2-1.5v0zM247 556v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h2q1-1 6-2t11-2l17-5 3-1v-47zM410 6q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5 4.5 1 2.5 4v44q-2 3-4 4t-11 4q-11 3-14.5 3.5l-3.5 0.5v96l11-4 9-1.5t6-0.5q1 0 2.5 0.5t2.5 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5q-1 0-1 8.5v112.5q-2 3-4 4.5t-5 1.5q-2 0-4.5-1.5t-4.5-4.5v-107.5t-1-8.5v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t21-5.5l6-2v-88t-1-7v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t21-6l6-1v-118q2-3 4.5-4.5t4.5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t2.5 3v113h3l5-1.5t11-2.5l17-5 4-1v-120q1-2 2-3.5t3-1.5v0zM405 236v-48q-1 0-4 1t-7 2l-19 4-9 3q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 4-1v-47zM567 246q1-1 1.5-1h2.5q3 0 5 1.5t3 4.5l1 1v115l12-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q0 1 0.5 7.5t0.5 14.5-0.5 15l-0.5 7q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2.5 4.5t0.5 14.5v13q0 13-0.5 15t-2.5 3q-1 2-3.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1h-1v116l-1 2q-1 3-3 4t-5 1q-2 0-4.5-1t-4.5-4v-114h-1l-10 3-18 5q-4 1-7 1.5l-3 0.5v120l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2.5-3.5t2.5-1.5v0zM562 476v-48l-3 1t-7 2l-19 4q-4 1-7 2l-3 1v95h2q1-1 6-2t11-2l17-5 3-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-e"],"defaultCode":59684,"grid":16},"attrs":[],"properties":{"id":49,"order":959,"ligatures":"","prevSize":32,"code":59685,"name":"key-sig-e"},"setIdx":1,"setId":1,"iconIdx":57},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47zM252 326q1-1 2-1h2q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q1 1 1 7.5v29.5t-1 7q-1 3-3.5 4t-11.5 4q-11 3-14 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t5.5-0.5 3.5 0.5 2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1v0 58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 2 0.5l1 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t2-1.5v0zM247 556v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h2q1-1 6-2t11-2l17-5 3-1v-47zM410 6q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5 4.5 1 2.5 4v44q-2 3-4 4t-11 4q-11 3-14.5 3.5l-3.5 0.5v96l11-4 9-1.5t6-0.5q1 0 2.5 0.5t2.5 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5q-1 0-1 8.5v112.5q-2 3-4 4.5t-5 1.5q-2 0-4.5-1.5t-4.5-4.5v-107.5t-1-8.5v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t21-5.5l6-2v-88t-1-7v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t21-6l6-1v-118q2-3 4.5-4.5t4.5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t2.5 3v113h3l5-1.5t11-2.5l17-5 4-1v-120q1-2 2-3.5t3-1.5v0zM405 236v-48q-1 0-4 1t-7 2l-19 4-9 3q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 4-1v-47zM567 246q1-1 1.5-1h2.5q3 0 5 1.5t3 4.5l1 1v115l12-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q0 1 0.5 7.5t0.5 14.5-0.5 15l-0.5 7q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2.5 4.5t0.5 14.5v13q0 13-0.5 15t-2.5 3q-1 2-3.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1h-1v116l-1 2q-1 3-3 4t-5 1q-2 0-4.5-1t-4.5-4v-114h-1l-10 3-18 5q-4 1-7 1.5l-3 0.5v120l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2.5-3.5t2.5-1.5v0zM562 476v-48l-3 1t-7 2l-19 4q-4 1-7 2l-3 1v95h2q1-1 6-2t11-2l17-5 3-1v-47zM725 486q1-1 1.5-1h1.5q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5q2 0 4 1t3 4v44q-2 3-4 4t-11 4q-12 3-15 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t6.5-0.5q1 0 2.5 0.5t2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5-5-1.5-4-4.5v-59q0-40-0.5-48.5l-0.5-8.5q-4 1-13 3.5t-10 2.5q-3 0-5-2t-3-4v-45q1-3 4.5-4.5t21.5-5.5l6-2v-47q0-34-0.5-41l-0.5-7q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-3-4.5v-44q1-4 4.5-5t21.5-6l6-1v-118q1-3 4-4.5t5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t1.5 3l1 1v112h3l5-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t3-1.5v0zM719 716v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 3-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-b"],"defaultCode":59685,"grid":16},"attrs":[],"properties":{"id":50,"order":960,"ligatures":"","prevSize":32,"code":59686,"name":"key-sig-b"},"setIdx":1,"setId":1,"iconIdx":58},{"icon":{"paths":["M76 69q1-1 1.5-1h1.5q2 0 4 1t3 3v2l1 45v47l9-3q4-1 6.5-1.5t4.5-0.5q3 0 4 1t2 3v36q-1 2-3 3t-9 3q-9 2-11.5 2.5l-2.5 0.5v77l9-3q4-1 6.5-1h7t1.5 1q2 2 2 3.5v34t-2 2.5q-1 1-3 2t-14 4q-2 0-4.5 1l-2.5 1v46l-1 47v2q-1 2-3 3t-4 1-4-1-3-3v-92h-1l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-1 2-3 3t-4 1-4-1-3-3v-47q0-32-0.5-39l-0.5-7q-3 1-10 3t-8 2q-3 0-4.5-1.5t-2.5-3.5v-36q1-2 4-3t17-5l5-1v-38q0-27-0.5-32.5l-0.5-5.5q-3 1-10 2.5t-8 1.5q-3 0-4.5-1t-2.5-3v-36q1-2 4-3.5t17-4.5l5-1v-95q1-2 3-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2q1 0 5-1t9-2l13-5h3v-97l2-2t2-1v0zM72 253v-39l-2.5 1t-5.5 1l-16 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1q1 0 5-1t9-2l13-4 3-1v-37zM202 261q1-1 1.5-1h1.5q2 0 4 1t3 3v94l10-3q3-1 6-1.5t5-0.5 3.5 1 2.5 3v36q-1 2-3 3t-9 3q-9 2-12 2.5l-3 0.5v77l10-3q4-1 6.5-1h6.5t2 1q2 2 2 3.5v34t-2 2.5q-1 1-3 2t-14 4q-3 0-5 1l-2 1h-1v95q-1 2-3 3t-4 1-4-1-3-3v-92h-1l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-1 2-3 3t-4 1-4-1-3-3l-1-1v-92q-3 1-10 3t-8 2q-3 0-4.5-1.5t-2.5-3.5v-36q1-2 4-3t17-5l4-1v-76q-3 1-10 2.5t-8 1.5q-3 0-4.5-1t-2.5-3v-36q1-2 4-3.5t17-4.5l4-1v-93l1-2q1-2 3-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2q1 0 5-1t9-2l13-5h3v-97l2-2t2-1v0zM198 445v-39q-1 0-3 1t-5 1l-16 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1q1 0 5-1t9-2l13-4 3-1v-37zM328 5q1-1 1.5-1h1.5q2 0 4 1t3 3v94l9-3q4-1 7-1.5t5-0.5 3.5 1 2.5 3v36q-1 2-3 3t-9 3q-9 2-12 2.5l-3 0.5v77l9-3q5-1 7.5-1h6.5t2 1q2 2 2 3.5v34t-2 2.5q-1 1-3 2t-14 4q-3 0-5 1l-2 1h-1v95q-1 2-3 3t-4 1-4-1-3-3v-92h-1l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-1 2-3 3t-4 1-4-1-3-3l-1-1v-92q-3 1-10 3t-9 2-3.5-1.5-2.5-3.5v-36q1-2 3.5-3t17.5-5l4-1v-76q-3 1-10 2.5t-9 1.5-3.5-1-2.5-3v-36q1-2 3.5-3.5t17.5-4.5l4-1v-93l1-2q1-2 3-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2q1 0 5-1t9-2l13-5h3v-97l2-2t2-1v0zM324 189v-39q-1 0-3 1t-5 1l-16 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1q1 0 5-1t9-2l13-4 3-1v-37zM454 197l1-1h2t4 1 3 3v94l9-3q4-1 7-1.5t5-0.5 3.5 1 2.5 3v36q-2 2-3.5 3t-8.5 3q-9 2-12 2.5l-3 0.5v77l9-3q5-1 7.5-1h6.5t2 1q1 2 1.5 3.5t0.5 11.5v11q0 10-0.5 11.5t-1.5 2.5-3 2-14 4q-3 0-5 1l-2 1h-1v95q-1 2-3 3t-4 1-4-1-3-3v-92h-1l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-1 2-3 3t-4 1-4-1-3-3l-1-1v-92q-3 1-10.5 3t-8.5 2q-2 0-3.5-1.5t-2.5-3.5v-36q1-2 3.5-3t17.5-5l4-1v-76q-3 1-10.5 2.5t-8.5 1.5q-2 0-3.5-1t-2.5-3v-36q1-2 3.5-3.5t17.5-4.5l4-1v-93l1-2q1-2 3-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2q1 0 5-1l8-2 14-5h3v-97q1-1 1.5-2t2.5-1v0zM450 381v-39q-1 0-3 1t-6 1l-15 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1q1 0 5-1l8-2 14-4 3-1v-37zM580 389q0-1 0.5-1h1.5q3 0 5 1t2 3l1 2v92l9-3q4-1 7-1.5t5-0.5 3.5 1 1.5 3q1 1 1 6.5v23t-1 6.5q-1 2-2.5 3t-8.5 3q-9 2-12 2.5l-3 0.5v77l9-3q4-1 7-1h7t2 1q1 2 1.5 3.5t0.5 11.5v11q0 10-0.5 11.5t-1.5 2.5-3 2-14 4q-3 0-5 1l-2 1h-1v93l-1 2q0 2-2 3t-5 1q-1 0-3-1t-3-3l-1-2v-90l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-1 2-3 3t-4 1-4-1-3-3l-1-1v-92q-3 1-10.5 3t-8.5 2q-2 0-3.5-1.5t-2.5-3.5v-36q1-2 3.5-3t17.5-5l4-1v-76q-3 1-10.5 2.5t-8.5 1.5q-2 0-3.5-1t-2.5-3v-36q1-2 3.5-3.5t17.5-4.5l4-1v-93l1-2q1-2 3-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2q1 0 5-1l8-2 14-5h2v-95l1-2q1-1 1.5-2t2.5-1v0zM575 573v-39l-2 1t-6 1l-15 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1q1 0 5-1l8-2 14-4 2-1v-37zM706 133q0-1 0.5-1h1.5q3 0 5 1t2 3l1 2v92l9-3q4-1 7-1.5t5-0.5 3.5 1 1.5 3q1 1 1 6.5v23t-1 6.5q-1 2-2.5 3t-9.5 3-11 2.5l-3 0.5v77l9-3q4-1 7-1h7t2 1q1 2 1.5 3.5t0.5 11.5v11q0 10-0.5 11.5t-1.5 2.5-3 2-14 4q-3 0-5 1l-2 1h-1v93l-1 2q0 2-2 3t-5 1q-1 0-3-1t-3-3l-1-2v-90l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-2 2-3.5 3t-3.5 1-4-1-3-3l-1-1v-92q-3 1-10.5 3t-8.5 2q-2 0-3.5-1.5t-2.5-3.5v-36q1-2 3.5-3t17.5-5l4-1v-76q-3 1-10.5 2.5t-8.5 1.5q-2 0-3.5-1t-2.5-3v-36q1-2 3.5-3.5t17.5-4.5l4-1v-95q2-2 4-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2l4.5-1t8.5-2l14-5h2v-95l1-2q1-1 1.5-2t2.5-1v0zM701 317v-39l-2.5 1t-5.5 1l-15 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1 4.5-1t8.5-2l14-4 2-1v-37zM831 325q1-1 1.5-1h1.5q3 0 5 1t2 3l1 2v92l9-3q4-1 7-1.5t5-0.5 3 1 2 3q1 1 1 6.5v23t-1 6.5q-1 2-3 3t-9 3q-9 2-11.5 2.5l-2.5 0.5v77l9-3q4-1 7-1h7t2 1q1 2 1.5 3.5t0.5 11.5v11q0 10-0.5 11.5t-1.5 2.5-3 2-14 4q-3 0-5 1l-2 1h-1v93l-1 2q0 2-2 3t-5 1q-1 0-3-1t-3-3l-1-2v-90l-8 3-15 3q-3 1-5.5 1.5l-2.5 0.5v96l-1 1q-1 2-2.5 3t-3.5 1-4.5-1-3.5-3v-93q-3 1-10.5 3t-8.5 2q-2 0-3.5-1.5t-2.5-3.5v-36q1-2 3.5-3t17.5-5l4-1v-76q-3 1-10.5 2.5t-8.5 1.5q-2 0-3.5-1t-2.5-3v-36q1-2 3.5-3.5t17.5-4.5l4-1v-95q1-2 3.5-3t4.5-1h1.5t1.5 1q1 0 2 1t1 2l1 2v89h2l4-1t9-2l14-5h2v-95l1-2q0-1 1-2t2-1v0zM827 509v-39l-2.5 1t-5.5 1l-15 4q-3 1-5.5 1.5l-2.5 0.5v77l2-1 4-1t9-2l14-4 2-1v-37z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-cs"],"defaultCode":59686,"grid":16},"attrs":[],"properties":{"id":51,"order":961,"ligatures":"","prevSize":32,"code":59687,"name":"key-sig-cs"},"setIdx":1,"setId":1,"iconIdx":59},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47zM252 326q1-1 2-1h2q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q1 1 1 7.5v29.5t-1 7q-1 3-3.5 4t-11.5 4q-11 3-14 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t5.5-0.5 3.5 0.5 2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1v0 58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 2 0.5l1 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t2-1.5v0zM247 556v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h2q1-1 6-2t11-2l17-5 3-1v-47zM410 6q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5 4.5 1 2.5 4v44q-2 3-4 4t-11 4q-11 3-14.5 3.5l-3.5 0.5v96l11-4 9-1.5t6-0.5q1 0 2.5 0.5t2.5 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5q-1 0-1 8.5v112.5q-2 3-4 4.5t-5 1.5q-2 0-4.5-1.5t-4.5-4.5v-107.5t-1-8.5v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t21-5.5l6-2v-88t-1-7v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t21-6l6-1v-118q2-3 4.5-4.5t4.5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t2.5 3v113h3l5-1.5t11-2.5l17-5 4-1v-120q1-2 2-3.5t3-1.5v0zM405 236v-48q-1 0-4 1t-7 2l-19 4-9 3q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 4-1v-47zM567 246q1-1 1.5-1h2.5q3 0 5 1.5t3 4.5l1 1v115l12-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q0 1 0.5 7.5t0.5 14.5-0.5 15l-0.5 7q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2.5 4.5t0.5 14.5v13q0 13-0.5 15t-2.5 3q-1 2-3.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1h-1v116l-1 2q-1 3-3 4t-5 1q-2 0-4.5-1t-4.5-4v-114h-1l-10 3-18 5q-4 1-7 1.5l-3 0.5v120l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2.5-3.5t2.5-1.5v0zM562 476v-48l-3 1t-7 2l-19 4q-4 1-7 2l-3 1v95h2q1-1 6-2t11-2l17-5 3-1v-47zM725 486q1-1 1.5-1h1.5q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5q2 0 4 1t3 4v44q-2 3-4 4t-11 4q-12 3-15 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t6.5-0.5q1 0 2.5 0.5t2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5-5-1.5-4-4.5v-59q0-40-0.5-48.5l-0.5-8.5q-4 1-13 3.5t-10 2.5q-3 0-5-2t-3-4v-45q1-3 4.5-4.5t21.5-5.5l6-2v-47q0-34-0.5-41l-0.5-7q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-3-4.5v-44q1-4 4.5-5t21.5-6l6-1v-118q1-3 4-4.5t5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t1.5 3l1 1v112h3l5-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t3-1.5v0zM719 716v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 3-1v-47zM882 166q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l11-3q5-1 9-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l11-4q6-1 9.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM877 396v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-fs"],"defaultCode":59687,"grid":16},"attrs":[],"properties":{"id":52,"order":962,"ligatures":"","prevSize":32,"code":59688,"name":"key-sig-fs"},"setIdx":1,"setId":1,"iconIdx":60},{"icon":{"paths":["M0 426.667v42.667l1706.667-426.667v-42.667l-1706.667 426.667zM0 426.667v42.667l1706.667 426.667v-42.667l-1706.667-426.667z"],"width":2048,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["cresc"],"defaultCode":59688,"grid":16},"attrs":[],"properties":{"id":53,"order":963,"ligatures":"","prevSize":32,"code":59689,"name":"cresc"},"setIdx":1,"setId":1,"iconIdx":61},{"icon":{"paths":["M1706.667 426.667v42.667l-1706.667-426.667v-42.667l1706.667 426.667zM1706.667 426.667v42.667l-1706.667 426.667v-42.667l1706.667-426.667z"],"width":2048,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["decresc"],"defaultCode":59689,"grid":16},"attrs":[],"properties":{"id":54,"order":964,"ligatures":"","prevSize":32,"code":59690,"name":"decresc"},"setIdx":1,"setId":1,"iconIdx":62},{"icon":{"paths":["M11.482 52.493h7.172q5.738 0 10.041 2.388t7.172 8.754v459.999l1.434-3.183q25.82-22.284 51.639-34.221t50.205-11.938q10.041 0 20.082 1.592t20.082 6.367q28.688 11.142 44.467 39.792t15.779 65.259q0 17.509-5.020 38.996t-15.061 42.18q-14.344 28.65-38.012 58.097t-75.307 80.381l-67.418 71.626q-8.607 9.55-12.193 11.142t-7.889 1.592q-5.738 0-10.758-3.183t-6.455-9.55l-1.434-3.183v-808.58l1.434-3.183q1.434-3.183 4.303-6.367t5.738-4.775zM116.194 541.143q-2.869-1.592-6.455-2.388t-6.455-0.796h-5.738q-17.213 3.183-32.274 15.121t-25.102 31.038l-4.303 6.367v230.796l2.869-4.775q48.77-58.893 77.459-120.969t28.688-106.643v-1.592q0-22.284-6.455-32.63t-22.234-13.529zM719.024 790.096q1.434 1.592 2.152 1.592h2.152q5.738 0 8.607-2.388t4.303-7.163l1.434-1.592v-183.045l17.213 4.775q5.738 1.592 11.475 2.388t8.607 0.796q4.303 0 6.455-1.592t3.586-6.367v-70.035q-1.434-4.775-5.020-6.367t-16.496-6.367q-15.779-4.775-20.799-5.571l-5.020-0.796v-152.803l17.213 6.367q7.172 1.592 12.193 2.388t7.889 0.796 4.303-0.796 2.869-2.388q2.869-3.183 2.869-7.163v-67.647q0 0-2.869-4.775-1.434-3.183-5.020-3.979t-25.102-7.163q-5.738-1.592-9.324-3.183l-3.586-1.592h-1.434v-184.636l-1.434-3.183q-1.434-4.775-5.020-6.367t-7.889-1.592q-1.434 0-5.738 1.592t-5.738 6.367v181.453h-1.434l-14.344-4.775-27.254-7.958q-4.303-1.592-8.607-2.388l-4.303-0.796-0.717-13.529q0 0-0.717-81.972v-97.093q-1.434-4.775-5.020-7.163t-6.455-2.388q-4.303 0-7.889 2.388t-6.455 7.163v184.636q-5.738-1.592-18.647-5.571t-15.779-3.979q-4.303 0-7.172 3.183t-4.303 6.367v71.626q2.869 4.775 7.172 7.163t31.557 8.754l7.172 3.183v151.211q-5.738-1.592-18.647-5.571t-15.779-3.979q-4.303 0-7.172 2.388t-4.303 7.163v70.035q2.869 6.367 7.172 7.958t31.557 9.55l7.172 1.592v187.82q2.869 4.775 6.455 7.163t7.889 2.388q1.434 0 2.152-0.796t2.152-0.796q1.434-1.592 3.586-3.183t3.586-4.775v-179.861h4.303q1.434 0 8.607 2.388t15.779 3.979l24.385 7.958 4.303 1.592v191.003q1.434 3.183 2.869 5.571t4.303 2.388zM711.852 424.006v76.401q-1.434 0-5.020-1.592t-9.324-3.183l-28.688-6.367-12.91-4.775-0.717-10.346q0 0-0.717-64.464v-76.401h4.303q1.434 1.592 8.607 3.183t15.779 3.183l24.385 7.958 4.303 1.592zM315.694 0.332c-8.442 0.571-16.854 1.889-25.172 4.040-67.887 17.557-124.237 95.306-156.123 181.707l31.924 11.775c29.443-79.781 85.861-148.43 132.718-160.548 48.203-12.466 114.43 17.362 154.833 51.859 9.73 8.308 22.016 29.216 32.083 55.501s18.682 57.793 25.557 87.929c13.751 60.274 20.6 114.816 20.6 114.816l33.771-4.24c0 0-7.003-55.918-21.198-118.139-7.098-31.11-15.983-63.865-26.966-92.541s-23.301-53.43-41.758-69.19c-40.593-34.659-101.178-66.966-160.269-62.97zM571.694 676.602c0 0-6.862 54.529-20.613 114.803-6.875 30.137-15.49 61.645-25.557 87.929s-22.353 47.193-32.083 55.501c-40.403 34.497-106.631 64.325-154.833 51.859-46.857-12.118-103.275-80.767-132.718-160.548l-31.924 11.775c31.886 86.401 88.235 164.163 156.123 181.72 66.542 17.209 139.049-19.319 185.441-58.93 18.458-15.76 30.789-40.527 41.772-69.203s19.855-61.417 26.953-92.528c14.195-62.221 21.198-118.152 21.198-118.152z"],"width":785,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["accident"],"defaultCode":59690,"grid":16},"attrs":[],"properties":{"id":55,"order":965,"ligatures":"","prevSize":32,"code":59691,"name":"accident"},"setIdx":1,"setId":1,"iconIdx":63},{"icon":{"paths":["M248.814 356.26c-110.901 5.545-209.644 86.424-239.422 173.176h-3.501v10.7c-3.784 13.737-5.878 27.533-5.878 41.148 0 13.504 2.394 26.189 5.878 38.836v404.012h101.449v-317.688c12.709 2.556 25.978 3.963 39.827 3.963 76.915 0 165.285-39.825 219.41-112.941 28.487-37.033 39.827-75.983 39.827-110.167 0-70.268-50.333-126.29-135.794-131.038h-21.796zM214.272 0l-33.816 0.528 0.594 41.808c-76.782 12.375-136.124 78.262-136.124 157.986 0 88.493 72.916 160.495 161.882 160.495s161.882-72.003 161.882-160.495c0-85.75-68.632-155.492-153.825-159.769l-0.594-40.553zM215.593 91.344c57.569 4.463 102.374 51.137 102.374 108.978 0 60.805-49.334 109.771-111.158 109.771s-111.158-48.966-111.158-109.771c0-52.297 36.58-95.69 86.126-106.865l1.387 96.297 33.816-0.528-1.387-97.882zM205.457 24.851c-107.609 0-194.344 74.348-194.344 163.261s86.734 163.261 194.344 163.261c107.609 0 194.344-74.348 194.344-163.261s-86.734-163.261-194.344-163.261zM205.457 112.367c48.226 0 87.87 32.638 87.87 75.745s-39.645 75.835-87.87 75.835c-48.226 0-101.307-32.728-101.307-75.835s53.081-75.745 101.307-75.745z"],"width":406,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pitz_above"],"defaultCode":59691,"grid":16},"attrs":[],"properties":{"id":56,"order":966,"ligatures":"","prevSize":32,"code":59692,"name":"pitz_above"},"setIdx":1,"setId":1,"iconIdx":64},{"icon":{"paths":["M145.905 618.412c102.688-5.134 194.119-80.024 221.691-160.352h3.241v-9.907c3.504-12.72 5.443-25.494 5.443-38.1 0-12.504-2.217-24.25-5.443-35.96v-374.093h-93.936v294.161c-11.767-2.367-24.054-3.669-36.877-3.669-71.219 0-153.044 36.876-203.161 104.577-26.377 34.29-36.877 70.356-36.877 102.009 0 65.064 46.606 116.938 125.737 121.334h10.519zM187.712 721.9c-99.64 0-179.951 68.842-179.951 151.17s80.311 151.17 179.951 151.17c99.64 0 179.951-68.842 179.951-151.17s-80.311-151.17-179.951-151.17zM187.712 802.935c44.654 0 81.363 30.221 81.363 70.136s-36.709 70.219-81.363 70.219c-44.654 0-93.804-30.304-93.804-70.219s49.15-70.136 93.804-70.136zM154.214 688.547v155.153h46.968v-155.153z"],"width":376,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pitz_below"],"defaultCode":59692,"grid":16},"attrs":[],"properties":{"id":57,"order":967,"ligatures":"","prevSize":32,"code":59693,"name":"pitz_below"},"setIdx":1,"setId":1,"iconIdx":65},{"icon":{"paths":["M334.611 79.703v754.832h17.698v-754.832zM274.254 726.577c1.988 0 4.97 0 5.467 0 0 0 0.497 0 0.497 0s2.982 0 5.467 0c44.727 2.902 71.066 37.147 71.066 80.099 0 20.895-5.964 44.693-20.873 67.329-28.327 44.693-74.545 69.070-114.799 69.070-31.309 0-58.145-14.511-71.066-44.112-3.976-11.608-5.964-22.637-5.964-34.825 0-63.266 60.63-133.498 130.205-137.561zM391.177 301.295l0.013 4.4 9.889-0.022-0.013-4.411zM406.024 305.662l9.889 0.011 0.013-4.4-9.902-0.011zM420.87 305.684l9.889 0.011 0.013-4.4-9.902-0.011zM376.331 301.328l0.013 4.4 9.889-0.022-0.013-4.4zM435.704 305.706l9.902 0.022 0.013-4.411-9.902-0.011zM450.55 305.728l9.902 0.022v-4.411l-9.889-0.011zM361.485 301.371l0.013 4.4 9.902-0.022-0.025-4.411zM465.396 305.75l9.902 0.022v-4.411l-9.889-0.011zM480.242 305.772l9.889 0.022 0.013-4.4-9.889-0.022zM346.639 301.404l0.013 4.4 9.902-0.022-0.013-4.4zM495.088 305.804l9.889 0.011 0.013-4.4-9.902-0.022zM331.793 301.448l0.013 4.4 9.902-0.022-0.013-4.411zM509.934 305.826l9.889 0.011 0.013-4.4-9.902-0.022zM524.768 305.848h1.968l7.921 0.055 0.038-4.4-9.914-0.066zM316.947 301.481l0.013 4.4c6.961-0.156 9.907 2.033 9.889-4.422zM302.101 301.514l0.025 4.411 9.889-0.033-0.013-4.4zM287.267 301.558l0.013 4.4 9.889-0.022-0.013-4.4zM539.602 305.936l9.902 0.077 0.038-4.4-9.902-0.077zM272.421 301.59l0.013 4.411 9.889-0.033-0.013-4.4zM257.575 301.634l0.013 4.4 9.902-0.022-0.025-4.4zM242.729 301.667l0.013 2.846h-2.472l0.037 8.811 4.957-0.022-0.037-7.235 7.417-0.022-0.013-4.4zM554.448 306.045l9.889 0.066 0.050-4.4-9.902-0.066zM569.294 306.155l9.889 0.066 0.038-4.4-9.889-0.077zM584.14 306.253l9.889 0.077 0.038-4.4-9.889-0.077zM598.974 306.363l9.901 0.066 0.038-4.4-9.889-0.066zM613.82 306.472h0.21l9.668 0.142 0.086-4.4-9.927-0.153zM628.642 306.691l9.889 0.153 0.086-4.411-9.889-0.142zM643.488 306.921l9.889 0.142 0.086-4.4-9.889-0.153zM658.321 307.14l9.901 0.153 0.086-4.4-9.901-0.153zM673.131 307.37l9.889 0.274 0.16-4.4-9.889-0.274zM687.977 307.786l9.889 0.274 0.147-4.4-9.889-0.274zM702.811 308.191l5.192 0.142 4.637 0.241 0.271-4.4-4.749-0.241-5.203-0.142zM717.571 308.815l8.599 0.427 1.144 0.12 0.554-4.378-1.279-0.12-0.074-0.011h-0.063l-8.598-0.438zM732.466 307.961h-0.959l-0.074 7.443 4.945 0.044 0.086-7.454 0.013-1.642-2.731-0.744-0.222-0.055-0.222-0.022-0.529-0.055zM240.33 317.725l0.049 8.811 4.945-0.022-0.049-8.811zM731.297 328.615l4.945 0.033 0.098-8.8-4.957-0.044zM240.404 330.936l0.037 8.811 4.945-0.022-0.037-8.811zM731.162 341.827l4.957 0.033 0.086-8.8-4.945-0.044zM240.465 344.147l0.049 8.811 4.945-0.022-0.049-8.811zM731.027 355.027l4.957 0.044 0.086-8.811-4.945-0.033zM240.527 357.359l0.049 8.8 4.945-0.011-0.037-8.811zM730.892 368.239l4.957 0.044 0.086-8.811-4.945-0.033zM240.601 370.57l0.037 8.8 4.957-0.022-0.049-8.8zM730.769 381.45l4.945 0.044 0.086-8.811-4.945-0.044zM240.662 383.77l0.049 8.811 4.945-0.022-0.049-8.8zM730.633 394.661l4.945 0.033 0.086-8.8-4.945-0.044zM240.736 396.982l0.037 8.811 4.957-0.022-0.049-8.8zM730.498 407.873l4.945 0.033 0.086-8.8-4.945-0.044zM240.798 410.193l0.049 8.811 4.945-0.022-0.049-8.811zM730.363 421.073l4.945 0.044 0.086-8.8-4.945-0.044zM240.859 423.404l0.049 8.811 4.945-0.022-0.037-8.811zM730.227 434.284l4.945 0.044 0.086-8.811-4.945-0.033zM240.933 436.616l0.037 8.8 4.957-0.011-0.049-8.811zM730.092 447.496l4.945 0.044 0.086-8.811-4.945-0.044zM240.994 449.827l0.049 8.8 4.945-0.022-0.037-8.8zM729.957 460.707l4.945 0.033 0.098-8.8-4.957-0.044zM241.068 463.039l0.037 8.8 4.957-0.022-0.049-8.8zM729.821 473.919l4.945 0.033 0.098-8.8-4.957-0.044zM241.13 476.239l0.049 8.811 4.945-0.022-0.049-8.8zM729.686 487.119l4.945 0.044 0.098-8.8-4.957-0.044zM241.203 489.45l0.037 8.811 4.945-0.022-0.037-8.811zM729.551 500.33l4.945 0.044 0.098-8.811-4.945-0.033zM241.265 502.662l0.049 8.811 4.945-0.022-0.049-8.811zM729.416 513.542l4.957 0.045 0.086-8.811-4.945-0.033zM241.326 515.873l0.049 8.8 4.945-0.011-0.037-8.811zM729.28 526.753l4.957 0.045 0.086-8.811-4.945-0.045zM241.4 529.085l0.037 8.8 4.957-0.011-0.049-8.811zM729.145 539.964l4.957 0.034 0.086-8.8-4.945-0.045zM241.462 542.296l0.049 8.8 4.945-0.022-0.049-8.8zM729.022 553.165l4.945 0.045 0.086-8.8-4.945-0.045zM241.536 555.496l0.037 8.811 4.945-0.022-0.037-8.8zM728.887 566.376l4.945 0.045 0.086-8.811-4.945-0.034zM241.597 568.707l0.049 8.811 4.945-0.022-0.049-8.8zM728.751 579.587l4.945 0.045 0.086-8.811-4.945-0.034zM241.659 581.919l0.049 8.811 4.945-0.022-0.037-8.811zM728.616 592.799l4.945 0.045 0.086-8.811-4.945-0.045zM241.732 595.13l0.037 8.811 4.957-0.022-0.049-8.811zM728.481 606.010l4.945 0.034 0.086-8.8-4.945-0.045zM241.794 608.342l0.049 8.8 4.945-0.011-0.037-8.811zM728.345 619.221l4.945 0.034 0.086-8.8-4.945-0.045zM241.868 621.553l0.037 8.8 4.957-0.022-0.049-8.8zM728.21 632.422l4.945 0.045 0.098-8.811-4.957-0.034zM241.929 634.764l0.049 8.8 4.945-0.022-0.049-8.8zM728.075 645.633l4.945 0.045 0.098-8.811-4.957-0.034zM241.991 647.965l0.049 8.811 4.945-0.022-0.037-8.8zM727.94 658.845l4.945 0.045 0.098-8.811-4.957-0.045zM242.064 661.176l0.037 8.811 4.957-0.022-0.049-8.811zM727.804 672.056l4.957 0.034 0.086-8.8-4.945-0.045zM242.126 674.387l0.049 8.811 4.945-0.022-0.037-8.811zM727.669 685.267l4.957 0.034 0.086-8.8-4.945-0.045zM242.2 687.599l0.037 8.8 4.957-0.011-0.049-8.811zM727.534 698.468l4.957 0.045 0.086-8.811-4.945-0.034zM242.261 700.81l0.049 8.8 4.945-0.011-0.049-8.811zM727.398 711.679l4.957 0.045 0.086-8.811-4.945-0.034zM242.335 714.022l0.037 8.8 4.945-0.022-0.037-8.8zM727.275 724.891l4.945 0.045 0.086-8.811-4.945-0.045zM242.397 727.222l0.049 8.811 4.945-0.022-0.049-8.8zM727.14 738.102l4.945 0.034 0.086-8.8-4.945-0.045zM242.458 740.433l0.049 8.811 4.945-0.022-0.037-8.811zM727.005 751.313l4.945 0.034 0.086-8.8-4.945-0.045zM242.532 753.645l0.037 7.914 0.013 2.189h3.469v-2.2l1.464-0.011-0.037-7.914zM726.919 759.347h-0.91v4.4h5.818l0.025-2.178 0.050-5.812-4.945-0.045zM250.994 763.748h9.902v-4.4h-9.902zM265.84 763.748h9.889v-4.4h-9.889zM280.686 763.748h9.889v-4.4h-9.889zM295.533 763.748h9.889v-4.4h-9.889zM310.366 763.748h9.902v-4.4h-9.902zM325.213 763.748h9.902v-4.4h-9.902zM340.059 763.748h9.902v-4.4h-9.902zM354.905 763.748h9.902v-4.4h-9.902zM369.751 763.748h9.889v-4.4h-9.889zM384.597 763.748h9.889v-4.4h-9.889zM399.443 763.748h9.889v-4.4h-9.889zM414.277 763.748h9.902v-4.4h-9.902zM429.123 763.748h9.902v-4.4h-9.902zM443.969 763.748h9.902v-4.4h-9.902zM458.815 763.748h9.902v-4.4h-9.902zM473.661 763.748h9.889v-4.4h-9.889zM488.507 763.748h9.889v-4.4h-9.889zM503.354 763.748h9.889v-4.4h-9.889zM518.187 763.748h9.902v-4.4h-9.902zM533.033 763.748h9.902v-4.4h-9.902zM547.88 763.748h9.901v-4.4h-9.901zM562.726 763.748h9.901v-4.4h-9.901zM577.572 763.748h9.889v-4.4h-9.889zM592.418 763.748h9.889v-4.4h-9.889zM607.264 763.748h9.889v-4.4h-9.889zM622.098 763.748h9.902v-4.4h-9.902zM636.944 763.748h9.902v-4.4h-9.902zM651.79 763.748h9.901v-4.4h-9.901zM666.636 763.748h9.901v-4.4h-9.901zM681.482 763.748h9.889v-4.4h-9.889zM696.329 763.748h9.889v-4.4h-9.889zM711.175 763.748h9.889v-4.4h-9.889zM766.329 74.077v761.051h17.698v-761.051zM705.972 726.279c1.988 0 4.97 0 5.467 0 0 0 0.497 0 0.497 0s2.982 0 5.467 0c44.727 2.926 71.066 37.453 71.066 80.758 0 21.067-5.964 45.061-20.873 67.884-28.327 45.061-74.545 69.64-114.799 69.64-31.309 0-58.145-14.63-71.066-44.476-3.976-11.704-5.964-22.823-5.964-35.112 0-63.787 60.63-134.597 130.205-138.694zM426.616-19.97l-59.016 0.697 0.682 41.469 34.107-0.403 0.029 12.213 49.224-0.073-0.073-33.204-0.044-21.003zM219.959-17.524l0.696 41.469 98.418-1.161-0.696-41.481zM72.331-15.776l0.682 41.469 98.433-1.161-0.696-41.481zM5.322-14.982l0.348 20.734-24.619 0.037 0.189 82.949 49.209-0.073-0.174-82.949-6.804 0.013-0.348-20.93zM402.52 75.474l0.174 82.949 49.224-0.073-0.189-82.949zM-18.674 130.207l0.189 82.949 49.209-0.073-0.174-82.949zM402.795 199.904l0.174 82.949 49.224-0.086-0.189-82.937zM-18.398 254.637l0.189 82.949 49.209-0.086-0.174-82.949zM403.071 324.322l0.174 82.949 49.224-0.073-0.189-82.949zM-18.122 379.055l0.189 82.949 49.209-0.073-0.174-82.949zM403.332 448.752l0.189 82.949 49.224-0.086-0.189-82.949zM-17.847 503.473l0.189 82.949 49.209-0.073-0.174-82.949zM403.608 573.17l0.189 82.949 49.209-0.073-0.174-82.949zM-17.571 627.903l0.189 82.949 49.209-0.086-0.189-82.949zM403.883 697.588l0.189 82.949 49.209-0.073-0.174-82.949zM-17.295 752.321l0.189 82.949 49.209-0.073-0.189-82.949zM404.159 822.018l0.189 82.949 49.209-0.086-0.174-82.949zM-17.020 876.751l0.189 82.937 49.209-0.073-0.189-82.949zM404.435 946.436l0.174 77.13 17.699-0.021 0.116 20.747 31.438-0.124-0.044-20.685-0.174-77.118zM-16.744 1001.169l0.058 24.060 0.044 20.795 94.559-0.378-0.232-41.469-45.205 0.171-0.015-3.252zM274.55 1003.394l0.218 41.481 98.433-0.391-0.232-41.469zM126.894 1003.981l0.232 41.469 98.433-0.379-0.232-41.481zM430.062-18.769l-0.24 39.212 437.465 3.118 1.579 977.514-440.634 1.559 0.126 39.212 477.704-1.692-1.705-1055.539z"],"width":917,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["note_select_left"],"defaultCode":59693,"grid":16},"attrs":[],"properties":{"id":58,"order":968,"ligatures":"","prevSize":32,"code":59694,"name":"note_select_left"},"setIdx":1,"setId":1,"iconIdx":66},{"icon":{"paths":["M253.551 126.775v697.264h30.090v-697.264zM270.121 197.589v-70.813h2.697c7.417 0 12.136 3.178 13.485 8.625 14.159 45.393 56.636 94.872 115.295 132.094 65.401 41.308 98.439 98.049 98.439 156.606 0 55.38-28.992 113.029-87.651 160.692-10.114 9.079-10.788 9.079-17.53 9.079-8.091 0-13.485-4.085-13.485-9.533 0-4.085 0.674-4.993 7.417-9.986 51.242-41.762 76.863-92.148 76.863-140.265 0-42.67-20.227-83.523-62.030-114.391-25.621-19.065-72.818-37.222-132.825-51.294 0-0.454-0.674-14.526-0.674-70.813zM170.087 734.012c2.721 0 6.803 0 7.484 0 0 0 0.681 0 0.681 0s4.082 0 7.484 0c61.231 3.65 97.29 46.718 97.29 100.737 0 26.279-8.164 56.208-28.575 84.677-38.78 56.208-102.052 86.867-157.161 86.867-42.862 0-79.601-18.249-97.29-55.478-5.443-14.6-8.164-28.469-8.164-43.799 0-79.567 83.003-167.894 178.252-173.004zM887.428 126.775c5.66-1.138 11.319-1.138 16.979-1.138 81.293 0 149.208 39.83 158.984 93.317 0.515 5.121 1.543 9.673 1.543 13.087 0 58.608-69.973 105.835-160.013 105.835s-158.469-48.366-158.469-105.835c0-6.828 0.515-13.656 2.573-21.053 12.348-44.952 69.973-79.661 138.403-84.213zM895.145 139.862c-2.573-0.569-6.174-0.569-8.747-0.569-32.414 0-51.966 30.726-51.966 68.85 0 20.484 5.66 42.676 17.493 64.867 19.551 34.14 47.849 51.211 72.031 51.211 20.58 0 38.588-11.949 46.82-36.985 3.602-10.242 5.145-20.484 5.145-31.295 0-51.211-35.501-108.111-80.778-116.077zM633.876 129.486v694.554c-15.26-7.455-34.185-12.179-56.433-13.15h-16.018c-97.547 3.83-182.55 70.016-182.55 129.649 0 11.489 2.778 21.885 8.352 32.826 18.116 27.902 55.743 41.573 99.639 41.573 56.438 0 121.231-22.981 160.946-65.107 20.903-21.337 29.27-43.756 29.27-63.451 0-17.166-6.713-32.823-19.141-45.411h0.762v-711.483zM624.128 839.332c3.484 0 6.961 0.542 9.748 1.636 7.664 1.094 11.144 6.022 11.144 12.040 0 18.054-32.032 53.073-82.199 84.257-48.773 30.637-101.738 49.775-130.305 49.775-13.238 0-20.893-3.83-20.893-13.13v-0.546c2.090-26.807 55.048-73.313 119.846-105.044 34.838-18.601 71.059-28.988 92.658-28.988zM840.552 909.028c0 26.064-21.847 47.192-48.797 47.192s-48.797-21.129-48.797-47.192c0-26.064 21.847-47.192 48.797-47.192s48.797 21.129 48.797 47.192z"],"width":1143,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["duration"],"defaultCode":59696,"grid":16},"attrs":[],"properties":{"id":59,"order":969,"ligatures":"","prevSize":32,"code":59697,"name":"duration"},"setIdx":1,"setId":1,"iconIdx":67},{"icon":{"paths":["M237.933 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM526.603 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM815.273 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM1103.943 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM1392.612 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM1681.282 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM1969.952 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM125.54 427.407v583.945h22.916v-583.945zM414.197 427.407v583.945h22.916v-583.945zM702.884 427.407v583.945h22.916v-583.945zM991.541 427.407v583.945h22.916v-583.945zM1280.228 427.407v583.945h22.916v-583.945zM1568.885 427.407v583.945h22.916v-583.945zM1857.572 427.407v583.945h22.916v-583.945zM125.538 1024.139v-85.248h1747.297v85.248zM125.538 896.268v-85.247h1747.297v85.247zM2.421 106.338h889.747v17.049h-889.747v-17.049zM1181.072 106.338h889.747v17.049h-889.747v-17.049zM2.421 106.338h15.277v170.495h-15.277v-170.495zM2070.819 106.338h15.277v170.495h-15.277v-170.495zM1013.828 8.638c1.848-0.344 4.004-0.344 5.852-0.344 15.707 0 32.955 6.531 45.275 17.53 3.080 3.437 4.62 3.781 8.316 3.781h0.308c8.008 0 15.092-4.812 21.867-14.092 1.231-2.406 2.772-3.437 4.62-3.437 1.231 0 2.464 0.344 3.696 2.062 0.617 0.687 0.923 1.375 0.923 3.093 0 2.406-0.923 6.874-3.696 18.561-6.776 26.466-16.323 54.651-24.023 68.744-8.316 15.467-12.012 24.404-16.015 37.809-5.236 18.561-8.316 40.902-8.316 60.151 0 6.531-0.308 8.593-2.464 9.968l-1.231 0.344h-49.894l-0.925-0.344c-0.308-0.344-1.231-1.375-1.54-2.062l-0.617-0.687v-4.812c0-19.248 6.776-42.965 17.863-63.932 8.932-17.186 20.019-31.622 35.111-47.433 16.631-16.498 27.103-30.247 36.035-48.12l1.231-2.406-2.156 1.375c-12.935 10.999-27.719 16.842-41.579 16.842-12.935 0-24.639-4.812-34.187-13.749-6.468-5.843-10.472-8.593-13.859-8.593-0.925 0-1.848 0-2.464 0.344-5.236 1.375-10.164 9.968-13.86 24.748-1.231 4.812-2.156 5.843-5.236 5.843-1.848 0-3.080-0.344-4.004-2.406l-0.308-1.031v-50.527l0.308-1.031c0.925-1.719 2.464-2.75 4.62-2.75 0.308 0 1.231 0.344 2.156 1.031 4.004 3.093 4.928 3.093 8.008 3.093s9.548-1.375 14.475-4.125c0.925 0 1.848-0.344 2.464-0.344 0.925-0.687 2.464-1.031 4.004-1.719 2.464-0.344 6.16-1.375 9.24-1.375zM1036.31 231.711v0zM1036.31 0.045v0z"],"width":2088,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["septuplet"],"defaultCode":59699,"grid":16},"attrs":[],"properties":{"id":60,"order":970,"ligatures":"","prevSize":32,"code":59700,"name":"septuplet"},"setIdx":1,"setId":1,"iconIdx":68},{"icon":{"paths":["M212.635 324.704c1.575 0 3.938 0 4.332 0 0 0 0.394 0 0.394 0s2.363 0 4.332 0c35.44 2.441 56.31 31.245 56.31 67.373 0 17.575-4.725 37.592-16.538 56.632-22.445 37.592-59.066 58.097-90.962 58.097-24.808 0-46.072-12.205-56.31-37.104-3.15-9.764-4.725-19.040-4.725-29.292 0-53.215 48.040-112.288 103.169-115.705zM493.844 324.704c1.575 0 3.938 0 4.332 0 0 0 0.394 0 0.394 0s2.363 0 4.332 0c35.44 2.441 56.31 31.245 56.31 67.373 0 17.575-4.725 37.592-16.538 56.632-22.445 37.592-59.066 58.097-90.962 58.097-24.808 0-46.072-12.205-56.31-37.104-3.15-9.764-4.725-19.040-4.725-29.292 0-53.215 48.040-112.288 103.169-115.705zM775.052 324.704c1.575 0 3.938 0 4.332 0 0 0 0.394 0 0.394 0s2.363 0 4.332 0c35.44 2.441 56.31 31.245 56.31 67.373 0 17.575-4.725 37.592-16.538 56.632-22.445 37.592-59.066 58.097-90.962 58.097-24.808 0-46.072-12.205-56.31-37.104-3.15-9.764-4.725-19.040-4.725-29.292 0-53.215 48.040-112.288 103.169-115.705zM1056.261 324.704c1.575 0 3.938 0 4.332 0 0 0 0.394 0 0.394 0s2.363 0 4.332 0c35.44 2.441 56.31 31.245 56.31 67.373 0 17.575-4.725 37.592-16.538 56.632-22.445 37.592-59.066 58.097-90.962 58.097-24.808 0-46.072-12.205-56.31-37.104-3.15-9.764-4.725-19.040-4.725-29.292 0-53.215 48.040-112.288 103.169-115.705zM1337.469 324.704c1.575 0 3.938 0 4.332 0 0 0 0.394 0 0.394 0s2.363 0 4.332 0c35.44 2.441 56.31 31.245 56.31 67.373 0 17.575-4.725 37.592-16.538 56.632-22.445 37.592-59.066 58.097-90.962 58.097-24.808 0-46.072-12.205-56.31-37.104-3.15-9.764-4.725-19.040-4.725-29.292 0-53.215 48.040-112.288 103.169-115.705zM108.762 415.514v595.474h22.454v-595.474zM389.972 415.514v595.474h22.454v-595.474zM671.181 415.514v595.474h22.454v-595.474zM952.391 415.514v595.474h22.454v-595.474zM1233.581 415.514v595.474h22.473v-595.474zM109.467 1024.030v-86.931h1138.858v86.931zM109.467 893.633v-86.931h1138.858v86.931zM2.103 108.367h588.871v17.386h-588.871v-17.386zM846.835 108.367h588.871v17.386h-588.871v-17.386zM2.103 108.367h14.023v173.863h-14.023v-173.863zM1435.706 108.367h14.023v173.863h-14.023v-173.863zM674.378 12.593c0.565-0.351 0.848-0.351 1.696-0.351 0.565 0 2.262 0.351 4.523 1.402 12.722 5.258 26.009 8.412 39.862 8.412s28.554-3.155 43.255-8.412c2.544-1.052 4.241-1.402 5.371-1.402s1.979 0.351 2.827 1.402c1.13 1.402 1.414 2.454 1.414 3.856 0 1.052-0.283 2.454-1.13 4.557-7.068 20.329-15.549 31.546-26.857 36.803-5.937 2.454-14.701 3.856-24.313 3.856-13.853 0-29.967-2.804-41.558-8.062-0.848 0-1.13 0-1.13 0s0 0 0 0-2.827 36.803-2.827 38.205c0 0 0 0 0 0s0 0 0 0c0.565 0 1.13-0.351 2.827-1.402 5.371-3.155 11.874-6.309 18.093-7.711 5.654-2.103 11.591-2.454 16.963-2.454 35.339 0 63.327 30.845 63.327 69.050 0 5.959-0.848 12.268-2.262 18.577-7.35 30.144-32.229 51.875-57.673 51.875-3.958 0-7.35-0.351-10.743-1.402-13.287-3.155-27.706-13.67-38.448-26.639-4.806-5.959-6.502-12.618-6.502-19.979 0-14.020 8.764-28.041 21.486-28.041 1.414 0 3.11 0.351 4.523 0.351 11.308 2.804 16.963 15.072 16.963 26.639 0 10.866-5.089 21.381-14.701 24.886-0.565 0-1.414 0.351-1.414 0.351s0 0 0 0c0 0.701 6.785 3.505 9.612 4.557 1.979 0.351 3.393 0.351 5.371 0.351 16.397 0 31.946-21.381 32.794-48.37 0.283-1.753 0.283-3.155 0.283-4.557 0-22.432-6.22-43.813-15.549-52.576-2.544-2.804-4.523-3.505-8.764-3.505-0.283 0-0.848 0-1.414 0-12.439 0-24.313 4.907-34.208 13.67-3.958 3.505-4.241 3.505-5.371 3.505-2.827 0-4.806-2.103-4.806-5.258 0-3.505 5.937-87.977 6.22-89.029s1.13-2.454 2.262-3.155zM718.765 236.217v0zM718.765-0.025v0z"],"width":1452,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["quint"],"defaultCode":59700,"grid":16},"attrs":[],"properties":{"id":61,"order":971,"ligatures":"","prevSize":32,"code":59701,"name":"quint"},"setIdx":1,"setId":1,"iconIdx":69},{"icon":{"paths":["M261.155 323.259c-116.428 5.821-220.092 90.731-251.354 181.807h-3.675v11.233c-3.973 14.422-6.171 28.905-6.171 43.198 0 14.177 2.514 27.494 6.171 40.771v424.147h106.505v-333.521c13.342 2.683 27.273 4.16 41.811 4.16 80.748 0 173.522-41.81 230.345-118.57 29.907-38.879 41.811-79.77 41.811-115.658 0-73.77-52.842-132.584-142.561-137.569h-22.882zM30.676 0l-16.017 50.826c152.088 48.028 224.737 71.232 268.689 85.356l-264.529 138.054 24.685 47.22 366.873-191.515-46.596-23.298c0 0-2.917-1.3-3.952-1.664s-2.604-0.914-5.478-1.872c-5.748-1.916-16.605-5.449-37.582-12.204-41.953-13.511-124.302-39.812-286.093-90.904z"],"width":426,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["accent_above"],"defaultCode":59701,"grid":16},"attrs":[],"properties":{"id":62,"order":972,"ligatures":"","prevSize":32,"code":59702,"name":"accent_above"},"setIdx":1,"setId":1,"iconIdx":70},{"icon":{"paths":["M308.334 0v327.489c-13.082-2.626-26.803-4.085-41.055-4.085-79.287 0-170.316 41.122-226.111 116.494-29.366 38.175-41.123 78.327-41.123 113.566 0 72.435 51.886 130.187 139.983 135.081h22.536c114.322-5.716 216.044-89.158 246.74-178.587h3.609v-11.030c3.901-14.161 6.060-28.382 6.060-42.417 0-13.945-2.456-26.974-6.060-40.034v-416.477h-104.579zM72.011 716.46l-15.728 49.906c149.337 47.159 220.672 69.944 263.83 83.813l-259.745 135.557 24.238 46.366 360.238-188.051-45.753-22.877c0 0-2.864-1.276-3.881-1.634s-2.557-0.898-5.379-1.838c-5.644-1.881-16.305-5.35-36.902-11.983-41.194-13.266-122.054-39.092-280.919-89.26z"],"width":425,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["accent_below"],"defaultCode":59702,"grid":16},"attrs":[],"properties":{"id":63,"order":973,"ligatures":"","prevSize":32,"code":59703,"name":"accent_below"},"setIdx":1,"setId":1,"iconIdx":71},{"icon":{"paths":["M86.155 1023.16c3.206 1.069 81.212 1.069 157.080 1.069 68.389 0 135.709 0 137.846-1.069 16.029-5.343 23.509-18.166 23.509-30.989 0-14.96-7.48-28.851-23.509-33.126-2.137-1.069-73.732-1.069-146.394-1.069s-144.257 0-147.463 1.069c-16.029 4.274-22.44 18.166-22.44 30.989 0 14.96 6.411 27.783 21.371 33.126zM345.396 0v366.913c-14.656-2.942-30.030-4.577-45.998-4.577-88.832 0-190.819 46.072-253.33 130.517-32.901 42.771-46.074 87.756-46.074 127.237 0 81.155 58.132 145.859 156.834 151.342h25.249c128.084-6.404 242.051-99.891 276.443-200.086h4.043v-12.358c4.371-15.865 6.789-31.799 6.789-47.523 0-15.624-2.751-30.221-6.789-44.853v-466.613h-117.168z"],"width":469,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["tenuto_below"],"defaultCode":59703,"grid":16},"attrs":[],"properties":{"id":64,"order":974,"ligatures":"","prevSize":32,"code":59704,"name":"tenuto_below"},"setIdx":1,"setId":1,"iconIdx":72},{"icon":{"paths":["M287.346 252.796c-128.084 6.404-242.128 99.891-276.52 200.086h-4.043v12.358c-4.371 15.865-6.789 31.799-6.789 47.523 0 15.596 2.765 30.171 6.789 44.777v466.689h117.168v-366.913c14.675 2.951 30.007 4.577 45.998 4.577 88.832 0 190.895-46.072 253.406-130.517 32.901-42.771 45.998-87.756 45.998-127.237 0-81.155-58.132-145.859-156.834-151.342h-25.173zM86.155 1.069c3.206-1.069 81.212-1.069 157.080-1.069 68.389 0 135.709 0 137.846 1.069 16.029 5.343 23.509 18.166 23.509 30.989 0 14.96-7.48 28.851-23.509 33.126-2.137 1.069-73.732 1.069-146.394 1.069s-144.257 0-147.463-1.069c-16.029-4.274-22.44-18.166-22.44-30.989 0-14.96 6.411-27.783 21.371-33.126z"],"width":469,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["tenuto_above"],"defaultCode":59704,"grid":16},"attrs":[],"properties":{"id":65,"order":975,"ligatures":"","prevSize":32,"code":59705,"name":"tenuto_above"},"setIdx":1,"setId":1,"iconIdx":73},{"icon":{"paths":["M0 479.267l382.581-414.633v248.78h408.086v331.707h-408.086v248.78zM234.305 479.267l382.581-414.633v248.78h408.086v331.707h-408.086v248.78z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["rewind"],"defaultCode":59705,"grid":16},"attrs":[],"properties":{"id":66,"order":976,"ligatures":"","prevSize":32,"code":59706,"name":"rewind"},"setIdx":1,"setId":1,"iconIdx":74},{"icon":{"paths":["M1029.311 479.267l-382.581 414.633v-248.78h-408.086v-331.707h408.086v-248.78zM795.006 474.928l-382.581 414.633v-248.78h-408.086v-331.707h408.086v-248.78z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fforward"],"defaultCode":59706,"grid":16},"attrs":[],"properties":{"id":67,"order":977,"ligatures":"","prevSize":32,"code":59707,"name":"fforward"},"setIdx":1,"setId":1,"iconIdx":75},{"icon":{"paths":["M262.478 188.659c4.369-1.092 8.738-1.092 13.653-1.092 19.115 0 41.506 2.185 60.621 6.007 89.566 18.569 151.279 79.189 162.748 160.017 1.092 8.738 1.638 16.93 1.638 25.668 0 49.152-16.93 112.503-45.875 165.478-68.813 124.518-194.423 214.084-345.156 246.852-2.731 0-4.915 0.546-7.646 0.546-5.461 0-8.192-3.277-8.192-8.192 0-5.461 1.092-7.1 12.015-11.469 172.578-64.99 287.812-205.346 298.189-362.633 0.546-8.192 0.546-17.476 0.546-24.576 0-76.459-23.484-133.257-68.813-161.655-19.661-12.561-40.96-18.569-63.898-18.569-50.79 0-102.673 28.945-126.703 77.551-1.092 3.823-4.915 12.015-4.915 12.561 0 0 0 0 0 0s0.546-0.546 2.185-1.092c12.015-7.646 25.122-11.469 38.775-11.469 19.115 0 39.322 8.192 53.521 23.484 13.107 14.199 20.207 33.314 20.207 50.79 0 35.499-26.214 71.543-67.174 75.366-2.731 0-5.461 0.546-8.192 0.546-45.329 0-81.92-41.506-81.92-93.935 0-1.092 0-2.731 0-3.277 2.185-78.097 73.728-141.995 164.386-146.91zM553.021 261.841c1.092-0.546 1.638-0.546 3.277-0.546 3.823 0 8.192 0.546 9.284 1.638 13.653 3.823 20.207 15.838 20.207 27.307 0 9.83-4.915 19.661-14.746 25.122-3.823 2.731-8.738 3.277-13.653 3.277-7.646 0-15.838-3.277-21.299-10.377-4.369-5.461-6.554-11.469-6.554-17.476 0-13.653 8.738-27.307 23.484-28.945zM553.021 440.426c1.092 0 1.638 0 3.277 0 3.823 0 8.192 0.546 9.284 1.638 13.653 3.823 20.207 15.838 20.207 27.307 0 9.83-4.915 19.661-14.746 24.576-3.823 2.731-8.738 3.823-13.653 3.823-7.646 0-15.838-3.823-21.299-10.377-4.369-5.461-6.554-11.469-6.554-18.022 0-13.653 8.738-26.761 23.484-28.945z"],"width":796,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bass"],"defaultCode":59707,"grid":16},"attrs":[],"properties":{"id":68,"order":978,"ligatures":"","prevSize":32,"code":59708,"name":"bass"},"setIdx":1,"setId":1,"iconIdx":76},{"icon":{"paths":["M94.815 474.074v-383.932h89.566v768.956h-89.566v-385.024zM217.695 474.074v-383.932h23.484v367.548l3.277-3.277c5.461-4.369 15.292-14.746 21.845-23.484 23.484-31.676 42.598-73.182 54.067-121.788 3.277-12.015 4.369-13.653 10.377-13.653s8.192 2.731 9.284 11.469c4.369 60.621 43.691 104.311 88.474 104.311 7.1 0 14.746-1.092 21.845-3.823 29.491-9.83 39.868-36.045 42.052-105.95 0-14.199 0.546-27.307 0.546-39.322 0-79.189-9.83-116.873-31.676-134.895-12.015-9.284-30.037-14.746-49.152-14.746-19.661 0-38.775 4.915-56.798 13.653l-1.092 1.092 1.092 0.546c6.007 1.092 9.83 1.638 14.199 3.823 15.838 8.192 22.938 23.484 22.938 38.775 0 17.476-10.377 35.499-29.491 41.506-5.461 2.185-9.83 3.277-14.199 3.277-26.214 0-46.967-22.938-46.967-48.606 0-7.1 1.638-13.653 5.461-21.299 10.923-21.299 49.152-43.145 83.012-48.606 7.646-0.546 14.746-1.638 22.391-1.638 72.090 0 137.626 52.429 154.556 126.703 3.277 12.015 4.369 25.122 4.369 38.229 0 13.653-1.092 27.853-4.369 40.96-14.199 67.174-63.898 117.965-123.426 127.249-4.915 0.546-10.377 0.546-14.746 0.546-19.115 0-37.683-6.007-55.159-18.022-1.092-1.638-2.731-2.185-3.823-2.185 0 0 0 0 0 0s-8.738 14.746-19.115 33.314l-20.207 32.768 20.207 32.768c10.377 18.022 19.115 33.314 19.115 33.314s0 0 0 0c1.092 0 2.731-1.092 3.823-2.731 17.476-12.015 36.045-18.022 55.159-18.022 9.83 0 19.115 1.638 28.945 3.823 57.89 16.93 101.035 68.267 111.411 134.895 1.638 9.83 2.185 19.661 2.185 29.491 0 42.052-14.199 80.282-40.96 110.865-31.13 36.591-75.366 54.613-118.511 54.613-34.953 0-69.359-13.107-95.573-37.683-9.284-10.377-13.653-22.391-13.653-34.406 0-24.030 17.476-46.967 45.875-46.967 26.761 0 43.691 22.938 43.691 44.783 0 15.292-7.1 29.491-22.938 37.683-4.369 2.185-8.192 3.277-14.199 3.823l-1.092 1.092 1.092 0.546c18.022 9.284 37.137 13.653 56.798 13.653 19.115 0 37.137-5.461 49.152-14.199 21.845-18.569 31.676-56.252 31.676-134.349 0-13.107-0.546-25.668-0.546-40.414-3.277-78.643-16.384-105.404-57.344-109.227-2.185-0.546-4.369-0.546-6.554-0.546-45.329 0-84.105 44.783-88.474 104.858-1.092 8.192-3.277 10.923-9.284 10.923s-7.1-1.092-10.377-13.653c-11.469-48.060-30.583-90.112-54.067-121.788-6.554-8.192-16.384-19.115-21.845-23.484l-3.277-3.277v368.094h-23.484v-385.024zM0 94.815h853.333v18.963h-853.333zM0 284.444h853.333v18.963h-853.333zM0 474.074h853.333v18.963h-853.333zM0 663.704h853.333v18.963h-853.333zM0 853.333h853.333v18.963h-853.333z"],"width":796,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["alto"],"defaultCode":59708,"grid":16},"attrs":[],"properties":{"id":69,"order":979,"ligatures":"","prevSize":32,"code":59709,"name":"alto"},"setIdx":1,"setId":1,"iconIdx":77},{"icon":{"paths":["M225.96 417.589c-100.73 5.037-190.464 78.532-217.492 157.331h-3.119v9.657c-3.438 12.477-5.338 25.062-5.338 37.428 0 12.264 2.175 23.724 5.338 35.209v366.965h92.131v-288.51c11.539 2.32 23.595 3.599 36.169 3.599 69.85 0 150.104-36.227 199.258-102.628 25.87-33.632 36.169-69.004 36.169-100.049 0-63.814-45.71-114.691-123.321-119.003h-19.794zM323.142 322.124l-43.181 16.138c-48.374-129.208-71.709-190.915-85.9-228.245l-107.283 234.765-41.909-19.186 148.832-325.596 22.236 39.197c0 0 1.255 2.461 1.616 3.339s0.908 2.208 1.865 4.647c1.915 4.878 5.459 14.098 12.244 31.913 13.571 35.63 40.019 105.577 91.48 243.028z"],"width":369,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["marcato_above"],"defaultCode":59709,"grid":16},"attrs":[],"properties":{"id":70,"order":980,"ligatures":"","prevSize":32,"code":59710,"name":"marcato_above"},"setIdx":1,"setId":1,"iconIdx":78},{"icon":{"paths":["M284.495 0v302.248c-12.073-2.424-24.737-3.77-37.891-3.77-73.176 0-157.189 37.952-208.683 107.515-27.102 35.233-37.954 72.29-37.954 104.813 0 66.853 47.887 120.153 129.194 124.67h20.799c105.511-5.276 199.392-82.286 227.723-164.823h3.33v-10.18c3.6-13.069 5.593-26.195 5.593-39.148 0-12.87-2.266-24.895-5.593-36.948v-384.377h-96.518zM320.187 682.412l-45.8-15.317c-45.923 137.047-68.098 202.506-81.591 242.108l-120.907-241.872-43.176 21.62 167.728 335.452 21.847-41.852c0 0 1.224-2.623 1.57-3.555s0.87-2.345 1.783-4.934c1.827-5.178 5.2-14.96 11.652-33.86 12.905-37.8 38.040-112 86.893-257.79z"],"width":387,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["marcato_below"],"defaultCode":59710,"grid":16},"attrs":[],"properties":{"id":71,"order":981,"ligatures":"","prevSize":32,"code":59711,"name":"marcato_below"},"setIdx":1,"setId":1,"iconIdx":79},{"icon":{"paths":["M245.564 344.101c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM625.33 344.101c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM997.913 345.298c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM141.456 437.175v578.979h34.257v-578.979zM517.634 438.38v578.979h34.257v-578.979zM890.316 445.071v578.979h34.257v-578.979zM140.309 1024.049v-84.523h767.144v84.523zM2.219 105.402h403.935v16.904h-403.935v-16.904zM676.393 105.402h403.935v16.904h-403.935v-16.904zM2.219 105.402h14.795v169.045h-14.795v-169.045zM1080.328 105.402h14.795v169.045h-14.795v-169.045zM532.028 8.533c0.596 0 2.684 0 5.071 0 3.877 0 8.65 0 10.141 0 27.441 3.408 48.916 20.448 52.793 42.599 0.596 2.045 0.596 4.43 0.596 6.816 0 2.726 0 5.112-0.596 6.475-3.877 16.017-20.282 30.672-41.161 37.828-1.491 0.682-2.088 0.682-2.088 1.022 0 0 0 0 0 0 0.299 0 1.192 0.341 2.088 0.341 28.335 11.928 43.249 34.761 43.249 56.913 0 17.040-8.351 33.398-27.142 44.303-11.036 6.816-23.265 9.883-35.196 9.883-19.686 0-39.073-8.52-52.793-23.856-5.071-5.453-6.86-12.269-6.86-19.085 0-13.973 8.65-27.264 22.967-27.264v0c14.317 0 22.37 12.609 22.37 25.56 0 9.883-4.474 19.766-14.615 24.537 0 0 0 0 0 0 0 0.341 8.65 2.386 13.124 2.726 0.596 0 1.192 0 1.79 0 19.686 0 33.406-16.017 33.406-38.169 0-2.386 0-4.43-0.299-6.816-3.281-24.878-17.896-43.281-34.897-43.963-4.176-0.341-6.264-2.386-6.264-5.453 0-4.090 1.79-5.794 6.264-5.794 14.615-1.022 27.142-12.269 31.915-29.308 1.192-3.408 1.491-6.816 1.491-9.542 0-14.313-9.246-27.264-22.967-30.672-2.088-1.022-4.772-1.022-7.755-1.022-4.176 0-8.053 0.341-12.229 1.022l-1.192 0.341 1.192 1.022c7.755 4.771 11.036 13.291 11.036 21.811 0 11.246-6.562 22.492-17.896 25.56-1.491 0.341-3.281 0.341-4.772 0.341-13.124 0-22.967-13.632-22.967-27.945 0-6.134 1.79-12.269 6.264-17.381 10.439-12.95 26.248-20.448 45.933-22.833zM540.975 229.709v0zM540.975 0.014v0z"],"width":1097,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["triplet"],"defaultCode":59711,"grid":16},"attrs":[],"properties":{"id":72,"order":982,"ligatures":"","prevSize":32,"code":59712,"name":"triplet"},"setIdx":1,"setId":1,"iconIdx":80},{"icon":{"paths":["M245.564 344.101c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM625.33 344.101c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM997.913 345.298c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM141.456 437.175v578.979h34.257v-578.979zM517.634 438.38v578.979h34.257v-578.979zM890.316 445.071v578.979h34.257v-578.979zM140.309 1024.049v-84.523h767.144v84.523zM2.219 105.402h403.935v16.904h-403.935v-16.904zM676.393 105.402h403.935v16.904h-403.935v-16.904zM2.219 105.402h14.795v169.045h-14.795v-169.045zM1080.328 105.402h14.795v169.045h-14.795v-169.045zM532.028 8.533c0.596 0 2.684 0 5.071 0 3.877 0 8.65 0 10.141 0 27.441 3.408 48.916 20.448 52.793 42.599 0.596 2.045 0.596 4.43 0.596 6.816 0 2.726 0 5.112-0.596 6.475-3.877 16.017-20.282 30.672-41.161 37.828-1.491 0.682-2.088 0.682-2.088 1.022 0 0 0 0 0 0 0.299 0 1.192 0.341 2.088 0.341 28.335 11.928 43.249 34.761 43.249 56.913 0 17.040-8.351 33.398-27.142 44.303-11.036 6.816-23.265 9.883-35.196 9.883-19.686 0-39.073-8.52-52.793-23.856-5.071-5.453-6.86-12.269-6.86-19.085 0-13.973 8.65-27.264 22.967-27.264v0c14.317 0 22.37 12.609 22.37 25.56 0 9.883-4.474 19.766-14.615 24.537 0 0 0 0 0 0 0 0.341 8.65 2.386 13.124 2.726 0.596 0 1.192 0 1.79 0 19.686 0 33.406-16.017 33.406-38.169 0-2.386 0-4.43-0.299-6.816-3.281-24.878-17.896-43.281-34.897-43.963-4.176-0.341-6.264-2.386-6.264-5.453 0-4.090 1.79-5.794 6.264-5.794 14.615-1.022 27.142-12.269 31.915-29.308 1.192-3.408 1.491-6.816 1.491-9.542 0-14.313-9.246-27.264-22.967-30.672-2.088-1.022-4.772-1.022-7.755-1.022-4.176 0-8.053 0.341-12.229 1.022l-1.192 0.341 1.192 1.022c7.755 4.771 11.036 13.291 11.036 21.811 0 11.246-6.562 22.492-17.896 25.56-1.491 0.341-3.281 0.341-4.772 0.341-13.124 0-22.967-13.632-22.967-27.945 0-6.134 1.79-12.269 6.264-17.381 10.439-12.95 26.248-20.448 45.933-22.833zM540.975 229.709v0zM540.975 0.014v0zM51.664 136.905l-21.913 26.345c17.706 14.724 35.106 29.188 52.206 43.407 485.733 403.909 728.897 605.856 850.629 706.842 60.866 50.493 91.361 75.748 106.669 88.387 7.654 6.319 11.513 9.479 13.482 11.090 0.985 0.806 1.498 1.227 1.823 1.489 0.163 0.131 0.265 0.206 0.451 0.351 0.093 0.069 0.173 0.154 0.468 0.368 0.147 0.107 0.836 0.552 0.837 0.552s0.937 0.552 0.937 0.552c0 0 1.439 0.719 1.439 0.719l6.841-32.835c0 0 6.825 1.422 6.825 1.422s2.392 1.271 2.392 1.271c-0.001 0 0.659 0.449 0.802 0.552 0.267 0.194 0.342 0.254 0.402 0.301-0.178-0.143-0.605-0.505-1.522-1.255-1.888-1.545-5.732-4.687-13.365-10.99-15.267-12.605-45.764-37.852-106.619-88.336-121.711-100.968-364.85-302.92-850.579-706.825-17.099-14.219-34.5-28.684-52.206-43.407zM1061.553 144.633c-511.81 425.61-768.018 638.401-896.261 744.796-64.121 53.197-96.254 79.803-112.34 93.087-8.043 6.642-12.075 9.962-14.068 11.592-0.99 0.81-1.473 1.208-1.656 1.355 0.060-0.043 0.119-0.113 0.402-0.318 0.141-0.102 0.803-0.535 0.802-0.535s0.937-0.552 0.937-0.552c0 0 1.439-0.719 1.439-0.719l6.875 32.819c0 0 6.875-1.455 6.875-1.455s2.375-1.254 2.375-1.255c0.001 0 0.657-0.446 0.802-0.552 0.291-0.211 0.392-0.295 0.485-0.368 0.186-0.144 0.283-0.216 0.451-0.351 0.337-0.271 0.871-0.708 1.907-1.556 2.072-1.695 6.121-5.034 14.185-11.692 16.126-13.317 48.276-39.915 112.407-93.12 128.262-106.412 384.479-319.231 896.294-744.846z"],"width":1097,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["no_tuplet"],"defaultCode":59712,"grid":16},"attrs":[],"properties":{"id":73,"order":983,"ligatures":"","prevSize":32,"code":59713,"name":"no_tuplet"},"setIdx":1,"setId":1,"iconIdx":81},{"icon":{"paths":["M13.798 6.282c-4.566 87.852-9.132 175.705-13.699 263.557 21.798 0 43.596 0 65.395 0 1.45-61.095 21.932-133.299 86.983-157.357 63.656-14.536 129.743-7.099 194.586-8.948-0.498 249.688 1.008 499.41-0.774 749.076 3.618 44.832-17.965 97.881-72.921 94.81-22.627 0.926-45.293 0.276-67.937 0.47 0 20.987 0 41.974 0 62.961 153.959 0 307.918 0 461.877 0 0-20.987 0-41.974 0-62.961-43.398-2.101-96.886 9.704-127.937-27.294-20.652-57.557-10.445-119.922-12.92-179.82 0-212.414 0-424.829 0-637.243 61.597 2.035 124.201-5.429 184.858 7.144 57.856 13.019 93.321 67.818 98.166 122.63 1.694 21.781 0.915 45.22 29.747 36.53 12.718-3.909 44.288 9.585 39.489-10.494-4.121-84.354-8.242-168.709-12.362-253.063-284.183 0-568.367 0-852.55 0zM49.714 42.823c260.207 0 520.414 0 780.621 0 2.614 53.701 5.228 107.403 7.842 161.104-5.333-71.652-72.536-126.795-144.027-133.997-68.268-5.733-137.014-1.837-205.503-2.982 0.464 263.273-0.937 526.572 0.718 789.828 1.534 41.642 7.163 94.836 53.371 112.647 25.317 9.171-23.315 3.181-34.636 4.891-63.989 0-127.977 0-191.966 0 42.882-12.123 67.113-53.617 66.916-95.089 3.719-138.877 0.885-277.913 1.771-416.858 0-131.806 0-263.612 0-395.419-74.966 1.61-150.501-4.349-224.939 5.889-57.414 10.195-101.405 58.125-117.477 110.805 2.436-46.94 4.873-93.88 7.309-140.82zM331.064 968.959c18.376-9.263 31.864-22.994 41.293-42.038 8.684-17.539 10.081-24.995 11.327-60.475 1.407-40.053 1.783-178.543 1.419-521.536l-0.296-278.686-74.336 0.001c-123.222 0.001-155.747 3.103-185.77 17.717-34.017 16.558-61.821 47.308-78.241 86.53l-2.728 6.515 0.038-6.515c0.021-3.584 1.464-33.436 3.208-66.34l3.17-59.824 780.082-0.596 0.008 5.036c0.005 2.77 1.331 31.424 2.947 63.676s2.902 61.571 2.857 65.155l-0.083 6.515-2.676-8.292c-17.935-55.574-73.352-98.65-136.325-105.968-21.671-2.518-62.314-3.607-134.752-3.609l-74.336-0.002 0.102 351.541c0.056 193.347 0.531 376.862 1.057 407.811 1.067 62.827 1.984 72.327 9.039 93.586 8.199 24.706 19.756 38.745 40.007 48.599l11.988 5.833-228.317 0.063 9.318-4.697zM23.918 24.381h804.571v48.762h-804.571v-48.762zM365.252 73.143h146.286v877.714h-146.286v-877.714zM316.49 950.857h243.81v24.381h-243.81v-24.381zM926.014 24.381v975.238h44.216v-975.238zM877.252 0v28.19h146.286v-28.19zM877.252 995.81v28.19h146.286v-28.19z"],"width":1023,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["text"],"defaultCode":59713,"grid":16},"attrs":[],"properties":{"id":74,"order":984,"ligatures":"","prevSize":32,"code":59714,"name":"text"},"setIdx":1,"setId":1,"iconIdx":82},{"icon":{"paths":["M506.973 92.47l-219.682 194.663h168.986v179.689h101.392v-179.689h168.986zM980.134 511.744l-219.682-194.663v149.741h-202.783v89.845h202.783v149.741zM506.973 931.019l219.682-194.663h-168.986v-179.689h-101.392v179.689h-168.986zM33.811 511.744l219.682 194.663v-149.741h202.783v-89.845h-202.783v-149.741zM458.602 466.514h96.919v94.686h-96.919v-94.686z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["move"],"defaultCode":59714,"grid":16},"attrs":[],"properties":{"id":75,"order":985,"ligatures":"","prevSize":32,"code":59715,"name":"move"},"setIdx":1,"setId":1,"iconIdx":83},{"icon":{"paths":["M674.512 392.256c0-27.54-22.786-49.865-50.893-49.865s-50.893 22.325-50.893 49.865v0zM572.726 392.256c0 27.54 22.786 49.865 50.893 49.865s50.893-22.325 50.893-49.865v0zM677.481 619.495c-0.015-26.961-23.025-48.812-51.407-48.812s-51.393 21.851-51.407 48.811v0.001zM574.667 619.495c0.015 26.961 23.025 48.812 51.407 48.812s51.393-21.851 51.407-48.811v-0.001zM844.908 64.084h108.845v896.746h-108.845v-896.746zM722.188 68.619h59.591v891.707h-59.591v-891.707zM69.377 62.702h777.204v41.16h-777.204v-41.16zM62.613 255.985h780.987v41.086h-780.987v-41.086zM62.655 479.423h779.017v41.004h-779.017v-41.004zM67.746 711.533h781.991v40.48h-781.991v-40.48zM63.315 919.947h781.592v40.883h-781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["end_rpt"],"defaultCode":59715,"grid":16},"attrs":[],"properties":{"id":76,"order":986,"ligatures":"","prevSize":32,"code":59716,"name":"end_rpt"},"setIdx":1,"setId":1,"iconIdx":84},{"icon":{"paths":["M559.643 2.58c1.721-2.622 6.872-2.622 12.026-2.622s10.308 0 12.026 2.622c8.59 1.313 18.898 6.556 24.052 13.113 6.872 9.179 6.872 9.179 6.872 59.007 0 44.583 1.721 45.894 1.721 45.894 17.18 0 70.439 17.046 97.927 28.848 109.954 47.205 187.265 129.815 226.779 242.583 6.872 19.669 18.898 72.119 18.898 87.854 0 0 18.898 0 56.695 0 60.131 0 60.131 0 72.157 6.556 12.026 5.245 18.898 17.046 18.898 26.225 0 13.113-6.872 23.603-18.898 28.848s-12.026 5.245-72.157 5.245c-37.797 0-56.695 2.622-56.695 2.622 0 14.424-12.026 66.874-18.898 86.543-39.515 112.768-116.826 195.378-226.779 242.583-27.488 13.113-80.747 27.536-97.927 27.536 0 0-1.721 2.622-1.721 44.583v6.556c0 44.583 0 44.583-10.308 53.762-6.872 9.179-20.616 13.113-30.924 13.113-13.744 0-27.488-3.935-34.36-13.113-10.308-9.179-10.308-9.179-10.308-53.762v-6.556c0-41.96 0-44.583-1.721-44.583-17.18 0-70.439-14.424-97.927-27.536-109.954-47.205-187.265-129.815-226.779-242.583-6.872-19.669-18.898-72.119-18.898-86.543 0 0-17.18-2.622-53.259-2.622-60.131 0-60.131 0-70.439-5.245-12.026-5.245-18.898-15.735-18.898-27.536 0-13.113 12.026-27.536 29.206-32.781 5.155 0 17.18-1.313 60.131-1.313 34.36 0 53.259 0 53.259 0 0-15.735 12.026-68.185 18.898-87.854 39.515-112.768 116.826-195.378 226.779-242.583 27.488-11.801 80.747-28.848 97.927-28.848 1.721 0 1.721-1.313 1.721-45.894 0-38.027 0-47.205 0-49.828 5.155-9.179 17.18-18.358 30.924-22.291zM528.719 333.015c0-79.987-1.721-145.55-1.721-145.55-5.155 0-42.951 27.536-56.695 40.649-58.413 57.695-103.081 154.729-106.517 239.96l-3.435 11.801h168.366v-146.861zM624.927 194.021c-3.435-3.935-8.59-6.556-8.59-6.556s-1.721 65.563-1.721 145.55v146.861h168.366l-3.435-11.801c-6.872-108.835-72.157-226.848-154.622-274.053zM528.716 694.922v-148.172h-168.364l3.435 11.801c3.435 86.543 48.105 183.576 106.517 241.272 13.744 13.113 51.541 40.649 56.695 40.649 0 0 1.721-65.563 1.721-145.55zM779.551 558.551l3.435-11.801h-168.366v148.172c0 79.987 1.721 145.55 1.721 145.55 5.155 0 42.951-27.536 56.695-40.649 58.413-57.695 103.081-154.729 106.517-241.272z"],"width":1148,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["coda"],"defaultCode":59716,"grid":16},"attrs":[],"properties":{"id":77,"order":987,"ligatures":"","prevSize":32,"code":59717,"name":"coda"},"setIdx":1,"setId":1,"iconIdx":85},{"icon":{"paths":["M305.637 1.058c8.308-1.058 15.232-1.058 22.156-1.058 91.392 0 174.477 46.503 204.941 117.314 4.154 8.455 5.539 17.967 5.539 26.422 0 36.991-34.618 66.583-83.084 66.583-41.542 0-70.621-17.967-85.854-48.616-18.002-47.56-63.698-75.039-110.779-75.039-11.078 0-22.156 1.058-33.234 4.228-33.234 10.569-49.85 30.65-49.85 60.242 0 7.398 0 14.796 2.769 22.194 22.156 95.119 138.473 197.637 293.564 259.993 12.463 4.228 24.925 8.455 26.31 9.512l4.154 2.113 1.385-2.113c2.769-3.171 41.542-49.673 148.167-175.442l99.701-116.257 73.391-87.721c27.695-33.82 30.464-35.934 36.003-38.048 6.924-3.171 12.463-4.228 20.771-4.228 18.002 0 34.618 11.626 34.618 27.479v1.058c0 7.398 0 9.512-29.079 43.332l-265.869 314.95-49.85 58.128-1.385 2.113 9.693 4.228c119.087 47.56 210.48 120.484 260.33 203.978 26.31 45.446 38.773 93.005 38.773 136.338 0 101.461-69.237 188.125-184.17 207.149-15.232 3.171-30.464 4.228-45.696 4.228-88.623 0-171.707-45.446-203.556-115.2-4.154-10.569-5.539-19.024-5.539-28.536 0-35.934 33.234-65.527 84.469-65.527 40.157 0 67.852 15.853 83.084 48.616 19.386 46.503 66.467 73.982 112.163 73.982 11.078 0 22.156-1.058 33.234-4.228 34.618-9.512 48.466-30.65 48.466-60.242 0-7.398 0-14.796-1.385-21.138-22.156-96.176-137.089-198.694-293.564-259.993-13.847-4.228-24.925-8.455-27.695-10.569l-2.769-1.058-2.769 1.058c-1.385 2.113-41.542 49.673-146.782 174.385l-99.701 117.314-73.391 88.778c-29.079 33.82-30.464 33.82-36.003 38.048-6.924 2.113-13.847 4.228-20.771 4.228-19.386 0-36.003-11.626-36.003-27.479v-2.113c0-8.455 2.769-8.455 30.464-42.275l265.869-316.007 51.235-58.128v-1.058l-9.693-5.284c-182.785-75.039-297.718-207.149-297.718-340.315v0c0-114.143 84.469-200.807 204.941-210.319zM841.529 324.462c5.539 0 11.078-2.113 16.617-2.113 29.079 0 56.774 12.683 73.391 31.706 9.693 9.512 13.847 23.251 13.847 35.934 0 13.739-4.154 26.422-13.847 38.048-16.617 19.024-44.312 29.593-70.621 29.593-24.925 0-47.081-7.398-65.083-22.194-15.232-12.683-22.156-28.536-22.156-45.446 0-28.536 24.925-58.128 67.852-65.527zM100.696 568.602c5.539-2.113 11.078-2.113 16.617-2.113 22.156 0 47.081 7.398 63.698 22.194 15.232 11.626 23.54 29.593 23.54 45.446 0 13.739-4.154 26.422-13.847 36.991-16.617 20.081-45.696 29.593-73.391 29.593-22.156 0-45.696-6.341-62.313-21.138-15.232-12.683-22.156-29.593-22.156-45.446 0-29.593 23.54-58.128 67.852-65.527z"],"width":978,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["segno"],"defaultCode":59717,"grid":16},"attrs":[],"properties":{"id":78,"order":988,"ligatures":"","prevSize":32,"code":59718,"name":"segno"},"setIdx":1,"setId":1,"iconIdx":86},{"icon":{"paths":["M844.908 64.084h55.422v896.746h-55.422v-896.746zM722.109 68.54h54.917v891.864h-54.917v-891.864zM69.377 62.702h777.204v41.16h-777.204v-41.16zM62.613 255.985h780.987v41.086h-780.987v-41.086zM65.070 479.423h779.017v41.004h-779.017v-41.004zM67.746 711.533h781.991v40.48h-781.991v-40.48zM63.315 919.947h781.592v40.883h-781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["double_bar"],"defaultCode":59718,"grid":16},"attrs":[],"properties":{"id":79,"order":989,"ligatures":"","prevSize":32,"code":59719,"name":"double_bar"},"setIdx":1,"setId":1,"iconIdx":87},{"icon":{"paths":["M126.437 62.702h-63.127v896.746h63.127v-896.746zM903.641 62.702h-777.204v41.16h777.204v-41.16zM910.404 255.985h-780.987v41.086h780.987v-41.086zM907.947 479.423h-779.017v41.004h779.017v-41.004zM905.271 711.533h-781.991v40.48h781.991v-40.48zM909.702 919.947h-781.592v40.883h781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["single_bar_start"],"defaultCode":59719,"grid":16},"attrs":[],"properties":{"id":80,"order":990,"ligatures":"","prevSize":32,"code":59720,"name":"single_bar_start"},"setIdx":1,"setId":1,"iconIdx":88},{"icon":{"paths":["M0 107.79v59.668h1336.286v-59.668zM1266.526 107.79v727.576h78.503v-727.576zM221.886 249.656l1.462-0.509h66.736l1.462 1.467c1.462 0.509 1.948 1.477 2.436 1.955l1.462 1.955v113.55c0 80.758 0 114.529 0.978 116.976 0.978 16.151 7.793 24.472 24.356 33.282 5.846 3.432 7.303 4.41 7.303 9.299 0 3.432-0.509 4.889-3.412 6.854l-1.945 0.509h-132.498l-1.462-0.509c-2.436-1.955-3.897-3.422-3.897-6.854 0-4.889 1.462-5.866 7.307-9.299 3.41-1.477 4.385-2.455 7.307-4.41 11.204-7.832 15.588-15.662 18.024-28.876 0-2.455 0-32.303 0-92.505v-89.566l-8.281 12.236-30.202 47.476c-6.82 10.767-7.307 11.256-11.691 11.256s-7.307-3.432-7.307-7.343c0-2.455 0.978-5.388 2.436-8.321 0.489-0.509 2.923-5.388 5.845-10.767l27.279-49.923 13.64-27.897c9.255-17.131 9.255-17.131 10.23-17.621 0.489-1.018 1.948-1.467 2.436-2.444zM243.809 561.887v0zM243.809 232.006v0zM738.486 236.948c1.679 0 4.611 0 7.969 0 6.711 0 15.518 0 17.614 1.018 31.455 4.471 56.619 23.318 67.523 49.61 3.77 8.932 5.453 18.353 5.453 28.275 0 24.31-11.324 52.091-31.874 72.925-14.259 14.386-28.519 23.316-50.746 31.751-28.938 10.915-53.682 30.261-69.619 53.577 0 0 0 0.407 0 0.407s0 0 0 0 1.262-0.407 2.098-1.986c15.937-15.38 37.326-24.309 56.618-24.309 15.937 0 27.261 3.483 42.359 13.395 9.226 5.459 17.615 7.934 25.583 7.934 3.357 0 6.708 0 10.485-1.018 5.453-1.487 11.323-6.447 13.421-10.425 1.254-3.483 3.357-4.96 5.874-4.96 3.357 0 6.708 2.974 6.708 7.435 0 3.483-3.77 15.874-7.127 24.307-13.421 31.75-36.907 51.595-59.555 51.595-1.679 0-2.936 0-4.611-0.407-5.872 0-8.387-1.986-15.937-7.934-15.936-12.404-36.067-18.852-53.682-18.852-7.549 0-14.26 1.018-20.55 3.982-8.388 3.473-16.356 9.431-18.873 13.888-1.262 3.483-3.355 4.471-5.872 4.471-2.098 0-4.193-1.018-5.453-3.982l-0.835-1.487v-6.936c0-5.958 0.418-7.934 0.418-9.92 0.418-1.487 0.835-4.471 0.835-6.936 7.549-41.67 33.132-78.877 67.941-97.234 28.519-15.874 47.392-44.151 50.747-79.871 0.835-2.974 0.835-5.449 0.835-8.433 0-31.751-20.131-53.576-48.65-53.576-2.098 0-4.617 0-6.711 0-4.193 0.407-5.453 0.407-5.453 1.487 0 0 0 0.407 1.262 1.487 9.646 6.447 14.26 18.85 14.26 30.757 0 15.379-6.71 29.765-19.712 35.719-4.192 1.487-8.387 1.986-11.743 1.986-17.614 0-32.293-17.859-32.293-39.19 0-3.982 0-7.924 0.835-12.404 6.291-22.819 36.068-41.672 70.458-46.135zM751.486 558.922h-0.009zM751.477 224.558h-0.009z"],"width":1480,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["ending"],"defaultCode":59720,"grid":16},"attrs":[],"properties":{"id":81,"order":991,"ligatures":"","prevSize":32,"code":59721,"name":"ending"},"setIdx":1,"setId":1,"iconIdx":89},{"icon":{"paths":["M302.051 76.465l-270.839 672.312 72.639 60.105 270.839-672.312zM303.266 83.057l66.833 55.3-267.475 663.961-66.833-55.3zM309.208 114.747l-249.56 619.49 36.404 30.122 249.56-619.49zM309.108 119.811l33.494 27.714-246.46 611.795-33.494-27.714zM170.233 416.133l133.427-331.21 65.745 54.4-266.854 662.42-65.745-54.4zM220.902 455.203l125.088-310.509-36.857-30.497-250.176 621.019 36.857 30.497zM373.104 135.692l-270.839 672.312 72.639 60.105 270.839-672.312zM374.319 142.284l66.833 55.3-267.475 663.961-66.833-55.3zM380.261 173.974l-249.56 619.49 36.404 30.122 249.56-619.49zM380.161 179.038l33.494 27.714-246.46 611.795-33.494-27.714zM241.285 475.359l133.427-331.21 65.745 54.4-266.854 662.42-65.745-54.4zM291.954 514.43l125.088-310.509-36.857-30.497-250.176 621.019 36.857 30.497zM442.833 193.389l-270.839 672.312 72.639 60.105 270.839-672.312zM444.048 199.981l66.833 55.3-267.475 663.961-66.833-55.3zM449.99 231.67l-249.56 619.49 36.404 30.122 249.56-619.49zM449.89 236.735l33.494 27.714-246.46 611.795-33.494-27.714zM311.014 533.056l133.427-331.21 65.745 54.4-266.854 662.42-65.745-54.4zM361.684 572.127l125.088-310.509-36.857-30.497-250.176 621.019 36.857 30.497zM447.268 64.448c-27.654-22.874-57.091-33.936-83.164-33.201s-48.973 13.361-62.739 38.434l-2.511 4.574 216.618 179.239 1.509-5.404c8.263-29.607 4.455-64.322-8.122-97.036s-33.965-63.714-61.591-86.606zM443.751 73.176c26.603 22.045 47.094 51.91 58.949 82.744 11.012 28.644 14.145 57.692 8.754 82.611l-201.55-166.771c12.37-19.161 31.506-29.805 54.336-30.449 24.575-0.693 52.881 9.838 79.511 31.865zM439.465 80.834c-20.324-16.812-41.64-25.734-60.267-26.524s-34.699 6.609-43.941 22.863l-1.686 2.965 159.205 131.733 0.949-3.575c5.198-19.588 1.642-43.221-8.137-65.935s-25.817-44.705-46.122-61.528zM437.16 86.555c19.553 16.199 34.923 37.38 44.14 58.789 8.563 19.888 11.5 39.66 8.243 56.224l-148.13-122.569c8.385-12.331 21.814-18.576 38.124-17.885 17.557 0.744 38.051 9.252 57.622 25.441zM312.583 68.792c6.811-9.478 16.284-16.434 29.055-21.335 20.615-7.911 41.171-6.632 66.199 4.119 14.9 6.401 42.36 26.948 55.466 41.503 25.955 28.825 44.897 69.002 49.007 103.948 1.213 10.316 0.964 28.24-0.508 36.607l-0.658 3.738-200.491-165.895zM494.623 207.151c3.545-14.449 1.799-35.51-4.488-54.133-16.892-50.034-64.168-94.028-106.003-98.646-22.379-2.47-37.28 4.276-49.329 22.334l-2.25 3.373 160.637 132.918zM55.305 761.001l-12.294 5.644-1.355 3.364 33.68 222.779 3.095-1.413 152.797-70.25 3.138-7.79-0.717-4.763zM54.634 770.163l172.971 143.124-0.321 0.797-147.573 67.845-31.55-208.781zM61.248 851.688l-7.388 2.7-0.755 1.875 25.39 129.621 1.86-0.675 91.824-33.62 1.749-4.341-0.541-2.771zM61.036 856.927l108.76 89.993-0.179 0.444-88.685 32.469-23.786-121.476zM76.93 955.024c-2.313-12.553-6.617-38.954-9.566-58.668l-5.361-35.844 25.477 20.572c14.012 11.315 36.519 29.938 50.015 41.384l24.538 20.812-38.668 17.688c-21.267 9.729-39.469 17.506-40.449 17.284-1.152-0.262-3.266-8.464-5.986-23.229z"],"width":553,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pencil"],"defaultCode":59721,"grid":16},"attrs":[],"properties":{"id":82,"order":992,"ligatures":"","prevSize":32,"code":59722,"name":"pencil"},"setIdx":1,"setId":1,"iconIdx":90},{"icon":{"paths":["M750.274 768.333h-88.626l-61.325-156.56h-270.5l-61.324 156.56h-84.426l227.657-561.731h110.888zM574.701 547.639l-109.628-275.773-110.048 275.773zM111.304 111.304v801.391h756.87v-801.391zM155.826 155.826h667.826v712.348h-667.826z"],"width":979,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["rehearsemark"],"defaultCode":59722,"grid":16},"attrs":[],"properties":{"id":83,"order":993,"ligatures":"","prevSize":32,"code":59723,"name":"rehearsemark"},"setIdx":1,"setId":1,"iconIdx":91},{"icon":{"paths":["M343.097 944.596h-52.060v-32.399q-22.43 19.384-46.799 30.184t-52.891 10.8q-55.383 0-88.059-42.645-32.399-42.645-32.399-118.243 0-39.322 11.077-70.059 11.354-30.738 30.461-52.337 18.83-21.046 43.753-32.122 25.199-11.077 52.060-11.077 24.368 0 43.199 5.261 18.83 4.984 39.599 15.784v-134.027h52.060zM291.037 868.445v-177.502q-21.046-9.415-37.66-13.015t-36.276-3.6q-43.753 0-68.121 30.461t-24.368 86.397q0 55.106 18.83 83.905 18.83 28.522 60.367 28.522 22.153 0 44.86-9.692 22.707-9.969 42.368-25.476zM680.371 784.484q0 75.598-38.768 119.35t-103.843 43.753q-65.629 0-104.397-43.753-38.491-43.753-38.491-119.35t38.491-119.35q38.768-44.029 104.397-44.029 65.075 0 103.843 44.029 38.768 43.753 38.768 119.35zM626.65 784.484q0-60.090-23.538-89.167-23.538-29.353-65.352-29.353-42.368 0-65.906 29.353-23.261 29.076-23.261 89.167 0 58.152 23.538 88.336 23.538 29.907 65.629 29.907 41.537 0 65.075-29.63 23.815-29.907 23.815-88.613zM909.046 783.184h-172.795v-50.122h172.795zM455.456 160.68v142.301c-6.68-1.141-13.687-1.775-20.965-1.775-40.488 0-86.971 17.868-115.463 50.619-14.996 16.588-21 34.035-21 49.347 0 31.475 26.495 56.569 71.482 58.695h11.508c58.378-2.484 110.322-38.741 125.997-77.6h1.843v-4.793c1.992-6.153 3.094-12.333 3.094-18.431 0-6.059-1.254-11.721-3.094-17.396v-180.968zM1237.090 70.819v142.301c-6.68-1.141-13.687-1.775-20.965-1.775-40.488 0-86.971 17.868-115.463 50.619-14.996 16.588-21 34.035-21 49.347 0 31.475 26.495 56.569 71.482 58.695h11.508c58.378-2.484 110.322-38.741 125.997-77.6h1.843v-4.793c1.992-6.153 3.094-12.333 3.094-18.431 0-6.059-1.254-11.721-3.094-17.396v-180.968zM1432.757 944.596h-52.060v-176.118q0-19.938-1.938-38.491-1.661-18.553-7.477-29.63-6.369-11.907-18.276-17.999t-34.337-6.092q-21.876 0-43.753 11.077-21.876 10.8-43.753 27.691 0.831 6.369 1.385 14.953 0.554 8.307 0.554 16.615v197.994h-52.060v-176.118q0-20.492-1.938-38.768-1.661-18.553-7.477-29.63-6.369-11.907-18.276-17.723-11.907-6.092-34.337-6.092-21.322 0-42.922 10.523-21.322 10.523-42.645 26.861v230.947h-52.060v-309.314h52.060v34.337q24.368-20.215 48.46-31.568 24.368-11.353 51.783-11.353 31.568 0 53.445 13.292 22.153 13.292 32.953 36.83 31.568-26.584 57.598-38.214 26.030-11.907 55.66-11.907 50.952 0 75.044 31.014 24.369 30.738 24.369 86.12zM1533 583.499h-58.706v-53.998h58.706zM1529.677 944.596h-52.060v-309.314h52.060z"],"width":1604,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["lyric"],"defaultCode":59723,"grid":16},"attrs":[],"properties":{"id":84,"order":994,"ligatures":"","prevSize":32,"code":59724,"name":"lyric"},"setIdx":1,"setId":1,"iconIdx":92},{"icon":{"paths":["M846.581 62.702h63.127v896.746h-63.127v-896.746zM69.377 62.702h777.204v41.16h-777.204v-41.16zM62.613 255.985h780.987v41.086h-780.987v-41.086zM65.070 479.423h779.017v41.004h-779.017v-41.004zM67.746 711.533h781.991v40.48h-781.991v-40.48zM63.315 919.947h781.592v40.883h-781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["single_bar"],"defaultCode":59724,"grid":16},"attrs":[],"properties":{"id":85,"order":995,"ligatures":"","prevSize":32,"code":59725,"name":"single_bar"},"setIdx":1,"setId":1,"iconIdx":93},{"icon":{"paths":["M844.908 64.084h108.845v896.746h-108.845v-896.746zM722.188 68.619h59.591v891.707h-59.591v-891.707zM69.377 62.702h777.204v41.16h-777.204v-41.16zM62.613 255.985h780.987v41.086h-780.987v-41.086zM62.655 479.423h779.017v41.004h-779.017v-41.004zM67.746 711.533h781.991v40.48h-781.991v-40.48zM63.315 919.947h781.592v40.883h-781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["end_bar"],"defaultCode":59725,"grid":16},"attrs":[],"properties":{"id":86,"order":996,"ligatures":"","prevSize":32,"code":59726,"name":"end_bar"},"setIdx":1,"setId":1,"iconIdx":94},{"icon":{"paths":["M343.183 392.256c0-27.54 22.786-49.865 50.893-49.865s50.893 22.325 50.893 49.865v0zM444.97 392.256c0 27.54-22.786 49.865-50.893 49.865s-50.893-22.325-50.893-49.865v0zM340.214 619.495c0.015-26.961 23.025-48.812 51.407-48.812s51.393 21.851 51.407 48.811v0.001zM443.029 619.495c-0.015 26.961-23.025 48.812-51.407 48.812s-51.393-21.851-51.407-48.811v-0.001zM172.788 64.084h-108.845v896.746h108.845v-896.746zM295.508 68.619h-59.591v891.707h59.591v-891.707zM948.319 62.702h-777.204v41.16h777.204v-41.16zM955.083 255.985h-780.987v41.086h780.987v-41.086zM955.041 479.423h-779.017v41.004h779.017v-41.004zM949.95 711.533h-781.991v40.48h781.991v-40.48zM954.381 919.947h-781.592v40.883h781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["start_rpt"],"defaultCode":59726,"grid":16},"attrs":[],"properties":{"id":87,"order":997,"ligatures":"","prevSize":32,"code":59727,"name":"start_rpt"},"setIdx":1,"setId":1,"iconIdx":95},{"icon":{"paths":["M111.225 100.024c-3.747 72.084-7.493 144.168-11.24 216.252 17.886 0 35.771 0 53.657 0 1.19-50.13 17.996-109.373 71.371-129.113 52.231-11.927 106.456-5.824 159.661-7.342-0.409 204.872 0.827 409.773-0.635 614.627 2.968 36.785-14.741 80.313-59.832 77.793-18.566 0.759-37.163 0.226-55.744 0.386 0 17.22 0 34.44 0 51.661 126.325 0 252.65 0 378.976 0 0-17.22 0-34.44 0-51.661-35.609-1.724-79.497 7.963-104.974-22.395-16.945-47.226-8.57-98.398-10.601-147.544 0-174.289 0-348.577 0-522.866 50.541 1.67 101.909-4.455 151.678 5.862 47.472 10.683 76.571 55.645 80.546 100.62 1.39 17.871 0.751 37.104 24.407 29.973 10.435-3.208 36.339 7.864 32.401-8.611-3.381-69.214-6.762-138.428-10.144-207.641-233.176 0-466.352 0-699.528 0zM140.694 130.006c213.503 0 427.006 0 640.509 0 2.145 44.063 4.289 88.125 6.434 132.188-4.376-58.792-59.517-104.037-118.176-109.946-56.015-4.704-112.421-1.507-168.618-2.446 0.38 216.019-0.769 432.059 0.589 648.064 1.259 34.168 5.877 77.814 43.791 92.428 20.773 7.525-19.13 2.61-28.419 4.013-52.504 0-105.007 0-157.511 0 35.185-9.947 55.067-43.993 54.906-78.022 3.051-113.951 0.726-228.031 1.453-342.037 0-108.149 0-216.297 0-324.446-61.51 1.321-123.488-3.569-184.566 4.832-47.109 8.365-83.204 47.692-96.391 90.917 1.999-38.515 3.998-77.030 5.997-115.544zM371.545 889.913c15.078-7.601 26.145-18.867 33.881-34.492 7.126-14.391 8.271-20.509 9.294-49.62 1.154-32.864 1.463-146.497 1.164-427.927l-0.243-228.665-60.994 0.001c-101.105 0.001-127.792 2.546-152.427 14.537-27.911 13.586-50.725 38.817-64.198 70.999l-2.238 5.346 0.031-5.346c0.017-2.94 1.202-27.435 2.632-54.432l2.601-49.086 640.068-0.489 0.007 4.132c0.004 2.273 1.092 25.784 2.418 52.247s2.381 50.52 2.344 53.46l-0.068 5.346-2.196-6.804c-14.716-45.599-60.186-80.944-111.856-86.948-17.782-2.066-51.13-2.959-110.566-2.961l-60.994-0.001 0.084 288.444c0.046 158.644 0.436 309.22 0.867 334.614 0.875 51.55 1.628 59.345 7.417 76.789 6.727 20.271 16.21 31.791 32.827 39.876l9.837 4.786-187.337 0.052 7.646-3.854zM119.528 114.874h660.161v40.010h-660.161v-40.010zM399.597 154.884h120.029v720.176h-120.029v-720.176zM359.587 875.060h200.049v20.005h-200.049v-20.005z"],"width":921,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["textBasic"],"defaultCode":59727,"grid":16},"attrs":[],"properties":{"id":88,"order":998,"ligatures":"","prevSize":32,"code":59728,"name":"textBasic"},"setIdx":1,"setId":1,"iconIdx":96},{"icon":{"paths":["M917.824 229.056c-22.208-30.272-53.184-65.728-87.168-99.712s-69.44-64.96-99.712-87.168c-51.584-37.824-76.608-42.176-90.944-42.176h-496c-44.096 0-80 35.904-80 80v864c0 44.096 35.904 80 80 80h736c44.096 0 80-35.904 80-80v-624c0-14.336-4.352-39.36-42.176-90.944v0zM785.344 174.656c30.72 30.72 54.784 58.368 72.576 81.344h-153.984v-153.92c22.976 17.792 50.688 41.856 81.344 72.576v0zM896 944c0 8.704-7.296 16-16 16h-736c-8.64 0-16-7.296-16-16v-864c0-8.64 7.36-16 16-16 0 0 495.936 0 496 0v224c0 17.664 14.336 32 32 32h224v624zM756.288 391.232c-7.424-6.080-17.152-8.512-26.56-6.656l-320 64c-14.976 3.008-25.728 16.128-25.728 31.36v236.864c-18.816-8.192-40.704-12.864-64-12.864-70.72 0-128 43.008-128 96s57.28 96 128 96 128-43.008 128-96v-229.76l256-51.2v133.824c-18.816-8.192-40.704-12.864-64-12.864-70.72 0-128 43.008-128 96s57.28 96 128 96 128-43.008 128-96v-320c0-9.6-4.288-18.688-11.712-24.768z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["file-music"],"defaultCode":59728,"grid":16},"attrs":[],"properties":{"id":89,"order":999,"ligatures":"","prevSize":32,"code":59729,"name":"file-music"},"setIdx":1,"setId":1,"iconIdx":97},{"icon":{"paths":["M864 0c88.384 0 160 71.616 160 160 0 36.032-11.904 69.248-32 96l-64 64-224-224 64-64c26.752-20.096 59.968-32 96-32zM64 736l-64 288 288-64 592-592-224-224-592 592zM715.584 363.584l-448 448-55.168-55.168 448-448 55.168 55.168z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pencil1"],"defaultCode":59729,"grid":16},"attrs":[],"properties":{"id":90,"order":1000,"ligatures":"","prevSize":32,"code":59730,"name":"pencil1"},"setIdx":1,"setId":1,"iconIdx":98},{"icon":{"paths":["M0 576c0 152.896 67.072 290.176 173.376 384l84.672-96c-79.744-70.336-129.984-173.312-129.984-288 0-212.096 171.904-384 384-384 106.048 0 202.048 43.008 271.552 112.448l-143.552 143.552h384v-384l-149.952 149.952c-92.672-92.672-220.672-149.952-362.048-149.952-282.752 0-512 229.248-512 512z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["redo"],"defaultCode":59730,"grid":16},"attrs":[],"properties":{"id":91,"order":1001,"ligatures":"","prevSize":32,"code":59731,"name":"redo"},"setIdx":1,"setId":1,"iconIdx":99},{"icon":{"paths":["M896 0h-896v1024h1024v-896l-128-128zM512 128h128v256h-128v-256zM896 896h-768v-768h64v320h576v-320h75.008l52.992 52.992v715.008z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["floppy-disk"],"defaultCode":59731,"grid":16},"attrs":[],"properties":{"id":92,"order":1002,"ligatures":"","prevSize":32,"code":59732,"name":"floppy-disk"},"setIdx":1,"setId":1,"iconIdx":100},{"icon":{"paths":["M512 64c-141.376 0-269.376 57.344-362.048 149.952l-149.952-149.952v384h384l-143.552-143.552c69.504-69.504 165.504-112.448 271.552-112.448 212.096 0 384 171.904 384 384 0 114.688-50.304 217.664-130.048 288l84.672 96c106.304-93.824 173.376-231.104 173.376-384 0-282.752-229.248-512-512-512z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["undo"],"defaultCode":59732,"grid":16},"attrs":[],"properties":{"id":93,"order":1003,"ligatures":"","prevSize":32,"code":59733,"name":"undo"},"setIdx":1,"setId":1,"iconIdx":101},{"icon":{"paths":["M1088 128h-1024c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h1024c35.2 0 64-28.8 64-64v-640c0-35.2-28.8-64-64-64zM640 256h128v128h-128v-128zM832 448v128h-128v-128h128zM448 256h128v128h-128v-128zM640 448v128h-128v-128h128zM256 256h128v128h-128v-128zM448 448v128h-128v-128h128zM128 256h64v128h-64v-128zM128 448h128v128h-128v-128zM192 768h-64v-128h64v128zM768 768h-512v-128h512v128zM1024 768h-192v-128h192v128zM1024 576h-128v-128h128v128zM1024 384h-192v-128h192v128z"],"width":1152,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["keyboard"],"defaultCode":59733,"grid":16},"attrs":[],"properties":{"id":94,"order":1004,"ligatures":"","prevSize":32,"code":59734,"name":"keyboard"},"setIdx":1,"setId":1,"iconIdx":102},{"icon":{"paths":["M832 960l192-512h-832l-192 512zM128 384l-128 576v-832h288l128 128h416v128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["folder-open"],"defaultCode":59734,"grid":16},"attrs":[],"properties":{"id":95,"order":1005,"ligatures":"","prevSize":32,"code":59735,"name":"folder-open"},"setIdx":1,"setId":1,"iconIdx":103},{"icon":{"paths":["M704 128h-128v-64c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v64h-128v128h512v-128zM512 128h-128v-63.872c0.064-0.064 0.064-0.064 0.128-0.128h127.744c0.064 0.064 0.064 0.064 0.128 0.128v63.872zM832 320v-160c0-17.6-14.4-32-32-32h-64v64h32v128h-192l-192 192v256h-256v-576h32v-64h-64c-17.6 0-32 14.4-32 32v640c0 17.6 14.4 32 32 32h288v192h640v-704h-192zM576 410.496v101.504h-101.504l101.504-101.504zM960 960h-512v-384h192v-192h320v576z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["paste"],"defaultCode":59735,"grid":16},"attrs":[],"properties":{"id":96,"order":1006,"ligatures":"","prevSize":32,"code":59736,"name":"paste"},"setIdx":1,"setId":1,"iconIdx":104},{"icon":{"paths":["M640 256v-256h-448l-192 192v576h384v256h640v-768h-384zM192 90.496v101.504h-101.504l101.504-101.504zM64 704v-448h192v-192h320v192l-192 192v256h-320zM576 346.496v101.504h-101.504l101.504-101.504zM960 960h-512v-448h192v-192h320v640z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["copy"],"defaultCode":59736,"grid":16},"attrs":[],"properties":{"id":97,"order":1007,"ligatures":"","prevSize":32,"code":59737,"name":"copy"},"setIdx":1,"setId":1,"iconIdx":105},{"icon":{"paths":["M928 128h-288c0-70.72-57.28-128-128-128s-128 57.28-128 128h-288c-17.664 0-32 14.336-32 32v832c0 17.664 14.336 32 32 32h832c17.664 0 32-14.336 32-32v-832c0-17.664-14.336-32-32-32zM512 64c35.328 0 64 28.672 64 64s-28.672 64-64 64c-35.328 0-64-28.672-64-64s28.672-64 64-64zM896 960h-768v-768h128v96c0 17.664 14.336 32 32 32h448c17.664 0 32-14.336 32-32v-96h128v768zM448 858.496l-205.248-237.248 58.496-58.496 146.752 114.752 274.752-242.752 58.496 58.496z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["clipboard"],"defaultCode":59737,"grid":16},"attrs":[],"properties":{"id":98,"order":1008,"ligatures":"","prevSize":32,"code":59738,"name":"clipboard"},"setIdx":1,"setId":1,"iconIdx":106},{"icon":{"paths":["M268.169 80.74c3.12 0 8.581 0 14.822 0 10.922 0 25.744 0 31.205 1.329 46.807 5.981 96.734 34.559 106.096 60.479 2.341 5.981 3.12 11.298 3.12 16.615 0 29.907-29.644 52.503-61.629 52.503-12.482 0-24.964-2.658-36.665-10.634-14.042-10.634-21.843-23.926-21.843-39.211 0-20.603 14.822-41.87 40.566-47.851 2.341 0 3.12-0.665 3.12-0.665s-0.781-1.329-3.12-1.994c-17.163-6.646-34.325-9.304-49.927-9.304-24.184 0-45.247 7.311-60.849 21.267-16.382 16.615-28.084 50.51-35.885 100.355-0.781 11.963-3.12 34.559-3.12 39.211 0 0 0 0 0 0s0 0 0 0 3.12-1.329 6.241-1.994c24.964-8.64 46.807-11.963 70.21-11.963 28.084 0 54.608 5.317 84.252 18.609 54.608 22.596 85.033 55.826 85.033 95.703 0 5.317-1.56 11.298-2.341 17.28-7.801 37.218-41.346 67.789-95.954 87.727-24.964 9.304-47.587 14.621-70.21 14.621s-46.027-5.981-71.771-17.28c-67.869-29.242-114.676-83.74-127.158-146.877-2.34-12.627-3.12-25.255-3.12-39.211 0-27.913 4.681-55.826 15.602-78.423 29.644-63.802 105.316-112.982 183.327-120.293zM279.091 270.152c-3.12 0-6.241 0-9.361 0-16.382 0-28.864 4.652-36.665 11.963-10.922 13.957-18.723 48.516-18.723 79.088 0 6.646 0 13.292 0.781 18.609 3.12 31.236 11.702 57.156 20.283 68.454 6.241 7.975 19.503 12.627 34.325 12.627 3.12 0 7.021 0 10.141-0.665 22.623-2.658 31.205-14.621 39.786-52.503 3.901-17.944 6.241-33.23 6.241-48.516s-2.341-29.907-6.241-47.851c-7.801-27.249-17.943-38.547-40.566-41.205zM253.348 512.066v0zM253.348 64.125v0zM233.454 528.681c6.241 0 14.042-0.666 21.843-0.666 76.451 0 144.321 35.888 162.264 88.392 1.56 8.64 3.901 16.615 3.901 25.255 0 25.255-13.262 53.168-35.885 71.777 0 0.666-0.781 0.666-0.781 0.666 0 1.329 0.781 1.329 3.12 2.658 36.665 22.596 56.948 55.826 56.948 89.057 0 15.286-3.901 29.907-12.482 43.864-29.644 52.503-104.535 81.081-178.646 81.081-50.707 0-102.195-12.627-140.421-40.541-33.544-23.926-49.146-54.497-49.146-85.734 0-33.23 18.723-65.131 56.948-87.727l3.12-2.658-3.901-3.323c-23.403-21.267-33.545-44.528-33.545-67.789 0-53.833 57.729-105.672 146.662-114.311zM265.438 557.259c-3.901 0-8.581-0.666-12.482-0.666-34.325 0-66.31 17.28-66.31 35.888 0 2.658 1.56 5.317 2.341 7.311 12.482 25.255 63.969 59.15 124.038 85.069l14.042 6.646 0.781-1.994c10.922-14.621 16.382-30.572 16.382-46.522 0-40.541-31.985-79.088-78.792-85.734zM171.826 742.682c-3.12-1.329-6.241-2.658-6.241-2.658s0 0 0 0c-2.341 0-14.042 11.298-17.943 16.615-12.482 15.95-17.943 32.565-17.943 49.18 0 49.845 52.268 96.367 124.038 96.367 1.56 0 2.341-0.666 4.681-0.666 42.126-0.666 76.451-21.932 76.451-45.857 0-3.988-1.56-7.311-2.341-10.634-14.822-36.553-67.87-72.442-146.662-97.696-3.901-1.994-9.361-3.323-14.042-4.652zM253.738 960.005v0zM253.738 512.064v0z"],"width":509,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sixeight"],"defaultCode":59738,"grid":16},"attrs":[],"properties":{"id":99,"order":1009,"ligatures":"","prevSize":32,"code":59739,"name":"sixeight"},"setIdx":1,"setId":1,"iconIdx":107},{"icon":{"paths":["M235.54 70.155c1.788 0 8.049 0 15.203 0 11.626 0 25.934 0 30.406 0 82.275 6.826 146.663 40.953 158.289 85.319 1.788 4.095 1.788 8.873 1.788 13.651 0 5.46 0 10.238-1.788 12.969-11.626 32.080-60.812 61.43-123.412 75.764-4.471 1.365-6.26 1.365-6.26 2.048 0 0 0 0 0 0 0.896 0 3.577 0.683 6.26 0.683 84.957 23.889 129.672 69.621 129.672 113.987 0 34.128-25.040 66.89-81.38 88.732-33.089 13.651-69.755 19.794-105.526 19.794-59.023 0-117.152-17.064-158.289-47.779-15.203-10.921-20.569-24.572-20.569-38.223 0-27.985 25.934-54.604 68.86-54.604v0c42.926 0 67.072 25.255 67.072 51.192 0 19.794-13.414 39.588-43.82 49.144 0 0 0 0 0 0 0 0.683 25.934 4.778 39.349 5.46 1.788 0 3.577 0 5.366 0 59.023 0 100.16-32.080 100.16-76.446 0-4.778 0-8.873-0.896-13.651-9.837-49.826-53.657-86.684-104.632-88.050-12.52-0.683-18.78-4.778-18.78-10.921 0-8.191 5.366-11.603 18.78-11.603 43.82-2.048 81.38-24.572 95.689-58.7 3.577-6.826 4.471-13.651 4.471-19.112 0-28.667-27.723-54.604-68.86-61.43-6.26-2.048-14.309-2.048-23.252-2.048-12.52 0-24.146 0.683-36.666 2.048l-3.577 0.683 3.577 2.048c23.252 9.556 33.089 26.62 33.089 43.683 0 22.524-19.674 45.049-53.657 51.192-4.471 0.683-9.837 0.683-14.309 0.683-39.349 0-68.86-27.302-68.86-55.969 0-12.286 5.366-24.572 18.78-34.81 31.3-25.937 78.697-40.953 137.721-45.731zM262.367 513.133v0zM262.367 53.091v0zM208.708 535.598c0.896-0.683 13.414-0.683 51.869-0.683 11.626 0 24.146 0 40.243 0h90.323l2.684 2.048c4.471 2.048 7.154 5.46 7.154 8.191 0 4.095-2.684 6.826-6.26 9.556-0.896 2.048-8.943 7.508-14.309 13.651l-47.397 41.636-60.812 52.557-32.194 27.985-48.292 42.318-63.495 55.287c-10.731 10.238-22.357 18.429-22.357 18.429s0 0 0 0c0 1.365 8.049 1.365 82.275 1.365h81.38v-44.366c0-45.049 0-45.731 0.896-46.414 1.788-2.048 9.837-9.556 41.137-37.54l25.040-20.477 18.78-18.429 19.674-15.699 9.837-9.556c3.577-4.095 8.943-4.778 13.414-4.778 5.366 0 9.837 2.048 12.52 5.46 0.896 2.048 0.896 3.413 0.896 53.922 0 11.603 0 25.937 0 43.001v94.875h22.357c20.569 0 21.463 0 24.146 0.683 7.154 2.048 10.731 7.508 10.731 13.651 0 3.413-0.896 7.508-4.471 10.238-5.366 3.413-6.26 3.413-30.406 3.413h-22.357v11.603c0.896 34.81 9.837 48.461 44.714 62.795 12.52 4.778 15.203 6.143 15.203 12.969 0 4.778-1.788 6.826-6.26 9.556l-2.684 0.683h-244.141l-2.684-0.683c-5.366-2.73-6.26-4.778-6.26-9.556 0-6.826 0.896-8.191 14.309-12.969 34.877-14.334 43.82-27.985 43.82-62.795v-11.603h-102.845c-18.78 1.365-33.983 1.365-46.503 1.365-56.34 0-57.234-1.365-58.129-1.365-5.366-1.365-7.154-5.46-7.154-10.238 0 0 0 0 0 0 0-4.778 0-4.778 17.886-20.477 75.12-69.621 127.883-170.639 127.883-251.18 0-12.286 2.684-16.381 9.837-18.429zM262.366 971.068v0zM262.366 511.026v0z"],"width":525,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["threefour"],"defaultCode":59739,"grid":16},"attrs":[],"properties":{"id":100,"order":1010,"ligatures":"","prevSize":32,"code":59740,"name":"threefour"},"setIdx":1,"setId":1,"iconIdx":108},{"icon":{"paths":["M200.777 74.698c0.861-0.656 12.902-0.656 49.888-0.656 11.182 0 23.224 0 38.707 0h86.875l2.581 1.969c4.301 1.969 6.881 5.252 6.881 7.878 0 3.939-2.581 6.565-6.021 9.191-0.861 1.969-8.601 7.221-13.762 13.13l-45.588 40.046-58.49 50.55-30.965 26.916-46.448 40.703-61.070 53.176c-10.322 9.847-21.504 17.725-21.504 17.725s0 0 0 0c0 1.313 7.741 1.313 79.133 1.313h78.273v-42.672c0-43.329 0-43.985 0.861-44.642 1.72-1.969 9.462-9.191 39.567-36.107l24.084-19.695 18.063-17.725 18.923-15.099 9.462-9.191c3.441-3.939 8.601-4.595 12.902-4.595 5.161 0 9.462 1.969 12.042 5.252 0.861 1.969 0.861 3.282 0.861 51.863 0 11.16 0 24.947 0 41.359v91.253h21.504c19.783 0 20.643 0 23.224 0.656 6.881 1.969 10.322 7.221 10.322 13.13 0 3.282-0.861 7.221-4.301 9.847-5.161 3.282-6.021 3.282-29.245 3.282h-21.504v11.16c0.861 33.481 9.462 46.611 43.007 60.397 12.042 4.595 14.622 5.908 14.622 12.473 0 4.595-1.72 6.565-6.021 9.191l-2.581 0.656h-234.82l-2.581-0.656c-5.161-2.626-6.021-4.595-6.021-9.191 0-6.565 0.861-7.878 13.762-12.473 33.546-13.786 42.147-26.916 42.147-60.397v-11.16h-98.919c-18.063 1.313-32.686 1.313-44.728 1.313-54.189 0-55.049-1.313-55.909-1.313-5.161-1.313-6.881-5.252-6.881-9.847 0 0 0 0 0 0 0-4.595 0-4.595 17.203-19.695 72.252-66.962 123.001-164.124 123.001-241.59 0-11.817 2.581-15.756 9.462-17.725zM252.386 493.542v0zM252.386 51.064v0zM200.775 554.112c0.861-0.656 12.902-0.656 49.888-0.656 11.182 0 23.224 0 38.707 0h86.875l2.581 1.969c4.301 1.969 6.881 5.252 6.881 7.878 0 3.939-2.581 6.565-6.021 9.191-0.861 1.969-8.601 7.221-13.762 13.13l-45.588 40.046-58.49 50.55-30.965 26.916-46.448 40.703-61.070 53.176c-10.322 9.847-21.504 17.725-21.504 17.725s0 0 0 0c0 1.313 7.741 1.313 79.133 1.313h78.273v-42.672c0-43.329 0-43.985 0.861-44.642 1.72-1.969 9.462-9.191 39.567-36.107l24.084-19.695 18.063-17.725 18.923-15.099 9.462-9.191c3.441-3.939 8.601-4.595 12.902-4.595 5.161 0 9.462 1.969 12.042 5.252 0.861 1.969 0.861 3.282 0.861 51.863 0 11.16 0 24.947 0 41.359v91.253h21.504c19.783 0 20.643 0 23.224 0.656 6.881 1.969 10.322 7.221 10.322 13.13 0 3.282-0.861 7.221-4.301 9.847-5.161 3.282-6.021 3.282-29.245 3.282h-21.504v11.16c0.861 33.481 9.462 46.611 43.007 60.397 12.042 4.595 14.622 5.908 14.622 12.473 0 4.595-1.72 6.565-6.021 9.191l-2.581 0.656h-234.82l-2.581-0.656c-5.161-2.626-6.021-4.595-6.021-9.191 0-6.565 0.861-7.878 13.762-12.473 33.546-13.786 42.147-26.916 42.147-60.397v-11.16h-98.919c-18.063 1.313-32.686 1.313-44.728 1.313-54.189 0-55.049-1.313-55.909-1.313-5.161-1.313-6.881-5.252-6.881-9.847 0 0 0 0 0 0 0-4.595 0-4.595 17.203-19.695 72.252-66.962 123.001-164.124 123.001-241.59 0-11.817 2.581-15.756 9.462-17.725zM252.384 972.956v0zM252.384 530.478v0z"],"width":505,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fourfour"],"defaultCode":59740,"grid":16},"attrs":[],"properties":{"id":101,"order":1011,"ligatures":"","prevSize":32,"code":59741,"name":"fourfour"},"setIdx":1,"setId":1,"iconIdx":109},{"icon":{"paths":["M305.615 51.639v949.889h73.971v-723.445c84.238 23.243 150.455 55.904 189.697 80.432 78.455 48.661 116.416 113.067 116.416 180.334 0 75.855-48.084 155.287-144.254 221.123-12.653 7.872-13.92 9.304-13.92 15.744 0 8.587 10.124 15.027 25.309 15.027 12.654 0 13.919 0 32.9-14.312 110.090-75.139 164.5-166.020 164.5-253.324 0-92.314-62.004-181.766-184.748-246.887-81.907-43.658-146.995-98.010-185.9-152.449v-72.131h-73.971zM352.457 76.361h2.406v5.445c-0.837-1.818-1.635-3.634-2.406-5.445zM330.338 266.107c8.32 1.751 16.487 3.62 24.525 5.572v705.125h-24.525v-710.697zM316.803 119.351v864.649h67.596v-864.649z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flag"],"defaultCode":59741,"grid":16},"attrs":[],"properties":{"id":102,"order":1012,"ligatures":"","prevSize":32,"code":59742,"name":"flag"},"setIdx":1,"setId":1,"iconIdx":110},{"icon":{"paths":["M141.212 131.63v709.364h42.479v-540.259c48.375 17.358 86.401 41.748 108.936 60.065 45.054 36.34 66.853 84.437 66.853 134.671 0 56.647-27.613 115.966-82.84 165.132-7.266 5.878-7.994 6.948-7.994 11.758 0 6.413 5.814 11.222 14.534 11.222 7.267 0 7.993 0 18.893-10.688 63.22-56.113 94.466-123.981 94.466-189.179 0-68.938-35.607-135.741-106.094-184.372-47.036-32.603-84.414-73.193-106.756-113.847v-53.866zM168.111 150.092h1.382v4.066c-0.481-1.358-0.939-2.713-1.382-4.066zM155.409 291.792c4.778 1.308 9.468 2.704 14.084 4.161v526.578h-14.084zM147.637 182.197v645.708h38.818v-645.708zM521.606 131.63v709.364h42.479v-540.259c48.375 17.358 86.401 41.748 108.936 60.065 45.054 36.34 66.853 84.437 66.853 134.671 0 56.647-27.613 115.966-82.84 165.132-7.266 5.878-7.994 6.948-7.994 11.758 0 6.413 5.814 11.222 14.534 11.222 7.267 0 7.993 0 18.893-10.688 63.22-56.113 94.466-123.981 94.466-189.179 0-68.938-35.607-135.741-106.094-184.372-47.036-32.603-84.414-73.193-106.756-113.847v-53.866zM548.505 150.092h1.382v4.066c-0.481-1.358-0.939-2.713-1.382-4.066zM535.803 291.792c4.778 1.308 9.468 2.704 14.084 4.161v526.578h-14.084zM528.031 182.197v645.708h38.818v-645.708zM1431.169 134.867v740.945h37.060v-740.945zM2026.827 143.192v740.945h37.060v-740.945zM1431.169 197.499h632.717v-87.608h-632.717zM1335.025 24.974h69.932v-23.311h-69.932zM1428.268 24.974h69.932v-23.311h-69.932zM1521.51 24.974h69.932v-23.311h-69.932zM1614.753 24.974h69.932v-23.311h-69.932zM1707.995 24.974h69.932v-23.311h-69.932zM1801.238 24.974h69.932v-23.311h-69.932zM1894.48 24.974h69.932v-23.311h-69.932zM1987.723 24.974h69.932v-23.311h-69.932zM2080.966 24.974h69.932v-23.311h-69.932zM1335.025 1024.002h69.932v-23.311h-69.932zM1428.268 1024.002h69.932v-23.311h-69.932zM1521.51 1024.002h69.932v-23.311h-69.932zM1614.753 1024.002h69.932v-23.311h-69.932zM1707.995 1024.002h69.932v-23.311h-69.932zM1801.238 1024.002h69.932v-23.311h-69.932zM1894.48 1024.002h69.932v-23.311h-69.932zM1987.723 1024.002h69.932v-23.311h-69.932zM2080.966 1024.002h69.932v-23.311h-69.932zM1288.745 77.872h25.958v-77.873h-25.958zM1288.745 181.701h25.958v-77.872h-25.958zM1288.745 285.533h25.958v-77.873h-25.958zM1288.745 389.364h25.958v-77.873h-25.958zM1288.745 493.193h25.958v-77.873h-25.958zM1288.745 597.025h25.958v-77.873h-25.958zM1288.745 700.854h25.958v-77.872h-25.958zM1288.745 804.685h25.958v-77.873h-25.958zM1288.745 908.515h25.958v-77.872h-25.958zM1288.745 1012.346h25.958v-77.873h-25.958zM2154.569 77.872h25.958v-77.873h-25.958zM2154.569 181.701h25.958v-77.872h-25.958zM2154.569 285.533h25.958v-77.873h-25.958zM2154.569 389.364h25.958v-77.873h-25.958zM2154.569 493.193h25.958v-77.873h-25.958zM2154.569 597.025h25.958v-77.873h-25.958zM2154.569 700.854h25.958v-77.872h-25.958zM2154.569 804.685h25.958v-77.873h-25.958zM2154.569 908.515h25.958v-77.872h-25.958zM2154.569 1012.346h25.958v-77.873h-25.958zM46.28 24.974h69.932v-23.311h-69.932zM139.522 24.974h69.932v-23.311h-69.932zM232.765 24.974h69.932v-23.311h-69.932zM326.007 24.974h69.932v-23.311h-69.932zM419.25 24.974h69.932v-23.311h-69.932zM512.493 24.974h69.932v-23.311h-69.932zM605.735 24.974h69.932v-23.311h-69.932zM698.978 24.974h69.932v-23.311h-69.932zM792.22 24.974h69.932v-23.311h-69.932zM46.28 1024.002h69.932v-23.311h-69.932zM139.522 1024.002h69.932v-23.311h-69.932zM232.765 1024.002h69.932v-23.311h-69.932zM326.007 1024.002h69.932v-23.311h-69.932zM419.25 1024.002h69.932v-23.311h-69.932zM512.493 1024.002h69.932v-23.311h-69.932zM605.735 1024.002h69.932v-23.311h-69.932zM698.978 1024.002h69.932v-23.311h-69.932zM792.22 1024.002h69.932v-23.311h-69.932zM0 77.872h25.958v-77.873h-25.958zM0 181.701h25.958v-77.872h-25.958zM0 285.533h25.958v-77.873h-25.958zM0 389.364h25.958v-77.873h-25.958zM0 493.193h25.958v-77.873h-25.958zM0 597.025h25.958v-77.873h-25.958zM0 700.854h25.958v-77.872h-25.958zM0 804.685h25.958v-77.873h-25.958zM0 908.515h25.958v-77.872h-25.958zM0 1012.346h25.958v-77.873h-25.958zM865.824 77.872h25.958v-77.873h-25.958zM865.824 181.701h25.958v-77.872h-25.958zM865.824 285.533h25.958v-77.873h-25.958zM865.824 389.364h25.958v-77.873h-25.958zM865.824 493.193h25.958v-77.873h-25.958zM865.824 597.025h25.958v-77.873h-25.958zM865.824 700.854h25.958v-77.872h-25.958zM865.824 804.685h25.958v-77.873h-25.958zM865.824 908.515h25.958v-77.872h-25.958zM865.824 1012.346h25.958v-77.873h-25.958zM1266.248 502.62l-164.33 170.113v-102.068h-175.285v-136.090h175.285v-102.068z"],"width":2181,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["beam"],"defaultCode":59742,"grid":16},"attrs":[],"properties":{"id":103,"order":1013,"ligatures":"","prevSize":32,"code":59743,"name":"beam"},"setIdx":1,"setId":1,"iconIdx":111},{"icon":{"paths":["M120 94v890h44.515v-890zM835.485 104v890h44.515v-890zM120 169.232h280v-105.232h-280zM600 169.232h280v-105.232h-280zM465.686 149.889h28.629v-85.889h-28.629zM465.686 264.404h28.629v-85.887h-28.629zM465.686 378.922h28.629v-85.887h-28.629zM465.686 493.439h28.629v-85.889h-28.629zM465.686 607.957h28.629v-85.889h-28.629zM465.686 722.475h28.629v-85.889h-28.629zM465.686 836.99h28.629v-85.887h-28.629zM465.686 951.508h28.629v-85.887h-28.629zM465.686 984h28.629v-3.863h-28.629z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["beamBreak"],"defaultCode":59743,"grid":16},"attrs":[],"properties":{"id":104,"order":1014,"ligatures":"","prevSize":32,"code":59744,"name":"beamBreak"},"setIdx":1,"setId":1,"iconIdx":112},{"icon":{"paths":["M1024 576v-64h-193.28c-5.888-72.704-31.808-139.008-71.68-192.256h161.92l70.080-280.256-62.080-15.552-57.92 231.744h-174.656c-0.896-0.704-1.792-1.344-2.688-2.048 6.72-19.52 10.368-40.448 10.368-62.208 0-105.792-85.952-191.488-192-191.488s-192 85.76-192 191.488c0 21.76 3.648 42.688 10.368 62.208-0.896 0.704-1.792 1.344-2.688 2.048h-174.656l-57.92-231.744-62.080 15.552 70.080 280.256h161.92c-39.872 53.248-65.792 119.552-71.68 192.256h-193.28v64h193.344c3.776 45.632 15.488 88.832 33.664 127.744h-123.968l-70.080 280.256 62.080 15.552 57.92-231.744h112.384c58.688 78.016 147.392 127.744 246.656 127.744s187.968-49.728 246.656-127.744h112.384l57.92 231.744 62.080-15.552-70.080-280.256h-123.968c18.112-38.912 29.824-82.112 33.664-127.744h193.344z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bug"],"defaultCode":59744,"grid":16},"attrs":[],"properties":{"id":105,"order":1015,"ligatures":"","prevSize":32,"code":59745,"name":"bug"},"setIdx":1,"setId":1,"iconIdx":113},{"icon":{"paths":["M0 512h128v64h-128zM192 512h192v64h-192zM448 512h128v64h-128zM640 512h192v64h-192zM896 512h128v64h-128zM880 0l16 448h-768l16-448h32l16 384h640l16-384zM144 1024l-16-384h768l-16 384h-32l-16-320h-640l-16 320z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["page-break"],"defaultCode":59745,"grid":16},"attrs":[],"properties":{"id":106,"order":1016,"ligatures":"","prevSize":32,"code":59746,"name":"page-break"},"setIdx":1,"setId":1,"iconIdx":114},{"icon":{"paths":["M437.601 246.968v511.313h62.199v-389.422c70.832 12.511 126.512 30.092 159.509 43.295 65.969 26.194 97.89 60.862 97.89 97.072 0 40.832-40.432 83.589-121.297 119.028-10.639 4.237-11.705 5.008-11.705 8.475 0 4.622 8.513 8.089 21.281 8.089 10.64 0 11.704 0 27.665-7.704 92.57-40.446 138.321-89.367 138.321-136.361 0-49.691-52.137-97.843-155.347-132.896-68.872-23.501-123.602-52.758-156.316-82.062v-38.827zM476.988 260.276h2.023v2.931c-0.704-0.979-1.374-1.956-2.023-2.931zM458.389 362.414c6.996 0.943 13.864 1.949 20.622 2.999v379.56h-20.622zM447.008 283.417v465.43h56.839v-465.43zM376.299 751.628v-511.313h-62.604v389.422c-71.293-12.511-127.335-30.092-160.547-43.295-66.399-26.194-98.527-60.862-98.527-97.072 0-40.832 40.695-83.589 122.087-119.028 10.709-4.237 11.781-5.008 11.781-8.475 0-4.622-8.568-8.089-21.419-8.089-10.709 0-11.78 0-27.845 7.704-93.172 40.446-139.222 89.367-139.222 136.361 0 49.691 52.476 97.843 156.358 132.896 69.321 23.501 124.407 52.758 157.334 82.062v38.827zM336.656 738.32h-2.036v-2.931c0.709 0.979 1.383 1.956 2.036 2.931zM355.376 636.182c-7.042-0.943-13.954-1.949-20.757-2.999v-379.56h20.757zM366.831 715.179v-465.43h-57.209v465.43zM336.234 0c-45.537-0.026-91.689 9.918-118.121 31.018-57.419 45.837-79.808 90.556-121.966 176.701l23.915 5.679c42.139-86.107 62.852-127.513 117.087-170.809 19.005-15.172 59.138-25.012 99.064-24.989s78.040 9.612 95.7 27.655c20.098 20.534 52.669 63.226 79.67 100.303s48.755 68.795 48.755 68.795l22.798-7.588c0 0-21.866-31.882-49.021-69.17s-59.279-79.727-81.329-102.256c-24.489-25.021-71.015-35.314-116.553-35.34zM556.253 1.071c-3.184 0.052-5.936 1.29-7.389 3.102l-0.023 0.031c-38.078 48.26-115.599 74.235-192.266 64.037-0.489-0.068-1.050-0.107-1.625-0.107-4.797 0-8.686 2.709-8.686 6.051 0 1.697 1.003 3.231 2.618 4.33l0.002 0.001 231.657 157.331c1.563 1.062 3.703 1.717 6.062 1.717 4.797 0 8.686-2.709 8.686-6.051 0-0.198-0.014-0.394-0.040-0.587l0.003 0.025-30.153-224.398c-0.429-3.089-4.137-5.484-8.648-5.484-0.070 0-0.139 0.001-0.208 0.002h0.010zM550.145 25.105l25.612 190.593-196.519-133.466c66.798 2.536 131.165-19.108 170.907-57.127zM181.322 809.648l-22.798 7.588c0 0 21.866 31.881 49.021 69.169s59.279 79.727 81.329 102.256c24.489 25.021 71.015 35.314 116.553 35.34s91.689-9.918 118.121-31.018c57.419-45.837 79.808-90.556 121.966-176.701l-23.915-5.679c-42.139 86.107-62.852 127.513-117.087 170.809-19.005 15.172-59.138 25.013-99.064 24.99s-78.040-9.613-95.7-27.656c-20.098-20.534-52.669-63.226-79.67-100.303s-48.755-68.794-48.755-68.794zM154.818 786.437c-4.693 0.093-8.447 2.765-8.447 6.048 0 0.198 0.014 0.394 0.040 0.587l-0.003-0.025 30.153 224.398c0.43 3.088 4.137 5.483 8.648 5.483 3.261 0 6.102-1.252 7.587-3.103l0.023-0.031c38.078-48.26 115.599-74.236 192.266-64.037 0.489 0.068 1.050 0.107 1.625 0.107 4.797 0 8.686-2.709 8.686-6.051 0-1.697-1.003-3.231-2.618-4.33l-0.002-0.001-231.657-157.33c-1.564-1.063-3.703-1.718-6.063-1.718-0.084 0-0.167 0.001-0.25 0.002h0.012zM165.903 808.301l196.519 133.467c-66.798-2.536-131.165 19.108-170.907 57.127zM462.42 137.693l-78.759-53.596 18.341-1.169c10.088-0.643 26.479-2.569 36.425-4.28 14.935-2.57 18.415-2.759 19.986-1.086 9.948 10.591 84.868 112.313 83.433 113.279-0.367 0.247-36.108-23.67-79.426-53.148zM546.573 153.514c-12.461-17.437-32.048-43.91-43.526-58.828-17.723-23.035-20.369-27.35-17.55-28.627 24.519-11.104 32.132-15.25 46.56-25.355 9.287-6.504 17.143-11.578 17.458-11.274 0.897 0.865 21.084 154.929 20.36 155.383-0.355 0.222-10.841-13.863-23.302-31.3zM191.77 992.351c-0.547-1.849-4.947-33.8-9.779-71.003s-9.332-71.362-10.001-75.909l-1.216-8.267 13.862 19.541c15.318 21.593 61.767 83.681 69.804 93.307l5.114 6.125-18.092 8.561c-9.95 4.708-24.978 13.611-33.395 19.784-13.648 10.009-15.411 10.859-16.298 7.861zM282.391 945.595c-14.594-16.387-81.965-109.048-80.186-110.287 0.622-0.433 36.222 23.146 79.112 52.397l77.982 53.184-22.344 1.004c-12.289 0.552-28.952 2.332-37.028 3.955l-14.684 2.951z"],"width":811,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flagFlip"],"defaultCode":59746,"grid":16},"attrs":[],"properties":{"id":107,"order":1017,"ligatures":"","prevSize":32,"code":59747,"name":"flagFlip"},"setIdx":1,"setId":1,"iconIdx":115},{"icon":{"paths":["M523.471 263.319c2.861-1.431 5.725-1.431 8.587-1.431 5.725 0 11.45 1.431 15.744 1.431 2.861 1.431 32.918 31.487 125.948 124.517 68.699 70.13 123.086 123.086 123.086 123.086s42.937-52.956 97.324-120.224c101.617-127.38 100.186-125.948 110.205-128.811 1.433 0 2.861 0 7.156 0s10.019 1.431 14.312 1.431c2.861 1.431 55.818 55.818 233.291 231.86l17.175 17.175 41.506-50.093c42.937-54.387 45.799-57.249 54.387-60.112 1.433-1.431 5.725-1.431 10.019-1.431 15.744 0 28.625 12.881 28.625 30.056 0 2.862 0 7.156-1.433 11.45-4.295 10.019-243.31 306.284-253.328 314.871-4.295 2.862-11.45 5.725-18.606 5.725-5.725 0-8.587 0-12.881-2.862-4.295-1.431-32.918-31.487-127.38-124.517-67.268-70.13-121.655-124.517-121.655-124.517s-44.368 54.387-98.755 123.086c-100.186 125.948-98.755 124.517-108.774 125.948-1.433 2.862-4.295 2.862-7.156 2.862-4.295 0-10.019-2.862-14.312-2.862-4.295-1.431-55.818-52.956-233.291-231.86l-17.175-17.175-41.506 48.662c-42.937 55.818-47.231 60.112-54.387 61.543-2.861 2.862-5.725 2.862-10.019 2.862-15.744 0-28.625-14.312-28.625-30.056 0-4.294 0-8.587 1.433-12.881 4.295-8.587 247.603-309.146 253.328-316.302 1.433 0 5.725-1.431 7.156-1.431z"],"width":1672,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mordent"],"defaultCode":59747,"grid":16},"attrs":[],"properties":{"id":108,"order":1018,"ligatures":"","prevSize":32,"code":59748,"name":"mordent"},"setIdx":1,"setId":1,"iconIdx":116},{"icon":{"paths":["M566.931 212.312c1.157 0 1.157-1.155 3.467-1.155s5.776 1.155 6.931 2.31c2.31 2.31 3.467 3.466 3.467 6.931 0 1.155 0 4.621-1.157 8.087-2.31 4.621-6.931 20.794-11.552 36.968l-25.415 83.177-15.018 57.762-2.31 3.466h12.708c6.931 0 19.639-2.31 28.881-2.31 58.917-1.155 122.455-9.242 179.062-21.95 4.621 0 11.552-1.155 16.173-1.155 17.329 0 31.191 5.776 38.123 17.329 0 1.155 0 1.155 1.157 1.155 3.467 0 13.863-3.466 51.986-12.708 60.072-12.708 57.762-12.708 73.935-13.863 3.467 0 4.621 0 8.087 0 23.105 0 40.433 10.397 51.986 33.502 4.621 9.242 6.931 21.95 6.931 34.657 0 10.397-2.31 19.639-6.931 20.794-3.467 2.31-99.35 24.26-103.971 24.26 0 0 0 0 0 0-6.931 0-8.087-3.466-8.087-9.242 0-2.31 0-3.466 0-4.621 1.157-5.776 1.157-8.087 1.157-11.552 0-16.173-6.931-32.347-18.484-40.433l-4.621-3.466-6.931 5.776c-24.26 15.018-43.899 39.278-58.917 68.159-8.087 12.708-3.467 2.31-47.365 146.715-39.278 130.542-38.123 130.542-42.744 132.852-3.467 1.155-98.195 24.26-102.816 24.26 0 0 0 0 0 0-4.621-2.31-6.931-2.31-6.931-8.087 0-4.621 2.31-12.708 6.931-27.726 3.467-12.708 6.931-24.26 6.931-25.415 0 0 0 0 0 0v0c0 0-21.95 12.708-47.365 28.881-63.538 38.123-63.538 38.123-82.022 42.744-10.397 4.621-23.105 4.621-34.657 4.621-61.228 0-113.213-49.675-113.213-114.369 0-3.466 0-6.931 0-11.552 2.31-15.018 0-8.087 34.657-127.076 17.329-58.917 31.191-107.437 31.191-107.437v0c0 0-1.157 0-4.621 0-12.708 0-43.899 0-80.867 0s-58.917 2.31-71.625 2.31c-10.397 0-15.018-2.31-15.018-2.31-4.621-1.155-6.931-4.621-6.931-8.087s2.31-5.776 4.621-8.087c2.31 0 25.415-5.776 51.986-12.708l50.83-11.552 42.744-1.155c23.105 0 43.899 0 43.899 0s1.157-8.087 4.621-17.329c19.639-70.47 26.57-90.109 26.57-91.264 1.157-2.31 5.776-4.621 13.863-11.552l64.693-42.744c27.726-19.639 51.986-35.812 51.986-35.812zM669.752 427.186c-2.31-1.155-3.467-1.155-4.621-1.155-3.467 0-4.621 0-10.397 1.155-41.589 9.242-83.177 16.173-131.697 20.794-9.242 0-9.242 0-9.242 8.087-2.31 4.621-11.552 40.433-34.657 123.61-32.347 103.971-38.123 125.921-38.123 139.784 0 2.31 0 4.621 1.157 8.087 3.467 17.329 15.018 28.881 26.57 28.881 3.467 0 8.087-2.31 11.552-3.466 1.157-2.31 139.784-85.488 142.094-86.643 0 0 30.036-101.661 30.036-103.971 0-5.776 2.31-13.863 8.087-27.726 4.621-11.552 27.726-87.798 27.726-91.264 0-8.087-9.242-15.018-18.484-16.173z"],"width":1205,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["trill"],"defaultCode":59748,"grid":16},"attrs":[],"properties":{"id":109,"order":1019,"ligatures":"","prevSize":32,"code":59749,"name":"trill"},"setIdx":1,"setId":1,"iconIdx":117},{"icon":{"paths":["M627.14 200.583c1.093 0 4.365-1.091 6.547-1.091 8.729 0 17.458 5.456 21.823 13.094 1.093 3.273 1.093 3.273 1.093 113.48v111.298l49.102-61.105c52.375-65.469 52.375-65.469 60.013-67.652 1.093 0 2.182 0 5.456 0s7.638 1.091 10.912 1.091c2.182 1.091 42.555 42.555 177.858 176.767l13.094 13.094 31.643-38.19c32.735-41.464 34.917-43.646 41.464-45.828 1.093-1.091 4.365-1.091 7.638-1.091 12.003 0 21.823 9.82 21.823 22.914 0 2.182 0 5.456-1.093 8.729-3.274 7.638-185.496 233.507-193.134 240.054-3.274 2.182-8.729 4.365-14.185 4.365-4.365 0-6.547 0-9.82-2.182-3.274-1.091-25.097-24.005-97.113-94.93-51.284-53.467-92.748-94.93-92.748-94.93s-3.274 2.182-6.547 6.547l-4.365 6.547v147.306c0 28.37 0 51.284 0 68.743 0 94.93-1.093 84.019-7.638 89.475-4.365 5.456-8.729 7.638-13.094 7.638-8.729 0-18.55-4.365-20.732-13.094-2.182-3.273-2.182-3.273-3.274-123.3v-121.118l-45.828 58.922c-48.011 57.831-52.375 64.378-60.013 64.378-1.093 0-2.182 0-4.365 0-9.82-2.182 0 8.729-186.587-178.949l-13.094-13.094-31.643 37.099c-32.735 42.555-36.008 45.828-41.464 46.92-2.182 2.182-4.365 2.182-7.638 2.182-12.003 0-21.823-10.912-21.823-22.914 0-3.273 0-6.547 1.093-9.82 3.274-6.547 185.496-233.507 193.134-238.963 3.274-3.273 8.729-4.365 13.094-4.365s7.638 0 10.912 1.091c2.182 1.091 55.649 55.649 177.858 176.767l12.003 13.094 3.274-2.182 1.093-3.273v-137.485c0-137.485 0-139.668 1.093-141.85 3.274-6.547 7.638-10.912 14.185-14.185z"],"width":1275,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mordent-inv"],"defaultCode":59749,"grid":16},"attrs":[],"properties":{"id":110,"order":1020,"ligatures":"","prevSize":32,"code":59750,"name":"mordent-inv"},"setIdx":1,"setId":1,"iconIdx":118},{"icon":{"paths":["M185.306 433.595c1.845 0 4.611 0 5.073 0 0 0 0.461 0 0.461 0s2.767 0 5.073 0c41.503 1.861 65.944 23.818 65.944 51.357 0 13.397-5.534 28.656-19.368 43.169-26.285 28.656-69.172 44.286-106.524 44.286-29.052 0-53.954-9.304-65.944-28.283-3.689-7.443-5.534-14.514-5.534-22.329 0-40.564 56.26-85.594 120.82-88.2zM228.851 60.931h31.249v437.32h-31.249v-437.32zM482.505 723.45c3.236 0 8.090 0 8.899 0 0 0 0.81 0 0.81 0s4.854 0 8.899 0c72.809 3.301 115.685 42.253 115.685 91.109 0 23.767-9.708 50.836-33.977 76.584-46.112 50.836-121.348 78.565-186.875 78.565-50.966 0-94.651-16.505-115.685-50.176-6.472-13.204-9.708-25.748-9.708-39.612 0-71.963 98.696-151.848 211.954-156.469zM558.897 62.33h54.82v775.822h-54.82v-775.822zM229.387 9.277v427.809h22.674v-325.824c25.821 10.468 46.118 25.178 58.146 36.225 24.048 21.916 35.684 50.923 35.684 81.218 0 34.163-14.739 69.938-44.217 99.589-3.878 3.545-4.267 4.19-4.267 7.091 0 3.868 3.103 6.768 7.758 6.768 3.879 0 4.267 0 10.085-6.446 33.745-33.841 50.423-74.772 50.423-114.092 0-41.576-19.006-81.863-56.629-111.192-25.106-19.663-45.057-44.142-56.983-68.66v-32.486zM243.745 20.412h0.738v2.452c-0.257-0.819-0.501-1.636-0.738-2.452zM236.965 105.869c2.55 0.789 5.054 1.631 7.518 2.51v317.572h-7.518zM232.816 39.774v389.418h20.72v-389.418zM49.546 50.945l22.529-18.293 330.781 407.387-22.529 18.293-330.781-407.387zM382.208 50.945l-22.529-18.293-330.781 407.387 22.529 18.293 330.781-407.387z"],"width":681,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["grace_remove"],"defaultCode":59750,"grid":16},"attrs":[],"properties":{"id":111,"order":1021,"ligatures":"","prevSize":32,"code":59751,"name":"grace_remove"},"setIdx":1,"setId":1,"iconIdx":119},{"icon":{"paths":["M185.306 433.595c1.845 0 4.611 0 5.073 0 0 0 0.461 0 0.461 0s2.767 0 5.073 0c41.503 1.861 65.944 23.818 65.944 51.357 0 13.397-5.534 28.656-19.368 43.169-26.285 28.656-69.172 44.286-106.524 44.286-29.052 0-53.954-9.304-65.944-28.283-3.689-7.443-5.534-14.514-5.534-22.329 0-40.564 56.26-85.594 120.82-88.2zM228.851 60.931h31.249v437.32h-31.249v-437.32zM482.505 723.451c3.236 0 8.090 0 8.899 0 0 0 0.81 0 0.81 0s4.854 0 8.899 0c72.809 3.301 115.685 42.253 115.685 91.109 0 23.767-9.708 50.836-33.977 76.584-46.112 50.836-121.348 78.565-186.875 78.565-50.966 0-94.651-16.505-115.685-50.176-6.472-13.204-9.708-25.748-9.708-39.612 0-71.963 98.696-151.848 211.954-156.469zM558.897 62.33h54.82v775.822h-54.82v-775.822zM229.387 9.277v427.809h22.674v-325.824c25.821 10.468 46.118 25.178 58.146 36.225 24.048 21.916 35.684 50.923 35.684 81.218 0 34.163-14.739 69.938-44.217 99.589-3.878 3.545-4.267 4.19-4.267 7.091 0 3.868 3.103 6.768 7.758 6.768 3.879 0 4.267 0 10.085-6.446 33.745-33.841 50.423-74.772 50.423-114.092 0-41.576-19.006-81.863-56.629-111.192-25.106-19.663-45.057-44.142-56.983-68.66v-32.486zM243.745 20.412h0.738v2.452c-0.257-0.819-0.501-1.636-0.738-2.452zM236.965 105.869c2.55 0.789 5.054 1.631 7.518 2.51v317.572h-7.518zM232.816 39.774v389.418h20.72v-389.418z"],"width":681,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["grace_note"],"defaultCode":59751,"grid":16},"attrs":[],"properties":{"id":112,"order":1022,"ligatures":"","prevSize":32,"code":59752,"name":"grace_note"},"setIdx":1,"setId":1,"iconIdx":120},{"icon":{"paths":["M377.871 170.575c4.74 0 13.034 0 22.513 0 18.958 0 43.841 0 49.766 2.189 88.867 9.849 159.961 51.433 190.769 109.431 10.664 19.698 15.404 40.49 15.404 62.376 0 53.621-31.992 114.903-90.052 160.864-40.287 31.735-80.573 51.433-143.373 70.036-81.758 24.075-151.667 66.753-196.693 118.186 0 0 0 1.094 0 1.094s0 0 0 0 3.556-1.094 5.924-4.377c45.026-33.924 105.456-53.621 159.961-53.621 45.026 0 77.018 7.66 119.675 29.546 26.068 12.037 49.766 17.509 72.279 17.509 9.479 0 18.958 0 29.622-2.189 15.404-3.283 31.992-14.226 37.917-22.981 3.556-7.66 9.479-10.943 16.589-10.943 9.479 0 18.958 6.566 18.958 16.415 0 7.66-10.664 35.018-20.143 53.621-37.917 70.036-104.271 113.809-168.255 113.809-4.74 0-8.294 0-13.034-1.094-16.589 0-23.698-4.377-45.026-17.509-45.026-27.358-101.901-41.584-151.667-41.584-21.328 0-40.287 2.189-58.060 8.755-23.698 7.66-46.211 20.792-53.32 30.641-3.556 7.66-9.479 9.849-16.589 9.849-5.924 0-11.849-2.189-15.404-8.755l-2.369-3.283v-15.32c0-13.132 1.187-17.509 1.187-21.886 1.187-3.283 2.369-9.849 2.369-15.32 21.328-91.922 93.607-173.996 191.953-214.485 80.573-35.018 133.893-97.394 143.373-176.184 2.369-6.566 2.369-12.037 2.369-18.603 0-70.036-56.875-118.186-137.448-118.186-5.924 0-13.034 0-18.958 0-11.849 1.094-15.404 1.094-15.404 3.283 0 0 0 1.094 3.556 3.283 27.253 14.226 40.287 41.584 40.287 67.847 0 33.924-18.958 65.659-55.69 78.791-11.849 3.283-23.698 4.377-33.177 4.377-49.766 0-91.237-39.395-91.237-86.451 0-8.755 0-17.509 2.369-27.358 17.773-50.338 101.901-91.922 199.063-101.771zM414.604 880.784v0zM414.604 143.217v0z"],"width":830,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["glyph2"],"defaultCode":59752,"grid":16},"attrs":[],"properties":{"id":113,"order":1023,"ligatures":"","prevSize":32,"code":59753,"name":"glyph2"},"setIdx":1,"setId":1,"iconIdx":121},{"icon":{"paths":["M386.898 179.289c2.676 0 12.046 0 22.753 0 17.399 0 38.814 0 45.506 0 123.134 10.667 219.499 64.001 236.898 133.336 2.676 6.4 2.676 13.867 2.676 21.334 0 8.533 0 16-2.676 20.267-17.399 50.134-91.012 96.002-184.7 118.402-6.692 2.133-9.369 2.133-9.369 3.2 0 0 0 0 0 0 1.34 0 5.354 1.067 9.369 1.067 127.149 37.334 194.069 108.802 194.069 178.136 0 53.334-37.475 104.535-121.795 138.669-49.521 21.334-104.396 30.934-157.932 30.934-88.335 0-175.332-26.667-236.898-74.668-22.753-17.067-30.783-38.401-30.783-59.734 0-43.734 38.814-85.335 103.058-85.335v0c64.244 0 100.381 39.467 100.381 80.001 0 30.934-20.076 61.868-65.582 76.801 0 0 0 0 0 0 0 1.067 38.814 7.467 58.89 8.533 2.676 0 5.354 0 8.030 0 88.335 0 149.902-50.134 149.902-119.469 0-7.467 0-13.867-1.34-21.334-14.723-77.868-80.305-135.469-156.594-137.602-18.738-1.067-28.107-7.467-28.107-17.067 0-12.8 8.030-18.134 28.107-18.134 65.582-3.2 121.795-38.401 143.21-91.735 5.354-10.667 6.692-21.334 6.692-29.867 0-44.801-41.491-85.335-103.058-96.002-9.369-3.2-21.415-3.2-34.799-3.2-18.738 0-36.137 1.067-54.875 3.2l-5.354 1.067 5.354 3.2c34.799 14.934 49.521 41.601 49.521 68.268 0 35.201-29.445 70.401-80.305 80.001-6.692 1.067-14.723 1.067-21.415 1.067-58.89 0-103.058-42.667-103.058-87.468 0-19.2 8.030-38.401 28.107-54.401 46.844-40.534 117.78-64.001 206.115-71.468zM427.049 871.568v0zM427.049 152.622v0z"],"width":854,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["glyph3"],"defaultCode":59753,"grid":16},"attrs":[],"properties":{"id":114,"order":1024,"ligatures":"","prevSize":32,"code":59754,"name":"glyph3"},"setIdx":1,"setId":1,"iconIdx":122},{"icon":{"paths":["M395.415 210.223c1.273-1.003 19.073-1.003 73.749-1.003 16.53 0 34.332 0 57.219 0h128.425l3.816 3.009c6.358 3.009 10.172 8.025 10.172 12.037 0 6.018-3.816 10.031-8.901 14.043-1.273 3.009-12.715 11.034-20.345 20.061l-67.392 61.187-86.465 77.236-45.775 41.126-68.663 62.19-90.279 81.249c-15.258 15.046-31.788 27.083-31.788 27.083s0 0 0 0c0 2.006 11.444 2.006 116.981 2.006h115.71v-65.2c0-66.203 0-67.206 1.273-68.209 2.542-3.009 13.987-14.043 58.491-55.169l35.603-30.092 26.702-27.083 27.974-23.071 13.987-14.043c5.086-6.018 12.715-7.021 19.073-7.021 7.629 0 13.987 3.009 17.802 8.025 1.273 3.009 1.273 5.015 1.273 79.243 0 17.052 0 38.117 0 63.193v139.427h31.788c29.245 0 30.517 0 34.332 1.003 10.172 3.009 15.258 11.034 15.258 20.061 0 5.015-1.273 11.034-6.358 15.046-7.629 5.015-8.901 5.015-43.232 5.015h-31.788v17.052c1.273 51.157 13.987 71.218 63.577 92.282 17.802 7.021 21.616 9.028 21.616 19.058 0 7.021-2.542 10.031-8.901 14.043l-3.816 1.003h-347.13l-3.816-1.003c-7.629-4.012-8.901-7.021-8.901-14.043 0-10.031 1.273-12.037 20.345-19.058 49.59-21.064 62.305-41.126 62.305-92.282v-17.052h-146.23c-26.702 2.006-48.318 2.006-66.12 2.006-80.107 0-81.378-2.006-82.65-2.006-7.629-2.006-10.172-8.025-10.172-15.046 0 0 0 0 0 0 0-7.021 0-7.021 25.431-30.092 106.809-102.313 181.83-250.767 181.83-369.13 0-18.055 3.816-24.074 13.987-27.083zM471.707 850.182v0zM471.707 174.113v0z"],"width":943,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["glyph4"],"defaultCode":59754,"grid":16},"attrs":[],"properties":{"id":115,"order":1025,"ligatures":"","prevSize":32,"code":59755,"name":"glyph4"},"setIdx":1,"setId":1,"iconIdx":123},{"icon":{"paths":["M301.484 140.486l4.854-1.235h221.623l4.854 3.704c4.854 1.235 6.471 3.704 8.088 4.939l4.854 4.939v286.446c0 203.722 0 288.915 3.234 295.088 3.234 40.744 25.883 61.734 80.884 83.958 19.412 8.643 24.265 11.112 24.265 23.459 0 8.643-1.62 12.347-11.324 17.286l-6.471 1.235h-440.011l-4.854-1.235c-8.088-4.939-12.942-8.643-12.942-17.286 0-12.347 4.854-14.816 24.265-23.459 11.324-3.704 14.559-6.173 24.265-11.112 37.207-19.755 51.766-39.51 59.854-72.846 0-6.173 0-81.489 0-233.354v-225.946l-27.501 30.867-100.297 119.764c-22.648 27.163-24.265 28.398-38.825 28.398s-24.265-8.643-24.265-18.52c0-6.173 3.234-13.581 8.088-20.99 1.62-1.235 9.706-13.581 19.412-27.163l90.591-125.937 45.295-70.377c30.736-43.214 30.736-43.214 33.971-44.448 1.62-2.469 6.471-3.704 8.088-6.173zM374.282 928.211h0.006zM374.287 96.038h0.006z"],"width":750,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["glyph1"],"defaultCode":59755,"grid":16},"attrs":[],"properties":{"id":116,"order":1026,"ligatures":"","prevSize":32,"code":59756,"name":"glyph1"},"setIdx":1,"setId":1,"iconIdx":124},{"icon":{"paths":["M1054.687 0v27.175q-52.881 9.549-80.056 33.785-38.926 35.989-69.039 110.169l-347.4 847.569h-27.175l-373.107-858.585q-28.644-66.102-40.395-80.791-18.363-22.769-45.537-35.254-26.441-13.22-71.977-16.892v-27.175h406.892v27.175q-69.039 6.611-89.604 23.503t-20.566 43.333q0 36.723 33.785 114.576l253.389 583.897 235.028-576.552q34.52-85.198 34.52-118.248 0-21.3-21.3-40.395-21.3-19.831-71.977-27.91-3.672-0.734-12.486-2.203v-27.175zM1013.518 548.559q101.845 0 163.54 77.363 52.392 66.101 52.392 151.789 0 60.226-28.889 121.921t-79.811 93.032q-50.433 31.337-112.618 31.337-101.355 0-161.092-80.791-50.433-68.060-50.433-152.768 0-61.695 30.358-122.41 30.847-61.205 80.791-90.094 49.943-29.378 105.762-29.378zM998.339 580.385q-25.951 0-52.392 15.67-25.951 15.179-42.109 53.86t-16.157 99.397q0 97.928 38.682 168.926 39.171 70.998 102.825 70.998 47.495 0 78.343-39.171t30.847-134.651q0-119.472-51.412-188.022-34.764-47.006-88.625-47.006z"],"width":1229,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["Vo"],"defaultCode":59756,"grid":16},"attrs":[],"properties":{"id":117,"order":1027,"ligatures":"","prevSize":32,"code":59757,"name":"Vo"},"setIdx":1,"setId":1,"iconIdx":125},{"icon":{"paths":["M847.261 194.076v16.83q-32.75 5.914-49.58 20.924-24.108 22.288-42.757 68.23l-215.151 524.914h-16.83l-231.071-531.736q-17.74-40.938-25.018-50.035-11.372-14.101-28.202-21.833-16.375-8.187-44.577-10.461v-16.83h251.995v16.83q-42.757 4.094-55.494 14.556t-12.737 26.837q0 22.743 20.924 70.959l156.928 361.617 145.557-357.069q21.379-52.764 21.379-73.233 0-13.192-13.192-25.018-13.192-12.282-44.577-17.285-2.274-0.455-7.733-1.364v-16.83zM205.613 158.497l-23.209 23.209 659.876 659.876 23.209-23.209zM842.28 158.497l-659.876 659.876 23.209 23.209 659.876-659.876z"],"width":1065,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["Vx"],"defaultCode":59757,"grid":16},"attrs":[],"properties":{"id":118,"order":1028,"ligatures":"","prevSize":32,"code":59758,"name":"Vx"},"setIdx":1,"setId":1,"iconIdx":126},{"icon":{"paths":["M847.261 194.076v16.83q-32.75 5.914-49.58 20.924-24.108 22.288-42.757 68.23l-215.151 524.914h-16.83l-231.071-531.736q-17.74-40.938-25.018-50.035-11.372-14.101-28.202-21.833-16.375-8.187-44.577-10.461v-16.83h251.995v16.83q-42.757 4.094-55.494 14.556t-12.737 26.837q0 22.743 20.924 70.959l156.928 361.617 145.557-357.069q21.379-52.764 21.379-73.233 0-13.192-13.192-25.018-13.192-12.282-44.577-17.285-2.274-0.455-7.733-1.364v-16.83zM966.787 706.039h-53.756v111.229h-46.702v-111.229h-173.431v-61.057l175.377-222.989h44.757v241.571h53.756zM866.329 663.565v-178.391l-140.35 178.391z"],"width":1065,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["V4"],"defaultCode":59758,"grid":16},"attrs":[],"properties":{"id":119,"order":1029,"ligatures":"","prevSize":32,"code":59759,"name":"V4"},"setIdx":1,"setId":1,"iconIdx":127},{"icon":{"paths":["M847.261 194.076v16.83q-32.75 5.914-49.58 20.924-24.108 22.288-42.757 68.23l-215.151 524.914h-16.83l-231.071-531.736q-17.74-40.938-25.018-50.035-11.372-14.101-28.202-21.833-16.375-8.187-44.577-10.461v-16.83h251.995v16.83q-42.757 4.094-55.494 14.556t-12.737 26.837q0 22.743 20.924 70.959l156.928 361.617 145.557-357.069q21.379-52.764 21.379-73.233 0-13.192-13.192-25.018-13.192-12.282-44.577-17.285-2.274-0.455-7.733-1.364v-16.83zM943.61 646.555q11.303 10.293 18.603 25.854t7.3 40.217q0 24.417-8.713 44.765t-24.49 35.429q-17.661 16.757-41.681 24.896-23.784 7.9-52.277 7.9-29.2 0-57.458-7.181-28.258-6.942-46.39-15.321v-50.032h3.533q20.016 13.405 47.097 22.263t52.277 8.857q14.835 0 31.555-5.028t27.081-14.842q10.833-10.533 16.013-23.221 5.416-12.688 5.416-32.078 0-19.151-6.123-31.599-5.887-12.688-16.484-19.869-10.597-7.421-25.668-10.054-15.071-2.872-32.497-2.872h-21.193v-39.738h16.484q35.793 0 56.987-15.081 21.429-15.321 21.429-44.526 0-12.926-5.416-22.502-5.416-9.816-15.071-16.039-10.125-6.224-21.664-8.617t-26.139-2.393q-22.371 0-47.568 8.14t-47.568 22.981h-2.354v-50.034q16.719-8.379 44.506-15.321 28.023-7.181 54.161-7.181 25.668 0 45.213 4.788t35.323 15.321q16.955 11.49 25.668 27.769t8.713 38.062q0 29.684-20.723 51.947-20.487 22.024-48.51 27.769v3.352q11.303 1.915 25.903 8.14 14.6 5.985 24.726 15.081z"],"width":1065,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["V3"],"defaultCode":59759,"grid":16},"attrs":[],"properties":{"id":120,"order":1030,"ligatures":"","prevSize":32,"code":59760,"name":"V3"},"setIdx":1,"setId":1,"iconIdx":128},{"icon":{"paths":["M847.261 194.076v16.83q-32.75 5.914-49.58 20.924-24.108 22.288-42.757 68.23l-215.151 524.914h-16.83l-231.071-531.736q-17.74-40.938-25.018-50.035-11.372-14.101-28.202-21.833-16.375-8.187-44.577-10.461v-16.83h251.995v16.83q-42.757 4.094-55.494 14.556t-12.737 26.837q0 22.743 20.924 70.959l156.928 361.617 145.557-357.069q21.379-52.764 21.379-73.233 0-13.192-13.192-25.018-13.192-12.282-44.577-17.285-2.274-0.455-7.733-1.364v-16.83zM929.61 822.866h-247.534v-47.278q25.785-20.359 51.57-40.718 26.030-20.359 48.377-40.492 47.149-42.076 64.585-66.733 17.436-24.883 17.436-53.613 0-26.241-18.909-40.944-18.663-14.93-52.306-14.93-22.347 0-48.377 7.239t-50.833 22.169h-2.456v-47.505q17.435-7.917 46.413-14.478 29.223-6.56 56.481-6.56 56.235 0 88.159 25.11 31.924 24.883 31.924 67.638 0 19.228-5.403 35.968-5.157 16.514-15.471 31.444-9.578 14.025-22.592 27.598-12.769 13.573-31.187 30.086-26.276 23.752-54.271 46.147-27.995 22.169-52.306 41.171h196.701z"],"width":1065,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["V2"],"defaultCode":59760,"grid":16},"attrs":[],"properties":{"id":121,"order":1031,"ligatures":"","prevSize":32,"code":59761,"name":"V2"},"setIdx":1,"setId":1,"iconIdx":129},{"icon":{"paths":["M847.261 194.076v16.83q-32.75 5.914-49.58 20.924-24.108 22.288-42.757 68.23l-215.151 524.914h-16.83l-231.071-531.736q-17.74-40.938-25.018-50.035-11.372-14.101-28.202-21.833-16.375-8.187-44.577-10.461v-16.83h251.995v16.83q-42.757 4.094-55.494 14.556t-12.737 26.837q0 22.743 20.924 70.959l156.928 361.617 145.557-357.069q21.379-52.764 21.379-73.233 0-13.192-13.192-25.018-13.192-12.282-44.577-17.285-2.274-0.455-7.733-1.364v-16.83zM871.096 829.925h-173.272v-36.187h66.643v-237.598h-66.643v-32.378q13.543 0 29.022-2.381 15.478-2.618 23.433-7.381 9.889-5.951 15.478-14.998 5.805-9.285 6.665-24.76h33.322v319.496h65.353z"],"width":1065,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["V1"],"defaultCode":59761,"grid":16},"attrs":[],"properties":{"id":122,"order":1032,"ligatures":"","prevSize":32,"code":59762,"name":"V1"},"setIdx":1,"setId":1,"iconIdx":130},{"icon":{"paths":["M463.397 178.544c5.795-1.931 10.625-1.931 17.386-1.931 22.216 0 50.228 4.83 69.546 8.693 90.796 24.148 156.478 101.421 156.478 180.626 0 5.795 0 10.625 0 16.421-6.761 53.125-47.33 83.069-89.83 83.069-33.807 0-69.546-21.25-82.103-64.716-5.795-14.489-7.727-25.114-7.727-32.841 0-12.557 4.83-17.386 14.489-17.386 8.693 0 12.557 3.864 15.455 12.557 3.864 16.421 19.318 26.080 37.671 26.080 12.557 0 25.114-3.864 36.705-12.557 13.523-8.693 20.284-22.216 20.284-41.534 0-3.864 0-8.693-0.967-13.523-10.625-59.887-76.307-109.148-151.649-112.046l-9.659-1.931-7.727 15.455c-28.977 53.125-44.432 86.932-44.432 117.842s17.386 56.023 50.228 89.83c16.421 17.386 21.25 22.216 27.046 34.773 9.659 16.421 13.523 31.875 13.523 51.194 0 8.693-0.967 19.318-3.864 28.977-10.625 44.432-39.603 102.387-71.478 148.751-1.931 2.898-3.864 5.795-3.864 5.795s0 0 0 0c1.931 0 2.898 0 5.795-1.931 10.625 0 20.284-0.967 29.943-0.967 51.194 0 97.557 18.352 138.126 55.057l2.898 0.967 18.352-14.489c10.625-7.727 19.318-14.489 19.318-16.421 0 0 0.967 0 0.967-0.967s-0.967-3.864-0.967-7.727c-2.898-13.523-2.898-27.046-2.898-40.568 0-56.023 17.386-104.319 51.194-141.024 6.761-4.83 37.671-30.909 49.262-38.637 12.557-9.659 27.046-14.489 43.466-14.489 15.455 0 30.909 6.761 45.398 18.352 17.386 14.489 27.046 36.705 27.046 57.955 0 23.182-9.659 45.398-28.012 61.819-3.864 3.864-31.875 25.114-33.807 27.046-1.931 0.967-75.341 56.989-78.239 59.887 0 0 0 0 0 0 0 3.864 9.659 28.012 16.421 40.568 7.727 17.386 12.557 22.216 25.114 28.012 9.659 4.83 22.216 7.727 33.807 7.727 29.943 0 61.819-14.489 87.898-41.534 5.795-4.83 6.761-7.727 6.761-10.625 0-0.967 0-2.898 0-3.864-2.898-9.659-3.864-23.182-3.864-36.705 0-17.386 2.898-35.739 6.761-52.159 15.455-68.58 59.887-123.637 131.365-162.274 1.931-0.967 1.931-0.967 1.931-2.898 0-0.967-0.967-1.931-4.83-7.727-61.819-76.307-155.512-132.33-259.831-156.478-16.421-3.864-21.25-8.693-21.25-19.318s6.761-15.455 16.421-15.455c4.83 0 6.761 0 10.625 0.967 210.57 41.534 378.639 176.763 414.378 335.173 3.864 18.352 6.761 37.671 6.761 55.057 0 93.694-56.989 175.797-137.16 184.49-5.795 0.967-12.557 0.967-19.318 0.967-53.125 0-98.523-26.080-123.637-74.376-3.864-4.83-3.864-6.761-4.83-6.761 0 0 0 0 0 1.931-34.773 50.228-88.864 79.205-137.16 79.205-28.977 0-55.057-8.693-76.307-27.046-10.625-9.659-22.216-32.841-31.875-58.921l-1.931-6.761-2.898 1.931-55.057 46.364c-55.055 43.465-55.055 43.465-60.851 43.465 0 0 0 0 0 0-8.693 0-12.557-3.864-15.455-14.489-14.489-52.159-57.955-86.932-102.387-86.932-5.795 0-10.625 0-17.386 0.967l-6.761 1.931-8.693 11.591c-31.875 39.603-72.444 85.001-76.307 85.966-2.898 0.967-5.795 1.931-7.727 1.931-8.693 0-16.421-6.761-16.421-15.455 0-2.898 1.931-3.864 1.931-4.83 0.967-1.931 1.931-6.761 3.864-10.625 12.557-41.534 40.568-75.341 81.137-96.592 4.83-2.898 9.659-4.83 10.625-5.795 47.33-62.785 68.58-103.353 68.58-136.194 0-20.284-6.761-29.943-35.739-55.057-29.943-27.046-50.228-64.716-54.091-103.353 0-3.864 0-8.693 0-12.557 0-45.398 22.216-105.285 67.614-186.422l5.795-10.625h-1.931c-43.466 5.795-70.512 13.523-103.353 30.909-62.785 31.875-106.251 85.966-114.944 144.887-1.931 5.795-1.931 12.557-1.931 17.386 0 21.25 5.795 42.5 16.421 48.296 5.795 3.864 14.489 5.795 20.284 5.795 28.977 0 56.023-27.046 56.989-61.819 0.967-15.455 4.83-20.284 15.455-20.284 12.557 0 16.421 4.83 16.421 25.114v1.931c-1.931 49.262-16.421 87.898-46.364 112.046-17.386 15.455-37.671 21.25-56.989 21.25-27.046 0-51.194-12.557-62.785-36.705-8.693-19.318-13.523-40.568-13.523-63.75 0-59.887 31.875-128.467 86.932-177.728 56.023-47.33 116.876-72.444 199.945-79.205zM1071.924 510.819c-1.931-2.898-3.864-4.83-4.83-4.83-0.967 0-2.898 1.931-6.761 4.83-55.057 40.568-87.898 107.217-87.898 174.831 0 12.557 2.898 28.012 4.83 41.534 8.693 43.466 32.841 81.137 59.887 89.83 1.931 0 3.864 0 5.795 0 19.318 0 42.5-27.046 57.955-70.512 8.693-24.148 13.523-53.125 13.523-84.035 0-16.421-0.967-31.875-3.864-48.296-6.761-34.773-20.284-69.546-38.637-103.353zM783.115 532.069c-2.898 0-4.83 0-7.727 0-7.727 0-14.489 2.898-20.284 9.659-18.352 27.046-28.977 58.921-28.977 97.557 0 1.931 0 4.83 0 6.761 1.931 12.557 1.931 23.182 2.898 24.148v0c0 0 10.625-7.727 22.216-17.386l38.637-28.977c18.352-15.455 21.25-16.421 25.114-27.046 1.931-6.761 3.864-12.557 3.864-18.352 0-20.284-14.489-40.568-35.739-46.364z"],"width":1381,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pedal"],"defaultCode":59762,"grid":16},"attrs":[],"properties":{"id":123,"order":1033,"ligatures":"","prevSize":32,"code":59763,"name":"pedal"},"setIdx":1,"setId":1,"iconIdx":131},{"icon":{"paths":["M219.993 357.788c2.911 0 4.851 0 6.792 0 3.881 0 9.703 0 16.495 0.958l212.49 59.188 256.152 69.859c64.038 17.466 56.276 16.494 62.097 19.405 6.792 3.88 10.673 11.643 10.673 19.405 0 8.731-3.881 17.466-10.673 21.345-1.941 0.958-1.941 0.958-1.941 0.958s0 0 0 0c0 0.958-15.524 5.82-316.309 87.325l-212.49 59.185c-6.792 1.95-10.673 1.95-14.554 1.95-5.822 0-9.703-1.95-13.584-3.883-7.762-4.851-11.643-12.614-11.643-20.374 0-9.703 3.881-17.466 11.643-21.349 3.881-4.851-18.435 1.95 185.322-53.365l135.838-36.868 95.087-26.2c15.524-4.851 29.108-7.759 29.108-8.731 0 0-13.584-1.95-29.108-7.763l-95.087-25.225-135.838-37.843c-195.995-54.333-181.441-49.482-184.352-51.425-8.732-4.851-12.614-13.582-12.614-22.313 0-11.646 6.792-20.377 16.495-24.257zM376.207 419.867v-184.352c38.811-29.108 38.811 0 0-29.108l38.811 29.108v582.164c-38.811 29.108-38.811 0 0 29.108l-38.811-29.108v-397.812l135.838 19.405zM512.045 439.272v-232.866c38.811-29.108 38.811 0 0-29.108l38.811 29.108v582.164c-38.811 29.108-38.811 0 0 29.108l-38.811-29.108v-349.298z"],"width":962,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sori"],"defaultCode":59763,"grid":16},"attrs":[],"properties":{"id":124,"order":1034,"ligatures":"","prevSize":32,"code":59764,"name":"sori"},"setIdx":1,"setId":1,"iconIdx":132},{"icon":{"paths":["M165.696 168.179c13.539 0 20.308 0 0-8.462l23.693 52.463 2.539 645.639c-11.847 11.845-14.385 11.845-19.462 11.845l-17.77-14.385v-700.641l0.847 13.54zM186.006 168.179l248.778 169.237h-59.233l-189.545-118.466v220.008l189.543-101.542h59.233l-248.778 169.237z"],"width":589,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["koron"],"defaultCode":59764,"grid":16},"attrs":[],"properties":{"id":125,"order":1035,"ligatures":"","prevSize":32,"code":59765,"name":"koron"},"setIdx":1,"setId":1,"iconIdx":133},{"icon":{"paths":["M288.401 130.537c2.132-0.701 3.552-0.701 5.683-0.701 6.394 0 12.077 3.552 14.208 9.236 0.711 2.129 0.711 2.841 0.711 95.905 0 86.669 0 93.064 1.42 93.064 0 0 0 0 0 0 7.814-2.843 37.652-9.236 39.783-9.236 6.394 0 12.077 3.552 14.208 9.236 0.711 1.428 1.42 18.469 1.42 35.52 0 17.049-0.711 33.389-1.42 35.52-2.842 7.104-3.552 7.104-32.679 14.917l-22.733 4.972v78.145c0 71.752 0 77.436 1.42 77.436 0 0 0 0 0 0 7.814-2.843 37.652-9.236 39.783-9.236 4.973 0 7.814 1.428 10.656 4.263 4.262 4.261 4.262 2.841 4.262 30.545 0 0 0 9.947 0 9.947s0 9.945 0 9.945c0 27.707 0 26.996-4.262 30.548-2.842 3.552-2.842 3.552-29.127 9.945l-22.733 5.684v93.773c0 93.776 0 94.485-0.711 97.328-2.132 5.681-7.814 9.233-14.208 9.233-3.552 0-7.814-1.428-10.656-4.261-3.552-4.263-4.262 2.129-4.262-55.412 0-12.076 0-25.576 0-42.624 0-50.44 0-90.932 0-90.932s-14.919 3.552-32.679 7.816c-17.76 4.261-31.968 7.813-31.968 7.813-0.711 0-0.711 44.047-0.711 97.328 0 95.905 0 96.614-0.711 98.745-2.132 6.393-8.525 9.236-14.208 9.236-3.552 0-7.814-1.428-10.656-4.263-3.552-3.552-4.262 2.843-4.262-56.832 0-11.365 0-26.285 0-43.333 0-86.672 0-93.064-0.711-93.064 0 0 0 0 0 0-8.525 2.841-36.231 8.524-38.362 8.524-6.394 0-12.077-3.552-14.208-9.236-0.711-1.428-0.711-18.469-0.711-35.52 0-17.049 0-33.389 0.711-35.52 2.842-7.104 4.262-7.813 31.968-14.208l21.312-5.681v-77.436c0-72.461 0-77.433-0.711-77.433 0 0 0 0 0 0-8.525 2.129-36.231 8.524-38.362 8.524-6.394 0-12.077-3.552-14.208-9.236-0.711-2.129-0.711-18.469-0.711-35.52 0-17.049 0-34.1 0.711-35.52 2.842-7.104 4.262-7.813 31.968-14.917l21.312-4.975v-94.482c0-93.776 0-94.485 0.711-97.328 2.842-5.681 8.525-9.233 14.208-9.233 4.262 0 7.814 1.428 10.656 4.261 4.262 4.263 4.262-2.129 4.262 56.124 0 11.365 0 25.573 0 42.624 0 49.728 0 90.93 0 90.93 0.711 0 14.919-3.552 32.679-8.524 17.76-4.261 32.679-7.813 32.679-7.813s0-43.336 0-96.616 0-97.325 1.42-99.457c0.711-3.552 4.262-7.104 7.814-8.524zM279.161 504.22c0-61.805 0-77.433 0-77.433v0c-0.711 0-5.683 0.701-11.366 2.841-6.394 1.428-20.602 4.975-32.679 7.816l-21.312 4.972v78.145c0 42.624 0 77.436 0 77.436 0.711 0 14.919-3.552 32.679-7.816s32.679-7.816 32.679-7.816c0 0 0-35.52 0-78.145zM455.342 144.756c2.132-0.701 3.552-1.428 5.683-1.428 6.394 0 12.077 4.261 14.208 9.945 1.42 2.129 1.42 2.841 1.42 91.641v90.224l18.471-6.395c17.050-5.684 19.181-6.393 22.023-6.393 0 0 0.711 0 0.711 0 6.394 0 10.656 2.841 13.498 8.524l0.711 2.129v33.389c0 7.104 0 12.788 0 17.049 0 19.892 0 19.892-2.842 22.735-2.132 3.552-4.262 4.261-29.127 12.785l-23.443 7.816v78.145c0 51.149 0 78.145 0 78.145 0.711 0 8.525-2.841 18.471-6.393s18.471-6.395 19.891-6.395c0.711-0.701 1.42-0.701 2.132-0.701 6.394 0 12.077 4.261 14.208 9.233 0.711 2.129 1.42 22.024 1.42 40.495 0 14.917-0.711 29.125-0.711 30.545-2.842 6.395-3.552 7.104-31.258 17.051l-24.154 8.524v97.325l-0.711 97.325-0.711 2.129c-2.842 4.972-8.525 8.524-14.208 8.524-3.552 0-7.104-1.428-10.656-4.972-3.552-3.552-4.262 2.843-4.262-55.412 0-11.365 0-25.573 0-42.624 0-50.437 0-91.641 0-91.641s-7.814 2.841-17.050 6.393c-12.787 4.263-19.181 6.395-23.443 6.395s-6.394-1.428-9.235-4.263c-4.256-4.266-4.256-2.846-4.256-30.553 0-2.841 0-6.393 0-9.945 0-2.841 0-5.684 0-8.524 0-29.128 0-27.707 4.262-31.968 2.842-2.843 2.842-2.843 28.416-12.076l21.312-7.816v-78.145c0-43.336 0-78.856 0-78.856s-8.525 2.843-17.76 5.684c-12.077 4.263-18.471 6.395-23.443 6.395-3.552 0-5.683-1.428-8.525-4.263-4.262-4.263-4.262-2.841-4.262-31.257 0-2.843 0-6.395 0-9.947 0-7.104 0-13.497 0-18.469 0-25.576 2.132-22.735 31.258-32.68l22.733-7.816v-94.482c0-93.776 0-94.485 1.42-96.616 1.42-3.552 4.973-7.104 7.814-8.524z"],"width":662,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sharp125"],"defaultCode":59765,"grid":16},"attrs":[],"properties":{"id":126,"order":1036,"ligatures":"","prevSize":32,"code":59766,"name":"sharp125"},"setIdx":1,"setId":1,"iconIdx":134},{"icon":{"paths":["M378.076 129.663c0.707-0.707 2.117-0.707 3.528-0.707 4.94 0 10.585 3.528 14.113 8.468l0.707 2.823v93.146l0.707 93.146 17.641-2.823c11.29-2.117 18.347-2.823 22.581-2.823 4.94 0 7.057 0.707 9.879 3.528 3.528 4.234 3.528 3.528 3.528 31.754v41.634l-0.707 3.528c-3.528 6.351-4.94 6.351-30.343 11.29-12.702 2.117-22.581 4.234-23.287 4.94 0 0 0 19.053 0 45.867 0 9.879 0 21.17 0 32.46l0.707 76.916 17.641-2.823c11.29-2.117 18.347-2.823 22.581-2.823 4.94 0 7.057 0.707 9.879 3.528 3.528 4.234 3.528 2.823 3.528 31.754v41.634l-0.707 2.823c-3.528 7.057-4.94 7.057-28.932 11.996-10.585 2.117-21.17 4.234-21.875 4.234h-2.823v116.433c0 73.388 0 70.565-2.117 74.094-2.823 4.234-7.762 6.351-12.702 6.351-4.234 0-9.173-2.117-11.996-6.351-2.117-3.528-2.823-0.707-2.823-71.977v-112.905h-1.411c0 0-14.113 2.823-30.343 5.645l-31.049 6.351v92.441l-0.707 93.146-0.707 2.117c-2.117 5.645-7.762 9.173-14.113 9.173-4.234 0-10.585-3.528-13.407-9.173l-0.707-2.117v-179.942l-31.754 5.645-31.754 6.351v184.881l-0.707 2.823c-2.823 5.645-8.468 9.173-13.407 9.173-5.645 0-11.996-3.528-13.407-9.173l-2.117-2.823v-90.324c0-48.69 0-88.912 0-88.912s-8.468 0.707-16.936 2.823c-11.996 2.117-17.641 2.823-22.581 2.823s-6.351-0.707-9.173-3.528c-2.823-4.94-3.528-2.823-3.528-29.637 0-3.528 0.707-7.057 0.707-10.585v-34.577l0.707-2.117c0.707-2.823 3.528-5.645 6.351-6.351 2.117-1.411 4.234-2.117 27.52-6.351l16.936-2.823v-78.328c0-42.339 0-77.622 0-77.622s-8.468 1.411-16.936 2.823c-11.996 2.117-17.641 2.823-22.581 2.823s-6.351-0.707-9.173-3.528c-2.823-4.94-3.528-2.823-3.528-29.637 0-3.528 0.707-6.351 0.707-10.585v-34.577l0.707-1.411c0.707-3.528 3.528-6.351 6.351-7.057 2.117-0.707 4.234-2.117 27.52-5.645l16.936-3.528v-94.558c0-9.879 0-19.053 0-25.404 0-77.622 0-72.682 2.823-76.916s7.762-6.351 12.702-6.351c3.528 0 8.468 2.117 11.29 6.351s2.823 0 2.823 74.094v25.404c0 83.973 0 91.735 1.411 91.735 0 0 58.569-10.585 61.392-11.996h0.707v-192.643l0.707-2.117c2.823-5.645 9.173-8.468 13.407-8.468 6.351 0 11.996 2.823 14.113 8.468l0.707 2.117 0.707 93.852v93.146h1.411c2.823-0.707 61.392-11.996 61.392-11.996s0.707-33.871 0.707-95.969v-95.969l0.707-2.823c2.117-3.528 6.351-6.351 9.879-7.762zM366.792 500.835c0-61.392 0-78.328 0-78.328v0c0 0-14.819 2.823-31.754 6.351l-31.049 5.645v155.949h1.411c2.823-0.707 61.392-11.996 61.392-11.996s0-27.52 0-77.622zM274.351 596.099c0 0 0-19.053 0-45.867 0-9.879 0-21.875 0-32.46v-77.622l-31.754 5.645-31.754 6.351v77.622c0 16.23 0 30.343 0 40.222 0 35.283 0 38.105 1.411 38.105 0.707 0 61.392-11.996 62.097-11.996z"],"width":580,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sharp75"],"defaultCode":59766,"grid":16},"attrs":[],"properties":{"id":127,"order":1037,"ligatures":"","prevSize":32,"code":59767,"name":"sharp75"},"setIdx":1,"setId":1,"iconIdx":135},{"icon":{"paths":["M195.828 135.721c2.193-2.193 2.923-2.193 7.307-2.193 5.845 0 10.96 2.923 13.883 8.768l0.732 2.193v92.064c0 51.147 0 92.795 0 92.795 1.461 0 8.768-2.193 18.997-6.576l18.997-5.845h3.653c6.576 0.732 10.96 2.923 13.152 8.768l2.193 2.193v46.032c0 28.496-1.461 26.304-4.384 29.957s-3.653 4.384-29.227 12.421l-23.381 8.037v80.374c0 43.84 0 78.912 0 78.912s8.768-2.923 18.997-5.845c18.267-7.307 18.997-7.307 21.92-7.307v0c7.307 0 13.152 4.384 14.613 9.499 0 2.193 1.461 18.997 1.461 35.072 0 18.267-1.461 37.995-1.461 38.726-2.923 7.307-2.923 6.576-48.224 23.381l-7.307 2.193v199.473l-0.732 2.193c-2.923 5.845-8.768 9.499-13.883 9.499-5.845 0-12.421-3.653-15.344-9.499l-0.732-2.193v-94.256c0-83.296 0-94.256 0-94.256s0 0 0 0c-0.732 0-7.307 2.923-13.152 5.115l-16.805 5.845c-3.653 1.461-6.576 2.193-9.499 2.193-4.384 0-8.037-2.193-10.96-5.115-2.922-3.655-2.922-1.463-2.922-29.959 0-3.653 0-6.576 0-11.691v-34.342l0.732-2.193c0.732-2.923 2.923-5.845 5.115-6.576 0.732 0 11.691-5.115 24.843-9.499l22.651-8.037v-81.104c0-6.576 0-14.613 0-20.459 0-34.342 0-59.915 0-59.915s-8.768 2.923-17.536 5.845c-12.421 4.384-18.997 6.576-23.381 6.576-5.115 0-6.576-2.193-9.499-5.115-2.924-4.383-2.924-2.191-2.924-30.688 0-2.923 0-5.845 0-10.229v-35.072l0.732-2.193c2.923-7.307 2.923-7.307 30.688-16.075l21.92-7.307v-195.82l0.732-2.193c2.193-2.923 5.115-5.845 8.037-6.576z"],"width":408,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sharp25"],"defaultCode":59767,"grid":16},"attrs":[],"properties":{"id":128,"order":1038,"ligatures":"","prevSize":32,"code":59768,"name":"sharp25"},"setIdx":1,"setId":1,"iconIdx":136},{"icon":{"paths":["M405.747 153.17c2.501-0.823 5.002-0.823 6.669-0.823 7.502 0 14.171 4.168 16.672 10.834 1.667 2.498 1.667 3.336 1.667 96.698 0 51.682 0 93.362 0 93.362s25.008-11.669 54.184-26.674l54.184-27.509h4.168c0.834 0 0.834 0 0.834 0 10.837 0 18.339 8.336 18.339 17.507 0 2.498-0.834 4.168-1.667 6.669-2.501 6.666 0 5-68.355 39.178l-61.686 31.677v161.716l1.667-1.676c31.677-26.674 65.854-40.848 98.364-40.848 12.504 0 25.841 2.498 38.345 6.669 37.512 13.339 58.352 48.349 58.352 89.194 0 22.51-6.669 47.517-19.173 70.856-18.339 33.344-42.513 60.021-109.201 120.040-36.678 32.509-45.014 40.013-65.854 59.183-11.67 11.672-13.338 12.504-20.006 12.504-7.502 0-14.171-4.168-16.672-10.834-0.834-3.336-0.834-3.336-0.834-225.906 0-123.373-0.834-223.404-0.834-223.404s-24.174 12.504-54.184 26.674l-54.184 27.509h-4.168c0 0-0.834 0-0.834 0-10.837 0-18.339-7.501-18.339-17.504 0-1.676 0.834-4.168 1.667-6.669 2.501-6.669 0-5.003 68.355-39.178l62.52-30.845v-103.365c0-101.698 0-102.533 0.834-105.034 1.667-4.168 5.835-8.336 9.17-10.003zM506.612 569.968c-3.334-0.823-7.502-0.823-10.837-0.823-2.501 0-4.168 0-5.835 0-21.673 3.333-40.846 16.672-55.017 38.344l-4.168 5.835v197.565l2.501-3.336c62.52-67.519 102.532-145.044 102.532-195.895v-0.823c0-25.843-7.502-36.68-29.176-40.848zM163.171 153.188v0c1.667-0.823 4.168-0.823 6.669-0.823 6.669 0 14.171 4.168 16.672 10.834 0.834 2.498 0.834 3.336 0.834 197.565v195.060l2.501-1.676c31.677-26.674 65.020-40.848 97.531-40.848 13.338 0 25.841 2.498 38.345 6.669 37.512 13.339 58.352 48.349 58.352 89.194 0 22.51-5.835 47.517-19.173 70.856-18.339 33.344-42.513 60.021-109.201 120.040-35.845 32.509-45.014 40.013-65.854 59.183-11.67 11.672-13.338 12.504-20.006 12.504-7.502 0-14.171-4.168-16.672-10.834l-0.834-3.336v-691.885l0.834-2.498c1.667-4.168 5.835-8.336 10.003-10.003zM264.036 569.99v0c-3.334-0.823-8.336-0.823-11.67-0.823-1.667 0-4.168 0-5.002 0-22.507 3.333-41.68 16.672-55.851 38.344l-4.168 5.835v197.565l3.334-3.336c61.686-67.519 102.532-145.044 102.532-195.895v-0.823c0-25.843-8.336-36.68-29.176-40.848z"],"width":780,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flat125ar"],"defaultCode":59768,"grid":16},"attrs":[],"properties":{"id":129,"order":1039,"ligatures":"","prevSize":32,"code":59769,"name":"flat125ar"},"setIdx":1,"setId":1,"iconIdx":137},{"icon":{"paths":["M292.993 153.457c1.67-0.835 3.341-0.835 5.846-0.835 7.516 0 14.198 3.341 16.703 10.022 0.836 3.341 0.836 5.011 0.836 97.712 0 50.944 0 93.537 0 93.537s24.219-12.527 53.45-27.56l52.614-26.725h4.176c0.836 0 0.836 0 0.836 0 10.857 0 18.373 8.351 18.373 17.538 0 1.67-0.836 4.176-2.506 6.681-1.67 5.846 0 5.011-66.812 39.252l-60.131 31.736v162.019l0.836-2.505c31.736-26.725 65.142-40.087 96.877-40.087 12.527 0 25.054 1.67 37.582 6.681 37.582 12.527 57.625 47.603 57.625 89.361 0 21.714-6.681 45.933-19.208 70.153-18.373 33.406-41.757 60.131-106.899 118.591l-64.306 60.966c-11.692 11.692-14.198 11.692-19.208 11.692-7.516 0-14.198-4.176-16.703-10.857-0.836-3.341-0.836-3.341-0.836-225.49 0-122.767 0-223.82 0-223.82s-24.219 11.692-53.45 26.725l-52.614 28.395h-4.176c-1.67 0-1.67 0-1.67 0-10.022 0-17.538-8.351-17.538-17.538 0-2.505 0.836-5.011 1.67-6.681 2.506-7.516 0-5.846 67.647-40.087l60.131-30.901v-103.558c0-101.888 0-101.888 0.836-105.229 2.506-3.341 5.846-8.351 10.022-9.187zM391.544 571.032c-3.341-1.67-8.351-1.67-11.692-1.67-2.506 0-4.176 0-5.846 0-21.714 3.341-40.922 16.703-54.285 38.417l-3.341 5.846v197.095l2.506-3.341c60.966-66.812 101.053-143.646 101.053-194.59v-1.67c0-25.054-8.351-35.911-28.395-40.087z"],"width":662,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flat25ar"],"defaultCode":59769,"grid":16},"attrs":[],"properties":{"id":130,"order":1040,"ligatures":"","prevSize":32,"code":59770,"name":"flat25ar"},"setIdx":1,"setId":1,"iconIdx":138},{"icon":{"paths":["M504.763 109.083c4.896-0.938 9.792-0.938 11.423-0.938 14.687 0 29.375 3.753 32.638 11.258l3.264 3.753v776.791l-3.264 3.753c-3.264 7.505-17.951 12.196-31.006 12.196s-17.951 0-39.166-13.134l-124.026-68.485c-114.234-58.165-159.928-87.248-194.198-118.207-37.534-31.897-52.221-63.794-52.221-93.815 0-60.98 68.541-107.888 181.143-107.888 13.055 0 26.111 0.938 42.43 1.876 50.589 5.629 97.915 18.763 148.505 43.155l4.896 2.814v-220.466c0-218.59 0-218.59 1.632-222.342 3.264-3.753 9.792-9.382 17.951-10.32zM382.369 578.16c-8.16-1.876-17.951-1.876-26.111-1.876-35.902 0-66.909 12.196-73.436 29.083 0 4.691-1.632 10.32-1.632 15.010 0 12.196 3.264 28.145 8.16 42.217 22.847 50.66 97.915 122.898 189.303 181.064l6.528 3.753v-221.404l-9.792-6.567c-24.479-22.516-57.117-36.588-93.019-41.279z"],"width":660,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flat25sz"],"defaultCode":59770,"grid":16},"attrs":[],"properties":{"id":131,"order":1041,"ligatures":"","prevSize":32,"code":59771,"name":"flat25sz"},"setIdx":1,"setId":1,"iconIdx":139},{"icon":{"paths":["M557.278 130.050c-3.528-0.889-7.056-0.889-8.231-0.889-10.583 0-21.167 3.557-23.518 10.672l-2.352 3.557v736.346l2.352 3.557c2.352 7.114 12.935 11.561 22.343 11.561s12.935 0 28.222-12.45l89.37-64.919c82.315-55.137 115.241-82.705 139.935-112.053 27.046-30.236 37.63-60.473 37.63-88.931 0-57.805-49.389-102.27-130.528-102.27-9.407 0-18.815 0.889-30.574 1.779-36.454 5.336-70.555 17.786-107.009 40.908l-3.528 2.668v-208.987c0-207.208 0-207.208-1.176-210.766-2.352-3.557-7.056-8.893-12.935-9.782zM645.472 574.703c5.88-1.779 12.935-1.779 18.815-1.779 25.87 0 48.213 11.561 52.917 27.568 0 4.447 1.176 9.782 1.176 14.229 0 11.561-2.352 26.679-5.88 40.019-16.463 48.023-70.555 116.499-136.407 171.636l-4.704 3.557v-209.876l7.056-6.225c17.639-21.343 41.157-34.683 67.028-39.129zM434.982 130.050c-1.176-0.889-4.704-0.889-7.056-0.889-11.759 0-21.167 3.557-24.694 10.672-1.176 3.557-1.176 3.557-1.176 210.766v208.987l-2.352-2.668c-44.685-28.458-90.546-42.687-135.231-42.687-17.639 0-35.278 1.779-52.917 7.114-52.917 13.34-82.315 50.69-82.315 95.156 0 23.122 10.583 48.912 28.222 74.702 24.694 35.572 58.796 64.030 150.518 126.282l90.546 64.919c16.463 12.45 18.815 12.45 27.046 12.45 11.759 0 21.167-4.447 24.694-11.561l1.176-3.557v-736.346l-1.176-3.557c-3.528-3.557-8.231-8.893-15.287-9.782zM296.223 574.703c4.704-1.779 11.759-1.779 16.463-1.779 2.352 0 5.88 0 7.056 0 30.574 3.557 57.62 17.786 77.611 40.908l4.704 6.225v209.876l-3.528-3.557c-85.842-71.145-142.287-152.961-142.287-207.208v-1.779c0-26.679 10.583-38.24 39.981-42.687z"],"width":972,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flat75sz"],"defaultCode":59771,"grid":16},"attrs":[],"properties":{"id":132,"order":1042,"prevSize":32,"code":59772,"name":"flat75sz"},"setIdx":1,"setId":1,"iconIdx":140},{"icon":{"paths":["M557.278 130.050c-3.528-0.889-7.056-0.889-8.231-0.889-10.583 0-21.167 3.557-23.518 10.672l-2.352 3.557v736.346l2.352 3.557c2.352 7.114 12.935 11.561 22.343 11.561s12.935 0 28.222-12.45l89.37-64.919c82.315-55.137 115.241-82.705 139.935-112.053 27.046-30.236 37.63-60.473 37.63-88.931 0-57.805-49.389-102.27-130.528-102.27-9.407 0-18.815 0.889-30.574 1.779-36.454 5.336-70.555 17.786-107.009 40.908l-3.528 2.668v-208.987c0-207.208 0-207.208-1.176-210.766-2.352-3.557-7.056-8.893-12.935-9.782zM645.472 574.703c5.88-1.779 12.935-1.779 18.815-1.779 25.87 0 48.213 11.561 52.917 27.568 0 4.447 1.176 9.782 1.176 14.229 0 11.561-2.352 26.679-5.88 40.019-16.463 48.023-70.555 116.499-136.407 171.636l-4.704 3.557v-209.876l7.056-6.225c17.639-21.343 41.157-34.683 67.028-39.129zM434.982 130.050c-1.176-0.889-4.704-0.889-7.056-0.889-11.759 0-21.167 3.557-24.694 10.672-1.176 3.557-1.176 3.557-1.176 210.766v208.987l-2.352-2.668c-44.685-28.458-90.546-42.687-135.231-42.687-17.639 0-35.278 1.779-52.917 7.114-52.917 13.34-82.315 50.69-82.315 95.156 0 23.122 10.583 48.912 28.222 74.702 24.694 35.572 58.796 64.030 150.518 126.282l90.546 64.919c16.463 12.45 18.815 12.45 27.046 12.45 11.759 0 21.167-4.447 24.694-11.561l1.176-3.557v-736.346l-1.176-3.557c-3.528-3.557-8.231-8.893-15.287-9.782zM296.223 574.703c4.704-1.779 11.759-1.779 16.463-1.779 2.352 0 5.88 0 7.056 0 30.574 3.557 57.62 17.786 77.611 40.908l4.704 6.225v209.876l-3.528-3.557c-85.842-71.145-142.287-152.961-142.287-207.208v-1.779c0-26.679 10.583-38.24 39.981-42.687z"],"width":972,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["microtone"],"defaultCode":59772,"grid":16},"attrs":[],"properties":{"id":133,"order":1043,"ligatures":"","prevSize":32,"code":59773,"name":"microtone"},"setIdx":1,"setId":1,"iconIdx":141},{"icon":{"paths":["M435.96 912.084h-57.871v-314.343h57.871v314.343zM675.361 956.843h-297.272v-64.072h297.272v64.072zM675.361 597.742h-297.272v-59.090h297.272v59.090zM435.96 433.283h-57.871v-314.343h57.871v314.343zM675.361 478.042h-297.272v-64.072h297.272v64.072zM675.361 118.94h-297.272v-59.090h297.272v59.090zM293.484 964.325l-233.617-48.968v-794.92l233.617-53.865-3.974 112.219h-152.801v678.212h152.801z"],"width":735,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bracket"],"defaultCode":59773,"grid":16},"attrs":[],"properties":{"id":134,"order":1044,"ligatures":"","prevSize":32,"code":59774,"name":"bracket"},"setIdx":1,"setId":1,"iconIdx":142},{"icon":{"paths":["M471.441 53.351c-232.16 0-416.139 205.199-416.139 451.639s183.979 451.686 416.139 451.686c202.827 0 368.742-156.766 407.485-360.69h-93.604c-36.417 157.192-164.42 270.622-313.881 270.622-177.085 0-324.605-158.949-324.605-361.618s147.52-361.432 324.605-361.432c131.002 0 245.546 87.096 296.429 214.393h96.616c-56.012-175.851-209.281-304.6-393.045-304.6zM956.565 348.499l-136.677 169.065-133.701-165.375 4.346-5.354h264.708z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["refresh"],"defaultCode":59774,"grid":16},"attrs":[],"properties":{"id":135,"order":1045,"ligatures":"","prevSize":32,"code":59775,"name":"refresh"},"setIdx":1,"setId":1,"iconIdx":143},{"icon":{"paths":["M236.161 236.161c-152.342 152.342-152.342 399.336 0 551.678s399.336 152.342 551.678 0c152.342-152.342 152.342-399.336 0-551.678s-399.336-152.342-551.678 0zM736.119 736.119c-123.777 123.777-324.461 123.777-448.238 0s-123.777-324.461 0-448.238c123.777-123.777 324.461-123.777 448.238 0s123.777 324.461 0 448.238zM748.667 452.81l-486.095 1.428 0.381 119.476 486.048-1.476z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["zoomminus"],"defaultCode":59775,"grid":16},"attrs":[],"properties":{"id":136,"order":1046,"ligatures":"","prevSize":32,"code":59776,"name":"zoomminus"},"setIdx":1,"setId":1,"iconIdx":144},{"icon":{"paths":["M236.161 236.161c-152.342 152.342-152.342 399.336 0 551.678s399.336 152.342 551.678 0c152.342-152.342 152.342-399.336 0-551.678s-399.336-152.342-551.678 0zM736.119 736.119c-123.777 123.777-324.461 123.777-448.238 0s-123.777-324.461 0-448.238c123.777-123.777 324.461-123.777 448.238 0s123.777 324.461 0 448.238zM460.28 287.881v172.399h-172.399v103.44h172.399v172.399h103.44v-172.399h172.399v-103.44h-172.399v-172.399z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["zoomplus"],"defaultCode":59776,"grid":16},"attrs":[],"properties":{"id":137,"order":1047,"ligatures":"","prevSize":32,"code":59777,"name":"zoomplus"},"setIdx":1,"setId":1,"iconIdx":145},{"icon":{"paths":["M34.33 528.665h45.037v-34.33h-45.037zM124.403 528.665h45.091v-34.33h-45.091zM214.53 528.665h45.091v-34.33h-45.091zM304.658 528.665h45.037v-34.33h-45.037zM394.785 528.665h45.037v-34.33h-45.037zM484.913 528.665h45.037v-34.33h-45.037zM574.986 528.665h45.091v-34.33h-45.091zM665.113 528.665h45.091v-34.33h-45.091zM755.241 528.665h45.037v-34.33h-45.037zM251.001 67.665h-59.896c0.009 119.341 0.009 238.678 0 358.011h59.896c0.009-119.333 0.009-238.669 0-358.011zM637.392 82.378v-48.048c-148.767 0.007-297.53 0.007-446.287 0v48.048c148.758 0.007 297.519 0.007 446.287 0zM637.392 425.676v-48.048c-148.767 0.007-297.53 0.007-446.287 0v48.048c148.758 0.007 297.519 0.007 446.287 0zM251.001 631.654h-59.896c0.009 119.341 0.009 238.678 0 358.011h59.896c0.009-119.333 0.009-238.669 0-358.011zM637.392 646.367v-48.048c-148.767 0.007-297.53 0.007-446.287 0v48.048c148.758 0.007 297.519 0.007 446.287 0zM637.392 989.665v-48.048c-148.767 0.007-297.53 0.007-446.287 0v48.048c148.758 0.007 297.519 0.007 446.287 0z"],"width":835,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["systemBreak"],"defaultCode":59777,"grid":16},"attrs":[],"properties":{"id":138,"order":1048,"ligatures":"","prevSize":32,"code":59778,"name":"systemBreak"},"setIdx":1,"setId":1,"iconIdx":146},{"icon":{"paths":["M684.098 409.878q0 29.128-14.981 52.014-14.98 22.589-39.377 40.125-23.969 16.942-55.214 31.803t-66.343 28.831v66.875h-76.615v-90.653q27.821-10.997 59.923-24.075 32.529-13.077 53.074-26.453 24.825-15.456 38.522-31.803 13.697-16.644 13.697-42.205 0-33.586-32.957-49.934-32.529-16.645-84.32-16.645-46.226 0-87.744 10.106-41.090 10.106-65.059 20.508h-4.28v-60.633q29.961-8.025 75.759-14.267 46.226-6.539 87.316-6.539 92.024 0 145.098 31.208 53.502 30.911 53.502 81.736zM515.031 748.415h-87.316v-62.714h87.316zM488.113 134.587c0 0 0 0 0 0-222.047 0-402.051 175.049-402.051 390.983v0c0 0 0 0 0 0.001 0 215.934 180.004 390.983 402.051 390.983 0 0 0 0 0.001 0v0c0 0 0 0 0 0 222.047 0 402.051-175.049 402.051-390.983 0 0 0 0 0-0.001v0c0-215.934-180.004-390.983-402.051-390.983 0 0 0 0-0.001 0v0zM490.942 212.784c0 0 0 0 0.001 0 177.637 0 321.641 140.039 321.641 312.787v0c0 172.747-144.003 312.787-321.641 312.787 0 0 0 0-0.001 0v0c-177.637 0-321.64-140.040-321.64-312.787v0c0-172.747 144.003-312.787 321.641-312.787v0z"],"width":1025,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["help"],"defaultCode":59778,"grid":16},"attrs":[],"properties":{"id":139,"order":1049,"ligatures":"","prevSize":32,"code":59779,"name":"help"},"setIdx":1,"setId":1,"iconIdx":147},{"icon":{"paths":["M349.828 464.227h-202.533v148.978h174.022v62.429h-174.022v254.327h-53.256v-528.163h255.789zM672.052 480.899l-181.285 449.062h-57.559l192.85-466.088h-228.085v-62.074h274.079zM819.771 488.331c1.514 0 3.789-1.063 6.441-3.892 7.199-5.309 15.156-10.969 23.112-16.276 47.74-31.845 73.504-75.366 73.504-130.919 0-7.077 0-13.8-1.136-20.876-2.652-24.768-17.808-39.276-40.92-39.276-4.926 0-10.23 1.063-16.292 2.835-7.578 1.765-15.156 5.309-23.112 8.492l-0.379 0.334v-13.092c0-19.461 1.136-38.568 2.275-58.029 0-11.323 1.136-21.938 1.136-33.26 0-10.615-1.136-21.938-3.788-32.553-1.136-3.537-1.136-10.261-6.82-10.261h-0.379c-6.062 0.709-10.609 5.309-10.609 12.384-0.379 14.153-1.893 29.014-1.515 43.168v15.923c0 30.075-1.515 60.152-2.652 90.228-1.515 43.168-9.472 85.628-9.472 128.796 0 16.984 1.136 34.676 6.062 51.659 1.136 2.835 2.275 4.601 4.547 4.601zM834.55 419.319c1.136-13.092 1.514-26.891 3.031-41.398 1.136-10.969 1.893-22.292 1.893-33.615l1.893-0.709c10.609-4.246 20.839-9.199 32.205-9.199 3.788 0 8.335 1.063 12.503 2.474 9.093 2.835 13.261 7.077 12.882 12.738 0 2.829-0.758 6.011-3.031 10.261-14.019 25.83-37.131 43.168-61.38 59.444zM1145.041 300.996q0 44.065-8.416 79.995-8.229 35.93-25.061 61.239-17.019 25.761-42.641 39.771t-60.221 14.010q-9.725 0-18.328-1.357-8.603-1.129-15.336-3.843v-43.161h1.87q5.423 3.386 15.336 6.55 9.912 2.936 22.068 2.936 41.332 0 64.709-29.828 23.565-30.055 27.305-82.706-17.393 12.655-32.729 18.078t-33.477 5.422q-17.206 0-31.232-4.072-13.839-4.064-27.866-15.818-16.458-13.785-24.874-35.026-8.229-21.241-8.229-50.844 0-51.522 28.053-83.837t68.45-32.314q20.198 0 37.404 7.683 17.206 7.457 30.11 22.597 15.897 18.756 24.5 48.359 8.603 29.376 8.603 76.153zM1107.262 291.279q0-35.026-5.985-56.268t-16.458-32.992q-8.79-10.169-18.889-14.463-10.099-4.522-21.881-4.522-26.931 0-42.641 20.338-15.523 20.338-15.523 57.171 0 21.468 5.050 35.026t17.019 23.727q8.416 7.007 18.515 9.49 10.099 2.257 22.442 2.257 14.588 0 29.549-4.743t28.053-13.785q0.189-4.743 0.372-9.265 0.372-4.743 0.372-11.977zM817.345 553.804h-42.813q-33.091-47.234-51.412-103.078t-18.322-125.881 18.322-125.881 51.412-103.078h42.813v2.327q-15.143 16.986-28.978 39.323-13.648 22.105-25.426 51.655-11.217 28.62-18.322 63.057-6.917 34.437-6.917 72.596 0 39.788 6.73 72.829 6.917 33.041 18.509 62.824 11.217 28.62 25.613 51.656 14.395 23.268 28.791 39.323zM1242.381 323.919q0 70.32-19.582 126.39t-54.949 103.495h-45.757v-2.334q15.386-16.12 30.771-39.482 15.586-23.129 27.375-51.864 12.388-29.904 19.582-63.078 7.393-33.174 7.393-73.124 0-38.314-7.393-72.89t-19.582-63.312q-12.588-29.67-27.375-51.864-14.586-22.428-30.771-39.482v-2.334h45.757q35.367 47.426 54.949 103.494t19.582 126.39z"],"width":1336,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["chordSymbol"],"defaultCode":59779,"grid":16},"attrs":[],"properties":{"id":140,"order":1050,"ligatures":"","prevSize":32,"code":59780,"name":"chordSymbol"},"setIdx":1,"setId":1,"iconIdx":148},{"icon":{"paths":["M176.808 459.636c1.76 0 4.4 0 4.84 0 0 0 0.44 0 0.44 0s2.64 0 4.84 0c39.6 1.775 62.92 22.725 62.92 49.002 0 12.783-5.28 27.341-18.48 41.19-25.080 27.341-66 42.255-101.639 42.255-27.72 0-51.48-8.877-62.92-26.986-3.52-7.102-5.28-13.848-5.28-21.305 0-38.704 53.68-81.669 115.279-84.155zM218.357 104.060h29.816v417.266h-29.816v-417.266zM460.378 736.199c3.088 0 7.719 0 8.491 0 0 0 0.772 0 0.772 0s4.631 0 8.491 0c69.47 3.15 110.38 40.316 110.38 86.931 0 22.678-9.263 48.505-32.419 73.072-43.998 48.505-115.783 74.962-178.306 74.962-48.629 0-90.311-15.748-110.38-47.875-6.175-12.599-9.263-24.567-9.263-37.796 0-68.663 94.17-144.885 202.234-149.294zM533.268 105.395h52.306v740.245h-52.306v-740.245zM218.868 54.776v408.191h21.634v-310.882c24.637 9.988 44.003 24.023 55.48 34.563 22.945 20.911 34.048 48.588 34.048 77.494 0 32.597-14.063 66.731-42.189 95.022-3.701 3.383-4.071 3.998-4.071 6.766 0 3.69 2.961 6.458 7.402 6.458 3.701 0 4.071 0 9.622-6.15 32.197-32.289 48.111-71.343 48.111-108.86 0-39.669-18.134-78.109-54.033-106.093-23.955-18.761-42.991-42.117-54.37-65.511v-30.996zM232.568 65.4h0.704v2.34c-0.245-0.781-0.478-1.561-0.704-2.34zM226.099 146.938c2.433 0.753 4.822 1.556 7.173 2.395v303.010h-7.173zM222.141 83.873v371.561h19.77v-371.561zM376.96 85.597c-0.137-0.004-0.298-0.007-0.459-0.007-3.364 0-6.469 1.108-8.971 2.979l0.039-0.028c-89.932 64.947-179.873 129.918-269.834 194.895-3.983 2.736-6.561 7.265-6.561 12.397 0 8.28 6.712 14.993 14.993 14.993 3.447 0 6.623-1.163 9.155-3.119l-0.035 0.026c89.961-64.976 179.903-129.911 269.834-194.858 3.895-2.746 6.408-7.225 6.408-12.291 0-8.131-6.473-14.75-14.547-14.986l-0.022-0.001z"],"width":650,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["grace_slash"],"defaultCode":59780,"grid":16},"attrs":[],"properties":{"id":141,"order":1051,"ligatures":"","prevSize":32,"code":59781,"name":"grace_slash"},"setIdx":1,"setId":1,"iconIdx":149},{"icon":{"paths":["M1024 0h-416l160 160-192 192 96 96 192-192 160 160zM1024 1024v-416l-160 160-192-192-96 96 192 192-160 160zM0 1024h416l-160-160 192-192-96-96-192 192-160-160zM0 0v416l160-160 192 192 96-96-192-192 160-160z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["enlarge"],"defaultCode":59785,"grid":16},"attrs":[],"properties":{"id":142,"order":1052,"ligatures":"","prevSize":32,"code":59785,"name":"enlarge"},"setIdx":1,"setId":1,"iconIdx":150},{"icon":{"paths":["M1024 0v416l-160-160-192 192-96-96 192-192-160-160zM448 672l-192 192 160 160h-416v-416l160 160 192-192z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["enlarge2"],"defaultCode":59787,"grid":16},"attrs":[],"properties":{"id":143,"order":1053,"ligatures":"","prevSize":32,"code":59787,"name":"enlarge2"},"setIdx":1,"setId":1,"iconIdx":151},{"icon":{"paths":["M536.233 920.023h-57.608v-312.914h57.608v312.914zM774.546 964.578h-295.921v-63.781h295.921v63.781zM774.546 607.109h-295.921v-58.821h295.921v58.821zM536.233 443.398h-57.608v-312.914h57.608v312.914zM774.545 487.953h-295.921v-63.781h295.921v63.781zM774.545 130.484h-295.921v-58.821h295.921v58.821zM374.403 964.578h-50.233q-59.945 0-97.453-46.458-37.173-45.993-37.173-133.334v-69.222q0-78.514-27.796-122.649-27.796-44.6-85.062-44.6h-17.079v-72.474h17.079q57.266 0 85.062-44.135 27.796-44.6 27.796-123.113v-69.222q0-87.341 37.173-133.334 37.508-46.458 97.453-46.458h50.233v64.112h-38.177q-45.545 0-66.308 29.268-20.428 29.268-20.428 94.31v81.301q0 64.576-25.787 108.712-25.786 43.67-71.666 69.222v11.15q45.88 25.552 71.666 69.687 25.787 43.67 25.787 108.247v81.301q0 65.041 20.428 94.31 20.763 29.268 66.308 29.268h38.177z"],"width":834,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["brace"],"defaultCode":59793,"grid":16},"attrs":[],"properties":{"id":144,"order":1054,"ligatures":"","prevSize":32,"code":59793,"name":"brace"},"setIdx":1,"setId":1,"iconIdx":152},{"icon":{"paths":["M896 448h16c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h-128v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v576h128v-576zM768 256h128v128h-128v-128zM592 832c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-576h-128v576h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v192h128v-192h16zM448 640h128v128h-128v-128zM272 448c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h-128v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v576h128v-576h16zM128 256h128v128h-128v-128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["equalizer2"],"defaultCode":59795,"grid":16},"attrs":[],"properties":{"id":145,"order":1055,"ligatures":"","prevSize":32,"code":59795,"name":"equalizer2"},"setIdx":1,"setId":1,"iconIdx":153},{"icon":{"paths":["M665.832 327.048l-64.952-64.922-324.81 324.742c-53.814 53.792-53.814 141.048 0 194.844 53.804 53.792 141.060 53.792 194.874 0l389.772-389.708c89.714-89.662 89.714-235.062 0-324.726-89.666-89.704-235.112-89.704-324.782 0l-409.23 409.178c-0.29 0.304-0.612 0.576-0.876 0.846-125.102 125.096-125.102 327.856 0 452.906 125.054 125.056 327.868 125.056 452.988 0 0.274-0.274 0.516-0.568 0.82-0.876l0.032 0.034 279.332-279.292-64.986-64.92-279.33 279.262c-0.296 0.268-0.564 0.57-0.846 0.844-89.074 89.058-233.98 89.058-323.076 0-89.062-89.042-89.062-233.922 0-322.978 0.304-0.304 0.604-0.582 0.888-0.846l-0.046-0.060 409.28-409.166c53.712-53.738 141.144-53.738 194.886 0 53.712 53.734 53.712 141.148 0 194.84l-389.772 389.7c-17.936 17.922-47.054 17.922-64.972 0-17.894-17.886-17.894-47.032 0-64.92l324.806-324.782z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["attachment"],"defaultCode":59853,"grid":16},"attrs":[],"properties":{"id":146,"order":1056,"ligatures":"","prevSize":32,"code":59853,"name":"attachment"},"setIdx":1,"setId":1,"iconIdx":154},{"icon":{"paths":["M992 384h-352v-352c0-17.672-14.328-32-32-32h-192c-17.672 0-32 14.328-32 32v352h-352c-17.672 0-32 14.328-32 32v192c0 17.672 14.328 32 32 32h352v352c0 17.672 14.328 32 32 32h192c17.672 0 32-14.328 32-32v-352h352c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["plus"],"defaultCode":59914,"grid":16},"attrs":[],"properties":{"id":147,"order":1057,"ligatures":"","prevSize":32,"code":59914,"name":"plus"},"setIdx":1,"setId":1,"iconIdx":155},{"icon":{"paths":["M0 416v192c0 17.672 14.328 32 32 32h960c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32h-960c-17.672 0-32 14.328-32 32z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["minus"],"defaultCode":59915,"grid":16},"attrs":[],"properties":{"id":148,"order":1058,"ligatures":"","prevSize":32,"code":59915,"name":"minus"},"setIdx":1,"setId":1,"iconIdx":156},{"icon":{"paths":["M448 304c0-26.4 21.6-48 48-48h32c26.4 0 48 21.6 48 48v32c0 26.4-21.6 48-48 48h-32c-26.4 0-48-21.6-48-48v-32zM640 768h-256v-64h64v-192h-64v-64h192v256h64zM512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["info"],"defaultCode":59916,"grid":16},"attrs":[],"properties":{"id":149,"order":1059,"ligatures":"","prevSize":32,"code":59916,"name":"info"},"setIdx":1,"setId":1,"iconIdx":157},{"icon":{"paths":["M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM672 256l-160 160-160-160-96 96 160 160-160 160 96 96 160-160 160 160 96-96-160-160 160-160z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["cancel-circle"],"defaultCode":59917,"grid":16},"attrs":[],"properties":{"id":150,"order":1060,"ligatures":"","prevSize":32,"code":59917,"name":"cancel-circle"},"setIdx":1,"setId":1,"iconIdx":158},{"icon":{"paths":["M1014.662 822.66c-0.004-0.004-0.008-0.008-0.012-0.010l-310.644-310.65 310.644-310.65c0.004-0.004 0.008-0.006 0.012-0.010 3.344-3.346 5.762-7.254 7.312-11.416 4.246-11.376 1.824-24.682-7.324-33.83l-146.746-146.746c-9.148-9.146-22.45-11.566-33.828-7.32-4.16 1.55-8.070 3.968-11.418 7.31 0 0.004-0.004 0.006-0.008 0.010l-310.648 310.652-310.648-310.65c-0.004-0.004-0.006-0.006-0.010-0.010-3.346-3.342-7.254-5.76-11.414-7.31-11.38-4.248-24.682-1.826-33.83 7.32l-146.748 146.748c-9.148 9.148-11.568 22.452-7.322 33.828 1.552 4.16 3.97 8.072 7.312 11.416 0.004 0.002 0.006 0.006 0.010 0.010l310.65 310.648-310.65 310.652c-0.002 0.004-0.006 0.006-0.008 0.010-3.342 3.346-5.76 7.254-7.314 11.414-4.248 11.376-1.826 24.682 7.322 33.83l146.748 146.746c9.15 9.148 22.452 11.568 33.83 7.322 4.16-1.552 8.070-3.97 11.416-7.312 0.002-0.004 0.006-0.006 0.010-0.010l310.648-310.65 310.648 310.65c0.004 0.002 0.008 0.006 0.012 0.008 3.348 3.344 7.254 5.762 11.414 7.314 11.378 4.246 24.684 1.826 33.828-7.322l146.746-146.748c9.148-9.148 11.57-22.454 7.324-33.83-1.552-4.16-3.97-8.068-7.314-11.414z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["cross"],"defaultCode":59919,"grid":16},"attrs":[],"properties":{"id":151,"order":1061,"ligatures":"","prevSize":32,"code":59919,"name":"cross"},"setIdx":1,"setId":1,"iconIdx":159},{"icon":{"paths":["M864 128l-480 480-224-224-160 160 384 384 640-640z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["checkmark"],"defaultCode":59920,"grid":16},"attrs":[],"properties":{"id":152,"order":1062,"ligatures":"","prevSize":32,"code":59920,"name":"checkmark"},"setIdx":1,"setId":1,"iconIdx":160},{"icon":{"paths":["M397.434 917.696l-397.868-391.6 197.378-194.27 200.49 197.332 429.62-422.852 197.378 194.27-626.998 617.12zM107.912 526.096l289.524 284.962 518.656-510.482-89.036-87.632-429.62 422.852-200.49-197.334-89.034 87.634z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["checkmark2"],"defaultCode":59921,"grid":16},"attrs":[],"properties":{"id":153,"order":1063,"ligatures":"","prevSize":32,"code":59921,"name":"checkmark2"},"setIdx":1,"setId":1,"iconIdx":161},{"icon":{"paths":["M192 128l640 384-640 384z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["play3"],"defaultCode":59932,"grid":16},"attrs":[],"properties":{"id":154,"order":1064,"ligatures":"","prevSize":32,"code":59932,"name":"play3"},"setIdx":1,"setId":1,"iconIdx":162},{"icon":{"paths":["M128 128h320v768h-320zM576 128h320v768h-320z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pause2"],"defaultCode":59933,"grid":16},"attrs":[],"properties":{"id":155,"order":1065,"ligatures":"","prevSize":32,"code":59933,"name":"pause2"},"setIdx":1,"setId":1,"iconIdx":163},{"icon":{"paths":["M128 128h768v768h-768z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["stop2"],"defaultCode":59934,"grid":16},"attrs":[],"properties":{"id":156,"order":1066,"ligatures":"","prevSize":32,"code":59934,"name":"stop2"},"setIdx":1,"setId":1,"iconIdx":164},{"icon":{"paths":["M128 896v-768h128v352l320-320v320l320-320v704l-320-320v320l-320-320v352z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["first"],"defaultCode":59937,"grid":16},"attrs":[],"properties":{"id":157,"order":1067,"ligatures":"","prevSize":32,"code":59937,"name":"first"},"setIdx":1,"setId":1,"iconIdx":165},{"icon":{"paths":["M960 619.148v84.852h-84.852l-107.148-107.148-107.148 107.148h-84.852v-84.852l107.148-107.148-107.148-107.148v-84.852h84.852l107.148 107.148 107.148-107.148h84.852v84.852l-107.148 107.148 107.148 107.148zM416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["volume-mute2"],"defaultCode":59946,"grid":16},"attrs":[],"properties":{"id":158,"order":1068,"ligatures":"","prevSize":32,"code":59946,"name":"volume-mute2"},"setIdx":1,"setId":1,"iconIdx":166},{"icon":{"paths":["M1024 576h-192v192h-128v-192h-192v-128h192v-192h128v192h192v128zM416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["volume-increase"],"defaultCode":59947,"grid":16},"attrs":[],"properties":{"id":159,"order":1069,"ligatures":"","prevSize":32,"code":59947,"name":"volume-increase"},"setIdx":1,"setId":1,"iconIdx":167},{"icon":{"paths":["M512 448h512v128h-512v-128zM416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["volume-decrease"],"defaultCode":59948,"grid":16},"attrs":[],"properties":{"id":160,"order":1070,"ligatures":"","prevSize":32,"code":59948,"name":"volume-decrease"},"setIdx":1,"setId":1,"iconIdx":168},{"icon":{"paths":["M512 32l-480 480h288v512h384v-512h288z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-up"],"defaultCode":59954,"grid":16},"attrs":[],"properties":{"id":161,"order":1071,"ligatures":"","prevSize":32,"code":59954,"name":"arrow-up"},"setIdx":1,"setId":1,"iconIdx":169},{"icon":{"paths":["M992 512l-480-480v288h-512v384h512v288z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-right"],"defaultCode":59956,"grid":16},"attrs":[],"properties":{"id":162,"order":1072,"ligatures":"","prevSize":32,"code":59956,"name":"arrow-right"},"setIdx":1,"setId":1,"iconIdx":170},{"icon":{"paths":["M512 992l480-480h-288v-512h-384v512h-288z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-down"],"defaultCode":59958,"grid":16},"attrs":[],"properties":{"id":163,"order":1073,"ligatures":"","prevSize":32,"code":59958,"name":"arrow-down"},"setIdx":1,"setId":1,"iconIdx":171},{"icon":{"paths":["M32 512l480 480v-288h512v-384h-512v-288z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-left"],"defaultCode":59960,"grid":16},"attrs":[],"properties":{"id":164,"order":1074,"ligatures":"","prevSize":32,"code":59960,"name":"arrow-left"},"setIdx":1,"setId":1,"iconIdx":172},{"icon":{"paths":["M621.254 877.254l320-320c24.994-24.992 24.994-65.516 0-90.51l-320-320c-24.994-24.992-65.516-24.992-90.51 0-24.994 24.994-24.994 65.516 0 90.51l210.746 210.746h-613.49c-35.346 0-64 28.654-64 64s28.654 64 64 64h613.49l-210.746 210.746c-12.496 12.496-18.744 28.876-18.744 45.254s6.248 32.758 18.744 45.254c24.994 24.994 65.516 24.994 90.51 0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-right2"],"defaultCode":59964,"grid":16},"attrs":[],"properties":{"id":165,"order":1075,"ligatures":"","prevSize":32,"code":59964,"name":"arrow-right2"},"setIdx":1,"setId":1,"iconIdx":173},{"icon":{"paths":["M402.746 877.254l-320-320c-24.994-24.992-24.994-65.516 0-90.51l320-320c24.994-24.992 65.516-24.992 90.51 0 24.994 24.994 24.994 65.516 0 90.51l-210.746 210.746h613.49c35.346 0 64 28.654 64 64s-28.654 64-64 64h-613.49l210.746 210.746c12.496 12.496 18.744 28.876 18.744 45.254s-6.248 32.758-18.744 45.254c-24.994 24.994-65.516 24.994-90.51 0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-left2"],"defaultCode":59968,"grid":16},"attrs":[],"properties":{"id":166,"order":1076,"ligatures":"","prevSize":32,"code":59968,"name":"arrow-left2"},"setIdx":1,"setId":1,"iconIdx":174},{"icon":{"paths":["M0 512c0 282.77 229.23 512 512 512s512-229.23 512-512-229.23-512-512-512-512 229.23-512 512zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416 186.25-416 416-416 416 186.25 416 416zM706.744 669.256l90.512-90.512-285.256-285.254-285.254 285.256 90.508 90.508 194.746-194.744z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["circle-up"],"defaultCode":59969,"grid":16},"attrs":[],"properties":{"id":167,"order":1077,"ligatures":"","prevSize":32,"code":59969,"name":"circle-up"},"setIdx":1,"setId":1,"iconIdx":175},{"icon":{"paths":["M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM354.744 706.744l90.512 90.512 285.254-285.256-285.256-285.254-90.508 90.508 194.744 194.746z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["circle-right"],"defaultCode":59970,"grid":16},"attrs":[],"properties":{"id":168,"order":1078,"ligatures":"","prevSize":32,"code":59970,"name":"circle-right"},"setIdx":1,"setId":1,"iconIdx":176},{"icon":{"paths":["M1024 512c0-282.77-229.23-512-512-512s-512 229.23-512 512 229.23 512 512 512 512-229.23 512-512zM96 512c0-229.75 186.25-416 416-416s416 186.25 416 416-186.25 416-416 416-416-186.25-416-416zM317.256 354.744l-90.512 90.512 285.256 285.254 285.254-285.256-90.508-90.508-194.746 194.744z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["circle-down"],"defaultCode":59971,"grid":16},"attrs":[],"properties":{"id":169,"order":1079,"ligatures":"","prevSize":32,"code":59971,"name":"circle-down"},"setIdx":1,"setId":1,"iconIdx":177},{"icon":{"paths":["M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM669.256 317.256l-90.512-90.512-285.254 285.256 285.256 285.254 90.508-90.508-194.744-194.746z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["circle-left"],"defaultCode":59972,"grid":16},"attrs":[],"properties":{"id":170,"order":1080,"ligatures":"","prevSize":32,"code":59972,"name":"circle-left"},"setIdx":1,"setId":1,"iconIdx":178},{"icon":{"paths":["M192 64v768h768v-768h-768zM896 768h-640v-640h640v640zM128 896v-672l-64-64v800h800l-64-64h-672zM352 256l160 160-192 192 96 96 192-192 160 160v-416z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["new-tab"],"defaultCode":60030,"grid":16},"attrs":[],"properties":{"id":171,"order":1081,"ligatures":"","prevSize":32,"code":60030,"name":"new-tab"},"setIdx":1,"setId":1,"iconIdx":179}],"height":1024,"metadata":{"name":"smoosic"},"preferences":{"showGlyphs":true,"showCodes":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"smoosic","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":0},"embed":false,"noie8":true,"ie7":false,"showSelector":false,"showMetrics":true,"showMetadata":false,"autoHost":true},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"name":"icomoon","classSelector":".icon","autoHost":true},"historySize":50,"gridSize":16,"showGrid":true,"showLiga":false,"quickUsageToken":{"UntitledProject2":"YzliMDc2YTQ4ZmNkZGFjMzc1YjRhMTc2OGYyYTk4MjUjMSMxNjMzNzk1NTIwIyMjYmI5MzZhMWEzMjY0"}}} \ No newline at end of file +{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M287.355 0.15c-32.594 0.958-62.646 6.457-86.587 15.302-31.921 11.793-52.787 29.548-67.935 50.101s-24.655 43.903-29.397 55.528c-2.371 5.813-3.623 8.949-7.031 27.138s-9.032 51.598-20.274 118.425c-22.484 133.655-67.453 400.941-74.957 549.305-3.752 74.182 1.841 118.62 11.777 146.503s24.487 39.285 37.857 46.689c13.37 7.404 26.116 11.199 45.118 13.041s44.328 1.825 83.675 1.825c78.694 0 213.597 0.001 289.297 0 37.85-0 60.924 0.028 77.243-2.206s25.916-6.966 35.488-15.874c9.572-8.908 19.721-22.37 26.789-51.974s11.182-75.454 8.93-149.608c-4.505-148.306-33.983-405.376-64.664-556.176-15.339-75.393-29.617-120.76-45.561-150.65s-33.723-44.322-55.412-57.333c-43.384-26.025-85.896-36.508-131.042-39.436-11.297-0.733-22.449-0.919-33.313-0.599zM287.539 3.562c10.67-0.316 21.623-0.141 32.724 0.579 44.448 2.883 85.83 13.064 128.545 38.687 21.36 12.814 38.325 26.503 54.029 55.944s29.976 74.617 45.293 149.901c30.631 150.554 60.111 407.693 64.609 555.754 2.249 74.029-1.876 119.7-8.856 148.934s-16.695 41.921-25.858 50.448c-9.163 8.527-17.187 12.515-32.724 14.641s-38.555 2.158-76.404 2.159c-75.699 0.001-210.602 0-289.297 0-39.347 0-64.604-0.014-83.076-1.805s-30.088-5.263-42.953-12.387c-12.864-7.124-26.423-17.513-36.161-44.837s-15.382-71.504-11.639-145.508c7.486-148.009 52.446-415.35 74.93-549.005 11.242-66.827 16.867-100.246 20.265-118.378s4.513-20.808 6.884-26.62c4.742-11.625 14.195-34.763 29.028-54.888s34.965-37.236 65.954-48.684c23.242-8.587 52.698-13.985 84.707-14.934z","M287.355 28.595c-29.737 0.896-57.154 6.038-78.996 14.307-29.123 11.027-48.159 27.628-61.979 46.845s-22.493 41.050-26.82 51.919c-2.163 5.435-3.305 8.367-6.415 25.374s-8.24 48.244-18.496 110.728c-20.513 124.968-61.539 374.883-68.386 513.604-3.423 69.361 1.679 110.911 10.745 136.981s22.34 36.732 34.538 43.655c12.197 6.923 23.827 10.471 41.163 12.194s40.442 1.706 76.339 1.706c71.795 0 194.871 0.001 263.933 0 34.531-0 55.582 0.024 70.471-2.063s23.644-6.513 32.377-14.842c8.733-8.329 17.992-20.916 24.44-48.596s10.202-70.55 8.147-139.885c-4.11-138.667-31.004-379.030-58.995-520.029-13.994-70.493-27.020-112.911-41.566-140.859s-30.766-41.442-50.554-53.607c-39.581-24.334-78.365-34.135-119.553-36.873-10.307-0.685-20.481-0.859-30.393-0.56zM287.523 31.785c9.734-0.296 19.727-0.132 29.855 0.541 40.551 2.696 78.305 12.215 117.275 36.173 19.488 11.981 34.965 24.78 49.293 52.308s27.348 69.767 41.322 140.158c27.945 140.769 54.841 381.196 58.944 519.634 2.052 69.218-1.712 111.921-8.080 139.254s-15.231 39.196-23.591 47.169c-8.36 7.973-15.68 11.702-29.855 13.69s-35.174 2.018-69.706 2.018c-69.063 0.001-192.139 0-263.933 0-35.897 0-58.94-0.014-75.793-1.687s-27.45-4.921-39.187-11.582c-11.736-6.661-24.107-16.375-32.991-41.923s-14.034-66.857-10.619-136.051c6.83-138.389 47.848-388.356 68.361-513.324 10.256-62.484 15.388-93.731 18.488-110.684s4.117-19.455 6.28-24.89c4.326-10.87 12.95-32.504 26.483-51.321s31.899-34.816 60.172-45.52c21.204-8.028 48.077-13.076 77.281-13.964z","M93.464 1017.357c-19.551-2.35-35.714-8.775-49.475-19.666-59.208-46.86-50.908-201.562 39.648-738.948 10.575-62.754 21.257-121.037 23.738-129.518 5.667-19.373 24.784-55.067 37.294-69.633 31.39-36.55 82.501-54.565 154.125-54.324 53.522 0.18 88.216 7.759 129.844 28.365 54.314 26.886 76.184 56.714 98.728 134.653 44.296 153.144 93.097 577.787 82.855 720.969-4.593 64.214-12.743 92.609-32.248 112.36-17.538 17.759-2.246 16.72-251.144 17.063-120.917 0.167-225.931-0.428-233.364-1.321zM537.22 981.605c21.655-7.495 36.981-29.483 45.301-64.995 15.055-64.258 3.774-280.933-25.741-494.429-25.008-180.894-49.236-279.661-78.671-320.711-23.386-32.613-76.253-60.845-130.669-69.779-22.472-3.69-72.704-4.174-94.98-0.915-41.332 6.046-81.552 26.034-100.885 50.136-25.693 32.030-34.96 57.87-47.559 132.601-55.93 331.756-79.039 511.687-79.078 615.723-0.022 59.061 3.353 83.007 15.562 110.415 10.563 23.712 34.983 40.45 65.135 44.645 7.231 1.006 104.776 1.684 216.766 1.507 193.041-0.305 204.201-0.524 214.819-4.198z","M284.099 233.286c-26.122-2.431-72.026 5.933-101.703 11.144-14.838 2.605-26.471 4.393-34.667 9.516-4.097 2.561-7.143 6.15-8.481 10.562s-1.137 9.518 0.326 15.715c5.891 24.967 35.166 74.555 62.823 97.085 28.134 22.919 67.507 16.388 86.44-5.214 9.554-10.901 15.394-27.607 19.332-45.040s5.775-35.533 6.347-48.834c0.571-13.28 0.273-23.393-4.051-31.221s-13.326-12.5-26.366-13.714zM283.050 240.89c11.199 1.042 15.93 3.74 18.988 9.277s3.795 14.79 3.237 27.771c-0.557 12.959-2.4 30.798-6.221 47.714s-9.831 32.959-17.722 41.962c-15.958 18.208-47.911 24.214-72.425 4.243-24.992-20.359-55.079-71.159-60.255-93.097-1.305-5.529-1.297-9.554-0.434-12.399s2.406-4.635 5.1-6.319c5.388-3.368 16.157-5.521 30.996-8.127 29.677-5.211 76.379-13.105 98.737-11.025z","M221.569 378.297c-5.39-2.602-12.708-7.467-16.262-10.81-10.763-10.126-26.613-31.346-37.6-50.338-13.994-24.189-18.691-36.326-17.979-46.453 0.56-7.967 0.814-8.289 9.262-11.728 13.35-5.435 93.054-17.893 114.843-17.951 13.037-0.031 22.011 2.843 26.296 8.43 3.616 4.716 3.831 6.99 2.966 31.392-1.382 38.965-9.894 71.464-22.479 85.814-9.502 10.835-19.523 15.312-35.562 15.885-12.26 0.438-14.705-0.003-23.486-4.242z","M178.449 709.533h261.502v156.901h-261.502v-156.901z","M179.637 129.454l33.679-12.659 126.339 661.442-33.679 12.659-126.339-661.442z","M287.355 28.595c-29.069 0.883-55.872 5.948-77.223 14.095-28.469 10.863-47.079 27.218-60.589 46.15s-21.989 40.441-26.218 51.149c-2.115 5.354-3.231 8.243-6.271 24.997s-8.055 47.529-18.081 109.086c-20.052 123.114-60.159 369.321-66.851 505.984-3.346 68.332 1.642 109.265 10.504 134.949s21.839 36.187 33.763 43.007c11.924 6.82 23.292 10.316 40.239 12.013s39.534 1.681 74.626 1.681c70.184 0 190.498 0.001 258.011 0 33.756-0 54.335 0.026 68.89-2.032s23.113-6.416 31.65-14.622c8.537-8.206 17.588-20.605 23.892-47.875s9.973-69.503 7.964-137.809c-4.018-136.61-30.308-373.407-57.671-512.314-13.68-69.447-26.414-111.236-40.633-138.769s-30.076-40.827-49.419-52.812c-38.693-23.973-76.607-33.629-116.871-36.326-10.076-0.675-20.021-0.846-29.711-0.552zM287.519 31.738c9.516-0.291 19.284-0.13 29.185 0.533 39.641 2.656 76.548 12.034 114.643 35.636 19.050 11.803 34.181 24.413 48.187 51.532s26.735 68.732 40.395 138.079c27.318 138.681 53.61 375.541 57.622 511.925 2.006 68.191-1.673 110.26-7.898 137.188s-14.889 38.615-23.062 46.47c-8.172 7.855-15.328 11.528-29.185 13.487s-34.385 1.988-68.142 1.989c-67.513 0.001-187.827 0-258.011 0-35.092 0-57.618-0.013-74.092-1.662s-26.835-4.848-38.308-11.41c-11.473-6.562-23.566-16.132-32.25-41.301s-13.719-65.865-10.38-134.033c6.677-136.336 46.774-382.594 66.827-505.708 10.026-61.557 15.043-92.341 18.073-109.042s4.025-19.167 6.139-24.521c4.229-10.708 12.66-32.021 25.889-50.56s31.184-34.299 58.822-44.845c20.729-7.909 46.999-12.882 75.547-13.756z","M287.355 54.797c-26.521 0.825-50.973 5.561-70.453 13.179-25.973 10.157-42.951 25.449-55.277 43.15s-20.061 37.813-23.919 47.825c-1.929 5.006-2.948 7.708-5.721 23.373s-7.349 44.44-16.496 101.996c-18.294 115.113-54.884 345.318-60.99 473.099-3.053 63.891 1.498 102.164 9.583 126.178s19.924 33.835 30.803 40.212c10.878 6.377 21.25 9.646 36.711 11.232s36.068 1.572 68.084 1.572c64.031 0 173.797 0.001 235.391 0 30.797-0 49.572 0.022 62.85-1.9s21.087-5.999 28.876-13.672c7.789-7.672 16.046-19.266 21.797-44.763s9.099-64.986 7.266-128.853c-3.666-127.731-27.651-349.138-52.615-479.017-12.481-64.934-24.098-104.006-37.071-129.75s-27.439-38.173-45.087-49.379c-35.3-22.415-69.891-31.443-106.624-33.965-9.192-0.631-18.266-0.791-27.106-0.516zM287.505 57.736c8.682-0.272 17.594-0.122 26.626 0.499 36.166 2.483 69.837 11.252 104.592 33.32 17.38 11.036 31.184 22.826 43.962 48.183s24.391 64.265 36.854 129.105c24.923 129.667 48.91 351.133 52.57 478.654 1.83 63.759-1.527 103.094-7.206 128.272s-13.584 36.105-21.040 43.449c-7.456 7.344-13.984 10.779-26.626 12.61s-31.371 1.859-62.168 1.859c-61.594 0.001-171.36 0-235.391 0-32.015 0-52.566-0.013-67.596-1.554s-24.482-4.533-34.949-10.669c-10.467-6.136-21.5-15.083-29.423-38.616s-12.516-61.584-9.47-125.322c6.091-127.475 42.674-357.728 60.968-472.841 9.147-57.556 13.724-86.339 16.489-101.955s3.672-17.921 5.601-22.927c3.858-10.012 11.55-29.94 23.619-47.274s28.45-32.070 53.665-41.93c18.911-7.395 42.878-12.045 68.923-12.862z","M114.432 965.581c-17.437-2.165-31.852-8.083-44.124-18.115-52.805-43.165-45.402-185.666 35.361-680.671 9.431-57.805 18.958-111.492 21.171-119.303 5.054-17.845 22.104-50.724 33.261-64.141 27.996-33.668 73.579-50.262 137.457-50.040 47.734 0.166 78.676 7.147 115.802 26.128 48.441 24.765 67.945 52.241 88.051 124.033 39.506 141.067 83.029 532.22 73.895 664.111-4.096 59.149-11.365 85.306-28.761 103.498-15.642 16.358-2.003 15.401-223.985 15.717-107.841 0.154-201.498-0.394-208.127-1.217zM510.199 932.649c19.313-6.904 32.982-27.157 40.402-59.869 13.427-59.191 3.366-258.777-22.957-455.436-22.303-166.628-43.911-257.606-70.164-295.418-20.857-30.041-68.007-56.046-116.538-64.276-20.042-3.399-64.842-3.845-84.708-0.843-36.862 5.569-72.732 23.981-89.975 46.182-22.914 29.504-31.18 53.306-42.416 122.144-49.882 305.593-70.492 471.333-70.526 567.165-0.020 54.403 2.99 76.461 13.879 101.707 9.421 21.842 31.2 37.26 58.092 41.124 6.449 0.927 93.445 1.551 193.325 1.388 172.165-0.281 182.118-0.482 191.587-3.867z","M294.225 37.205c1.499-0.157 3.952-0.157 5.451 0s0.273 0.285-2.726 0.285c-2.998 0-4.225-0.128-2.726-0.285z","M120.69 981.318c-18.434-1.33-29.675-3.967-41.43-9.719-21.759-10.646-33.624-26.573-41.091-55.16-6.325-24.213-9.282-60.603-8.16-100.437l0.553-19.625 0.46 29.437c0.473 30.266 1.491 44.807 4.274 61.055 7.265 42.411 21.172 63.56 49.983 76.016 7.672 3.317 17.364 5.736 29.361 7.327 8.997 1.193 22.744 1.303 193.215 1.541 187.284 0.262 201.060 0.104 214.612-2.467 18.372-3.485 31.836-14.159 41.525-32.92 23.553-45.603 24.543-155.75 3.304-367.494-10.542-105.1-27.954-229.412-42.098-300.563-1.62-8.151-2.815-15.163-2.656-15.582 0.532-1.394 1.135 1.268 5.181 22.861 23.798 126.994 46.442 319.133 54.137 459.368 2.357 42.963 3.020 98.926 1.481 125.018-2.502 42.408-8.621 72.432-18.368 90.129-5.85 10.621-15.361 20.452-24.011 24.819-5.438 2.745-9.344 3.93-18.095 5.49-6.185 1.102-23.555 1.219-200.477 1.344-106.538 0.075-197.303-0.123-201.7-0.44z","M149.271 968.276c-35.905-0.56-50.239-2.764-65.144-10.017-11.498-5.595-20.172-12.596-26.251-21.19-13.289-18.786-20.389-48.998-22.192-94.44-0.286-7.198-0.338-32.861-0.085-42.103l0.17-6.209h1.284l-0.17 5.204c-1.954 59.726 3.113 100.601 15.551 125.429 5.586 11.15 12.266 19.041 22.056 26.051 10.846 7.767 25.36 13.11 39.96 14.711 6.838 0.75 85.73 1.291 187.081 1.282 108.547-0.010 180.646-0.437 196.011-1.163l3.533-0.167v1.039c0 0.765-0.119 1.076-0.45 1.179-0.247 0.077-7.215 0.257-15.483 0.401-17.178 0.298-316.714 0.291-335.872-0.007z","M146.444 982.394c-7.279-0.119-15.085-0.305-17.346-0.414s75.276-0.199 172.305-0.203c97.029-0.003 181.649-0.098 188.045-0.212 10.247-0.181 11.628-0.16 11.628 0.179 0 0.298-0.479 0.421-2.12 0.543-3.326 0.248-337.699 0.349-352.512 0.106z","M4.784 853.663c0.165-15.335 0.384-22.755 1.083-36.812 3.287-66.115 14.446-163.108 33.817-293.92l1.608-10.857h0.743c0.674 0 0.73 0.066 0.599 0.707-0.079 0.389-0.72 4.581-1.423 9.316-20.845 140.315-31.223 232.156-34.322 303.75-0.439 10.134-1.012 38.261-0.837 41.052l0.117 1.863h-1.547z","M35.911 791.217c0.087-1.661 0.331-6.547 0.542-10.857 2.551-52.087 11.043-130.62 24.676-228.198 2.461-17.612 5.494-38.848 5.643-39.511 0.156-0.69 1.149-0.815 1.149-0.145 0 0.238-1.21 8.883-2.69 19.209-14.931 104.218-23.513 180.071-26.981 238.493-0.401 6.747-1.164 22.016-1.166 23.321-0.001 0.589-0.112 0.707-0.666 0.707h-0.665z"],"attrs":[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}],"width":618,"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["metronome"]},"attrs":[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}],"properties":{"order":1123,"id":191,"name":"metronome4","prevSize":32,"code":59807},"setIdx":0,"setId":3,"iconIdx":0},{"icon":{"paths":["M149.908 634.417v40.958h42.117v-40.958h-21.633z","M143.583 614.067v81.558h722.675v-81.558h-681.9z","M865.717 290.183l-81.925 0.308 0.158 40.967 1.158 304.3 0.15 40.967 81.925-0.317-0.158-40.958-1.158-304.308z","M865.817 237.425l-40.883 0.267c-88.772 0.57-177.54 1.138-266.308 1.708-61.025 0.392-122.049 0.783-183.075 1.175-60.373 0.388-120.752 0.779-181.125 1.167l-40.883 0.258 0.525 81.775 40.883-0.267c60.373-0.388 120.752-0.771 181.125-1.158 61.026-0.392 122.050-0.791 183.075-1.183 88.768-0.57 177.537-1.138 266.308-1.708l40.883-0.258z","M137.892 259.458l-30.208 27.658 102.867 112.367 30.217-27.658-89.042-97.258z","M203.125 158.483l-108.258 121.883 30.625 27.2 108.258-121.883z","M152.2 280.017l-28.783 24.567 6.65 7.783 3.892-3.317 24.892-21.25z","M129.567 298.425l-7.192 7.283 3.642 3.6c7.716 7.617 8.942 9.892 19.708 19.175l3.875 3.342 6.692-7.75-3.875-3.342c-10.435-8.997-11.161-10.772-19.208-18.717z","M135.858 294.475l-0.283 24.15 91.217 1.042 0.283-24.142-79.15-0.908z"],"attrs":[{},{},{},{},{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":16,"tags":["enter2"]},"attrs":[{},{},{},{},{},{},{},{},{}],"properties":{"order":1109,"id":187,"name":"enter2","prevSize":32,"code":59802},"setIdx":0,"setId":3,"iconIdx":4},{"icon":{"paths":["M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 640c-70.692 0-128-57.306-128-128 0-70.692 57.308-128 128-128 70.694 0 128 57.308 128 128 0 70.694-57.306 128-128 128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["radio-checked","radio-button"],"defaultCode":59989,"grid":16},"attrs":[],"properties":{"ligatures":"radio-checked2, radio-button2","name":"radio-checked2","id":0,"order":1101,"prevSize":32,"code":59989},"setIdx":0,"setId":3,"iconIdx":10},{"icon":{"paths":["M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 896c-212.078 0-384-171.922-384-384s171.922-384 384-384c212.078 0 384 171.922 384 384s-171.922 384-384 384z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["radio-unchecked","radio-button","circle"],"defaultCode":59990,"grid":16},"attrs":[],"properties":{"ligatures":"radio-unchecked, radio-button3","name":"radio-unchecked","id":1,"order":1100,"prevSize":32,"code":59990},"setIdx":0,"setId":3,"iconIdx":11},{"icon":{"paths":["M896 128v832h-672c-53.026 0-96-42.98-96-96s42.974-96 96-96h608v-768h-640c-70.398 0-128 57.6-128 128v768c0 70.4 57.602 128 128 128h768v-896h-64z","M224.056 832v0c-0.018 0.002-0.038 0-0.056 0-17.672 0-32 14.326-32 32s14.328 32 32 32c0.018 0 0.038-0.002 0.056-0.002v0.002h607.89v-64h-607.89z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["book"],"grid":16},"attrs":[{},{}],"properties":{"order":1097,"id":2,"name":"book","prevSize":32,"code":59801},"setIdx":0,"setId":3,"iconIdx":12},{"icon":{"paths":["M108.164 929.093h155.45c14.231 0 25.179-13.137 32.842-21.894l629.463-788.198c4.379-6.568 7.663-10.947 7.663-16.421 0-4.379-3.284-7.663-9.852-7.663h-166.397c-9.852 0-17.516 9.852-28.463 24.084l-629.463 788.198c-3.284 3.284-4.379 7.663-4.379 10.947 0 6.568 4.379 10.947 13.137 10.947z"],"width":1028,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["slash"],"grid":16},"attrs":[{}],"properties":{"order":1096,"id":3,"name":"slash","prevSize":32,"code":59800},"setIdx":0,"setId":3,"iconIdx":13},{"icon":{"paths":["M664.2 572.62l-311.197-521.074-299.617 521.074z","M56.959 570.39c-1.722 134.014-3.541 268.035-5.412 402.063l75.003-0.574c1.871-134.029 3.69-268.049 5.412-402.063z"],"width":716,"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["notehead-triangleup"],"grid":16},"attrs":[{},{}],"properties":{"order":1095,"id":4,"name":"notehead-triangleup","prevSize":32,"code":59792},"setIdx":0,"setId":3,"iconIdx":14},{"icon":{"paths":["M66.726 374.982l284.674 286.358c5.053 5.053 6.738 5.053 11.791 5.053 1.684 0 6.738 0 11.791-5.053l286.358-288.043c3.369-3.369 5.053-8.422 5.053-11.791 0-5.053-1.684-10.107-5.053-13.476l-282.989-282.989c-3.369-3.369-8.422-5.053-15.16-5.053-5.053 0-11.791 1.684-15.16 5.053l-282.989 282.989c-5.053 5.053-5.053 8.422-5.053 13.476 0 3.369 1.684 8.422 6.738 13.476z","M70.438 364.048c-1.413 199.977-2.905 399.965-4.441 599.965l61.536-0.857c1.535-200 3.028-399.987 4.441-599.965z"],"width":726,"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["notehead-diamondblack"],"grid":16},"attrs":[{},{}],"properties":{"order":1092,"id":5,"name":"notehead-diamondblack","prevSize":32,"code":59794},"setIdx":0,"setId":3,"iconIdx":15},{"icon":{"paths":["M109.299 648.531c0 19.809 10.35 36.317 28.094 36.317 5.914 0 10.35-1.651 14.786-6.603l263.195-250.919 269.109 250.919c4.436 4.952 10.35 6.603 14.786 6.603 16.265 0 28.094-19.809 28.094-33.016 0-11.555-4.436-21.46-11.829-28.063l-252.844-236.062 252.844-237.713c7.393-4.952 11.829-16.508 11.829-26.413 0-18.159-14.786-33.016-28.094-33.016-4.436 0-10.35 1.651-14.786 4.952l-269.109 249.268-263.195-249.268c-4.436-3.301-10.35-4.952-17.743-4.952-14.786 0-25.137 16.508-25.137 31.365 0 8.254 4.436 21.46 10.35 28.063l254.323 237.713-254.323 236.062c-8.872 6.603-10.35 16.508-10.35 24.762z","M89.088 86.439c-1.23 284.097-2.529 568.21-3.866 852.339l53.575-1.217c1.337-284.13 2.636-568.241 3.866-852.339z"],"width":813,"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["notehead-xblack"],"grid":16},"attrs":[{},{}],"properties":{"order":1091,"id":6,"name":"notehead-xblack1","prevSize":32,"code":59797},"setIdx":0,"setId":3,"iconIdx":16},{"icon":{"paths":["M62.886 376.615c0 172.925 141.484 314.41 312.663 314.41 172.925 0 314.41-141.484 314.41-314.41s-141.484-314.41-314.41-314.41c-171.179 0-312.663 141.484-312.663 314.41zM183.41 229.891l143.231 144.978-144.978 148.471c-33.188-41.921-48.908-94.323-48.908-146.725 0-55.895 17.467-104.803 50.655-146.725zM377.296 423.777l143.231 146.725c-40.175 29.694-90.83 47.161-144.978 47.161s-103.057-17.467-146.725-47.161zM427.951 374.868l143.231-144.978c27.948 41.921 45.415 94.323 45.415 146.725s-15.72 103.057-43.668 143.231zM375.549 135.568c54.148 0 103.057 17.467 143.231 45.415l-141.484 143.231-143.231-143.231c40.175-27.948 87.336-45.415 141.484-45.415z","M66.757 339.647c-1.465 207.369-3.013 414.749-4.605 622.141l63.81-0.888c1.592-207.392 3.14-414.772 4.605-622.141z"],"width":752,"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["notehead-circlex"],"grid":16},"attrs":[{},{}],"properties":{"order":1088,"id":7,"name":"notehead-circlex","prevSize":32,"code":59799},"setIdx":0,"setId":3,"iconIdx":17},{"icon":{"paths":["M522.421 150.455v723.244c0 26.26 10.942 31.731 25.166 31.731h144.43c16.412 0 27.354-5.471 27.354-31.731v-723.244c0-27.354-10.942-31.731-27.354-31.731h-144.43c-14.224 0-25.166 4.379-25.166 31.731zM143.84 905.43h145.524c15.318 0 26.26-5.471 26.26-31.731v-723.244c0-27.354-10.942-31.731-26.26-31.731h-145.524c-14.224 0-25.166 4.377-25.166 31.731v723.244c0 26.26 10.942 31.731 25.166 31.731z"],"width":838,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["percussion"],"grid":16},"attrs":[{}],"properties":{"order":1086,"id":8,"name":"percussion","prevSize":32,"code":59798},"setIdx":0,"setId":3,"iconIdx":18},{"icon":{"paths":["M112 866.931c0 26.957 15.725 49.421 42.682 49.421 8.986 0 15.725-2.246 22.464-8.986l399.859-341.453 408.845 341.453c6.739 6.739 15.725 8.986 22.464 8.986 24.71 0 42.682-26.957 42.682-44.928 0-15.725-6.739-29.203-17.971-38.189l-384.134-321.235 384.134-323.482c11.232-6.739 17.971-22.464 17.971-35.942 0-24.71-22.464-44.928-42.682-44.928-6.739 0-15.725 2.246-22.464 6.739l-408.845 339.206-399.859-339.206c-6.739-4.493-15.725-6.739-26.957-6.739-22.464 0-38.189 22.464-38.189 42.682 0 11.232 6.739 29.203 15.725 38.189l386.381 323.482-386.381 321.235c-13.478 8.986-15.725 22.464-15.725 33.696z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["notehead-xblack"],"grid":16},"attrs":[{}],"properties":{"order":1082,"id":9,"name":"notehead-xblack","prevSize":32,"code":59796},"setIdx":0,"setId":3,"iconIdx":19},{"icon":{"paths":["M336.247 643.977c3.903 0 9.758 0 10.734 0 0 0 0.976 0 0.976 0s5.855 0 10.734 0c87.82 3.992 139.536 51.096 139.536 110.175 0 28.741-11.709 61.474-40.983 92.611-55.619 61.474-146.367 95.006-225.405 95.006-61.474 0-114.166-19.959-139.536-60.676-7.806-15.967-11.709-31.136-11.709-47.902 0-87.022 119.045-183.625 255.654-189.213z","M399.213 173.203h96.951v609.503h-96.951v-609.503z","M559.755 185.916c5.139 0 12.848-3.875 24.84-11.626 16.275-11.626 24.84-22.478 47.967-22.478 28.266 0 59.103 30.228 77.947 48.055 0.858 0.775 3.426 2.325 5.139 3.875l3.426 3.875c22.271 22.478 60.816 61.232 98.504 61.232 75.377 0 111.353-79.059 112.209-90.685 0-3.1 1.712-5.426 1.712-8.526 0-5.426-1.712-10.076-6.852-10.076-3.426 0-8.566 3.1-14.561 8.526-22.271 17.827-39.402 27.903-62.529 27.903-23.984 0-41.971-20.927-63.385-45.73l-3.426-3.875c-22.271-24.803-72.807-67.433-103.644-67.433-70.238 0-114.779 79.059-118.205 86.035-2.57 6.976-4.283 12.401-4.283 15.502 0 4.651 2.57 5.426 5.139 5.426z","M997.107 643.977c3.903 0 9.758 0 10.734 0 0 0 0.976 0 0.976 0s5.855 0 10.734 0c87.82 3.992 139.536 51.096 139.536 110.175 0 28.741-11.709 61.474-40.983 92.611-55.619 61.474-146.367 95.006-225.405 95.006-61.474 0-114.166-19.959-139.536-60.676-7.806-15.967-11.709-31.136-11.709-47.902 0-87.022 119.045-183.625 255.654-189.213z","M1060.073 173.203h96.951v609.503h-96.951v-609.503z"],"width":1240,"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["smear"],"grid":16},"attrs":[{},{},{},{},{}],"properties":{"order":910,"id":10,"name":"smear","prevSize":32,"code":59790},"setIdx":0,"setId":3,"iconIdx":20},{"icon":{"paths":["M302.553 695.35c3.512 0 8.78 0 9.658 0 0 0 0.879 0 0.879 0s5.268 0 9.658 0c79.020 3.592 125.554 45.976 125.554 99.135 0 25.861-10.536 55.314-36.876 83.331-50.046 55.314-131.7 85.486-202.818 85.486-55.314 0-102.726-17.959-125.554-54.596-7.024-14.367-10.536-28.016-10.536-43.102 0-78.302 107.116-165.225 230.036-170.253z","M359.21 271.749h87.236v548.428h-87.236v-548.428z","M518.898 367.488c10.019 0 17.727-6.974 17.727-16.041v-218.99l356.076 232.241c3.854 2.092 6.937 2.79 11.561 2.79 5.395 0 10.019-2.092 13.873-6.277 2.313-2.79 3.854-5.579 3.854-9.066 0-4.882-3.854-9.764-7.707-13.948l-385.364-251.072c-2.313-2.092-6.937-2.79-10.019-2.79-8.478 0-17.727 7.672-17.727 16.041v251.072c0 9.066 7.707 16.041 17.727 16.041z","M940.702 695.002c3.512 0 8.78 0 9.658 0 0 0 0.879 0 0.879 0s5.268 0 9.658 0c79.020 3.592 125.554 45.976 125.554 99.135 0 25.861-10.536 55.314-36.876 83.331-50.046 55.314-131.7 85.486-202.818 85.486-55.314 0-102.726-17.959-125.554-54.596-7.024-14.367-10.536-28.016-10.536-43.102 0-78.302 107.116-165.225 230.036-170.253z","M997.359 271.402h87.236v548.428h-87.236v-548.428z"],"width":1159,"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["flip"],"grid":16},"attrs":[{},{},{},{},{}],"properties":{"order":911,"id":11,"name":"flip","prevSize":32,"code":59791},"setIdx":0,"setId":3,"iconIdx":21},{"icon":{"paths":["M357.527 86.38c4.15 0 10.375 0 11.413 0 0 0 1.038 0 1.038 0s6.225 0 11.413 0c93.378 4.244 148.367 54.329 148.367 117.147 0 30.56-12.45 65.365-43.576 98.472-59.139 65.365-155.63 101.018-239.67 101.018-65.365 0-121.391-21.222-148.367-64.516-8.3-16.978-12.45-33.107-12.45-50.934 0-92.529 126.579-195.246 271.834-201.188z","M92.31 290.168h103.087v648.076h-103.087v-648.076z","M594.804 129.37c4.265 0 9.748 6.48 9.748 11.016 1.828 11.664 4.265 20.736 13.403 29.809 18.887 20.736 50.567-2.592 85.903 33.697 10.966 12.312 16.45 29.161 16.45 46.009 0 5.184-0.61 10.368-1.828 15.552 1.828 9.72 4.265 16.848 12.185 25.273 19.496 20.736 51.177-2.592 85.903 33.697 11.576 12.312 17.059 29.161 17.059 46.009 0 5.184-1.218 9.72-1.828 15.552 1.828 9.072 4.265 16.848 12.185 25.273 19.496 20.736 51.177-2.592 85.903 33.697 11.576 11.664 17.059 28.513 17.059 45.361 0 5.832-1.218 10.368-1.828 16.2 1.828 9.072 4.265 16.848 12.185 25.273 19.496 20.088 50.567-1.944 85.903 33.049 11.576 12.312 16.45 29.161 16.45 46.009 0 5.832-0.61 10.368-1.828 16.2 1.828 9.072 4.874 16.2 12.794 24.624 18.887 20.736 50.567-1.296 85.903 33.697 10.966 12.312 16.45 29.161 16.45 46.009 0 5.184-0.61 10.368-1.828 15.552 1.828 9.72 4.265 16.848 12.185 25.273 19.496 20.736 51.177-1.944 85.903 34.345 12.794 13.608 17.059 29.161 17.059 46.009 0 29.809-14.013 58.969-18.277 67.393-1.828 1.944-1.828 2.592-1.828 3.24-1.218 1.296-3.046 1.296-3.655 1.296-4.265 0-7.311-9.72-7.311-12.96v-3.888c0-9.072 0-18.792-4.874-23.976-1.218-1.944-3.046-3.888-5.483-5.184-25.588-18.144-63.971-10.368-85.903-33.697-14.013-14.904-18.277-31.105-18.277-46.657 0-5.184 0.61-11.016 1.828-16.2 0-7.776-1.218-14.256-5.483-20.088l-5.483-3.24c-24.979-18.792-63.971-10.368-85.903-33.697-14.013-14.904-18.277-31.753-18.277-46.657 0-5.832 0.61-11.664 1.828-16.848 0-7.776-1.218-14.256-5.483-19.44l-4.874-5.184c-25.588-17.496-63.971-9.072-85.903-32.401-14.622-14.904-18.887-31.753-18.887-46.657 0-5.832 1.218-11.016 1.828-16.848 0-7.128-0.61-14.904-4.874-19.44l-5.483-4.536c-25.588-18.144-63.971-9.72-85.903-33.049-14.013-14.904-18.277-31.753-18.277-46.657 0-5.184 0.61-11.016 1.218-16.848 0-7.128-0.61-14.904-4.874-19.44l-5.483-4.536c-25.588-18.144-63.971-9.72-85.903-33.049-14.013-14.904-18.277-31.753-18.277-46.657 0-5.184 0.61-11.016 1.828-16.2 0-7.776-1.218-15.552-5.483-20.088-1.828-0.648-3.655-2.592-5.483-4.536-24.979-17.496-63.971-9.072-85.903-32.401-14.013-14.904-18.277-31.105-18.277-46.657 0-10.368 8.529-67.393 20.105-67.393z"],"width":1372,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["drop-long"],"grid":16},"attrs":[{},{},{}],"properties":{"order":912,"id":12,"name":"drop-long","prevSize":32,"code":59782},"setIdx":0,"setId":3,"iconIdx":22},{"icon":{"paths":["M351.565 628.718c4.081 0 10.202 0 11.223 0 0 0 1.021 0 1.021 0s6.121 0 11.223 0c91.821 4.174 145.893 53.423 145.893 115.194 0 30.051-12.243 64.275-42.85 96.829-58.153 64.275-153.034 99.334-235.673 99.334-64.274 0-119.367-20.868-145.893-63.44-8.162-16.695-12.243-32.555-12.243-50.084 0-90.986 124.468-191.989 267.3-197.833z","M413.461 85.34h101.368v637.268h-101.368v-637.268z","M600.623 909.774c4.194 0 9.585-6.372 9.585-10.832 1.798-11.47 4.194-20.391 13.18-29.311 18.572-20.391 49.724 2.549 84.471-33.135 10.784-12.107 16.175-28.674 16.175-45.242 0-5.098-0.6-10.195-1.798-15.293 1.798-9.558 4.194-16.567 11.982-24.851 19.171-20.391 50.323 2.549 84.471-33.135 11.383-12.107 16.774-28.674 16.774-45.242 0-5.098-1.198-9.558-1.798-15.293 1.798-8.921 4.194-16.567 11.982-24.851 19.171-20.391 50.323 2.549 84.471-33.135 11.383-11.47 16.774-28.037 16.774-44.604 0-5.735-1.198-10.195-1.798-15.93 1.798-8.921 4.194-16.567 11.982-24.851 19.171-19.753 49.724 1.912 84.471-32.497 11.383-12.107 16.175-28.674 16.175-45.242 0-5.735-0.6-10.195-1.798-15.93 1.798-8.921 4.793-15.93 12.581-24.214 18.572-20.391 49.724 1.274 84.471-33.135 10.784-12.107 16.175-28.674 16.175-45.242 0-5.098-0.6-10.195-1.798-15.293 1.798-9.558 4.194-16.567 11.982-24.851 19.171-20.391 50.323 1.912 84.471-33.772 12.581-13.381 16.774-28.674 16.774-45.242 0-29.311-13.779-57.986-17.973-66.269-1.798-1.912-1.798-2.549-1.798-3.186-1.198-1.274-2.995-1.274-3.595-1.274-4.194 0-7.189 9.558-7.189 12.744v3.823c0 8.921 0 18.479-4.793 23.577-1.198 1.912-2.995 3.823-5.392 5.098-25.162 17.842-62.904 10.195-84.471 33.135-13.779 14.656-17.973 30.586-17.973 45.879 0 5.098 0.6 10.832 1.798 15.93 0 7.646-1.198 14.019-5.392 19.753l-5.392 3.186c-24.562 18.479-62.904 10.195-84.471 33.135-13.779 14.656-17.973 31.223-17.973 45.879 0 5.735 0.6 11.47 1.798 16.567 0 7.646-1.198 14.019-5.392 19.116l-4.793 5.098c-25.162 17.205-62.904 8.921-84.471 31.86-14.378 14.656-18.572 31.223-18.572 45.879 0 5.735 1.198 10.832 1.798 16.567 0 7.009-0.6 14.656-4.793 19.116l-5.392 4.46c-25.162 17.842-62.904 9.558-84.471 32.497-13.779 14.656-17.973 31.223-17.973 45.879 0 5.098 0.6 10.832 1.198 16.567 0 7.009-0.6 14.656-4.793 19.116l-5.392 4.46c-25.162 17.842-62.904 9.558-84.471 32.497-13.779 14.656-17.973 31.223-17.973 45.879 0 5.098 0.6 10.832 1.798 15.93 0 7.646-1.198 15.293-5.392 19.753-1.798 0.637-3.595 2.549-5.392 4.46-24.562 17.205-62.904 8.921-84.471 31.86-13.779 14.656-17.973 30.586-17.973 45.879 0 10.195 8.387 66.269 19.77 66.269z"],"width":1365,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["doit-long"],"grid":16},"attrs":[{},{},{}],"properties":{"order":913,"id":13,"name":"doit-long","prevSize":32,"code":59784},"setIdx":0,"setId":3,"iconIdx":23},{"icon":{"paths":["M311.137 514.079c3.612 0 9.029 0 9.932 0 0 0 0.904 0 0.904 0s5.417 0 9.932 0c81.262 3.694 129.116 47.28 129.116 101.947 0 26.595-10.835 56.884-37.922 85.695-51.466 56.884-135.437 87.911-208.573 87.911-56.883 0-105.641-18.469-129.116-56.145-7.223-14.775-10.835-28.811-10.835-44.325 0-80.524 110.155-169.912 236.563-175.083z","M369.401 78.461h89.711v563.988h-89.711v-563.988z","M529.624 593.338v-16.496c0-14.344 0.794-22.951 19.022-22.951h7.133c175.956 0 515.186 174.999 531.83 377.251 0 18.647-8.719 21.516-18.23 21.516-10.304 0-18.23-7.172-21.4-19.365-82.43-253.174-446.23-283.297-492.201-298.358-16.644-6.455-26.156-9.324-26.156-41.598z"],"width":1162,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["drop"],"grid":16},"attrs":[{},{},{}],"properties":{"order":914,"id":14,"name":"drop","prevSize":32,"code":59786},"setIdx":0,"setId":3,"iconIdx":24},{"icon":{"paths":["M370.052 600.946c4.296 0 10.739 0 11.813 0 0 0 1.075 0 1.075 0s6.443 0 11.813 0c96.649 4.393 153.565 56.232 153.565 121.251 0 31.631-12.887 67.655-45.103 101.921-61.211 67.655-161.082 104.557-248.066 104.557-67.654 0-125.644-21.966-153.565-66.776-8.591-17.573-12.887-34.267-12.887-52.718 0-95.771 131.013-202.085 281.357-208.236z","M439.348 82.843h106.698v670.78h-106.698v-670.78z","M609.943 776.149v19.619c0 17.060 0.944 27.296 22.624 27.296h8.484c209.273 0 612.738-208.135 632.534-448.685 0-22.178-10.369-25.59-21.681-25.59-12.255 0-21.681 8.53-25.452 23.031-98.038 301.113-530.725 336.94-585.4 354.853-19.796 7.677-31.108 11.089-31.108 49.475z"],"width":1362,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["doit"],"grid":16},"attrs":[{},{},{}],"properties":{"order":915,"id":15,"name":"doit","prevSize":32,"code":59788},"setIdx":0,"setId":3,"iconIdx":25},{"icon":{"paths":["M774.981 452.661c3.372 0 8.431 0 9.274 0 0 0 0.844 0 0.844 0s5.059 0 9.274 0c75.878 3.449 120.562 44.147 120.562 95.193 0 24.833-10.117 53.115-35.41 80.017-48.056 53.115-126.463 82.087-194.754 82.087-53.115 0-98.641-17.245-120.562-52.425-6.745-13.796-10.117-26.902-10.117-41.388 0-75.189 102.857-158.655 220.889-163.483z","M829.385 45.905h83.768v526.621h-83.768v-526.621z","M50.167 972.328c175.292-38.842 314.705-100.453 402.864-204.925 38.954-44.869 57.406-94.426 57.406-145.322 0-8.706 0-16.742-1.027-25.448-2.049-10.045 0-27.457-15.376-27.457-23.577 0-21.527 17.412-25.627 28.797-5.125 13.394-6.151 28.797-12.301 42.19-51.255 118.535-191.693 181.486-359.81 221.667-32.803 8.036-45.104 17.412-46.129 36.163-1.027 22.769 0 46.209 0 74.335z"],"width":965,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["scoop"],"grid":16},"attrs":[{},{},{}],"properties":{"order":916,"id":16,"name":"scoop","prevSize":32,"code":59789},"setIdx":0,"setId":3,"iconIdx":26},{"icon":{"paths":["M501.181 91.308h55.686v589.698h-55.686v-589.698z","M102.962 677.4l22.827-13.18 434.531 250.882-22.827 13.18-434.531-250.882z","M558.263 677.949l-22.827-13.18-434.531 250.882 22.827 13.18 434.531-250.882z"],"width":661,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["notex"],"grid":16},"attrs":[{},{},{}],"properties":{"order":917,"id":17,"name":"notex","prevSize":32,"code":59783},"setIdx":0,"setId":3,"iconIdx":27},{"icon":{"paths":["M978.757 389.48l-228.067 152.090v-91.254h-243.271v-121.672h243.271v-91.254z","M1051.281 611.859c3.717 0 9.292 0 10.232 0 0 0 1.021 0 1.021 0s5.596 0 10.232 0c83.674 4.559 132.952 58.334 132.952 125.783 0 32.813-11.151 70.183-39.050 105.73-52.996 70.183-139.462 108.465-214.77 108.465-58.575 0-108.782-22.787-132.954-69.272-7.454-18.229-11.151-35.547-11.151-54.688 0-99.35 113.428-209.638 243.594-216.018z","M1118.874 70.72h84.124v685.637h-84.124v-685.637z","M313.523 611.859c3.717 0 9.292 0 10.232 0 0 0 1.021 0 1.021 0s5.596 0 10.232 0c83.674 4.559 132.952 58.334 132.952 125.783 0 32.813-11.151 70.183-39.050 105.73-52.996 70.183-139.462 108.465-214.77 108.465-58.575 0-108.782-22.787-132.954-69.272-7.454-18.229-11.151-35.547-11.151-54.688 0-99.35 113.428-209.638 243.594-216.018z","M381.117 70.72h84.124v685.637h-84.124v-685.637z","M1309.63 679.501c-30.129 0-57.118 24.402-57.118 55.944s26.989 55.944 57.118 55.944c30.129 0 57.118-24.402 57.118-55.944s-26.989-55.944-57.118-55.944zM1309.63 721.459c5.658 0 12.811 5.617 12.811 13.986s-7.153 13.986-12.811 13.986c-5.658 0-12.811-5.617-12.811-13.986s7.153-13.986 12.811-13.986z","M1285.145 690.181c-2.11 28.655-4.272 57.33-6.486 86.013l51.889 0.274c2.214-28.687 4.376-57.354 6.486-86.013z"],"width":1418,"attrs":[{},{},{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["duration_grow_dot"],"grid":16},"attrs":[{},{},{},{},{},{},{}],"properties":{"order":918,"id":18,"name":"duration_grow_dot","prevSize":32,"code":59695},"setIdx":0,"setId":3,"iconIdx":28},{"icon":{"paths":["M1039.945 389.48l-228.067 152.090v-91.254h-243.271v-121.672h243.271v-91.254z","M1102.675 610.717c3.717 0 9.292 0 10.232 0 0 0 1.021 0 1.021 0s5.596 0 10.232 0c83.674 4.559 132.952 58.334 132.952 125.783 0 32.813-11.151 70.183-39.050 105.73-52.996 70.183-139.462 108.465-214.77 108.465-58.575 0-108.782-22.787-132.954-69.272-7.454-18.229-11.151-35.547-11.151-54.688 0-99.35 113.428-209.638 243.594-216.018z","M1170.268 69.578h84.124v685.637h-84.124v-685.637z","M313.523 611.859c3.717 0 9.292 0 10.232 0 0 0 1.021 0 1.021 0s5.596 0 10.232 0c83.674 4.559 132.952 58.334 132.952 125.783 0 32.813-11.151 70.183-39.050 105.73-52.996 70.183-139.462 108.465-214.77 108.465-58.575 0-108.782-22.787-132.954-69.272-7.454-18.229-11.151-35.547-11.151-54.688 0-99.35 113.428-209.638 243.594-216.018z","M381.117 70.72h84.124v685.637h-84.124v-685.637z","M568.561 701.947c-30.129 0-57.118 24.402-57.118 55.944s26.989 55.944 57.118 55.944c30.129 0 57.118-24.402 57.118-55.944s-26.989-55.944-57.118-55.944zM568.561 743.905c5.658 0 12.811 5.617 12.811 13.986s-7.153 13.986-12.811 13.986c-5.658 0-12.811-5.617-12.811-13.986s7.153-13.986 12.811-13.986z","M544.076 712.627c-2.11 28.655-4.272 57.33-6.486 86.013l51.889 0.274c2.214-28.687 4.376-57.354 6.486-86.013z"],"width":1418,"attrs":[{},{},{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["duration_less_dot"],"grid":16},"attrs":[{},{},{},{},{},{},{}],"properties":{"order":919,"id":19,"name":"duration_less_dot","prevSize":32,"code":59696},"setIdx":0,"setId":3,"iconIdx":29},{"icon":{"paths":["M1023.057 390.283l-228.611 152.452v-91.471h-243.852v-121.962h243.852v-91.472z","M1069.395 613.193c3.726 0 9.314 0 10.256 0 0 0 1.024 0 1.024 0s5.609 0 10.256 0c83.874 4.57 133.269 58.473 133.269 126.083 0 32.891-11.177 70.351-39.143 105.983-53.122 70.351-139.795 108.724-215.282 108.724-58.715 0-109.041-22.842-133.271-69.437-7.472-18.273-11.177-35.632-11.177-54.819 0-99.587 113.698-210.138 244.175-216.534z","M1137.149 70.762h84.325v687.273h-84.325v-687.273z","M336.783 611.475c-183.404 0-266.687 172.408-266.687 209.609 0 58.572 68.028 132.564 133.032 132.564 165.605 0 275.549-165.557 275.549-224.129 0-60.947-69.5-118.044-131.409-118.044zM404.931 728.852c0 55.406-161.736 145.639-213.584 145.639-21.668 0-33.276-10.29-41.788-23.746-3.094-7.124-6.191-14.247-6.191-22.162 0-49.074 157.093-148.805 210.489-148.805 23.216 0 37.145 12.664 44.884 26.12 3.094 6.332 6.191 15.039 6.191 22.954z","M409.492 71.241h66.953v659.364h-66.953v-659.364z"],"width":1294,"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["duration_less"],"grid":16},"attrs":[{},{},{},{},{}],"properties":{"order":920,"id":20,"name":"duration_less","prevSize":32,"code":59699},"setIdx":0,"setId":3,"iconIdx":30},{"icon":{"paths":["M322.388 616.241c3.698 0 9.246 0 10.18 0 0 0 1.016 0 1.016 0s5.568 0 10.18 0c83.255 4.536 132.285 58.041 132.285 125.152 0 32.649-11.095 69.831-38.854 105.2-52.73 69.831-138.763 107.921-213.693 107.921-58.282 0-108.236-22.673-132.287-68.924-7.417-18.138-11.095-35.369-11.095-54.414 0-98.852 112.859-208.587 242.372-214.935z","M1006.207 386.234l-226.923 151.327v-90.796h-242.051v-121.062h242.051v-90.796z","M389.642 77.816h83.702v682.199h-83.702v-682.199z","M1107.426 614.49c-182.050 0-264.718 171.135-264.718 208.062 0 58.14 67.525 131.585 132.049 131.585 164.383 0 273.515-164.335 273.515-222.475 0-60.497-68.987-117.172-130.439-117.172zM1175.071 731.001c0 54.997-160.542 144.564-212.008 144.564-21.508 0-33.030-10.214-41.48-23.57-3.071-7.071-6.145-14.142-6.145-21.999 0-48.712 155.933-147.707 208.935-147.707 23.044 0 36.871 12.571 44.552 25.927 3.071 6.285 6.145 14.928 6.145 22.785z","M1179.598 78.245h66.459v654.496h-66.459v-654.496z"],"width":1320,"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["duration_grow"],"grid":16},"attrs":[{},{},{},{},{}],"properties":{"order":921,"id":21,"name":"duration_grow","prevSize":32,"code":59698},"setIdx":0,"setId":3,"iconIdx":31},{"icon":{"paths":["M487.408 81.611c0.872-1.021 3.478-1.021 5.22-1.021 7.83 0 8.7 3.064 16.53 17.364 54.81 101.122 83.52 199.18 91.35 319.71 0 7.15 0 24.514 0 40.857s0 34.729 0 40.857c-7.83 120.53-36.54 218.588-91.35 319.71-5.22 13.279-10.44 18.386-16.53 18.386-1.739 0-3.478-1.023-5.22-1.023-5.22-3.065-7.83-7.15-7.83-12.257 0-6.129 1.739-11.236 5.22-21.45 35.67-105.208 53.070-224.716 53.070-344.225 0-118.487-17.4-237.995-53.070-342.181-3.478-10.214-5.22-17.364-5.22-21.45 0-7.15 2.611-10.214 7.83-13.279z","M220.217 1.021c1.739-1.021 3.478-1.021 6.090-1.021 7.83 0 14.79 4.086 17.4 12.257 0.872 4.086 0.872 4.086 0.872 242.081v240.038l0.872-3.064c33.060-32.686 67.86-49.029 100.92-49.029 13.050 0 26.1 2.043 39.15 8.171 39.15 15.322 60.030 58.222 60.030 109.294 0 26.557-6.96 56.179-20.010 85.801-19.14 40.857-43.5 73.543-111.36 145.044l-66.99 74.565c-12.18 14.3-14.79 14.3-20.010 14.3-7.83 0-14.79-5.107-17.4-13.279l-0.872-4.084v-845.75l0.872-4.086c2.611-4.086 6.090-10.214 10.44-11.236zM322.881 511.742c-3.478-2.043-8.7-2.043-12.18-2.043-2.611 0-4.35 0-6.090 0-22.62 4.086-42.63 20.429-56.55 46.986l-3.478 7.15v241.059l2.611-4.084c63.51-81.715 105.27-175.687 105.27-237.995v-2.043c0-30.643-8.7-43.922-29.58-49.029z","M118.289 91.081c2.611 0 4.35-1.021 6.090-1.021 5.22 0 11.31 4.086 13.050 10.214 0 1.021 1.739 2.043 1.739 5.107 0 4.086-2.611 8.171-6.090 20.429-29.58 88.865-47.85 179.773-52.2 289.067-0.872 9.193-0.872 32.686-0.872 54.136 0 22.472 0 44.943 0.872 54.136 6.090 110.315 22.62 201.223 52.2 289.067 4.35 12.257 6.090 15.322 6.090 18.386 0 10.214-6.090 16.343-14.79 16.343-6.96 0-7.83-2.042-16.53-18.386-50.46-92.951-80.040-192.030-88.74-296.217-2.611-26.557-2.611-32.686-2.611-63.329 0-31.665 0-37.793 2.611-64.351 8.7-103.165 38.28-202.245 88.74-296.217 6.090-13.279 8.7-14.3 10.44-17.364z"],"width":610,"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"tags":["courtesy"],"grid":16},"attrs":[{},{},{}],"properties":{"order":922,"id":22,"name":"courtesy","prevSize":32,"code":59648},"setIdx":0,"setId":3,"iconIdx":32},{"icon":{"paths":["M381.684 731.526c4.034 0 10.086 0 11.095 0 0 0 1.009 0 1.009 0s6.052 0 11.095 0c90.775 4.126 144.232 52.815 144.232 113.882 0 29.708-12.103 63.543-42.362 95.727-57.491 63.543-151.292 98.203-232.99 98.203-63.543 0-118.008-20.631-144.232-62.718-8.069-16.505-12.103-32.184-12.103-49.514 0-89.951 123.051-189.804 264.257-195.58zM446.77 52.621h100.214v822.303h-100.214v-822.303z"],"width":768,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["note"],"defaultCode":59648,"grid":16},"attrs":[],"properties":{"id":23,"order":923,"ligatures":"","prevSize":32,"code":59649,"name":"note"},"setIdx":0,"setId":3,"iconIdx":33},{"icon":{"paths":["M1024.972 459.741l-218.819 160.803v-96.482h-233.407v-128.642h233.407v-96.482zM8.678 464.080l218.819 160.803v-96.482h233.407v-128.642h-233.407v-96.482z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["navigate"],"defaultCode":59649,"grid":16},"attrs":[],"properties":{"id":24,"order":924,"ligatures":"","prevSize":32,"code":59650,"name":"navigate"},"setIdx":0,"setId":3,"iconIdx":34},{"icon":{"paths":["M350.145 189.381v577.765h15.463v-577.765zM297.409 684.512c1.737 0 4.342 0 4.776 0 0 0 0.435 0 0.435 0s2.605 0 4.776 0c39.079 2.221 62.093 28.433 62.093 61.309 0 15.994-5.211 34.209-18.237 51.535-24.75 34.209-65.132 52.868-100.303 52.868-27.355 0-50.803-11.107-62.093-33.764-3.474-8.885-5.211-17.327-5.211-26.656 0-48.425 52.974-102.182 113.764-105.292zM709.766 189.842v577.765h15.463v-577.765zM657.030 684.973c1.737 0 4.342 0 4.776 0 0 0 0.435 0 0.435 0s2.605 0 4.776 0c39.079 2.221 62.093 28.433 62.093 61.309 0 15.994-5.211 34.209-18.237 51.535-24.75 34.209-65.132 52.868-100.303 52.868-27.355 0-50.803-11.107-62.093-33.764-3.474-8.885-5.211-17.327-5.211-26.656 0-48.425 52.974-102.182 113.764-105.292zM303.424 89.015l0.021 8.094 16.188-0.040-0.021-8.114zM327.726 97.049l16.188 0.021 0.021-8.094-16.208-0.021zM352.029 97.089l16.188 0.021 0.021-8.094-16.208-0.021zM279.121 89.076l0.021 8.094 16.188-0.040-0.021-8.094zM376.311 97.13l16.208 0.040 0.021-8.114-16.208-0.021zM400.614 97.17l16.208 0.040v-8.114l-16.188-0.021zM254.819 89.156l0.021 8.094 16.208-0.040-0.040-8.114zM424.916 97.21l16.208 0.040v-8.114l-16.188-0.021zM449.219 97.25l16.188 0.040 0.021-8.094-16.188-0.040zM230.516 89.217l0.021 8.094 16.208-0.040-0.021-8.094zM473.521 97.311l16.188 0.021 0.021-8.094-16.208-0.040zM206.213 89.297l0.021 8.094 16.208-0.040-0.021-8.114zM497.824 97.351l16.188 0.021 0.021-8.094-16.208-0.040zM522.106 97.391h3.222l12.967 0.101 0.061-8.094-16.229-0.122zM181.911 89.357l0.021 8.094c11.395-0.286 16.218 3.74 16.188-8.134zM157.608 89.418l0.040 8.114 16.188-0.061-0.021-8.094zM133.326 89.499l0.021 8.094 16.188-0.040-0.021-8.094zM546.389 97.553l16.208 0.141 0.061-8.094-16.208-0.141zM109.023 89.559l0.021 8.114 16.188-0.061-0.021-8.094zM84.721 89.639l0.021 8.094 16.208-0.040-0.040-8.094zM60.418 89.7l0.021 5.235h-4.047l0.061 16.208 8.114-0.040-0.061-13.309 12.141-0.040-0.021-8.094zM570.691 97.754l16.188 0.121 0.080-8.094-16.208-0.121zM594.994 97.956l16.188 0.121 0.061-8.094-16.188-0.141zM619.297 98.137l16.188 0.141 0.061-8.094-16.188-0.141zM643.579 98.338l16.208 0.121 0.061-8.094-16.188-0.121zM667.882 98.539h0.342l15.826 0.262 0.141-8.094-16.25-0.282zM692.144 98.942l16.188 0.282 0.141-8.114-16.188-0.262zM716.446 99.365l16.188 0.262 0.141-8.094-16.188-0.282zM740.729 99.768l16.208 0.282 0.141-8.094-16.208-0.282zM764.971 100.191l16.188 0.503 0.262-8.094-16.188-0.503zM789.274 100.956l16.188 0.503 0.242-8.094-16.188-0.503zM813.556 101.701l8.497 0.262 7.591 0.443 0.443-8.094-7.772-0.443-8.517-0.262zM837.718 102.848l14.075 0.786 1.873 0.221 0.906-8.054-2.094-0.221-0.121-0.021h-0.101l-14.074-0.805zM862.101 101.278h-1.571l-0.121 13.692 8.094 0.080 0.141-13.712 0.021-3.020-4.47-1.369-0.362-0.101-0.362-0.040-0.866-0.101zM56.492 119.238l0.080 16.208 8.094-0.040-0.080-16.208zM860.188 139.272l8.094 0.061 0.161-16.188-8.114-0.080zM56.613 143.541l0.061 16.208 8.094-0.040-0.061-16.208zM859.966 163.575l8.114 0.061 0.141-16.188-8.094-0.080zM56.713 167.843l0.080 16.208 8.094-0.040-0.080-16.208zM859.745 187.857l8.114 0.080 0.141-16.208-8.094-0.061zM56.814 192.146l0.080 16.188 8.094-0.021-0.061-16.208zM859.524 212.16l8.114 0.080 0.141-16.208-8.094-0.061zM56.935 216.448l0.061 16.188 8.114-0.040-0.080-16.188zM859.322 236.462l8.094 0.080 0.141-16.208-8.094-0.080zM57.036 240.731l0.080 16.208 8.094-0.040-0.080-16.188zM859.101 260.765l8.094 0.061 0.141-16.188-8.094-0.080zM57.156 265.033l0.061 16.208 8.114-0.040-0.080-16.188zM858.879 285.067l8.094 0.061 0.141-16.188-8.094-0.080zM57.257 289.336l0.080 16.208 8.094-0.040-0.080-16.208zM858.658 309.35l8.094 0.080 0.141-16.188-8.094-0.080zM57.358 313.638l0.080 16.208 8.094-0.040-0.061-16.208zM858.436 333.652l8.094 0.080 0.141-16.208-8.094-0.061zM57.479 337.941l0.061 16.188 8.114-0.021-0.080-16.208zM858.215 357.955l8.094 0.080 0.141-16.208-8.094-0.080zM57.579 362.243l0.080 16.188 8.094-0.040-0.061-16.188zM857.993 382.257l8.094 0.061 0.161-16.188-8.114-0.080zM57.7 386.546l0.061 16.188 8.114-0.040-0.080-16.188zM857.772 406.56l8.094 0.061 0.161-16.188-8.114-0.080zM57.801 410.828l0.080 16.208 8.094-0.040-0.080-16.188zM857.55 430.842l8.094 0.080 0.161-16.188-8.114-0.080zM57.921 435.131l0.061 16.208 8.094-0.040-0.061-16.208zM857.329 455.145l8.094 0.080 0.161-16.208-8.094-0.061zM58.022 459.434l0.080 16.208 8.094-0.040-0.080-16.208zM857.107 479.447l8.114 0.080 0.141-16.208-8.094-0.061zM58.123 483.736l0.080 16.188 8.094-0.021-0.061-16.208zM856.886 503.75l8.114 0.080 0.141-16.208-8.094-0.080zM58.244 508.039l0.061 16.188 8.114-0.021-0.080-16.208zM856.664 528.053l8.114 0.061 0.141-16.188-8.094-0.080zM58.344 532.341l0.080 16.188 8.094-0.040-0.080-16.188zM856.463 552.335l8.094 0.080 0.141-16.188-8.094-0.080zM58.465 556.623l0.061 16.208 8.094-0.040-0.061-16.188zM856.242 576.637l8.094 0.080 0.141-16.208-8.094-0.061zM58.566 580.926l0.080 16.208 8.094-0.040-0.080-16.188zM856.020 600.94l8.094 0.080 0.141-16.208-8.094-0.061zM58.666 605.228l0.080 16.208 8.094-0.040-0.061-16.208zM855.799 625.242l8.094 0.080 0.141-16.208-8.094-0.080zM58.787 629.531l0.061 16.208 8.114-0.040-0.080-16.208zM855.577 649.545l8.094 0.061 0.141-16.188-8.094-0.080zM58.888 653.834l0.080 16.188 8.094-0.021-0.061-16.208zM855.356 673.847l8.094 0.061 0.141-16.188-8.094-0.080zM59.009 678.136l0.061 16.188 8.114-0.040-0.080-16.188zM855.134 698.13l8.094 0.080 0.161-16.208-8.114-0.061zM59.109 702.439l0.080 16.188 8.094-0.040-0.080-16.188zM854.913 722.432l8.094 0.080 0.161-16.208-8.114-0.061zM59.21 726.721l0.080 16.208 8.094-0.040-0.061-16.188zM854.691 746.735l8.094 0.080 0.161-16.208-8.114-0.080zM59.331 751.024l0.061 16.208 8.114-0.040-0.080-16.208zM854.47 771.038l8.114 0.061 0.141-16.188-8.094-0.080zM59.432 775.326l0.080 16.208 8.094-0.040-0.061-16.208zM854.248 795.34l8.114 0.061 0.141-16.188-8.094-0.080zM59.552 799.629l0.061 16.188 8.114-0.021-0.080-16.208zM854.027 819.623l8.114 0.080 0.141-16.208-8.094-0.061zM59.653 823.931l0.080 16.188 8.094-0.021-0.080-16.208zM853.805 843.925l8.114 0.080 0.141-16.208-8.094-0.061zM59.774 848.234l0.061 16.188 8.094-0.040-0.061-16.188zM853.604 868.228l8.094 0.080 0.141-16.208-8.094-0.080zM59.875 872.516l0.080 16.208 8.094-0.040-0.080-16.188zM853.382 892.53l8.094 0.061 0.141-16.188-8.094-0.080zM59.975 896.819l0.080 16.208 8.094-0.040-0.061-16.208zM853.161 916.833l8.094 0.061 0.141-16.188-8.094-0.080zM60.096 921.122l0.061 14.557 0.021 4.027h5.678v-4.047l2.396-0.021-0.061-14.557zM853.020 931.612h-1.49v8.094h9.524l0.040-4.007 0.080-10.692-8.094-0.080zM73.949 939.706h16.208v-8.094h-16.208zM98.251 939.706h16.188v-8.094h-16.188zM122.554 939.706h16.188v-8.094h-16.188zM146.856 939.706h16.188v-8.094h-16.188zM171.139 939.706h16.208v-8.094h-16.208zM195.441 939.706h16.208v-8.094h-16.208zM219.744 939.706h16.208v-8.094h-16.208zM244.046 939.706h16.208v-8.094h-16.208zM268.349 939.706h16.188v-8.094h-16.188zM292.652 939.706h16.188v-8.094h-16.188zM316.954 939.706h16.188v-8.094h-16.188zM341.237 939.706h16.208v-8.094h-16.208zM365.539 939.706h16.208v-8.094h-16.208zM389.842 939.706h16.208v-8.094h-16.208zM414.144 939.706h16.208v-8.094h-16.208zM438.447 939.706h16.188v-8.094h-16.188zM462.749 939.706h16.188v-8.094h-16.188zM487.052 939.706h16.188v-8.094h-16.188zM511.334 939.706h16.208v-8.094h-16.208zM535.637 939.706h16.208v-8.094h-16.208zM559.94 939.706h16.208v-8.094h-16.208zM584.242 939.706h16.208v-8.094h-16.208zM608.545 939.706h16.188v-8.094h-16.188zM632.847 939.706h16.188v-8.094h-16.188zM657.15 939.706h16.188v-8.094h-16.188zM681.432 939.706h16.208v-8.094h-16.208zM705.735 939.706h16.208v-8.094h-16.208zM730.037 939.706h16.208v-8.094h-16.208zM754.34 939.706h16.208v-8.094h-16.208zM778.643 939.706h16.188v-8.094h-16.188zM802.945 939.706h16.188v-8.094h-16.188zM827.248 939.706h16.188v-8.094h-16.188zM76.566 69.404l-19.994 0.061-0.201 19.994-0.061 5.839 20.336 0.221 0.040 14.396 24.283-0.061 80.8 0.564 0.282-40.511-81.002-0.564-0.141 19.188-0.040-19.188zM222.261 110.7l81.002 0.564 0.282-40.491-81.002-0.584zM343.753 111.546l81.002 0.564 0.282-40.491-81.002-0.564zM465.246 112.392l81.002 0.564 0.282-40.491-81.002-0.564zM586.759 113.237l80.982 0.584 0.282-40.511-80.982-0.564zM708.252 114.103l80.982 0.564 0.302-40.511-81.002-0.564zM829.885 94.653l-11.96-0.161-0.946 72.686 40.491 0.544 0.966-72.706 0.262-20.376-28.672-0.202zM55.082 216.79l40.491 0.423 0.826-81.002-40.491-0.403zM815.388 288.671l40.511 0.523 1.047-80.982-40.491-0.523zM53.854 338.283l40.491 0.423 0.826-81.002-40.491-0.403zM813.818 410.164l40.491 0.523 1.047-80.982-40.491-0.544zM52.626 459.775l40.491 0.423 0.826-81.002-40.491-0.403zM812.227 531.656l40.491 0.523 1.067-81.002-40.511-0.523zM51.378 581.268l40.511 0.423 0.826-81.002-40.511-0.403zM810.637 653.129l40.491 0.544 1.067-81.002-40.511-0.523zM50.149 702.761l40.511 0.423 0.805-81.002-40.491-0.403zM809.046 774.622l40.491 0.523 1.067-80.982-40.491-0.523zM48.921 824.254l40.491 0.423 0.826-81.002-40.491-0.403zM807.455 896.114l40.491 0.523 1.067-80.982-40.491-0.544zM47.935 920.88l-0.201 20.175 45.061 0.624 0.544-40.511-4.691-0.061 0.362-35.94-40.491-0.403zM133.286 942.243l80.982 1.107 0.564-40.491-80.982-1.128zM254.758 943.914l81.002 1.128 0.564-40.491-81.002-1.128zM376.251 945.605l81.002 1.128 0.564-40.491-81.002-1.128zM497.744 947.297l80.982 1.128 0.564-40.511-80.982-1.107zM619.236 948.968l80.982 1.128 0.564-40.491-81.002-1.127zM740.709 950.659l81.002 1.127 0.564-40.491-81.002-1.128z"],"width":913,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["note_select"],"defaultCode":59650,"grid":16},"attrs":[],"properties":{"id":25,"order":925,"ligatures":"","prevSize":32,"code":59651,"name":"note_select"},"setIdx":0,"setId":3,"iconIdx":35},{"icon":{"paths":["M282.469 265.898c-125.908 6.295-238.014 98.194-271.822 196.687h-3.974v12.148c-4.296 15.596-6.674 31.259-6.674 46.716 0 15.331 2.718 29.658 6.674 44.016v458.76h115.178v-360.68c14.426 2.901 29.497 4.499 45.216 4.499 87.323 0 187.652-45.289 249.101-128.3 32.342-42.044 45.216-86.265 45.216-125.076 0-79.777-57.144-143.381-154.17-148.771h-24.745zM222.526 0c-52.921 0-98.094 45.569-98.094 102.692s45.173 102.692 98.094 102.692c52.921 0 98.094-45.569 98.094-102.692s-45.173-102.692-98.094-102.692zM222.526 80.988c13.718 0 22.544 10.141 22.544 21.704s-8.826 21.704-22.544 21.704c-13.718 0-22.601-10.141-22.601-21.704s8.884-21.704 22.601-21.704zM193.268 122.436c-20.723-19.034-3.086-52.836 27.568-52.836 31.157 0 49.278 36.582 26.579 53.658-13.811 10.389-42.414 9.955-54.147-0.822z"],"width":461,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["staccato_above"],"defaultCode":59651,"grid":16},"attrs":[],"properties":{"id":26,"order":926,"ligatures":"","prevSize":32,"code":59652,"name":"staccato_above"},"setIdx":0,"setId":3,"iconIdx":36},{"icon":{"paths":["M347.28 0v368.892c-14.735-2.958-30.192-4.602-46.246-4.602-89.311 0-191.848 46.32-254.696 131.221-33.078 43.002-46.322 88.229-46.322 127.923 0 81.593 58.445 146.645 157.68 152.158h25.385c128.775-6.439 243.357-100.43 277.934-201.165h4.065v-12.424c4.394-15.951 6.826-31.97 6.826-47.78 0-15.708-2.766-30.384-6.826-45.095v-469.129h-117.8zM249.582 814.098c-54.126 0-100.327 46.606-100.327 105.030s46.201 105.030 100.327 105.030c54.126 0 100.327-46.606 100.327-105.030s-46.201-105.030-100.327-105.030zM249.582 896.93c14.030 0 23.057 10.372 23.057 22.198s-9.027 22.198-23.057 22.198c-14.030 0-23.116-10.372-23.116-22.198s9.086-22.198 23.116-22.198zM219.658 939.321c-21.194-19.467-3.156-54.039 28.196-54.039 31.867 0 50.4 37.415 27.184 54.879-14.126 10.626-43.379 10.182-55.38-0.841z"],"width":472,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["staccato_below"],"defaultCode":59652,"grid":16},"attrs":[],"properties":{"id":27,"order":927,"ligatures":"","prevSize":32,"code":59653,"name":"staccato_below"},"setIdx":0,"setId":3,"iconIdx":37},{"icon":{"paths":["M188.24 951.195q1.751 1.943 2.627 1.943h2.627q7.005 0 10.507-2.915t5.253-8.744l1.751-1.943v-223.464l21.014 5.829q7.005 1.943 14.009 2.915t10.507 0.972q5.253 0 7.88-1.943t4.378-7.773v-85.499q-1.751-5.829-6.129-7.773t-20.138-7.773q-19.263-5.829-25.392-6.801l-6.129-0.972v-186.544l21.014 7.773q8.756 1.943 14.885 2.915t9.631 0.972 5.253-0.972 3.502-2.915q3.502-3.886 3.502-8.744v-82.584q0 0-3.502-5.829-1.751-3.886-6.129-4.858t-30.645-8.744q-7.005-1.943-11.383-3.886l-4.378-1.943h-1.751v-225.407l-1.751-3.886q-1.751-5.829-6.129-7.773t-9.631-1.943q-1.751 0-7.005 1.943t-7.005 7.773v221.52h-1.751l-17.512-5.829-33.272-9.716q-5.253-1.943-10.507-2.915l-5.253-0.972-0.876-16.517q0 0-0.876-100.073v-118.533q-1.751-5.829-6.129-8.744t-7.88-2.915q-5.253 0-9.631 2.915t-7.88 8.744v225.407q-7.005-1.943-22.765-6.801t-19.263-4.858q-5.253 0-8.756 3.886t-5.253 7.773v87.442q3.502 5.829 8.756 8.744t38.526 10.687l8.756 3.886v184.6q-7.005-1.943-22.765-6.801t-19.263-4.858q-5.253 0-8.756 2.915t-5.253 8.744v85.499q3.502 7.773 8.756 9.716t38.526 11.659l8.756 1.943v229.293q3.502 5.829 7.88 8.744t9.631 2.915q1.751 0 2.627-0.972t2.627-0.972q1.751-1.943 4.378-3.886t4.378-5.829v-219.577h5.253q1.751 0 10.507 2.915t19.263 4.858l29.77 9.716 5.253 1.943v233.179q1.751 3.886 3.502 6.801t5.253 2.915zM179.485 504.267v93.272q-1.751 0-6.129-1.943t-11.383-3.886l-35.023-7.773-15.76-5.829-0.876-12.631q0 0-0.876-78.698v-93.272h5.253q1.751 1.943 10.507 3.886t19.263 3.886l29.77 9.716 5.253 1.943z"],"width":292,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sharp"],"defaultCode":59653,"grid":16},"attrs":[],"properties":{"id":28,"order":928,"ligatures":"","prevSize":32,"code":59654,"name":"sharp"},"setIdx":0,"setId":3,"iconIdx":38},{"icon":{"paths":["M14.004 0h8.756q7.005 0 12.258 2.915t8.756 10.687v561.574l1.751-3.886q31.521-27.204 63.042-41.778t61.291-14.574q12.258 0 24.516 1.943t24.516 7.773q35.023 13.602 54.286 48.579t19.263 79.67q0 21.375-6.129 47.607t-18.387 51.494q-17.512 34.977-46.406 70.925t-91.936 98.13l-82.305 87.442q-10.507 11.659-14.885 13.602t-9.631 1.943q-7.005 0-13.134-3.886t-7.88-11.659l-1.751-3.886v-987.126l1.751-3.886q1.751-3.886 5.253-7.773t7.005-5.829zM141.839 596.551q-3.502-1.943-7.88-2.915t-7.88-0.972h-7.005q-21.014 3.886-39.401 18.46t-30.645 37.892l-5.253 7.773v281.758l3.502-5.829q59.539-71.897 94.563-147.68t35.023-130.192v-1.943q0-27.204-7.88-39.835t-27.143-16.517z"],"width":292,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flat"],"defaultCode":59654,"grid":16},"attrs":[],"properties":{"id":29,"order":929,"ligatures":"","prevSize":32,"code":59655,"name":"flat"},"setIdx":0,"setId":3,"iconIdx":39},{"icon":{"paths":["M64.896 1.010c1.324 0 2.648-1.010 5.293-1.010 6.616 0 11.909 3.030 22.495 10.099 3.968 4.040 10.586 8.080 14.556 11.109l19.849 12.119 19.849 14.139 14.556 10.099 15.879 11.109 63.516 42.418 96.597 66.657c48.96 32.318 48.96 32.318 48.96 39.388v7.070l-11.909 14.139c-64.839 73.726-97.92 158.562-97.92 236.328 0 80.796 34.404 156.542 104.536 208.049 9.263 9.090 14.556 11.109 14.556 14.139 1.324 3.028 1.324 4.040 1.324 7.070 0 8.080-7.939 15.149-19.849 15.149-2.648 0-5.293 0-6.616 0-13.232-4.040-27.788-5.050-43.667-5.050-31.758 0-66.162 7.070-93.95 21.209-52.93 27.269-82.041 70.696-82.041 119.174 0 44.438 26.465 93.925 76.748 132.303 13.232 10.099 17.202 16.159 17.202 21.209 0 4.040-2.648 7.070-5.293 10.099-6.616 3.028-9.263 6.060-13.232 6.060-6.616 0-14.556-5.050-25.142-10.099-115.122-70.696-185.254-147.452-201.133-216.129 0-6.060 0-14.139 0-24.239 0-8.080 0-18.179 1.324-22.219 19.849-61.607 95.273-98.975 194.517-98.975 25.142 0 54.253 2.021 80.718 8.080 3.968 0 7.939 1.011 7.939 1.011s0 0 0 0v0c0-1.011-7.939-7.070-18.525-13.129l-58.223-39.388-80.718-56.557c-99.243-65.647-104.536-70.696-104.536-75.746 0-2.020 0-2.020 0-3.030 0 0 0-1.010 0-1.010 0-6.060 0-6.060 10.586-18.179 74.102-75.746 112.476-164.621 112.476-244.407 0-69.686-29.111-134.323-84.688-177.751-7.939-6.060-10.586-13.129-10.586-17.169 0-7.070 5.293-11.109 14.556-14.139z"],"width":397,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["rest"],"defaultCode":59655,"grid":16},"attrs":[],"properties":{"id":30,"order":930,"ligatures":"","prevSize":32,"code":59656,"name":"rest"},"setIdx":0,"setId":3,"iconIdx":40},{"icon":{"paths":["M232.072 261.481c7.442-1.353 14.884-1.353 22.327-1.353 106.897 0 196.203 47.359 209.058 110.956 0.677 6.089 2.029 11.502 2.029 15.561 0 69.686-92.013 125.841-210.411 125.841s-208.381-57.508-208.381-125.841c0-8.119 0.677-16.238 3.383-25.033 16.238-53.448 92.013-94.719 181.995-100.131zM242.22 277.042c-3.383-0.677-8.119-0.677-11.502-0.677-42.623 0-68.333 36.534-68.333 81.864 0 24.356 7.442 50.742 23.003 77.128 25.709 40.594 62.92 60.891 94.719 60.891 27.063 0 50.742-14.208 61.567-43.977 4.736-12.178 6.766-24.356 6.766-37.211 0-60.891-46.683-128.547-106.22-138.019zM232.072 20.54c7.442-1.353 14.884-1.353 22.327-1.353 106.897 0 196.203 47.359 209.058 110.956 0.677 6.089 2.029 11.502 2.029 15.561 0 69.686-92.013 125.841-210.411 125.841s-208.381-57.508-208.381-125.841c0-8.119 0.677-16.238 3.383-25.033 16.238-53.448 92.013-94.719 181.995-100.131zM242.22 36.101c-3.383-0.677-8.119-0.677-11.502-0.677-42.623 0-68.333 36.534-68.333 81.864 0 24.356 7.442 50.742 23.003 77.128 25.709 40.594 62.92 60.891 94.719 60.891 27.063 0 50.742-14.208 61.567-43.977 4.736-12.178 6.766-24.356 6.766-37.211 0-60.891-46.683-128.547-106.22-138.019zM225.192 522.469c7.442-1.354 14.884-1.354 22.327-1.354 106.897 0 196.203 47.359 209.058 110.956 0.677 6.089 2.029 11.502 2.029 15.561 0 69.686-92.013 125.841-210.411 125.841s-208.381-57.508-208.381-125.841c0-8.119 0.677-16.238 3.383-25.033 16.238-53.448 92.013-94.719 181.995-100.131zM235.339 538.029c-3.383-0.677-8.119-0.677-11.502-0.677-42.623 0-68.333 36.534-68.333 81.864 0 24.356 7.442 50.742 23.003 77.128 25.709 40.594 62.92 60.891 94.719 60.891 27.063 0 50.742-14.208 61.567-43.977 4.736-12.178 6.766-24.356 6.766-37.211 0-60.891-46.683-128.547-106.22-138.019zM530.712 0l-500.282 2.353 0.096 24.094 500.282-2.353zM508.594 250.165l-500.282 2.306 0.145 24.094 500.235-2.306zM508.594 501.459l-500.282 2.306 0.145 24.094 500.235-2.306zM502.727 762.6l-500.282 2.306 0.145 24.094 500.235-2.306zM500.4 997.615l-500.282 2.306 0.145 24.094 500.235-2.306z"],"width":531,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["chords"],"defaultCode":59656,"grid":16},"attrs":[],"properties":{"id":31,"order":931,"ligatures":"","prevSize":32,"code":59657,"name":"chords"},"setIdx":0,"setId":3,"iconIdx":41},{"icon":{"paths":["M94.493 375.421c0.806-0.572 3.221-0.572 6.441-0.572 2.416 0 4.026 0 5.636 0 3.221 0.572 5.636 1.145 13.688 5.152 59.583 28.052 141.711 52.669 224.644 66.981l16.909 2.29c12.078 2.29 17.714 7.442 17.714 15.457s-5.636 12.595-17.714 14.885l-16.909 2.29c-82.933 14.312-165.061 38.929-224.644 66.981-12.078 5.725-13.688 5.725-19.324 5.725-12.883 0-20.935-7.442-20.935-15.457 0-2.29 0.806-5.152 3.221-8.015s4.831-3.435 12.883-7.442c47.505-22.327 101.452-40.647 161.84-54.959 9.662-2.29 16.909-4.007 16.909-4.58 0 0-7.247-1.145-16.909-3.435-60.388-14.312-114.335-32.632-161.84-54.959-8.052-4.007-10.467-5.152-12.883-8.015-2.416-2.29-3.221-4.58-3.221-8.015 0-6.297 5.636-12.595 14.493-14.312zM185.252 77.692c2.234-1.185 3.722-1.185 6.7-1.185 5.956 0 10.422 2.37 14.145 7.11 0.746 1.777 0.746 2.37 0.746 37.327v34.364h2.234c43.178 5.925 78.912 31.994 90.079 65.766 2.234 7.702 2.978 15.997 2.978 23.107 0 40.289-33.5 77.616-83.379 87.096-8.935 2.37-17.868 3.555-26.802 3.555-50.623 0-96.034-27.254-107.945-68.136-2.234-7.702-2.978-14.812-2.978-21.33 0-43.844 37.967-84.133 93.056-90.058h2.234v-34.364c0.746-34.957 0.746-35.549 1.488-37.327 1.488-2.37 4.467-4.74 7.445-5.925zM176.319 213.964c0-30.809 0-33.179-1.488-33.179 0 0 0 0 0 0-8.933 0.592-29.034 8.887-39.456 17.775-16.378 13.035-23.822 29.032-23.822 45.029 0 33.772 32.011 65.766 79.656 65.766s80.401-31.994 80.401-65.766c0-15.997-8.189-31.994-24.567-45.029-9.678-8.887-31.267-17.775-40.2-17.775 0 0 0 15.405 0 33.179 0 33.772 0 33.772-0.746 34.957-3.722 5.332-9.678 7.702-14.145 7.702-5.956 0-11.911-2.37-14.145-7.702-0.746-1.185-0.746-1.185-1.488-34.957zM650.718 442.642l-244.062 3.25 0.656 48 244.062-3.281zM509.496 139.969c-43.606 0-80.954 34.128-80.954 77.708s37.348 77.708 80.954 77.708c43.606 0 80.926-34.128 80.926-77.708s-37.321-77.708-80.926-77.708zM509.496 183.42c22.151 0 38.093 16.014 38.093 34.257s-15.942 34.257-38.093 34.257c-22.151 0-38.121-16.014-38.121-34.257s15.97-34.257 38.121-34.257zM488.943 272.132c-28.636-12.845-44.574-58.991-27.987-81.036 27.414-36.436 77.021-38.046 103.84-3.37 24.335 31.465-0.456 82.478-42.355 87.152-12.058 1.345-27.132 0.11-33.498-2.746zM417.499 591.149c3.431 0 8.577 0 9.435 0 0 0 0.858 0 0.858 0s5.146 0 9.435 0c77.195 4.388 122.653 56.165 122.653 121.106 0 31.593-10.292 67.574-36.024 101.799-48.89 67.574-128.657 104.432-198.132 104.432-54.036 0-100.353-21.94-122.653-66.696-6.862-17.552-10.293-34.226-10.293-52.655 0-95.656 104.641-201.844 224.722-207.987zM195.304 770.757v73.75l63.070-3-1.412-67.75zM211.026 787.538l30.553 1.469 0.768 37.25-31.32 1.5zM195.304 770.757h89.333v252.427h-89.333v-252.427z"],"width":768,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["articulation"],"defaultCode":59657,"grid":16},"attrs":[],"properties":{"id":32,"order":932,"ligatures":"","prevSize":32,"code":59658,"name":"articulation"},"setIdx":0,"setId":3,"iconIdx":42},{"icon":{"paths":["M433.241 185.907c5.302-3.152 8.834-3.152 15.902-3.152 14.135 0 24.737 6.305 33.571 18.914 1.769 4.729 1.769 6.305 1.769 99.299v91.418h5.302c102.48 15.762 187.291 85.113 213.795 174.955 5.302 20.49 7.068 42.557 7.068 61.471 0 107.18-79.51 206.479-197.893 231.698-21.207 6.305-42.409 9.457-63.612 9.457-120.149 0-227.93-72.504-256.2-181.26-5.302-20.49-7.068-39.404-7.068-56.742 0-116.637 90.112-223.817 220.862-239.578h5.302v-91.418c1.769-92.994 1.769-94.57 3.533-99.299 3.533-6.305 10.601-12.609 17.669-15.762zM412.038 548.427c0-81.961 0-88.266-3.533-88.266 0 0 0 0 0 0-21.203 1.576-68.909 23.643-93.646 47.285-38.872 34.676-56.541 77.233-56.541 119.789 0 89.842 75.977 174.955 189.058 174.955s190.825-85.113 190.825-174.955c0-42.557-19.436-85.113-58.308-119.789-22.97-23.643-74.21-47.285-95.413-47.285 0 0 0 40.981 0 88.266 0 89.842 0 89.842-1.769 92.994-8.834 14.186-22.97 20.49-33.571 20.49-14.135 0-28.27-6.305-33.571-20.49-1.769-3.152-1.769-3.152-3.533-92.994z"],"width":939,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pizzicato"],"defaultCode":59658,"grid":16},"attrs":[],"properties":{"id":33,"order":933,"ligatures":"","prevSize":32,"code":59659,"name":"pizzicato"},"setIdx":0,"setId":3,"iconIdx":43},{"icon":{"paths":["M431.96 252.656c6.42-0.642 13.483-0.642 19.261-0.642 139.324 0 255.535 101.444 279.291 246.546 2.568 16.051 4.494 36.597 4.494 49.438 0 4.494-1.284 7.705-1.284 9.631-2.568 5.136-7.705 7.705-12.841 7.705-3.852 0-7.063-0.642-9.631-3.21-2.568-3.852-3.852-5.136-3.852-16.051-5.136-117.495-118.779-206.097-255.535-206.097-12.841 0-25.040 1.284-37.881 1.926-123.273 15.409-214.444 100.802-218.938 204.171 0 10.915-0.642 12.199-3.21 16.051-2.568 2.568-6.42 3.21-9.631 3.21-5.136 0-10.273-2.568-13.483-7.705 0-1.926-0.642-5.136-0.642-9.631 0-12.841 1.926-33.386 4.494-49.438 21.83-136.114 128.41-237.558 259.387-245.904zM443.517 481.225c2.568-1.284 5.136-1.284 7.705-1.284 12.841 0 25.682 6.42 33.386 17.977 4.494 6.42 6.42 14.125 6.42 22.472 0 7.705-1.926 16.051-6.42 23.114-7.705 11.557-20.546 17.977-33.386 17.977-10.273 0-21.188-4.494-28.892-13.483-7.063-7.063-10.273-17.335-10.273-26.966 0-18.619 11.557-35.313 31.46-39.807z"],"width":939,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fermata"],"defaultCode":59659,"grid":16},"attrs":[],"properties":{"id":34,"order":934,"ligatures":"","prevSize":32,"code":59660,"name":"fermata"},"setIdx":0,"setId":3,"iconIdx":44},{"icon":{"paths":["M138.744 265.169c1.799-1.371 7.187-1.371 14.374-1.371 5.392 0 8.984 0 12.577 0 7.187 1.371 12.577 2.743 30.544 12.342 132.958 67.195 316.224 126.162 501.287 160.446l37.731 5.485c26.951 5.485 39.528 17.827 39.528 37.026s-12.577 30.169-39.528 35.655l-37.731 5.485c-185.063 34.283-368.329 93.25-501.287 160.446-26.951 13.713-30.544 13.713-43.121 13.713-28.748 0-46.715-17.827-46.715-37.026 0-5.485 1.799-12.342 7.187-19.199 5.392-6.857 10.78-8.228 28.748-17.827 106.007-53.482 226.388-97.364 361.143-131.648 21.561-5.485 37.731-9.599 37.731-10.971 0 0-16.171-2.743-37.731-8.228-134.755-34.283-255.136-78.166-361.143-131.648-17.967-9.599-23.357-12.342-28.748-19.199-5.392-5.485-7.187-10.971-7.187-19.199 0-15.085 12.577-30.169 32.341-34.283z"],"width":939,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["accent"],"defaultCode":59660,"grid":16},"attrs":[],"properties":{"id":35,"order":935,"ligatures":"","prevSize":32,"code":59661,"name":"accent"},"setIdx":0,"setId":3,"iconIdx":45},{"icon":{"paths":["M47.201 448q1587.908 512 3175.816 0-1587.908 768-3175.816 0z"],"width":3072,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["slur"],"defaultCode":59661,"grid":16},"attrs":[],"properties":{"id":36,"order":936,"ligatures":"","prevSize":32,"code":59662,"name":"slur"},"setIdx":0,"setId":3,"iconIdx":46},{"icon":{"paths":["M309.723 185.185c2.241 0 6.724-1.121 12.327-1.121 38.103 0 70.602 21.293 90.774 56.033 4.483 11.207 12.327 31.379 12.327 36.982 0 3.362 0 4.483 0 4.483 1.121 0 3.362-2.241 6.724-5.603 32.499-40.344 81.809-72.843 112.067-76.205 4.483 0 7.845-1.121 11.207-1.121 54.913 0 105.343 48.189 118.791 110.946 3.362 11.207 3.362 23.534 3.362 39.223 0 22.413-2.241 50.43-6.724 72.843-22.413 126.635-106.463 221.892-202.84 230.857-4.483 2.241-8.965 2.241-13.448 2.241-17.931 0-34.741-5.603-44.827-13.448l-10.086-8.965c-21.293-16.81-36.982-40.344-45.947-67.24 0-3.362-1.121-5.603-1.121-5.603s0 0 0 0c-2.241 1.121-82.929 272.322-82.929 275.684 0 0 0 1.121 0 1.121 0 4.483 6.724 7.845 23.534 13.448 4.483 0 5.603 2.241 19.051 5.603 15.689 4.483 19.051 7.845 19.051 17.931s-2.241 12.327-7.845 15.689l-3.362 3.362h-264.477l-4.483-3.362c-5.603-3.362-7.845-5.603-7.845-15.689s4.483-15.689 20.172-17.931c15.689-3.362 16.81-3.362 24.655-5.603 3.362-1.121 5.603-2.241 7.845-2.241 0 0 4.483-2.241 6.724-2.241 14.569-5.603 23.534-12.327 28.017-20.172 3.362-5.603 154.652-519.989 154.652-524.472 0-3.362 1.121-7.845 3.362-12.327 1.121-4.483 1.121-8.965 1.121-12.327 0-14.569-6.724-24.655-13.448-24.655 0 0 0 0 0 0-33.62 2.241-78.447 49.309-100.86 105.343-4.483 14.569-7.845 16.81-13.448 16.81 0 0-2.241 0-2.241 0-5.603 0-10.086-2.241-10.086-10.086s5.603-22.413 16.81-43.706c22.413-47.068 52.671-82.929 93.015-108.705 4.483-5.603 10.086-10.086 13.448-11.207 5.603-6.724 22.413-12.327 36.982-14.569zM521.529 271.476c-3.362-2.241-6.724-2.241-8.965-2.241-20.172 0-50.43 15.689-73.964 39.223-13.448 12.327-14.569 15.689-17.931 21.293-1.121 5.603-3.362 10.086-4.483 13.448-1.121 2.241-11.207 32.499-25.775 81.809l-23.534 79.567v5.603c2.241 17.931 7.845 35.861 16.81 50.43 7.845 12.327 23.534 23.534 31.379 23.534 0 0 1.121 0 2.241 0 0 0 6.724-3.362 11.207-4.483 48.189-23.534 97.498-87.412 117.67-155.773 6.724-30.258 11.207-60.516 11.207-86.291 0-13.448-1.121-25.775-5.603-33.62-4.483-14.569-20.172-29.137-30.258-32.499z"],"width":819,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["piano"],"defaultCode":59662,"grid":16},"attrs":[],"properties":{"id":37,"order":937,"ligatures":"","prevSize":32,"code":59663,"name":"piano"},"setIdx":0,"setId":3,"iconIdx":47},{"icon":{"paths":["M11 748q1 0 2-0.5t4-0.5q4 0 7 2t5 6v150l16-4t38-10q31-8 42-10.5t15-2.5q1 0 2 0.5t2 0.5q2 1 3.5 2.5l3.5 3.5v422q-2 3-5.5 5t-6.5 2q-4 0-7.5-2t-5.5-5l-1-2v-151l-15.5 3.5t-37.5 9.5q-31 8-42.5 11t-14.5 3q-2 0-2.5-0.5l-1.5-1.5q-2-1-3.5-2.5t-2.5-3.5v-418q1-2 2.5-4t3.5-3v0zM125 1017v-58l-14.5 4t-33.5 8l-48 12v116l49-12 47-12v-58z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["natural"],"defaultCode":59663,"grid":16},"attrs":[],"properties":{"id":38,"order":938,"ligatures":"","prevSize":32,"code":59664,"name":"natural"},"setIdx":0,"setId":3,"iconIdx":48},{"icon":{"paths":["M174 621h5q4 0 7 1.5t5 5.5v289l1-2q18-14 36-21.5t35-7.5q7 0 14 1t14 4q20 7 31 25t11 41q0 11-3.5 24.5t-10.5 26.5q-10 18-26.5 36.5t-52.5 50.5l-47 45q-6 6-8.5 7t-5.5 1q-4 0-7.5-2t-4.5-6l-1-2v-508l1-2q1-2 3-4t4-3v0zM247 928q-2-1-4.5-1.5t-4.5-0.5h-4q-12 2-22.5 9.5t-17.5 19.5l-3 4v145l2-3q34-37 54-76t20-67v-1q0-14-4.5-20.5t-15.5-8.5v0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-f"],"defaultCode":59664,"grid":16},"attrs":[],"properties":{"id":39,"order":939,"ligatures":"","prevSize":32,"code":59665,"name":"key-sig-f"},"setIdx":0,"setId":3,"iconIdx":49},{"icon":{"paths":["M124 460q1-1 2-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 25.5-16t25.5-5q5 0 10 0.5t10 2.5q14 5 22 18t8 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-5 5-6.5 5.5t-3.5 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t2.5-1.5v0zM176 679q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM260 220q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM311 439q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-bb"],"defaultCode":59665,"grid":16},"attrs":[],"properties":{"id":40,"order":940,"ligatures":"","prevSize":32,"code":59666,"name":"key-sig-bb"},"setIdx":0,"setId":3,"iconIdx":50},{"icon":{"paths":["M722.739 137.452c0.876 0 1.751 0 3.502 0 5.253 0 14.884 0 21.012 0 2.627 0 8.755 0 10.506 0.876 37.647 2.627 77.046 30.643 82.299 61.286 1.751 4.378 2.627 7.88 2.627 13.133 0 34.145-28.892 62.162-60.411 62.162-7.88 0-15.759-1.751-22.764-5.253-21.888-9.631-32.394-30.643-32.394-50.78 0-15.759 6.129-30.643 20.137-41.149 1.751-1.751 1.751-1.751 1.751-1.751s0 0 0 0c-1.751 0-13.133 6.129-19.261 11.382-42.9 28.017-79.672 84.925-104.187 154.967-0.876 5.253-1.751 8.755-1.751 8.755 0 1.751 14.008 1.751 31.519 1.751 35.021 0 35.896 0 39.398 1.751 8.755 5.253 12.257 12.257 12.257 21.012 0 7.004-3.502 14.884-10.506 18.386-5.253 3.502-3.502 4.378-39.398 4.378h-46.403l-1.751 6.129c-23.639 125.199-70.042 243.395-133.079 337.951-42.9 67.415-95.432 105.062-154.967 115.569-6.129 1.751-12.257 1.751-18.386 1.751-39.398 0-70.042-21.012-82.299-56.033-2.627-8.755-3.502-18.386-3.502-27.141 0-35.021 23.639-63.037 58.66-63.037 4.378 0 10.506 1.751 17.51 2.627 27.141 7.004 41.149 32.394 41.149 56.909 0 18.386-7.004 36.772-24.515 46.403-1.751 0.876-3.502 2.627-3.502 2.627s1.751 0 1.751 0c0 0 1.751 0 4.378-1.751 28.017-7.88 55.158-35.021 72.668-71.793 21.012-39.398 44.652-127.826 85.801-304.681 5.253-24.515 9.631-43.776 11.382-45.527 0 0 0 0 0 0s-3.502 0-38.523 0c-39.398 0-39.398 0-43.776-3.502-7.004-4.378-12.257-12.257-12.257-19.261 0-8.755 5.253-15.759 12.257-21.012 3.502-1.751 4.378-1.751 49.905-1.751l43.776-1.751 3.502-9.631c41.149-115.569 130.452-196.992 225.884-203.996z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["forte"],"defaultCode":59666,"grid":16},"attrs":[],"properties":{"id":41,"order":941,"ligatures":"","prevSize":32,"code":59667,"name":"forte"},"setIdx":0,"setId":3,"iconIdx":51},{"icon":{"paths":["M213.627 201.073c2.335 0 4.669 0 7.004 0 9.339 0 22.18 0 26.849 2.335 25.682 5.837 47.862 22.18 61.87 43.192 3.502 7.004 9.339 19.845 10.506 23.347 0 0 0 1.167 0 1.167 2.335 0 2.335-3.502 7.004-8.172 9.339-16.343 22.18-29.184 36.188-40.858 4.669-2.335 8.172-8.172 9.339-9.339 8.172-8.172 24.515-11.674 43.192-11.674 9.339 0 21.012 2.335 30.351 5.837 21.012 5.837 40.858 22.18 53.699 39.69 3.502 7.004 9.339 19.845 9.339 23.347 0 0 0 1.167 2.335 1.167 0 0 1.167-3.502 4.669-8.172 10.506-16.343 23.347-29.184 38.523-40.858 2.335-2.335 7.004-8.172 9.339-9.339 5.837-8.172 23.347-11.674 40.858-11.674 11.674 0 21.012 0 30.351 3.502 40.858 15.176 70.042 54.866 70.042 102.728 0 14.008-3.502 31.519-8.172 42.025-1.167 2.335-61.87 208.957-63.037 217.129 0 2.335-2.335 9.339-2.335 10.506-1.167 3.502-1.167 8.172-1.167 11.674 0 12.841 5.837 24.515 14.008 24.515 0 0 0 0 0 0 39.69-7.004 87.552-57.201 110.899-120.238 4.669-11.674 7.004-14.008 12.841-14.008 2.335 0 2.335 0 2.335 0 7.004 1.167 10.506 2.335 10.506 10.506s-4.669 23.347-17.51 47.862c-26.849 52.531-60.703 92.221-107.397 116.736l-15.176 8.172c-10.506 5.837-22.18 9.339-32.686 9.339-36.188 0-73.544-26.849-86.385-66.54-2.335-9.339-4.669-21.012-4.669-32.686 0-16.343 3.502-30.351 8.172-40.858 3.502-4.669 63.037-208.957 63.037-215.962 2.335-5.837 2.335-10.506 3.502-11.674 0-4.669 2.335-8.172 2.335-11.674 0-14.008-8.172-25.682-21.012-32.686-1.167-1.167-3.502-1.167-4.669-1.167-3.502 0-4.669 1.167-9.339 3.502-19.845 9.339-42.025 42.025-44.36 63.037 0 5.837-5.837 18.678-7.004 24.515-1.167 1.167-18.678 63.037-43.192 142.418-22.18 77.046-42.025 142.418-42.025 143.585-3.502 5.837 0 5.837-39.69 5.837-5.837 0-10.506 0-16.343 0-4.669 0-9.339 0-14.008 0-42.025 0-38.523 0-42.025-5.837-1.167-1.167-1.167-1.167-1.167-2.335 0-8.172 8.172-32.686 44.36-161.096 25.682-84.050 46.694-154.092 46.694-156.426 0-3.502 1.167-8.172 1.167-11.674 1.167-3.502 1.167-8.172 1.167-11.674 0-14.008-5.837-25.682-17.51-32.686-2.335-1.167-5.837-1.167-8.172-1.167-1.167 0-2.335 1.167-7.004 3.502-19.845 9.339-42.025 42.025-44.36 63.037 0 5.837-5.837 18.678-7.004 24.515-1.167 1.167-21.012 63.037-43.192 142.418-23.347 77.046-42.025 142.418-42.025 143.585-3.502 5.837-2.335 5.837-42.025 5.837-3.502 0-9.339 0-15.176 0-4.669 0-10.506 0-12.841 0-42.025 0-39.69 0-43.192-5.837 0-1.167 0-1.167 0-2.335 0-8.172 5.837-32.686 44.36-161.096 23.347-84.050 44.36-154.092 46.694-156.426 0-3.502 0-8.172 1.167-11.674 0-3.502 1.167-8.172 1.167-11.674 0-14.008-5.837-25.682-17.51-30.351-2.335-2.335-5.837-3.502-9.339-3.502-4.669 0-10.506 3.502-22.18 8.172-33.853 17.51-65.372 56.033-84.050 105.062-4.669 15.176-8.172 17.51-14.008 17.51 0 0-2.335 0-2.335 0-7.004 0-10.506-2.335-10.506-10.506s4.669-21.012 15.176-42.025c25.682-53.699 61.87-94.556 107.397-120.238 4.669-2.335 10.506-4.669 11.674-7.004 5.837-2.335 15.176-5.837 25.682-8.172z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mezzo"],"defaultCode":59667,"grid":16},"attrs":[],"properties":{"id":42,"order":942,"ligatures":"","prevSize":32,"code":59668,"name":"mezzo"},"setIdx":0,"setId":3,"iconIdx":52},{"icon":{"paths":["M371 166.405c1.932 0 3.864 0 5.797 0 7.729 0 18.356 0 22.22 1.932 21.254 4.83 39.61 18.356 51.203 35.745 2.898 5.797 7.729 16.424 8.695 19.322 0 0 0 0.966 0 0.966 1.932 0 1.932-2.898 5.797-6.763 7.729-13.525 18.356-24.152 29.949-33.813 3.864-1.932 6.763-6.763 7.729-7.729 6.763-6.763 20.288-9.661 35.745-9.661 7.729 0 17.39 1.932 25.118 4.83 17.39 4.83 33.813 18.356 44.44 32.847 2.898 5.797 7.729 16.424 7.729 19.322 0 0 0 0.966 1.932 0.966 0 0 0.966-2.898 3.864-6.763 8.695-13.525 19.322-24.152 31.881-33.813 1.932-1.932 5.797-6.763 7.729-7.729 4.83-6.763 19.322-9.661 33.813-9.661 9.661 0 17.39 0 25.118 2.898 33.813 12.559 57.965 45.406 57.965 85.016 0 11.593-2.898 26.084-6.763 34.779-0.966 1.932-51.203 172.93-52.169 179.693 0 1.932-1.932 7.729-1.932 8.695-0.966 2.898-0.966 6.763-0.966 9.661 0 10.627 4.83 20.288 11.593 20.288 0 0 0 0 0 0 32.847-5.797 72.457-47.338 91.779-99.507 3.864-9.661 5.797-11.593 10.627-11.593 1.932 0 1.932 0 1.932 0 5.797 0.966 8.695 1.932 8.695 8.695s-3.864 19.322-14.491 39.61c-22.22 43.474-50.237 76.321-88.88 96.609l-12.559 6.763c-8.695 4.83-18.356 7.729-27.051 7.729-29.949 0-60.864-22.22-71.491-55.067-1.932-7.729-3.864-17.39-3.864-27.051 0-13.525 2.898-25.118 6.763-33.813 2.898-3.864 52.169-172.93 52.169-178.727 1.932-4.83 1.932-8.695 2.898-9.661 0-3.864 1.932-6.763 1.932-9.661 0-11.593-6.763-21.254-17.39-27.051-0.966-0.966-2.898-0.966-3.864-0.966-2.898 0-3.864 0.966-7.729 2.898-16.424 7.729-34.779 34.779-36.711 52.169 0 4.83-4.83 15.457-5.797 20.288-0.966 0.966-15.457 52.169-35.745 117.863-18.356 63.762-34.779 117.863-34.779 118.829-2.898 4.83 0 4.83-32.847 4.83-4.83 0-8.695 0-13.525 0-3.864 0-7.729 0-11.593 0-34.779 0-31.881 0-34.779-4.83-0.966-0.966-0.966-0.966-0.966-1.932 0-6.763 6.763-27.051 36.711-133.321 21.254-69.559 38.644-127.524 38.644-129.456 0-2.898 0.966-6.763 0.966-9.661 0.966-2.898 0.966-6.763 0.966-9.661 0-11.593-4.83-21.254-14.491-27.051-1.932-0.966-4.83-0.966-6.763-0.966-0.966 0-1.932 0.966-5.797 2.898-16.424 7.729-34.779 34.779-36.711 52.169 0 4.83-4.83 15.457-5.797 20.288-0.966 0.966-17.39 52.169-35.745 117.863-19.322 63.762-34.779 117.863-34.779 118.829-2.898 4.83-1.932 4.83-34.779 4.83-2.898 0-7.729 0-12.559 0-3.864 0-8.695 0-10.627 0-34.779 0-32.847 0-35.745-4.83 0-0.966 0-0.966 0-1.932 0-6.763 4.83-27.051 36.711-133.321 19.322-69.559 36.711-127.524 38.644-129.456 0-2.898 0-6.763 0.966-9.661 0-2.898 0.966-6.763 0.966-9.661 0-11.593-4.83-21.254-14.491-25.118-1.932-1.932-4.83-2.898-7.729-2.898-3.864 0-8.695 2.898-18.356 6.763-28.017 14.491-54.101 46.372-69.559 86.948-3.864 12.559-6.763 14.491-11.593 14.491 0 0-1.932 0-1.932 0-5.797 0-8.695-1.932-8.695-8.695s3.864-17.39 12.559-34.779c21.254-44.44 51.203-78.253 88.88-99.507 3.864-1.932 8.695-3.864 9.661-5.797 4.83-1.932 12.559-4.83 21.254-6.763zM973.209 159.642c1.932 0 5.797-0.966 10.627-0.966 32.847 0 60.864 18.356 78.253 48.305 3.864 9.661 10.627 27.051 10.627 31.881 0 2.898 0 3.864 0 3.864 0.966 0 2.898-1.932 5.797-4.83 28.017-34.779 70.525-62.796 96.609-65.694 3.864 0 6.763-0.966 9.661-0.966 47.338 0 90.813 41.542 102.406 95.643 2.898 9.661 2.898 20.288 2.898 33.813 0 19.322-1.932 43.474-5.797 62.796-19.322 109.168-91.779 191.286-174.862 199.015-3.864 1.932-7.729 1.932-11.593 1.932-15.457 0-29.949-4.83-38.644-11.593l-8.695-7.729c-18.356-14.491-31.881-34.779-39.61-57.965 0-2.898-0.966-4.83-0.966-4.83s0 0 0 0c-1.932 0.966-71.491 234.76-71.491 237.658 0 0 0 0.966 0 0.966 0 3.864 5.797 6.763 20.288 11.593 3.864 0 4.83 1.932 16.424 4.83 13.525 3.864 16.424 6.763 16.424 15.457s-1.932 10.627-6.763 13.525l-2.898 2.898h-227.997l-3.864-2.898c-4.83-2.898-6.763-4.83-6.763-13.525s3.864-13.525 17.39-15.457c13.525-2.898 14.491-2.898 21.254-4.83 2.898-0.966 4.83-1.932 6.763-1.932 0 0 3.864-1.932 5.797-1.932 12.559-4.83 20.288-10.627 24.152-17.39 2.898-4.83 133.321-448.266 133.321-452.131 0-2.898 0.966-6.763 2.898-10.627 0.966-3.864 0.966-7.729 0.966-10.627 0-12.559-5.797-21.254-11.593-21.254 0 0 0 0 0 0-28.983 1.932-67.626 42.508-86.948 90.813-3.864 12.559-6.763 14.491-11.593 14.491 0 0-1.932 0-1.932 0-4.83 0-8.695-1.932-8.695-8.695s4.83-19.322 14.491-37.678c19.322-40.576 45.406-71.491 80.186-93.711 3.864-4.83 8.695-8.695 11.593-9.661 4.83-5.797 19.322-10.627 31.881-12.559zM1155.8 234.031c-2.898-1.932-5.797-1.932-7.729-1.932-17.39 0-43.474 13.525-63.762 33.813-11.593 10.627-12.559 13.525-15.457 18.356-0.966 4.83-2.898 8.695-3.864 11.593-0.966 1.932-9.661 28.017-22.22 70.525l-20.288 68.592v4.83c1.932 15.457 6.763 30.915 14.491 43.474 6.763 10.627 20.288 20.288 27.051 20.288 0 0 0.966 0 1.932 0 0 0 5.797-2.898 9.661-3.864 41.542-20.288 84.050-75.355 101.44-134.287 5.797-26.084 9.661-52.169 9.661-74.389 0-11.593-0.966-22.22-4.83-28.983-3.864-12.559-17.39-25.118-26.084-28.017z"],"width":1483,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mezzopiano"],"defaultCode":59668,"grid":16},"attrs":[],"properties":{"id":43,"order":943,"ligatures":"","prevSize":32,"code":59669,"name":"mezzopiano"},"setIdx":0,"setId":3,"iconIdx":53},{"icon":{"paths":["M514.578 129.366c0.824 0 1.648 0 3.296 0 4.944 0 14.008 0 19.776 0 2.472 0 8.24 0 9.888 0.824 35.433 2.472 72.514 28.841 77.458 57.681 1.648 4.12 2.472 7.416 2.472 12.36 0 32.137-27.193 58.505-56.857 58.505-7.416 0-14.832-1.648-21.424-4.944-20.6-9.064-30.489-28.841-30.489-47.793 0-14.832 5.768-28.841 18.952-38.729 1.648-1.648 1.648-1.648 1.648-1.648s0 0 0 0c-1.648 0-12.36 5.768-18.128 10.712-40.377 26.369-74.986 79.93-98.058 145.851-0.824 4.944-1.648 8.24-1.648 8.24 0 1.648 13.184 1.648 29.665 1.648 32.961 0 33.785 0 37.081 1.648 8.24 4.944 11.536 11.536 11.536 19.776 0 6.592-3.296 14.008-9.888 17.304-4.944 3.296-3.296 4.12-37.081 4.12h-43.673l-1.648 5.768c-22.249 117.835-65.922 229.077-125.251 318.071-40.377 63.449-89.818 98.882-145.851 108.77-5.768 1.648-11.536 1.648-17.304 1.648-37.081 0-65.922-19.776-77.458-52.737-2.472-8.24-3.296-17.304-3.296-25.545 0-32.961 22.249-59.329 55.209-59.329 4.12 0 9.888 1.648 16.48 2.472 25.545 6.592 38.729 30.489 38.729 53.561 0 17.304-6.592 34.609-23.073 43.673-1.648 0.824-3.296 2.472-3.296 2.472s1.648 0 1.648 0c0 0 1.648 0 4.12-1.648 26.369-7.416 51.913-32.961 68.394-67.57 19.776-37.081 42.025-120.307 80.754-286.759 4.944-23.073 9.064-41.201 10.712-42.849 0 0 0 0 0 0s-3.296 0-36.257 0c-37.081 0-37.081 0-41.201-3.296-6.592-4.12-11.536-11.536-11.536-18.128 0-8.24 4.944-14.832 11.536-19.776 3.296-1.648 4.12-1.648 46.969-1.648l41.201-1.648 3.296-9.064c38.729-108.77 122.779-185.404 212.597-191.996zM875.99 129.366c0.824 0 1.648 0 3.296 0 4.944 0 14.008 0 19.776 0 2.472 0 8.24 0 9.888 0.824 35.433 2.472 72.514 28.841 77.458 57.681 1.648 4.12 2.472 7.416 2.472 12.36 0 32.137-27.193 58.505-56.857 58.505-7.416 0-14.832-1.648-21.424-4.944-20.6-9.064-30.489-28.841-30.489-47.793 0-14.832 5.768-28.841 18.952-38.729 1.648-1.648 1.648-1.648 1.648-1.648s0 0 0 0c-1.648 0-12.36 5.768-18.128 10.712-40.377 26.369-74.986 79.93-98.058 145.851-0.824 4.944-1.648 8.24-1.648 8.24 0 1.648 13.184 1.648 29.665 1.648 32.961 0 33.785 0 37.081 1.648 8.24 4.944 11.536 11.536 11.536 19.776 0 6.592-3.296 14.008-9.888 17.304-4.944 3.296-3.296 4.12-37.081 4.12h-43.673l-1.648 5.768c-22.249 117.835-65.922 229.077-125.251 318.071-40.377 63.449-89.818 98.882-145.851 108.77-5.768 1.648-11.536 1.648-17.304 1.648-37.081 0-65.922-19.776-77.458-52.737-2.472-8.24-3.296-17.304-3.296-25.545 0-32.961 22.249-59.329 55.209-59.329 4.12 0 9.888 1.648 16.48 2.472 25.545 6.592 38.729 30.489 38.729 53.561 0 17.304-6.592 34.609-23.073 43.673-1.648 0.824-3.296 2.472-3.296 2.472s1.648 0 1.648 0c0 0 1.648 0 4.12-1.648 26.369-7.416 51.913-32.961 68.394-67.57 19.776-37.081 42.025-120.307 80.754-286.759 4.944-23.073 9.064-41.201 10.712-42.849 0 0 0 0 0 0s-3.296 0-36.257 0c-37.081 0-37.081 0-41.201-3.296-6.592-4.12-11.536-11.536-11.536-18.128 0-8.24 4.944-14.832 11.536-19.776 3.296-1.648 4.12-1.648 46.969-1.648l41.201-1.648 3.296-9.064c38.729-108.77 122.779-185.404 212.597-191.996z"],"width":1114,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fortissimo"],"defaultCode":59669,"grid":16},"attrs":[],"properties":{"id":44,"order":944,"ligatures":"","prevSize":32,"code":59670,"name":"fortissimo"},"setIdx":0,"setId":3,"iconIdx":54},{"icon":{"paths":["M372.933 159.642c1.932 0 5.797-0.966 10.627-0.966 32.847 0 60.864 18.356 78.253 48.305 3.864 9.661 10.627 27.051 10.627 31.881 0 2.898 0 3.864 0 3.864 0.966 0 2.898-1.932 5.797-4.83 28.017-34.779 70.525-62.796 96.609-65.694 3.864 0 6.763-0.966 9.661-0.966 47.338 0 90.813 41.542 102.406 95.643 2.898 9.661 2.898 20.288 2.898 33.813 0 19.322-1.932 43.474-5.797 62.796-19.322 109.168-91.779 191.286-174.862 199.015-3.864 1.932-7.729 1.932-11.593 1.932-15.457 0-29.949-4.83-38.644-11.593l-8.695-7.729c-18.356-14.491-31.881-34.779-39.61-57.965 0-2.898-0.966-4.83-0.966-4.83s0 0 0 0c-1.932 0.966-71.491 234.76-71.491 237.658 0 0 0 0.966 0 0.966 0 3.864 5.797 6.763 20.288 11.593 3.864 0 4.83 1.932 16.424 4.83 13.525 3.864 16.424 6.763 16.424 15.457s-1.932 10.627-6.763 13.525l-2.898 2.898h-227.997l-3.864-2.898c-4.83-2.898-6.763-4.83-6.763-13.525s3.864-13.525 17.39-15.457c13.525-2.898 14.491-2.898 21.254-4.83 2.898-0.966 4.83-1.932 6.763-1.932 0 0 3.864-1.932 5.797-1.932 12.559-4.83 20.288-10.627 24.152-17.39 2.898-4.83 133.321-448.266 133.321-452.131 0-2.898 0.966-6.763 2.898-10.627 0.966-3.864 0.966-7.729 0.966-10.627 0-12.559-5.797-21.254-11.593-21.254 0 0 0 0 0 0-28.983 1.932-67.626 42.508-86.948 90.813-3.864 12.559-6.763 14.491-11.593 14.491 0 0-1.932 0-1.932 0-4.83 0-8.695-1.932-8.695-8.695s4.83-19.322 14.491-37.678c19.322-40.576 45.406-71.491 80.186-93.711 3.864-4.83 8.695-8.695 11.593-9.661 4.83-5.797 19.322-10.627 31.881-12.559zM555.524 234.031c-2.898-1.932-5.797-1.932-7.729-1.932-17.39 0-43.474 13.525-63.762 33.813-11.593 10.627-12.559 13.525-15.457 18.356-0.966 4.83-2.898 8.695-3.864 11.593-0.966 1.932-9.661 28.017-22.22 70.525l-20.288 68.592v4.83c1.932 15.457 6.763 30.915 14.491 43.474 6.763 10.627 20.288 20.288 27.051 20.288 0 0 0.966 0 1.932 0 0 0 5.797-2.898 9.661-3.864 41.542-20.288 84.050-75.355 101.44-134.287 5.797-26.084 9.661-52.169 9.661-74.389 0-11.593-0.966-22.22-4.83-28.983-3.864-12.559-17.39-25.118-26.084-28.017zM867.277 159.642c1.932 0 5.797-0.966 10.627-0.966 32.847 0 60.864 18.356 78.253 48.305 3.864 9.661 10.627 27.051 10.627 31.881 0 2.898 0 3.864 0 3.864 0.966 0 2.898-1.932 5.797-4.83 28.017-34.779 70.525-62.796 96.609-65.694 3.864 0 6.763-0.966 9.661-0.966 47.338 0 90.813 41.542 102.406 95.643 2.898 9.661 2.898 20.288 2.898 33.813 0 19.322-1.932 43.474-5.797 62.796-19.322 109.168-91.779 191.286-174.862 199.015-3.864 1.932-7.729 1.932-11.593 1.932-15.457 0-29.949-4.83-38.644-11.593l-8.695-7.729c-18.356-14.491-31.881-34.779-39.61-57.965 0-2.898-0.966-4.83-0.966-4.83s0 0 0 0c-1.932 0.966-71.491 234.76-71.491 237.658 0 0 0 0.966 0 0.966 0 3.864 5.797 6.763 20.288 11.593 3.864 0 4.83 1.932 16.424 4.83 13.525 3.864 16.424 6.763 16.424 15.457s-1.932 10.627-6.763 13.525l-2.898 2.898h-227.997l-3.864-2.898c-4.83-2.898-6.763-4.83-6.763-13.525s3.864-13.525 17.39-15.457c13.525-2.898 14.491-2.898 21.254-4.83 2.898-0.966 4.83-1.932 6.763-1.932 0 0 3.864-1.932 5.797-1.932 12.559-4.83 20.288-10.627 24.152-17.39 2.898-4.83 133.321-448.266 133.321-452.131 0-2.898 0.966-6.763 2.898-10.627 0.966-3.864 0.966-7.729 0.966-10.627 0-12.559-5.797-21.254-11.593-21.254 0 0 0 0 0 0-28.983 1.932-67.626 42.508-86.948 90.813-3.864 12.559-6.763 14.491-11.593 14.491 0 0-1.932 0-1.932 0-4.83 0-8.695-1.932-8.695-8.695s4.83-19.322 14.491-37.678c19.322-40.576 45.406-71.491 80.186-93.711 3.864-4.83 8.695-8.695 11.593-9.661 4.83-5.797 19.322-10.627 31.881-12.559zM1049.869 234.031c-2.898-1.932-5.797-1.932-7.729-1.932-17.39 0-43.474 13.525-63.762 33.813-11.593 10.627-12.559 13.525-15.457 18.356-0.966 4.83-2.898 8.695-3.864 11.593-0.966 1.932-9.661 28.017-22.22 70.525l-20.288 68.592v4.83c1.932 15.457 6.763 30.915 14.491 43.474 6.763 10.627 20.288 20.288 27.051 20.288 0 0 0.966 0 1.932 0 0 0 5.797-2.898 9.661-3.864 41.542-20.288 84.050-75.355 101.44-134.287 5.797-26.084 9.661-52.169 9.661-74.389 0-11.593-0.966-22.22-4.83-28.983-3.864-12.559-17.39-25.118-26.084-28.017z"],"width":1483,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pianissimo"],"defaultCode":59670,"grid":16},"attrs":[],"properties":{"id":45,"order":945,"ligatures":"","prevSize":32,"code":59671,"name":"pianissimo"},"setIdx":0,"setId":3,"iconIdx":55},{"icon":{"paths":["M388.657 342.957c1.932 0 3.864 0 5.797 0 7.729 0 18.356 0 22.22 1.932 21.254 4.83 39.61 18.356 51.203 35.745 2.898 5.797 7.729 16.424 8.695 19.322 0 0 0 0.966 0 0.966 1.932 0 1.932-2.898 5.797-6.763 7.729-13.525 18.356-24.152 29.949-33.813 3.864-1.932 6.763-6.763 7.729-7.729 6.763-6.763 20.288-9.661 35.745-9.661 7.729 0 17.39 1.932 25.118 4.83 17.39 4.83 33.813 18.356 44.44 32.847 2.898 5.797 7.729 16.424 7.729 19.322 0 0 0 0.966 1.932 0.966 0 0 0.966-2.898 3.864-6.763 8.695-13.525 19.322-24.152 31.881-33.813 1.932-1.932 5.797-6.763 7.729-7.729 4.83-6.763 19.322-9.661 33.813-9.661 9.661 0 17.39 0 25.118 2.898 33.813 12.559 57.965 45.406 57.965 85.016 0 11.593-2.898 26.084-6.763 34.779-0.966 1.932-51.203 172.93-52.169 179.693 0 1.932-1.932 7.729-1.932 8.695-0.966 2.898-0.966 6.763-0.966 9.661 0 10.627 4.83 20.288 11.593 20.288 0 0 0 0 0 0 32.847-5.797 72.457-47.338 91.779-99.507 3.864-9.661 5.797-11.593 10.627-11.593 1.932 0 1.932 0 1.932 0 5.797 0.966 8.695 1.932 8.695 8.695s-3.864 19.322-14.491 39.61c-22.22 43.474-50.237 76.321-88.88 96.609l-12.559 6.763c-8.695 4.83-18.356 7.729-27.051 7.729-29.949 0-60.864-22.22-71.491-55.067-1.932-7.729-3.864-17.39-3.864-27.051 0-13.525 2.898-25.118 6.763-33.813 2.898-3.864 52.169-172.93 52.169-178.727 1.932-4.83 1.932-8.695 2.898-9.661 0-3.864 1.932-6.763 1.932-9.661 0-11.593-6.763-21.254-17.39-27.051-0.966-0.966-2.898-0.966-3.864-0.966-2.898 0-3.864 0.966-7.729 2.898-16.424 7.729-34.779 34.779-36.711 52.169 0 4.83-4.83 15.457-5.797 20.288-0.966 0.966-15.457 52.169-35.745 117.863-18.356 63.762-34.779 117.863-34.779 118.829-2.898 4.83 0 4.83-32.847 4.83-4.83 0-8.695 0-13.525 0-3.864 0-7.729 0-11.593 0-34.779 0-31.881 0-34.779-4.83-0.966-0.966-0.966-0.966-0.966-1.932 0-6.763 6.763-27.051 36.711-133.321 21.254-69.559 38.644-127.524 38.644-129.456 0-2.898 0.966-6.763 0.966-9.661 0.966-2.898 0.966-6.763 0.966-9.661 0-11.593-4.83-21.254-14.491-27.051-1.932-0.966-4.83-0.966-6.763-0.966-0.966 0-1.932 0.966-5.797 2.898-16.424 7.729-34.779 34.779-36.711 52.169 0 4.83-4.83 15.457-5.797 20.288-0.966 0.966-17.39 52.169-35.745 117.863-19.322 63.762-34.779 117.863-34.779 118.829-2.898 4.83-1.932 4.83-34.779 4.83-2.898 0-7.729 0-12.559 0-3.864 0-8.695 0-10.627 0-34.779 0-32.847 0-35.745-4.83 0-0.966 0-0.966 0-1.932 0-6.763 4.83-27.051 36.711-133.321 19.322-69.559 36.711-127.524 38.644-129.456 0-2.898 0-6.763 0.966-9.661 0-2.898 0.966-6.763 0.966-9.661 0-11.593-4.83-21.254-14.491-25.118-1.932-1.932-4.83-2.898-7.729-2.898-3.864 0-8.695 2.898-18.356 6.763-28.017 14.491-54.101 46.372-69.559 86.948-3.864 12.559-6.763 14.491-11.593 14.491 0 0-1.932 0-1.932 0-5.797 0-8.695-1.932-8.695-8.695s3.864-17.39 12.559-34.779c21.254-44.44 51.203-78.253 88.88-99.507 3.864-1.932 8.695-3.864 9.661-5.797 4.83-1.932 12.559-4.83 21.254-6.763zM1256.54 151.671c0.966 0 1.932 0 3.864 0 5.797 0 16.424 0 23.186 0 2.898 0 9.661 0 11.593 0.966 41.542 2.898 85.016 33.813 90.813 67.626 1.932 4.83 2.898 8.695 2.898 14.491 0 37.678-31.881 68.592-66.66 68.592-8.695 0-17.39-1.932-25.118-5.797-24.152-10.627-35.745-33.813-35.745-56.033 0-17.39 6.763-33.813 22.22-45.406 1.932-1.932 1.932-1.932 1.932-1.932s0 0 0 0c-1.932 0-14.491 6.763-21.254 12.559-47.338 30.915-87.914 93.711-114.965 170.998-0.966 5.797-1.932 9.661-1.932 9.661 0 1.932 15.457 1.932 34.779 1.932 38.644 0 39.61 0 43.474 1.932 9.661 5.797 13.525 13.525 13.525 23.186 0 7.729-3.864 16.424-11.593 20.288-5.797 3.864-3.864 4.83-43.474 4.83h-51.203l-1.932 6.763c-26.084 138.151-77.287 268.573-146.846 372.911-47.338 74.389-105.304 115.931-170.998 127.524-6.763 1.932-13.525 1.932-20.288 1.932-43.474 0-77.287-23.186-90.813-61.83-2.898-9.661-3.864-20.288-3.864-29.949 0-38.644 26.084-69.559 64.728-69.559 4.83 0 11.593 1.932 19.322 2.898 29.949 7.729 45.406 35.745 45.406 62.796 0 20.288-7.729 40.576-27.051 51.203-1.932 0.966-3.864 2.898-3.864 2.898s1.932 0 1.932 0c0 0 1.932 0 4.83-1.932 30.915-8.695 60.864-38.644 80.186-79.219 23.186-43.474 49.271-141.049 94.677-336.2 5.797-27.051 10.627-48.305 12.559-50.237 0 0 0 0 0 0s-3.864 0-42.508 0c-43.474 0-43.474 0-48.305-3.864-7.729-4.83-13.525-13.525-13.525-21.254 0-9.661 5.797-17.39 13.525-23.186 3.864-1.932 4.83-1.932 55.067-1.932l48.305-1.932 3.864-10.627c45.406-127.524 143.948-217.37 249.251-225.099z"],"width":1660,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mezzoforte"],"defaultCode":59671,"grid":16},"attrs":[],"properties":{"id":46,"order":946,"ligatures":"","prevSize":32,"code":59672,"name":"mezzoforte"},"setIdx":0,"setId":3,"iconIdx":56},{"icon":{"paths":["M353.298 294.994c2.472 0 4.12 0 6.592 0 40.377 0 87.346 18.128 97.234 40.377 4.12 5.768 4.944 12.36 4.944 18.128 0 19.776-13.184 38.729-32.961 42.025-3.296 1.648-4.944 1.648-8.24 1.648-20.6 0-37.081-17.304-37.081-37.081 0-5.768 0.824-11.536 4.12-17.304 0.824-1.648 0.824-3.296 0.824-3.296s0 0 0 0c0-0.824-1.648-0.824-4.944-0.824-3.296-1.648-7.416-1.648-10.712-1.648-23.073 0-45.321 11.536-52.737 28.017 0 0.824 0 2.472 0 4.12 0 13.184 19.776 37.081 42.025 49.441 12.36 8.24 16.48 10.712 22.249 14.008 36.257 27.193 55.209 62.625 55.209 95.586 0 13.184-2.472 25.545-9.064 35.433-21.424 40.377-62.625 63.449-111.243 63.449-5.768 0-12.36 0-18.952-0.824-28.841-4.12-65.097-19.776-80.754-36.257-8.24-7.416-11.536-17.304-11.536-27.193 0-18.128 12.36-37.905 31.313-42.025 3.296-1.648 7.416-2.472 10.712-2.472 21.424 0 37.905 18.128 37.905 37.905 0 6.592-2.472 13.184-6.592 20.6l-2.472 4.12h0.824c8.24 3.296 17.304 4.944 27.193 4.944 9.064 0 18.128-1.648 24.721-4.944 18.952-6.592 31.313-20.6 31.313-32.137 0-0.824 0-3.296-0.824-4.12-6.592-19.776-18.952-32.137-43.673-46.145-46.145-26.369-74.162-68.394-74.162-108.77 0-12.36 3.296-24.721 9.064-36.257 18.128-32.961 56.033-56.033 99.706-58.505zM830.814 129.366c0.824 0 1.648 0 3.296 0 4.944 0 14.008 0 19.776 0 2.472 0 8.24 0 9.888 0.824 35.433 2.472 72.514 28.841 77.458 57.681 1.648 4.12 2.472 7.416 2.472 12.36 0 32.137-27.193 58.505-56.857 58.505-7.416 0-14.832-1.648-21.424-4.944-20.6-9.064-30.489-28.841-30.489-47.793 0-14.832 5.768-28.841 18.952-38.729 1.648-1.648 1.648-1.648 1.648-1.648s0 0 0 0c-1.648 0-12.36 5.768-18.128 10.712-40.377 26.369-74.986 79.93-98.058 145.851-0.824 4.944-1.648 8.24-1.648 8.24 0 1.648 13.184 1.648 29.665 1.648 32.961 0 33.785 0 37.081 1.648 8.24 4.944 11.536 11.536 11.536 19.776 0 6.592-3.296 14.008-9.888 17.304-4.944 3.296-3.296 4.12-37.081 4.12h-43.673l-1.648 5.768c-22.249 117.835-65.922 229.077-125.251 318.071-40.377 63.449-89.818 98.882-145.851 108.77-5.768 1.648-11.536 1.648-17.304 1.648-37.081 0-65.922-19.776-77.458-52.737-2.472-8.24-3.296-17.304-3.296-25.545 0-32.961 22.249-59.329 55.209-59.329 4.12 0 9.888 1.648 16.48 2.472 25.545 6.592 38.729 30.489 38.729 53.561 0 17.304-6.592 34.609-23.073 43.673-1.648 0.824-3.296 2.472-3.296 2.472s1.648 0 1.648 0c0 0 1.648 0 4.12-1.648 26.369-7.416 51.913-32.961 68.394-67.57 19.776-37.081 42.025-120.307 80.754-286.759 4.944-23.073 9.064-41.201 10.712-42.849 0 0 0 0 0 0s-3.296 0-36.257 0c-37.081 0-37.081 0-41.201-3.296-6.592-4.12-11.536-11.536-11.536-18.128 0-8.24 4.944-14.832 11.536-19.776 3.296-1.648 4.12-1.648 46.969-1.648l41.201-1.648 3.296-9.064c38.729-108.77 122.779-185.404 212.597-191.996zM907.94 318.066c1.648 0 42.025-1.648 87.346-1.648 70.042 0 154.916 1.648 156.564 1.648 4.12 2.472 7.416 8.24 7.416 12.36 0 3.296-0.824 7.416-4.12 9.064-14.832 13.184-194.468 165.628-195.292 165.628 0 0 0 0.824 0 0.824s0 0 2.472 0c0.824 0 3.296 0 6.592 0 0.824 0 1.648 0 3.296 0 18.128 0 32.137 4.944 44.497 15.656 15.656 12.36 27.193 18.128 40.377 18.952 2.472 0 3.296 0 4.944 0 7.416 0 10.712-3.296 16.48-13.184 0 0 0 0 0 0s0 0 0 0-0.824 0-2.472 0c-0.824 0.824-3.296 0.824-4.944 0.824-10.712 0-20.6-5.768-24.721-14.008-3.296-5.768-4.944-11.536-4.944-15.656 0-18.952 14.832-33.785 34.609-33.785 0 0 0 0 0 0 23.073 0 35.433 16.48 35.433 40.377 0 8.24-2.472 18.128-5.768 29.665-4.944 14.008-12.36 22.249-36.257 40.377-22.249 17.304-47.793 26.369-71.69 26.369-9.064 0-16.48-0.824-24.721-3.296-9.064-2.472-13.184-4.944-21.424-10.712-14.008-9.888-31.313-14.832-47.793-14.832-18.128 0-34.609 5.768-43.673 17.304-2.472 2.472-4.944 3.296-8.24 3.296-5.768 0-10.712-1.648-13.184-7.416 0-1.648-1.648-4.12-1.648-4.944 0-8.24 8.24-15.656 32.137-32.961 4.12-4.12 175.516-149.971 178.812-151.619 0 0 0 0 0 0 0-1.648-19.776-1.648-44.497-1.648-33.785 0-74.162 1.648-77.458 1.648-12.36 1.648-22.249 7.416-36.257 18.952-4.12 4.12-8.24 5.768-12.36 5.768-3.296 0-6.592-1.648-9.888-5.768-0.824-1.648-2.472-3.296-2.472-5.768 0-5.768 4.944-14.832 18.128-46.969 18.952-42.025 18.952-43.673 24.721-44.497z"],"width":1265,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sfz"],"defaultCode":59672,"grid":16},"attrs":[],"properties":{"id":47,"order":947,"ligatures":"","prevSize":32,"code":59673,"name":"sfz"},"setIdx":0,"setId":3,"iconIdx":57},{"icon":{"paths":["M86.78 433.898v-351.395h81.976v703.79h-81.976v-352.395zM199.246 433.898v-351.395h21.494v336.4l2.999-2.999c4.999-3.999 13.996-13.496 19.994-21.494 21.494-28.991 38.988-66.98 49.485-111.467 2.999-10.997 3.999-12.496 9.497-12.496s7.498 2.499 8.497 10.497c3.999 55.483 39.988 95.472 80.976 95.472 6.498 0 13.496-1 19.994-3.499 26.992-8.997 36.489-32.99 38.489-96.971 0-12.996 0.5-24.993 0.5-35.989 0-72.478-8.997-106.968-28.991-123.463-10.997-8.497-27.492-13.496-44.987-13.496-17.995 0-35.489 4.499-51.984 12.496l-1 1 1 0.5c5.498 1 8.997 1.5 12.996 3.499 14.496 7.498 20.994 21.494 20.994 35.489 0 15.995-9.497 32.49-26.992 37.989-4.999 1.999-8.997 2.999-12.996 2.999-23.993 0-42.987-20.994-42.987-44.487 0-6.498 1.5-12.496 4.999-19.494 9.997-19.494 44.987-39.488 75.977-44.487 6.998-0.5 13.496-1.5 20.494-1.5 65.98 0 125.962 47.986 141.458 115.965 2.999 10.997 3.999 22.993 3.999 34.99 0 12.496-1 25.492-3.999 37.489-12.996 61.482-58.483 107.968-112.966 116.465-4.499 0.5-9.497 0.5-13.496 0.5-17.495 0-34.49-5.498-50.485-16.495-1-1.5-2.499-1.999-3.499-1.999 0 0 0 0 0 0s-7.998 13.496-17.495 30.491l-18.494 29.991 18.494 29.991c9.497 16.495 17.495 30.491 17.495 30.491s0 0 0 0c1 0 2.499-1 3.499-2.499 15.995-10.997 32.99-16.495 50.485-16.495 8.997 0 17.495 1.5 26.492 3.499 52.984 15.495 92.472 62.481 101.97 123.463 1.5 8.997 1.999 17.995 1.999 26.992 0 38.489-12.996 73.478-37.489 101.47-28.491 33.49-68.979 49.985-108.468 49.985-31.99 0-63.481-11.996-87.474-34.49-8.497-9.497-12.496-20.494-12.496-31.491 0-21.993 15.995-42.987 41.987-42.987 24.493 0 39.988 20.994 39.988 40.988 0 13.996-6.498 26.992-20.994 34.49-3.999 1.999-7.498 2.999-12.996 3.499l-1 1 1 0.5c16.495 8.497 33.99 12.496 51.984 12.496 17.495 0 33.99-4.999 44.987-12.996 19.994-16.995 28.991-51.485 28.991-122.963 0-11.996-0.5-23.493-0.5-36.989-2.999-71.979-14.996-96.471-52.484-99.97-1.999-0.5-3.999-0.5-5.998-0.5-41.488 0-76.977 40.988-80.976 95.971-1 7.498-2.999 9.997-8.497 9.997s-6.498-1-9.497-12.496c-10.497-43.987-27.992-82.475-49.485-111.467-5.998-7.498-14.996-17.495-19.994-21.494l-2.999-2.999v336.899h-21.494v-352.395zM0 260.339h781.017v17.356h-781.017zM0 433.898h781.017v17.356h-781.017zM0 607.458h781.017v17.356h-781.017zM0 781.017h781.017v17.356h-781.017zM0 954.576h781.017v17.356h-781.017z"],"width":729,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["tenor"],"defaultCode":59673,"grid":16},"attrs":[],"properties":{"id":48,"order":948,"ligatures":"","prevSize":32,"code":59674,"name":"tenor"},"setIdx":0,"setId":3,"iconIdx":58},{"icon":{"paths":["M334.093 80.245v754.77h17.697v-754.77zM273.74 727.064c1.988 0 4.969 0 5.466 0 0 0 0.497 0 0.497 0s2.982 0 5.466 0c44.723 2.902 71.060 37.144 71.060 80.092 0 20.894-5.963 44.689-20.871 67.324-28.325 44.689-74.539 69.065-114.789 69.065-31.306 0-58.14-14.509-71.060-44.109-3.975-11.608-5.963-22.635-5.963-34.823 0-63.261 60.625-133.487 130.194-137.549zM390.654 301.818l0.013 4.4 9.888-0.022-0.013-4.411zM405.499 306.185l9.888 0.011 0.013-4.4-9.901-0.011zM420.344 306.207l9.888 0.011 0.013-4.4-9.901-0.011zM375.809 301.851l0.013 4.4 9.888-0.022-0.013-4.4zM435.177 306.228l9.901 0.022 0.013-4.411-9.901-0.011zM450.022 306.25l9.901 0.022v-4.411l-9.888-0.011zM360.965 301.894l0.013 4.4 9.901-0.022-0.025-4.411zM464.866 306.272l9.901 0.022v-4.411l-9.888-0.011zM479.711 306.294l9.888 0.022 0.013-4.4-9.888-0.022zM346.12 301.927l0.013 4.4 9.901-0.022-0.013-4.4zM494.556 306.327l9.888 0.011 0.013-4.4-9.901-0.022zM331.275 301.971l0.013 4.4 9.901-0.022-0.013-4.411zM509.401 306.349l9.888 0.011 0.013-4.4-9.901-0.022zM524.234 306.371h1.968l7.921 0.055 0.038-4.4-9.913-0.066zM316.43 302.004l0.013 4.4c6.961-0.156 9.907 2.033 9.888-4.422zM301.585 302.037l0.025 4.411 9.888-0.033-0.013-4.4zM286.752 302.080l0.013 4.4 9.888-0.022-0.013-4.4zM539.066 306.458l9.901 0.077 0.038-4.4-9.901-0.077zM271.908 302.113l0.013 4.411 9.888-0.033-0.013-4.4zM257.063 302.157l0.013 4.4 9.901-0.022-0.025-4.4zM242.218 302.19l0.013 2.846h-2.472l0.037 8.81 4.956-0.022-0.037-7.234 7.416-0.022-0.013-4.4zM553.911 306.568l9.888 0.066 0.050-4.4-9.901-0.066zM568.756 306.677l9.888 0.066 0.038-4.4-9.888-0.077zM583.601 306.776l9.888 0.077 0.038-4.4-9.888-0.077zM598.433 306.885l9.901 0.066 0.038-4.4-9.888-0.066zM613.278 306.995h0.21l9.667 0.142 0.086-4.4-9.926-0.153zM628.099 307.214l9.888 0.153 0.086-4.411-9.888-0.142zM642.944 307.444l9.888 0.142 0.086-4.4-9.888-0.153zM657.776 307.662l9.901 0.153 0.086-4.4-9.901-0.153zM672.584 307.892l9.888 0.274 0.16-4.4-9.888-0.274zM687.429 308.308l9.888 0.274 0.147-4.4-9.888-0.274zM702.262 308.713l5.192 0.142 4.637 0.241 0.271-4.4-4.749-0.241-5.202-0.142zM717.020 309.337l8.598 0.427 1.144 0.12 0.554-4.378-1.279-0.12-0.074-0.011h-0.063l-8.597-0.438zM731.914 308.483h-0.959l-0.074 7.442 4.944 0.044 0.086-7.453 0.013-1.642-2.73-0.744-0.222-0.055-0.222-0.022-0.529-0.055zM239.819 318.246l0.049 8.81 4.944-0.022-0.049-8.81zM730.746 329.136l4.944 0.033 0.098-8.8-4.956-0.044zM239.893 331.456l0.037 8.81 4.944-0.022-0.037-8.81zM730.611 342.346l4.956 0.033 0.086-8.8-4.944-0.044zM239.955 344.667l0.049 8.81 4.944-0.022-0.049-8.81zM730.475 355.546l4.956 0.044 0.086-8.81-4.944-0.033zM240.016 357.877l0.049 8.8 4.944-0.011-0.037-8.81zM730.34 368.756l4.956 0.044 0.086-8.81-4.944-0.033zM240.090 371.087l0.037 8.8 4.956-0.022-0.049-8.8zM730.217 381.966l4.944 0.044 0.086-8.81-4.944-0.044zM240.152 384.286l0.049 8.81 4.944-0.022-0.049-8.8zM730.082 395.176l4.944 0.033 0.086-8.8-4.944-0.044zM240.225 397.497l0.037 8.81 4.956-0.022-0.049-8.8zM729.947 408.387l4.944 0.033 0.086-8.8-4.944-0.044zM240.287 410.707l0.049 8.81 4.944-0.022-0.049-8.81zM729.811 421.586l4.944 0.044 0.086-8.8-4.944-0.044zM240.348 423.917l0.049 8.81 4.944-0.022-0.037-8.81zM729.676 434.796l4.944 0.044 0.086-8.81-4.944-0.033zM240.422 437.127l0.037 8.8 4.956-0.011-0.049-8.81zM729.541 448.007l4.944 0.044 0.086-8.81-4.944-0.044zM240.484 450.338l0.049 8.8 4.944-0.022-0.037-8.8zM729.405 461.217l4.944 0.033 0.098-8.8-4.956-0.044zM240.557 463.548l0.037 8.8 4.956-0.022-0.049-8.8zM729.27 474.427l4.944 0.033 0.098-8.8-4.956-0.044zM240.619 476.747l0.049 8.81 4.944-0.022-0.049-8.8zM729.135 487.626l4.944 0.044 0.098-8.8-4.956-0.044zM240.693 489.958l0.037 8.81 4.944-0.022-0.037-8.81zM729 500.837l4.944 0.044 0.098-8.81-4.944-0.033zM240.754 503.168l0.049 8.811 4.944-0.022-0.049-8.811zM728.864 514.047l4.956 0.045 0.086-8.811-4.944-0.033zM240.816 516.378l0.049 8.8 4.944-0.011-0.037-8.811zM728.729 527.257l4.956 0.045 0.086-8.811-4.944-0.045zM240.889 529.588l0.037 8.8 4.956-0.011-0.049-8.811zM728.594 540.467l4.956 0.034 0.086-8.8-4.944-0.045zM240.951 542.799l0.049 8.8 4.944-0.022-0.049-8.8zM728.471 553.667l4.944 0.045 0.086-8.8-4.944-0.045zM241.025 555.998l0.037 8.811 4.944-0.022-0.037-8.8zM728.335 566.877l4.944 0.045 0.086-8.811-4.944-0.034zM241.086 569.208l0.049 8.811 4.944-0.022-0.049-8.8zM728.2 580.087l4.944 0.045 0.086-8.811-4.944-0.034zM241.148 582.418l0.049 8.811 4.944-0.022-0.037-8.811zM728.065 593.297l4.944 0.045 0.086-8.81-4.944-0.045zM241.222 595.629l0.037 8.81 4.956-0.022-0.049-8.81zM727.93 606.508l4.944 0.034 0.086-8.8-4.944-0.045zM241.283 608.839l0.049 8.8 4.944-0.011-0.037-8.81zM727.794 619.718l4.944 0.034 0.086-8.8-4.944-0.045zM241.357 622.049l0.037 8.8 4.956-0.022-0.049-8.8zM727.659 632.917l4.944 0.045 0.098-8.81-4.956-0.034zM241.418 635.259l0.049 8.8 4.944-0.022-0.049-8.8zM727.524 646.128l4.944 0.045 0.098-8.811-4.956-0.034zM241.48 648.459l0.049 8.811 4.944-0.022-0.037-8.8zM727.388 659.338l4.944 0.045 0.098-8.811-4.956-0.045zM241.554 661.669l0.037 8.811 4.956-0.022-0.049-8.811zM727.253 672.548l4.956 0.034 0.086-8.8-4.944-0.045zM241.615 674.879l0.049 8.811 4.944-0.022-0.037-8.811zM727.118 685.758l4.956 0.034 0.086-8.8-4.944-0.045zM241.689 688.090l0.037 8.8 4.956-0.011-0.049-8.811zM726.983 698.958l4.956 0.045 0.086-8.811-4.944-0.034zM241.75 701.3l0.049 8.8 4.944-0.011-0.049-8.81zM726.847 712.168l4.956 0.045 0.086-8.81-4.944-0.034zM241.824 714.51l0.037 8.8 4.944-0.022-0.037-8.8zM726.724 725.378l4.944 0.045 0.086-8.81-4.944-0.045zM241.886 727.709l0.049 8.81 4.944-0.022-0.049-8.8zM726.589 738.589l4.944 0.034 0.086-8.8-4.944-0.045zM241.947 740.92l0.049 8.811 4.944-0.022-0.037-8.811zM726.454 751.799l4.944 0.034 0.086-8.8-4.944-0.045zM242.021 754.13l0.037 7.913 0.013 2.189h3.468v-2.2l1.464-0.011-0.037-7.913zM726.368 759.832h-0.91v4.4h5.817l0.025-2.178 0.050-5.812-4.944-0.045zM250.483 764.232h9.901v-4.4h-9.901zM265.328 764.232h9.888v-4.4h-9.888zM280.172 764.232h9.888v-4.4h-9.888zM295.017 764.232h9.888v-4.4h-9.888zM309.85 764.232h9.901v-4.4h-9.901zM324.695 764.232h9.901v-4.4h-9.901zM339.54 764.232h9.901v-4.4h-9.901zM354.385 764.232h9.901v-4.4h-9.901zM369.229 764.232h9.888v-4.4h-9.888zM384.074 764.232h9.888v-4.4h-9.888zM398.919 764.232h9.888v-4.4h-9.888zM413.752 764.232h9.901v-4.4h-9.901zM428.597 764.232h9.901v-4.4h-9.901zM443.442 764.232h9.901v-4.4h-9.901zM458.286 764.232h9.901v-4.4h-9.901zM473.131 764.232h9.888v-4.4h-9.888zM487.976 764.232h9.888v-4.4h-9.888zM502.821 764.232h9.888v-4.4h-9.888zM517.654 764.232h9.901v-4.4h-9.901zM532.499 764.232h9.901v-4.4h-9.901zM547.343 764.232h9.901v-4.4h-9.901zM562.188 764.232h9.901v-4.4h-9.901zM577.033 764.232h9.888v-4.4h-9.888zM591.878 764.232h9.888v-4.4h-9.888zM606.723 764.232h9.888v-4.4h-9.888zM621.556 764.232h9.901v-4.4h-9.901zM636.4 764.232h9.901v-4.4h-9.901zM651.245 764.232h9.901v-4.4h-9.901zM666.090 764.232h9.901v-4.4h-9.901zM680.935 764.232h9.888v-4.4h-9.888zM695.78 764.232h9.888v-4.4h-9.888zM710.625 764.232h9.888v-4.4h-9.888zM765.775 74.618v760.988h17.697v-760.988zM705.422 726.767c1.988 0 4.969 0 5.466 0 0 0 0.497 0 0.497 0s2.982 0 5.466 0c44.723 2.926 71.060 37.45 71.060 80.752 0 21.066-5.963 45.057-20.871 67.878-28.325 45.057-74.539 69.634-114.789 69.634-31.306 0-58.14-14.629-71.060-44.472-3.975-11.703-5.963-22.821-5.963-35.109 0-63.782 60.625-134.586 130.194-138.682zM898.337-20.842l-59.011 0.697 0.682 41.465 34.104-0.403 0.026 12.212 49.22-0.073-0.073-33.201-0.042-21.002zM691.696-18.398l0.696 41.465 98.41-1.161-0.696-41.477zM544.081-16.649l0.682 41.465 98.425-1.161-0.696-41.477zM477.077-15.855l0.348 20.733-24.617 0.037 0.189 82.942 49.205-0.073-0.174-82.942-6.803 0.013-0.348-20.928zM874.242 74.593l0.174 82.942 49.219-0.073-0.189-82.942zM453.084 129.322l0.189 82.942 49.205-0.073-0.174-82.942zM874.518 199.013l0.174 82.942 49.219-0.086-0.189-82.93zM453.359 253.742l0.189 82.942 49.205-0.086-0.174-82.942zM874.793 323.421l0.174 82.942 49.219-0.073-0.189-82.943zM453.635 378.149l0.189 82.943 49.205-0.073-0.174-82.943zM875.054 447.841l0.189 82.942 49.22-0.086-0.189-82.942zM453.911 502.557l0.189 82.942 49.205-0.073-0.174-82.942zM875.33 572.248l0.189 82.942 49.205-0.073-0.174-82.943zM454.186 626.977l0.189 82.942 49.205-0.086-0.189-82.942zM875.606 696.656l0.189 82.943 49.205-0.073-0.174-82.942zM454.462 751.384l0.189 82.943 49.205-0.073-0.189-82.942zM875.881 821.075l0.189 82.942 49.205-0.086-0.174-82.942zM454.737 875.804l0.189 82.93 49.205-0.073-0.189-82.942zM876.157 945.483l0.174 77.124 17.698-0.021 0.116 20.745 31.435-0.124-0.042-20.684-0.174-77.111zM455.013 1000.212l0.058 24.058 0.044 20.794 94.551-0.378-0.232-41.465-45.201 0.171-0.016-3.252zM746.283 1002.436l0.218 41.477 98.425-0.391-0.232-41.465zM598.639 1003.023l0.232 41.465 98.425-0.379-0.232-41.477zM457.021-15.375l0.24 39.208-437.429 3.117-1.579 977.433 440.598 1.559-0.126 39.208-477.664-1.692 1.705-1055.451z"],"width":917,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["note_select_right"],"defaultCode":59674,"grid":16},"attrs":[],"properties":{"id":49,"order":949,"ligatures":"","prevSize":32,"code":59675,"name":"note_select_right"},"setIdx":0,"setId":3,"iconIdx":59},{"icon":{"paths":["M264.54 496.937c1.665 0 4.162 0 4.578 0 0 0 0.416 0 0.416 0s2.497 0 4.578 0c37.456 1.679 59.514 21.495 59.514 46.349 0 12.091-4.994 25.861-17.48 38.96-23.722 25.861-62.427 39.968-96.138 39.968-26.219 0-48.693-8.397-59.514-25.526-3.329-6.717-4.994-13.099-4.994-20.152 0-36.609 50.774-77.249 109.039-79.6zM303.84 160.61h28.202v394.679h-28.202v-394.679zM532.761 758.53c2.92 0 7.301 0 8.031 0 0 0 0.731 0 0.731 0s4.381 0 8.031 0c65.709 2.979 104.405 38.133 104.405 82.225 0 21.45-8.761 45.879-30.664 69.117-41.616 45.879-109.516 70.904-168.654 70.904-45.997 0-85.422-14.896-104.405-45.283-5.841-11.917-8.761-23.238-8.761-35.75 0-64.946 89.073-137.042 191.287-141.213zM601.704 161.872h49.475v700.175h-49.475v-700.175zM304.324 113.993v386.095h20.463v-294.054c23.303 9.447 41.621 22.723 52.477 32.693 21.703 19.779 32.205 45.958 32.205 73.299 0 30.832-13.302 63.118-39.906 89.878-3.5 3.2-3.851 3.782-3.851 6.399 0 3.49 2.801 6.108 7.001 6.108 3.501 0 3.851 0 9.101-5.818 30.455-30.541 45.506-67.481 45.506-102.967 0-37.522-17.153-73.881-51.108-100.35-22.658-17.745-40.664-39.838-51.426-61.965v-29.319zM317.282 124.041h0.666v2.213c-0.232-0.739-0.452-1.477-0.666-2.213zM311.163 201.166c2.302 0.712 4.561 1.472 6.785 2.265v286.607h-6.785zM307.419 141.515v351.448h18.699v-351.448zM70.435 70.478h-14.205v85.053h28.374v-70.883h42.544v-28.374h-56.713zM155.487 84.647h85.088v-28.374h-85.088zM268.949 84.647h85.053v-28.374h-85.053zM382.376 84.647h85.088v-28.374h-85.088zM495.803 70.478h-14.17v85.053h28.374v-99.257h-14.205zM56.23 268.993h28.374v-85.088h-28.374zM481.634 268.993h28.374v-85.088h-28.374zM56.23 382.42h28.374v-85.088h-28.374zM481.634 382.42h28.374v-85.088h-28.374zM56.23 495.846h28.374v-85.053h-28.374zM481.634 495.846h28.374v-85.053h-28.374zM56.23 609.309h28.374v-85.088h-28.374zM481.634 609.309h28.374v-85.088h-28.374zM70.435 651.817h85.053v-28.339h-85.053zM183.861 651.817h85.088v-28.339h-85.088zM297.288 651.817h85.088v-28.339h-85.088zM410.751 651.817h99.257v-14.17h-14.205v-14.17h-85.053z"],"width":710,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["grace_select"],"defaultCode":59675,"grid":16},"attrs":[],"properties":{"id":50,"order":950,"ligatures":"","prevSize":32,"code":59676,"name":"grace_select"},"setIdx":0,"setId":3,"iconIdx":60},{"icon":{"paths":["M263.672 25.307c0.797-0.399 1.594-0.399 2.79-0.399 4.782 0 10.362 3.985 18.332 13.949 32.281 37.063 54.997 101.625 54.997 154.231 0 3.985-0.797 7.174-0.797 11.159-3.587 62.569-29.093 113.98-79.706 162.6l-13.55 13.151-4.782 5.181v1.594l2.79 11.956 4.384 21.521 4.384 19.926c5.978 27.1 8.369 41.049 8.369 41.049s0 0 0 0 1.594 0 3.587-0.399c1.993 0 8.369-0.797 15.144-0.797 4.782 0 9.565 0.797 11.956 0.797 56.193 7.174 99.632 47.425 111.987 104.016 2.391 9.166 3.188 19.129 3.188 29.093 0 53.802-32.281 105.212-86.082 129.522-3.188 1.993-4.384 2.391-4.384 2.391v0.399c0 0 2.391 9.166 4.384 19.528l5.978 30.288 5.579 24.31c3.188 15.543 4.782 26.701 4.782 36.665 0 8.768-1.196 16.738-3.188 25.904-13.55 55.396-61.772 88.474-111.987 88.474-24.709 0-50.215-7.971-72.532-25.904-19.926-16.738-28.694-31.882-28.694-51.809 0-35.071 28.296-59.779 57.787-59.779 10.362 0 20.724 3.188 30.687 9.166 16.738 11.557 24.31 29.093 24.31 46.229 0 26.303-18.332 52.207-49.816 54.2h-3.188l2.391 1.594c13.151 5.579 26.303 8.369 39.056 8.369 32.281 0 62.569-16.34 80.902-44.635 10.362-15.941 15.941-34.672 15.941-53.403 0-7.174-1.196-14.347-2.79-22.318 0-0.797-1.196-7.174-2.79-13.151-8.768-43.041-13.949-68.149-13.949-68.149s0 0 0 0c-0.797 0-2.391 0-3.587 0.797-3.985 0.797-12.354 2.79-15.941 3.188-8.768 1.196-17.137 1.594-25.107 1.594-78.112 0-150.644-52.606-175.752-130.319-6.376-20.724-9.963-41.447-9.963-62.171 0-41.447 13.151-82.097 38.657-118.363 27.897-39.454 55.794-73.329 90.068-108.4l11.956-12.354-2.79-14.746-5.181-24.31-6.775-31.085c-1.993-11.557-4.384-22.716-4.782-25.107-1.993-13.151-3.188-25.904-3.188-39.056 0-50.215 16.34-98.437 47.027-137.094 9.166-11.956 25.506-27.897 29.89-29.093zM287.982 104.216c-0.797 0-1.993 0-3.188 0-16.34 0-37.462 15.144-51.809 37.462-14.746 21.919-22.318 51.012-22.318 80.902 0 7.971 0.399 16.34 1.594 24.709 1.196 5.978 1.594 9.963 4.782 24.31l5.579 25.107c1.594 7.572 2.79 13.55 2.79 14.347v0c0.399 0 12.753-13.55 16.738-18.332 39.853-45.034 63.765-92.459 68.946-134.305 0.399-3.985 0.399-7.174 0.399-11.159 0-12.354-1.594-24.31-4.384-30.687-3.188-6.376-10.362-11.557-19.129-12.354zM227.804 412.279c-0.797-5.579-1.993-9.963-1.993-10.76 0 0 0 0-0.399 0-0.797 0-17.934 19.926-29.89 33.875-20.325 24.709-41.846 54.2-50.613 68.547-16.738 28.296-25.107 59.779-25.107 90.865 0 20.325 3.985 39.853 11.159 58.584 21.521 55.396 70.938 90.068 124.74 90.068 6.376 0 13.55-0.399 20.325-1.594 8.768-1.594 19.528-4.782 19.528-5.978v0c0 0-0.797-3.985-1.993-8.369l-11.557-56.99-9.166-42.643-5.978-29.491-6.376-28.694c-3.188-17.137-4.384-21.521-4.384-21.521s0-0.399-0.399-0.399c-2.391 0-15.144 6.376-20.724 10.362-20.724 14.347-31.484 37.063-31.484 59.381 0 21.122 10.362 42.244 30.288 54.599 4.384 2.79 5.978 5.181 5.978 7.971 0 0.399 0 1.594 0 1.993-0.797 4.782-3.587 6.775-7.572 6.775-1.594 0-3.587-0.399-5.978-1.594-36.665-15.941-61.374-53.802-61.374-95.249v0c0-47.824 29.89-89.271 75.721-105.61l2.391-0.797-3.985-19.926-11.159-53.403zM287.583 545.388c-3.188-0.399-6.376-0.399-8.768-0.399-0.797 0-1.993 0-2.79 0h-1.993l1.594 7.174 8.369 39.056 5.181 25.506 5.579 25.107 11.159 55.396 4.384 21.122c1.594 5.579 2.391 10.362 2.79 10.362 0 0 0 0 0 0 0.399 0 7.174-3.985 11.557-7.174 20.325-14.347 35.469-36.665 41.049-59.779 1.993-7.572 2.79-15.543 2.79-23.115 0-46.229-34.274-88.075-80.902-93.256z"],"width":581,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["treble"],"defaultCode":59676,"grid":16},"attrs":[],"properties":{"id":51,"order":951,"ligatures":"","prevSize":32,"code":59677,"name":"treble"},"setIdx":0,"setId":3,"iconIdx":61},{"icon":{"paths":["M124 460q1-1 2-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 25.5-16t25.5-5q5 0 10 0.5t10 2.5q14 5 22 18t8 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-5 5-6.5 5.5t-3.5 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t2.5-1.5v0zM176 679q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM260 220q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM311 439q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM395 540q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM446 759q-1-1-3-1h-6q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-eb"],"defaultCode":59677,"grid":16},"attrs":[],"properties":{"id":52,"order":952,"ligatures":"","prevSize":32,"code":59678,"name":"key-sig-eb"},"setIdx":0,"setId":3,"iconIdx":62},{"icon":{"paths":["M124 460q1-1 2-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 25.5-16t25.5-5q5 0 10 0.5t10 2.5q14 5 22 18t8 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-5 5-6.5 5.5t-3.5 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t2.5-1.5v0zM176 679q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM260 220q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM311 439q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM395 540q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM446 759q-1-1-3-1h-6q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM530 300q0-1 1-1h2q3 0 5.5 1.5t3.5 4.5v205q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM581 519q-1-1-2.5-1h-6.5q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-ab"],"defaultCode":59678,"grid":16},"attrs":[],"properties":{"id":53,"order":953,"ligatures":"","prevSize":32,"code":59679,"name":"key-sig-ab"},"setIdx":0,"setId":3,"iconIdx":63},{"icon":{"paths":["M124 460q1-1 2-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 25.5-16t25.5-5q5 0 10 0.5t10 2.5q14 5 22 18t8 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-5 5-6.5 5.5t-3.5 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t2.5-1.5v0zM176 679q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM260 220q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-19 26t-37 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM311 439q-1-1-3-1h-6q-9 1-16 6t-12 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM395 540q0-1 1-1h2q3 0 5 1.5t3 4.5q1 1 1 14v191q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM446 759q-1-1-3-1h-6q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM530 300q0-1 1-1h2q3 0 5.5 1.5t3.5 4.5v205q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5.5-1.5t-3.5-3.5v-366q1-2 2.5-3.5t3.5-1.5v0zM581 519q-1-1-2.5-1h-6.5q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0zM665 620q0-1 1-1h2q3 0 5.5 1.5t3.5 4.5v205q13-11 26-16t25-5q5 0 10 0.5t10 2.5q15 5 22.5 18t7.5 29q0 9-2.5 18t-7.5 19q-7 13-18.5 26t-37.5 36l-34 32q-4 5-6 5.5t-4 0.5q-3 0-5-1.5t-3-3.5l-1-2v-363l1-1q1-2 2-3.5t3-1.5v0zM716 839q-1-1-2.5-1h-6.5q-8 1-15.5 6t-12.5 14l-2 3v103l1-1q24-27 38.5-54.5t14.5-47.5v-1q0-10-3.5-15t-11.5-6v0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-db"],"defaultCode":59679,"grid":16},"attrs":[],"properties":{"id":54,"order":954,"ligatures":"","prevSize":32,"code":59680,"name":"key-sig-db"},"setIdx":0,"setId":3,"iconIdx":64},{"icon":{"paths":["M112 414q1 0 1.5-0.5t1.5-0.5q2 0 4.5 1.5t3.5 3.5v185q12-10 23.5-14.5t22.5-4.5q5 0 9 0.5t9 2.5q13 5 20 16.5t7 25.5q0 8-2.5 16.5t-6.5 16.5q-6 12-16.5 24t-33.5 32l-31 29q-4 4-5.5 5t-3.5 1-4.5-1.5-3.5-3.5v-330l2.5-2.5t2.5-1.5v0zM159 611q-2-1-3.5-1h-5.5q-7 1-14 5.5t-11 12.5l-2 3v93l1-2q22-23 35-48t13-44v0q0-9-3-13.5t-10-5.5v0zM234 198l0.5-0.5t1.5-0.5q3 0 5 1.5t3 3.5q1 1 1 13v172q11-10 23-14.5t23-4.5q4 0 8.5 0.5t8.5 2.5q14 5 21 16.5t7 25.5q0 8-2.5 16.5t-6.5 16.5q-7 12-17.5 24t-33.5 32l-30 29q-4 4-5.5 5t-3.5 1q-3 0-5-1.5t-3-3.5l-1-2v-326l1-2q1-1 2-2.5t3-1.5v0zM280 395q-1-1-2.5-1h-5.5q-8 1-14.5 5.5t-11.5 12.5l-1 3v93l1-2q21-23 34-48t13-44v0q0-9-3-13.5t-10-5.5zM355 486q1 0 1.5-0.5t1.5-0.5q3 0 5 1.5t3 3.5v186l1-1q11-10 22.5-14.5t22.5-4.5q5 0 9.5 0.5t8.5 2.5q13 5 20 16.5t7 25.5q0 8-2 16.5t-7 16.5q-6 12-16.5 24t-33.5 32l-31 29q-4 4-5.5 5t-3.5 1-4.5-1.5-3.5-3.5v-330l2.5-2.5t2.5-1.5v0zM402 683q-2-1-3.5-1h-5.5q-7 1-13.5 5.5t-11.5 12.5l-2 3v93l1-2q22-23 35-48t13-44v0q0-9-3-13.5t-10-5.5v0zM477 270l2-1q3 0 5 1.5t3 3.5q1 1 1 13v172q11-10 23-14.5t23-4.5q4 0 8.5 0.5t9.5 2.5q13 5 20 16.5t7 25.5q0 8-2.5 16.5t-6.5 16.5q-7 12-17.5 24t-33.5 32l-30 29q-4 4-5.5 5t-3.5 1q-3 0-5-1.5t-3-3.5v-330q1-1 2-2.5t3-1.5v0zM523 467q-1-1-2.5-1h-5.5q-8 1-14.5 5.5t-11.5 12.5l-1 3v93l1-2q22-23 35-48t13-44v0q0-9-3.5-13.5t-10.5-5.5v0zM598 558q1 0 1.5-0.5t1.5-0.5q3 0 5 1.5t3 3.5v186l1-1q11-10 22.5-14.5t22.5-4.5q5 0 9.5 0.5t8.5 2.5q13 5 20 16.5t7 25.5q0 8-2 16.5t-7 16.5q-6 12-16.5 24t-33.5 32l-30 29q-5 4-6.5 5t-3.5 1-4.5-1.5-2.5-3.5l-1-2v-326l1-2q0-1 1.5-2.5t2.5-1.5v0zM645 755q-1-1-3-1h-5q-8 1-14.5 5.5t-11.5 12.5l-2 3v93l2-2q21-23 34-48t13-44v0q0-9-3-13.5t-10-5.5zM720 342l1-0.5t2-0.5q2 0 4.5 1.5t3.5 3.5v185q12-10 23.5-14.5t22.5-4.5q4 0 8.5 0.5t9.5 2.5q13 5 20 16.5t7 25.5q0 8-2.5 16.5t-6.5 16.5q-7 12-17.5 24t-33.5 32l-30 29q-4 4-5.5 5t-3.5 1q-3 0-5-1.5t-3-3.5v-330q1-1 2-2.5t3-1.5v0zM766 539q-1-1-2.5-1h-5.5q-8 1-14.5 5.5t-11.5 12.5l-1 3v93l1-2q22-23 35-48t13-44v0q0-9-3.5-13.5t-10.5-5.5z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-gg"],"defaultCode":59680,"grid":16},"attrs":[],"properties":{"id":55,"order":955,"ligatures":"","prevSize":32,"code":59681,"name":"key-sig-gg"},"setIdx":0,"setId":3,"iconIdx":65},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-g"],"defaultCode":59681,"grid":16},"attrs":[],"properties":{"id":56,"order":956,"ligatures":"","prevSize":32,"code":59682,"name":"key-sig-g"},"setIdx":0,"setId":3,"iconIdx":66},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47zM252 326q1-1 2-1h2q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q1 1 1 7.5v29.5t-1 7q-1 3-3.5 4t-11.5 4q-11 3-14 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t5.5-0.5 3.5 0.5 2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1v0 58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 2 0.5l1 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t2-1.5v0zM247 556v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h2q1-1 6-2t11-2l17-5 3-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-d"],"defaultCode":59682,"grid":16},"attrs":[],"properties":{"id":57,"order":957,"ligatures":"","prevSize":32,"code":59683,"name":"key-sig-d"},"setIdx":0,"setId":3,"iconIdx":67},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47zM252 326q1-1 2-1h2q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q1 1 1 7.5v29.5t-1 7q-1 3-3.5 4t-11.5 4q-11 3-14 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t5.5-0.5 3.5 0.5 2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1v0 58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 2 0.5l1 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t2-1.5v0zM247 556v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h2q1-1 6-2t11-2l17-5 3-1v-47zM410 6q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5 4.5 1 2.5 4v44q-2 3-4 4t-11 4q-11 3-14.5 3.5l-3.5 0.5v96l11-4 9-1.5t6-0.5q1 0 2.5 0.5t2.5 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5q-1 0-1 8.5v112.5q-2 3-4 4.5t-5 1.5q-2 0-4.5-1.5t-4.5-4.5v-107.5t-1-8.5v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t21-5.5l6-2v-88t-1-7v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t21-6l6-1v-118q2-3 4.5-4.5t4.5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t2.5 3v113h3l5-1.5t11-2.5l17-5 4-1v-120q1-2 2-3.5t3-1.5v0zM405 236v-48q-1 0-4 1t-7 2l-19 4-9 3q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 4-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-a"],"defaultCode":59683,"grid":16},"attrs":[],"properties":{"id":58,"order":958,"ligatures":"","prevSize":32,"code":59684,"name":"key-sig-a"},"setIdx":0,"setId":3,"iconIdx":68},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47zM252 326q1-1 2-1h2q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q1 1 1 7.5v29.5t-1 7q-1 3-3.5 4t-11.5 4q-11 3-14 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t5.5-0.5 3.5 0.5 2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1v0 58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 2 0.5l1 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t2-1.5v0zM247 556v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h2q1-1 6-2t11-2l17-5 3-1v-47zM410 6q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5 4.5 1 2.5 4v44q-2 3-4 4t-11 4q-11 3-14.5 3.5l-3.5 0.5v96l11-4 9-1.5t6-0.5q1 0 2.5 0.5t2.5 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5q-1 0-1 8.5v112.5q-2 3-4 4.5t-5 1.5q-2 0-4.5-1.5t-4.5-4.5v-107.5t-1-8.5v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t21-5.5l6-2v-88t-1-7v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t21-6l6-1v-118q2-3 4.5-4.5t4.5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t2.5 3v113h3l5-1.5t11-2.5l17-5 4-1v-120q1-2 2-3.5t3-1.5v0zM405 236v-48q-1 0-4 1t-7 2l-19 4-9 3q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 4-1v-47zM567 246q1-1 1.5-1h2.5q3 0 5 1.5t3 4.5l1 1v115l12-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q0 1 0.5 7.5t0.5 14.5-0.5 15l-0.5 7q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2.5 4.5t0.5 14.5v13q0 13-0.5 15t-2.5 3q-1 2-3.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1h-1v116l-1 2q-1 3-3 4t-5 1q-2 0-4.5-1t-4.5-4v-114h-1l-10 3-18 5q-4 1-7 1.5l-3 0.5v120l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2.5-3.5t2.5-1.5v0zM562 476v-48l-3 1t-7 2l-19 4q-4 1-7 2l-3 1v95h2q1-1 6-2t11-2l17-5 3-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-e"],"defaultCode":59684,"grid":16},"attrs":[],"properties":{"id":59,"order":959,"ligatures":"","prevSize":32,"code":59685,"name":"key-sig-e"},"setIdx":0,"setId":3,"iconIdx":69},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47zM252 326q1-1 2-1h2q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q1 1 1 7.5v29.5t-1 7q-1 3-3.5 4t-11.5 4q-11 3-14 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t5.5-0.5 3.5 0.5 2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1v0 58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 2 0.5l1 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t2-1.5v0zM247 556v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h2q1-1 6-2t11-2l17-5 3-1v-47zM410 6q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5 4.5 1 2.5 4v44q-2 3-4 4t-11 4q-11 3-14.5 3.5l-3.5 0.5v96l11-4 9-1.5t6-0.5q1 0 2.5 0.5t2.5 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5q-1 0-1 8.5v112.5q-2 3-4 4.5t-5 1.5q-2 0-4.5-1.5t-4.5-4.5v-107.5t-1-8.5v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t21-5.5l6-2v-88t-1-7v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t21-6l6-1v-118q2-3 4.5-4.5t4.5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t2.5 3v113h3l5-1.5t11-2.5l17-5 4-1v-120q1-2 2-3.5t3-1.5v0zM405 236v-48q-1 0-4 1t-7 2l-19 4-9 3q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 4-1v-47zM567 246q1-1 1.5-1h2.5q3 0 5 1.5t3 4.5l1 1v115l12-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q0 1 0.5 7.5t0.5 14.5-0.5 15l-0.5 7q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2.5 4.5t0.5 14.5v13q0 13-0.5 15t-2.5 3q-1 2-3.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1h-1v116l-1 2q-1 3-3 4t-5 1q-2 0-4.5-1t-4.5-4v-114h-1l-10 3-18 5q-4 1-7 1.5l-3 0.5v120l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2.5-3.5t2.5-1.5v0zM562 476v-48l-3 1t-7 2l-19 4q-4 1-7 2l-3 1v95h2q1-1 6-2t11-2l17-5 3-1v-47zM725 486q1-1 1.5-1h1.5q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5q2 0 4 1t3 4v44q-2 3-4 4t-11 4q-12 3-15 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t6.5-0.5q1 0 2.5 0.5t2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5-5-1.5-4-4.5v-59q0-40-0.5-48.5l-0.5-8.5q-4 1-13 3.5t-10 2.5q-3 0-5-2t-3-4v-45q1-3 4.5-4.5t21.5-5.5l6-2v-47q0-34-0.5-41l-0.5-7q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-3-4.5v-44q1-4 4.5-5t21.5-6l6-1v-118q1-3 4-4.5t5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t1.5 3l1 1v112h3l5-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t3-1.5v0zM719 716v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 3-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-b"],"defaultCode":59685,"grid":16},"attrs":[],"properties":{"id":60,"order":960,"ligatures":"","prevSize":32,"code":59686,"name":"key-sig-b"},"setIdx":0,"setId":3,"iconIdx":70},{"icon":{"paths":["M76 69q1-1 1.5-1h1.5q2 0 4 1t3 3v2l1 45v47l9-3q4-1 6.5-1.5t4.5-0.5q3 0 4 1t2 3v36q-1 2-3 3t-9 3q-9 2-11.5 2.5l-2.5 0.5v77l9-3q4-1 6.5-1h7t1.5 1q2 2 2 3.5v34t-2 2.5q-1 1-3 2t-14 4q-2 0-4.5 1l-2.5 1v46l-1 47v2q-1 2-3 3t-4 1-4-1-3-3v-92h-1l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-1 2-3 3t-4 1-4-1-3-3v-47q0-32-0.5-39l-0.5-7q-3 1-10 3t-8 2q-3 0-4.5-1.5t-2.5-3.5v-36q1-2 4-3t17-5l5-1v-38q0-27-0.5-32.5l-0.5-5.5q-3 1-10 2.5t-8 1.5q-3 0-4.5-1t-2.5-3v-36q1-2 4-3.5t17-4.5l5-1v-95q1-2 3-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2q1 0 5-1t9-2l13-5h3v-97l2-2t2-1v0zM72 253v-39l-2.5 1t-5.5 1l-16 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1q1 0 5-1t9-2l13-4 3-1v-37zM202 261q1-1 1.5-1h1.5q2 0 4 1t3 3v94l10-3q3-1 6-1.5t5-0.5 3.5 1 2.5 3v36q-1 2-3 3t-9 3q-9 2-12 2.5l-3 0.5v77l10-3q4-1 6.5-1h6.5t2 1q2 2 2 3.5v34t-2 2.5q-1 1-3 2t-14 4q-3 0-5 1l-2 1h-1v95q-1 2-3 3t-4 1-4-1-3-3v-92h-1l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-1 2-3 3t-4 1-4-1-3-3l-1-1v-92q-3 1-10 3t-8 2q-3 0-4.5-1.5t-2.5-3.5v-36q1-2 4-3t17-5l4-1v-76q-3 1-10 2.5t-8 1.5q-3 0-4.5-1t-2.5-3v-36q1-2 4-3.5t17-4.5l4-1v-93l1-2q1-2 3-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2q1 0 5-1t9-2l13-5h3v-97l2-2t2-1v0zM198 445v-39q-1 0-3 1t-5 1l-16 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1q1 0 5-1t9-2l13-4 3-1v-37zM328 5q1-1 1.5-1h1.5q2 0 4 1t3 3v94l9-3q4-1 7-1.5t5-0.5 3.5 1 2.5 3v36q-1 2-3 3t-9 3q-9 2-12 2.5l-3 0.5v77l9-3q5-1 7.5-1h6.5t2 1q2 2 2 3.5v34t-2 2.5q-1 1-3 2t-14 4q-3 0-5 1l-2 1h-1v95q-1 2-3 3t-4 1-4-1-3-3v-92h-1l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-1 2-3 3t-4 1-4-1-3-3l-1-1v-92q-3 1-10 3t-9 2-3.5-1.5-2.5-3.5v-36q1-2 3.5-3t17.5-5l4-1v-76q-3 1-10 2.5t-9 1.5-3.5-1-2.5-3v-36q1-2 3.5-3.5t17.5-4.5l4-1v-93l1-2q1-2 3-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2q1 0 5-1t9-2l13-5h3v-97l2-2t2-1v0zM324 189v-39q-1 0-3 1t-5 1l-16 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1q1 0 5-1t9-2l13-4 3-1v-37zM454 197l1-1h2t4 1 3 3v94l9-3q4-1 7-1.5t5-0.5 3.5 1 2.5 3v36q-2 2-3.5 3t-8.5 3q-9 2-12 2.5l-3 0.5v77l9-3q5-1 7.5-1h6.5t2 1q1 2 1.5 3.5t0.5 11.5v11q0 10-0.5 11.5t-1.5 2.5-3 2-14 4q-3 0-5 1l-2 1h-1v95q-1 2-3 3t-4 1-4-1-3-3v-92h-1l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-1 2-3 3t-4 1-4-1-3-3l-1-1v-92q-3 1-10.5 3t-8.5 2q-2 0-3.5-1.5t-2.5-3.5v-36q1-2 3.5-3t17.5-5l4-1v-76q-3 1-10.5 2.5t-8.5 1.5q-2 0-3.5-1t-2.5-3v-36q1-2 3.5-3.5t17.5-4.5l4-1v-93l1-2q1-2 3-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2q1 0 5-1l8-2 14-5h3v-97q1-1 1.5-2t2.5-1v0zM450 381v-39q-1 0-3 1t-6 1l-15 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1q1 0 5-1l8-2 14-4 3-1v-37zM580 389q0-1 0.5-1h1.5q3 0 5 1t2 3l1 2v92l9-3q4-1 7-1.5t5-0.5 3.5 1 1.5 3q1 1 1 6.5v23t-1 6.5q-1 2-2.5 3t-8.5 3q-9 2-12 2.5l-3 0.5v77l9-3q4-1 7-1h7t2 1q1 2 1.5 3.5t0.5 11.5v11q0 10-0.5 11.5t-1.5 2.5-3 2-14 4q-3 0-5 1l-2 1h-1v93l-1 2q0 2-2 3t-5 1q-1 0-3-1t-3-3l-1-2v-90l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-1 2-3 3t-4 1-4-1-3-3l-1-1v-92q-3 1-10.5 3t-8.5 2q-2 0-3.5-1.5t-2.5-3.5v-36q1-2 3.5-3t17.5-5l4-1v-76q-3 1-10.5 2.5t-8.5 1.5q-2 0-3.5-1t-2.5-3v-36q1-2 3.5-3.5t17.5-4.5l4-1v-93l1-2q1-2 3-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2q1 0 5-1l8-2 14-5h2v-95l1-2q1-1 1.5-2t2.5-1v0zM575 573v-39l-2 1t-6 1l-15 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1q1 0 5-1l8-2 14-4 2-1v-37zM706 133q0-1 0.5-1h1.5q3 0 5 1t2 3l1 2v92l9-3q4-1 7-1.5t5-0.5 3.5 1 1.5 3q1 1 1 6.5v23t-1 6.5q-1 2-2.5 3t-9.5 3-11 2.5l-3 0.5v77l9-3q4-1 7-1h7t2 1q1 2 1.5 3.5t0.5 11.5v11q0 10-0.5 11.5t-1.5 2.5-3 2-14 4q-3 0-5 1l-2 1h-1v93l-1 2q0 2-2 3t-5 1q-1 0-3-1t-3-3l-1-2v-90l-8 3-15 3q-3 1-5 1.5l-2 0.5q-1 0-1 7v90q-2 2-3.5 3t-3.5 1-4-1-3-3l-1-1v-92q-3 1-10.5 3t-8.5 2q-2 0-3.5-1.5t-2.5-3.5v-36q1-2 3.5-3t17.5-5l4-1v-76q-3 1-10.5 2.5t-8.5 1.5q-2 0-3.5-1t-2.5-3v-36q1-2 3.5-3.5t17.5-4.5l4-1v-95q2-2 4-3t4-1h1.5t1.5 1q1 0 2 1l2 2v91h2l4.5-1t8.5-2l14-5h2v-95l1-2q1-1 1.5-2t2.5-1v0zM701 317v-39l-2.5 1t-5.5 1l-15 4q-3 1-5 1.5l-2 0.5q-1 0-1 5.5v71.5l2-1 4.5-1t8.5-2l14-4 2-1v-37zM831 325q1-1 1.5-1h1.5q3 0 5 1t2 3l1 2v92l9-3q4-1 7-1.5t5-0.5 3 1 2 3q1 1 1 6.5v23t-1 6.5q-1 2-3 3t-9 3q-9 2-11.5 2.5l-2.5 0.5v77l9-3q4-1 7-1h7t2 1q1 2 1.5 3.5t0.5 11.5v11q0 10-0.5 11.5t-1.5 2.5-3 2-14 4q-3 0-5 1l-2 1h-1v93l-1 2q0 2-2 3t-5 1q-1 0-3-1t-3-3l-1-2v-90l-8 3-15 3q-3 1-5.5 1.5l-2.5 0.5v96l-1 1q-1 2-2.5 3t-3.5 1-4.5-1-3.5-3v-93q-3 1-10.5 3t-8.5 2q-2 0-3.5-1.5t-2.5-3.5v-36q1-2 3.5-3t17.5-5l4-1v-76q-3 1-10.5 2.5t-8.5 1.5q-2 0-3.5-1t-2.5-3v-36q1-2 3.5-3.5t17.5-4.5l4-1v-95q1-2 3.5-3t4.5-1h1.5t1.5 1q1 0 2 1t1 2l1 2v89h2l4-1t9-2l14-5h2v-95l1-2q0-1 1-2t2-1v0zM827 509v-39l-2.5 1t-5.5 1l-15 4q-3 1-5.5 1.5l-2.5 0.5v77l2-1 4-1t9-2l14-4 2-1v-37z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-cs"],"defaultCode":59686,"grid":16},"attrs":[],"properties":{"id":61,"order":961,"ligatures":"","prevSize":32,"code":59687,"name":"key-sig-cs"},"setIdx":0,"setId":3,"iconIdx":71},{"icon":{"paths":["M95 86q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l12-3q4-1 8-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM90 316v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47zM252 326q1-1 2-1h2q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q1 1 1 7.5v29.5t-1 7q-1 3-3.5 4t-11.5 4q-11 3-14 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t5.5-0.5 3.5 0.5 2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1v0 58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 2 0.5l1 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t2-1.5v0zM247 556v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h2q1-1 6-2t11-2l17-5 3-1v-47zM410 6q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5 4.5 1 2.5 4v44q-2 3-4 4t-11 4q-11 3-14.5 3.5l-3.5 0.5v96l11-4 9-1.5t6-0.5q1 0 2.5 0.5t2.5 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5q-1 0-1 8.5v112.5q-2 3-4 4.5t-5 1.5q-2 0-4.5-1.5t-4.5-4.5v-107.5t-1-8.5v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t21-5.5l6-2v-88t-1-7v0 0q-3 1-12.5 3.5t-10.5 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t21-6l6-1v-118q2-3 4.5-4.5t4.5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t2.5 3v113h3l5-1.5t11-2.5l17-5 4-1v-120q1-2 2-3.5t3-1.5v0zM405 236v-48q-1 0-4 1t-7 2l-19 4-9 3q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 4-1v-47zM567 246q1-1 1.5-1h2.5q3 0 5 1.5t3 4.5l1 1v115l12-3q5-1 8.5-1.5t5.5-0.5q3 0 4.5 1t2.5 4q0 1 0.5 7.5t0.5 14.5-0.5 15l-0.5 7q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l12-4q5-1 8.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2.5 4.5t0.5 14.5v13q0 13-0.5 15t-2.5 3q-1 2-3.5 2.5t-17.5 4.5q-3 1-5.5 2t-3.5 1h-1v116l-1 2q-1 3-3 4t-5 1q-2 0-4.5-1t-4.5-4v-114h-1l-10 3-18 5q-4 1-7 1.5l-3 0.5v120l-1 1q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-3.5-4.5l-1-1v-115q-4 1-13 3.5t-10 2.5q-3 0-5-2l-4-4v-43l1-2q1-3 4.5-4.5t21.5-5.5l5-2v-95q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-4-4.5v-43l1-1q1-4 4.5-5t21.5-6l5-1v-117l1-1q1-3 3.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q2 1 3 2t2 3l1 1v112h2q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2.5-3.5t2.5-1.5v0zM562 476v-48l-3 1t-7 2l-19 4q-4 1-7 2l-3 1v95h2q1-1 6-2t11-2l17-5 3-1v-47zM725 486q1-1 1.5-1h1.5q3 0 5.5 1.5t3.5 4.5v1l1 57v58l11-3q5-1 8.5-1.5t6.5-0.5q2 0 4 1t3 4v44q-2 3-4 4t-11 4q-12 3-15 3.5l-3 0.5v96l11-4q5-1 8.5-1.5t6.5-0.5q1 0 2.5 0.5t2.5 1.5q1 2 1.5 4.5t0.5 14.5v13q0 13-0.5 15t-1.5 3q-2 2-4.5 2.5t-17.5 4.5q-3 1-5.5 2l-2.5 1h-1v58l-1 58v2q-1 3-3.5 4t-5.5 1q-2 0-4.5-1t-3.5-4l-1-2v-112l-10 3-19 5q-4 1-6.5 1.5l-2.5 0.5q-1 0-1 8.5v111.5l-1 1q-1 3-3.5 4.5t-4.5 1.5-5-1.5-4-4.5v-59q0-40-0.5-48.5l-0.5-8.5q-4 1-13 3.5t-10 2.5q-3 0-5-2t-3-4v-45q1-3 4.5-4.5t21.5-5.5l6-2v-47q0-34-0.5-41l-0.5-7q-4 1-13 3.5t-10 2.5q-3 0-5-1.5t-3-4.5v-44q1-4 4.5-5t21.5-6l6-1v-118q1-3 4-4.5t5-1.5q1 0 2 0.5t2 0.5q1 1 2.5 2t1.5 3l1 1v112h3l5-1.5t11-2.5l17-5 3-1v-119l1-1q1-2 2-3.5t3-1.5v0zM719 716v-48l-3 1t-7 2l-19 4q-4 1-6.5 2l-2.5 1q-1 0-1 6.5v88.5h3q0-1 5-2t11-2l17-5 3-1v-47zM882 166q1-1 1.5-1h1.5q4 0 6 1.5t3 4.5l1 1v115l11-3q5-1 9-1.5t6-0.5q3 0 4.5 1t2.5 4v44q-1 3-3.5 4t-11.5 4q-11 3-14.5 3.5l-3.5 0.5v96l11-4q6-1 9.5-1.5t5.5-0.5 3 0.5 2 1.5q2 2 2 4.5v42.5t-2 3q-1 2-3.5 2.5t-17.5 4.5q-4 1-6.5 2l-2.5 1h-1v116l-1 2q-1 3-3.5 4t-5.5 1q-1 0-4-1t-4-4v-114h-1l-10 3-19 5q-3 1-6 1.5l-3 0.5-0.5 8.5t-0.5 51.5v61q-1 3-3.5 4.5t-4.5 1.5q-3 0-5.5-1.5t-4.5-4.5v-116q-4 1-13 3.5t-11 2.5q-3 0-5-2t-3-4v-45q2-3 5-4.5t22-5.5l5-2v-95q-4 1-13 3.5t-11 2.5q-3 0-5-1.5t-3-4.5v-44q2-4 5-5t22-6l5-1v-118q2-3 4.5-4.5t5.5-1.5q1 0 1.5 0.5t1.5 0.5q1 1 2.5 2t2.5 3v113h3q1 0 6-1.5t11-2.5l17-5 3-1v-120q1-2 2-3.5t3-1.5v0zM877 396v-48q-1 0-3.5 1t-6.5 2l-20 4-9 3-0.5 6.5t-0.5 40.5v48h3q1-1 6-2t11-2l17-5 3-1v-47z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["key-sig-fs"],"defaultCode":59687,"grid":16},"attrs":[],"properties":{"id":62,"order":962,"ligatures":"","prevSize":32,"code":59688,"name":"key-sig-fs"},"setIdx":0,"setId":3,"iconIdx":72},{"icon":{"paths":["M0 426.667v42.667l1706.667-426.667v-42.667l-1706.667 426.667zM0 426.667v42.667l1706.667 426.667v-42.667l-1706.667-426.667z"],"width":2048,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["cresc"],"defaultCode":59688,"grid":16},"attrs":[],"properties":{"id":63,"order":963,"ligatures":"","prevSize":32,"code":59689,"name":"cresc"},"setIdx":0,"setId":3,"iconIdx":73},{"icon":{"paths":["M1706.667 426.667v42.667l-1706.667-426.667v-42.667l1706.667 426.667zM1706.667 426.667v42.667l-1706.667 426.667v-42.667l1706.667-426.667z"],"width":2048,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["decresc"],"defaultCode":59689,"grid":16},"attrs":[],"properties":{"id":64,"order":964,"ligatures":"","prevSize":32,"code":59690,"name":"decresc"},"setIdx":0,"setId":3,"iconIdx":74},{"icon":{"paths":["M11.482 52.493h7.172q5.738 0 10.041 2.388t7.172 8.754v459.999l1.434-3.183q25.82-22.284 51.639-34.221t50.205-11.938q10.041 0 20.082 1.592t20.082 6.367q28.688 11.142 44.467 39.792t15.779 65.259q0 17.509-5.020 38.996t-15.061 42.18q-14.344 28.65-38.012 58.097t-75.307 80.381l-67.418 71.626q-8.607 9.55-12.193 11.142t-7.889 1.592q-5.738 0-10.758-3.183t-6.455-9.55l-1.434-3.183v-808.58l1.434-3.183q1.434-3.183 4.303-6.367t5.738-4.775zM116.194 541.143q-2.869-1.592-6.455-2.388t-6.455-0.796h-5.738q-17.213 3.183-32.274 15.121t-25.102 31.038l-4.303 6.367v230.796l2.869-4.775q48.77-58.893 77.459-120.969t28.688-106.643v-1.592q0-22.284-6.455-32.63t-22.234-13.529zM719.024 790.096q1.434 1.592 2.152 1.592h2.152q5.738 0 8.607-2.388t4.303-7.163l1.434-1.592v-183.045l17.213 4.775q5.738 1.592 11.475 2.388t8.607 0.796q4.303 0 6.455-1.592t3.586-6.367v-70.035q-1.434-4.775-5.020-6.367t-16.496-6.367q-15.779-4.775-20.799-5.571l-5.020-0.796v-152.803l17.213 6.367q7.172 1.592 12.193 2.388t7.889 0.796 4.303-0.796 2.869-2.388q2.869-3.183 2.869-7.163v-67.647q0 0-2.869-4.775-1.434-3.183-5.020-3.979t-25.102-7.163q-5.738-1.592-9.324-3.183l-3.586-1.592h-1.434v-184.636l-1.434-3.183q-1.434-4.775-5.020-6.367t-7.889-1.592q-1.434 0-5.738 1.592t-5.738 6.367v181.453h-1.434l-14.344-4.775-27.254-7.958q-4.303-1.592-8.607-2.388l-4.303-0.796-0.717-13.529q0 0-0.717-81.972v-97.093q-1.434-4.775-5.020-7.163t-6.455-2.388q-4.303 0-7.889 2.388t-6.455 7.163v184.636q-5.738-1.592-18.647-5.571t-15.779-3.979q-4.303 0-7.172 3.183t-4.303 6.367v71.626q2.869 4.775 7.172 7.163t31.557 8.754l7.172 3.183v151.211q-5.738-1.592-18.647-5.571t-15.779-3.979q-4.303 0-7.172 2.388t-4.303 7.163v70.035q2.869 6.367 7.172 7.958t31.557 9.55l7.172 1.592v187.82q2.869 4.775 6.455 7.163t7.889 2.388q1.434 0 2.152-0.796t2.152-0.796q1.434-1.592 3.586-3.183t3.586-4.775v-179.861h4.303q1.434 0 8.607 2.388t15.779 3.979l24.385 7.958 4.303 1.592v191.003q1.434 3.183 2.869 5.571t4.303 2.388zM711.852 424.006v76.401q-1.434 0-5.020-1.592t-9.324-3.183l-28.688-6.367-12.91-4.775-0.717-10.346q0 0-0.717-64.464v-76.401h4.303q1.434 1.592 8.607 3.183t15.779 3.183l24.385 7.958 4.303 1.592zM315.694 0.332c-8.442 0.571-16.854 1.889-25.172 4.040-67.887 17.557-124.237 95.306-156.123 181.707l31.924 11.775c29.443-79.781 85.861-148.43 132.718-160.548 48.203-12.466 114.43 17.362 154.833 51.859 9.73 8.308 22.016 29.216 32.083 55.501s18.682 57.793 25.557 87.929c13.751 60.274 20.6 114.816 20.6 114.816l33.771-4.24c0 0-7.003-55.918-21.198-118.139-7.098-31.11-15.983-63.865-26.966-92.541s-23.301-53.43-41.758-69.19c-40.593-34.659-101.178-66.966-160.269-62.97zM571.694 676.602c0 0-6.862 54.529-20.613 114.803-6.875 30.137-15.49 61.645-25.557 87.929s-22.353 47.193-32.083 55.501c-40.403 34.497-106.631 64.325-154.833 51.859-46.857-12.118-103.275-80.767-132.718-160.548l-31.924 11.775c31.886 86.401 88.235 164.163 156.123 181.72 66.542 17.209 139.049-19.319 185.441-58.93 18.458-15.76 30.789-40.527 41.772-69.203s19.855-61.417 26.953-92.528c14.195-62.221 21.198-118.152 21.198-118.152z"],"width":785,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["accident"],"defaultCode":59690,"grid":16},"attrs":[],"properties":{"id":65,"order":965,"ligatures":"","prevSize":32,"code":59691,"name":"accident"},"setIdx":0,"setId":3,"iconIdx":75},{"icon":{"paths":["M248.814 356.26c-110.901 5.545-209.644 86.424-239.422 173.176h-3.501v10.7c-3.784 13.737-5.878 27.533-5.878 41.148 0 13.504 2.394 26.189 5.878 38.836v404.012h101.449v-317.688c12.709 2.556 25.978 3.963 39.827 3.963 76.915 0 165.285-39.825 219.41-112.941 28.487-37.033 39.827-75.983 39.827-110.167 0-70.268-50.333-126.29-135.794-131.038h-21.796zM214.272 0l-33.816 0.528 0.594 41.808c-76.782 12.375-136.124 78.262-136.124 157.986 0 88.493 72.916 160.495 161.882 160.495s161.882-72.003 161.882-160.495c0-85.75-68.632-155.492-153.825-159.769l-0.594-40.553zM215.593 91.344c57.569 4.463 102.374 51.137 102.374 108.978 0 60.805-49.334 109.771-111.158 109.771s-111.158-48.966-111.158-109.771c0-52.297 36.58-95.69 86.126-106.865l1.387 96.297 33.816-0.528-1.387-97.882zM205.457 24.851c-107.609 0-194.344 74.348-194.344 163.261s86.734 163.261 194.344 163.261c107.609 0 194.344-74.348 194.344-163.261s-86.734-163.261-194.344-163.261zM205.457 112.367c48.226 0 87.87 32.638 87.87 75.745s-39.645 75.835-87.87 75.835c-48.226 0-101.307-32.728-101.307-75.835s53.081-75.745 101.307-75.745z"],"width":406,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pitz_above"],"defaultCode":59691,"grid":16},"attrs":[],"properties":{"id":66,"order":966,"ligatures":"","prevSize":32,"code":59692,"name":"pitz_above"},"setIdx":0,"setId":3,"iconIdx":76},{"icon":{"paths":["M145.905 618.412c102.688-5.134 194.119-80.024 221.691-160.352h3.241v-9.907c3.504-12.72 5.443-25.494 5.443-38.1 0-12.504-2.217-24.25-5.443-35.96v-374.093h-93.936v294.161c-11.767-2.367-24.054-3.669-36.877-3.669-71.219 0-153.044 36.876-203.161 104.577-26.377 34.29-36.877 70.356-36.877 102.009 0 65.064 46.606 116.938 125.737 121.334h10.519zM187.712 721.9c-99.64 0-179.951 68.842-179.951 151.17s80.311 151.17 179.951 151.17c99.64 0 179.951-68.842 179.951-151.17s-80.311-151.17-179.951-151.17zM187.712 802.935c44.654 0 81.363 30.221 81.363 70.136s-36.709 70.219-81.363 70.219c-44.654 0-93.804-30.304-93.804-70.219s49.15-70.136 93.804-70.136zM154.214 688.547v155.153h46.968v-155.153z"],"width":376,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pitz_below"],"defaultCode":59692,"grid":16},"attrs":[],"properties":{"id":67,"order":967,"ligatures":"","prevSize":32,"code":59693,"name":"pitz_below"},"setIdx":0,"setId":3,"iconIdx":77},{"icon":{"paths":["M334.611 79.703v754.832h17.698v-754.832zM274.254 726.577c1.988 0 4.97 0 5.467 0 0 0 0.497 0 0.497 0s2.982 0 5.467 0c44.727 2.902 71.066 37.147 71.066 80.099 0 20.895-5.964 44.693-20.873 67.329-28.327 44.693-74.545 69.070-114.799 69.070-31.309 0-58.145-14.511-71.066-44.112-3.976-11.608-5.964-22.637-5.964-34.825 0-63.266 60.63-133.498 130.205-137.561zM391.177 301.295l0.013 4.4 9.889-0.022-0.013-4.411zM406.024 305.662l9.889 0.011 0.013-4.4-9.902-0.011zM420.87 305.684l9.889 0.011 0.013-4.4-9.902-0.011zM376.331 301.328l0.013 4.4 9.889-0.022-0.013-4.4zM435.704 305.706l9.902 0.022 0.013-4.411-9.902-0.011zM450.55 305.728l9.902 0.022v-4.411l-9.889-0.011zM361.485 301.371l0.013 4.4 9.902-0.022-0.025-4.411zM465.396 305.75l9.902 0.022v-4.411l-9.889-0.011zM480.242 305.772l9.889 0.022 0.013-4.4-9.889-0.022zM346.639 301.404l0.013 4.4 9.902-0.022-0.013-4.4zM495.088 305.804l9.889 0.011 0.013-4.4-9.902-0.022zM331.793 301.448l0.013 4.4 9.902-0.022-0.013-4.411zM509.934 305.826l9.889 0.011 0.013-4.4-9.902-0.022zM524.768 305.848h1.968l7.921 0.055 0.038-4.4-9.914-0.066zM316.947 301.481l0.013 4.4c6.961-0.156 9.907 2.033 9.889-4.422zM302.101 301.514l0.025 4.411 9.889-0.033-0.013-4.4zM287.267 301.558l0.013 4.4 9.889-0.022-0.013-4.4zM539.602 305.936l9.902 0.077 0.038-4.4-9.902-0.077zM272.421 301.59l0.013 4.411 9.889-0.033-0.013-4.4zM257.575 301.634l0.013 4.4 9.902-0.022-0.025-4.4zM242.729 301.667l0.013 2.846h-2.472l0.037 8.811 4.957-0.022-0.037-7.235 7.417-0.022-0.013-4.4zM554.448 306.045l9.889 0.066 0.050-4.4-9.902-0.066zM569.294 306.155l9.889 0.066 0.038-4.4-9.889-0.077zM584.14 306.253l9.889 0.077 0.038-4.4-9.889-0.077zM598.974 306.363l9.901 0.066 0.038-4.4-9.889-0.066zM613.82 306.472h0.21l9.668 0.142 0.086-4.4-9.927-0.153zM628.642 306.691l9.889 0.153 0.086-4.411-9.889-0.142zM643.488 306.921l9.889 0.142 0.086-4.4-9.889-0.153zM658.321 307.14l9.901 0.153 0.086-4.4-9.901-0.153zM673.131 307.37l9.889 0.274 0.16-4.4-9.889-0.274zM687.977 307.786l9.889 0.274 0.147-4.4-9.889-0.274zM702.811 308.191l5.192 0.142 4.637 0.241 0.271-4.4-4.749-0.241-5.203-0.142zM717.571 308.815l8.599 0.427 1.144 0.12 0.554-4.378-1.279-0.12-0.074-0.011h-0.063l-8.598-0.438zM732.466 307.961h-0.959l-0.074 7.443 4.945 0.044 0.086-7.454 0.013-1.642-2.731-0.744-0.222-0.055-0.222-0.022-0.529-0.055zM240.33 317.725l0.049 8.811 4.945-0.022-0.049-8.811zM731.297 328.615l4.945 0.033 0.098-8.8-4.957-0.044zM240.404 330.936l0.037 8.811 4.945-0.022-0.037-8.811zM731.162 341.827l4.957 0.033 0.086-8.8-4.945-0.044zM240.465 344.147l0.049 8.811 4.945-0.022-0.049-8.811zM731.027 355.027l4.957 0.044 0.086-8.811-4.945-0.033zM240.527 357.359l0.049 8.8 4.945-0.011-0.037-8.811zM730.892 368.239l4.957 0.044 0.086-8.811-4.945-0.033zM240.601 370.57l0.037 8.8 4.957-0.022-0.049-8.8zM730.769 381.45l4.945 0.044 0.086-8.811-4.945-0.044zM240.662 383.77l0.049 8.811 4.945-0.022-0.049-8.8zM730.633 394.661l4.945 0.033 0.086-8.8-4.945-0.044zM240.736 396.982l0.037 8.811 4.957-0.022-0.049-8.8zM730.498 407.873l4.945 0.033 0.086-8.8-4.945-0.044zM240.798 410.193l0.049 8.811 4.945-0.022-0.049-8.811zM730.363 421.073l4.945 0.044 0.086-8.8-4.945-0.044zM240.859 423.404l0.049 8.811 4.945-0.022-0.037-8.811zM730.227 434.284l4.945 0.044 0.086-8.811-4.945-0.033zM240.933 436.616l0.037 8.8 4.957-0.011-0.049-8.811zM730.092 447.496l4.945 0.044 0.086-8.811-4.945-0.044zM240.994 449.827l0.049 8.8 4.945-0.022-0.037-8.8zM729.957 460.707l4.945 0.033 0.098-8.8-4.957-0.044zM241.068 463.039l0.037 8.8 4.957-0.022-0.049-8.8zM729.821 473.919l4.945 0.033 0.098-8.8-4.957-0.044zM241.13 476.239l0.049 8.811 4.945-0.022-0.049-8.8zM729.686 487.119l4.945 0.044 0.098-8.8-4.957-0.044zM241.203 489.45l0.037 8.811 4.945-0.022-0.037-8.811zM729.551 500.33l4.945 0.044 0.098-8.811-4.945-0.033zM241.265 502.662l0.049 8.811 4.945-0.022-0.049-8.811zM729.416 513.542l4.957 0.045 0.086-8.811-4.945-0.033zM241.326 515.873l0.049 8.8 4.945-0.011-0.037-8.811zM729.28 526.753l4.957 0.045 0.086-8.811-4.945-0.045zM241.4 529.085l0.037 8.8 4.957-0.011-0.049-8.811zM729.145 539.964l4.957 0.034 0.086-8.8-4.945-0.045zM241.462 542.296l0.049 8.8 4.945-0.022-0.049-8.8zM729.022 553.165l4.945 0.045 0.086-8.8-4.945-0.045zM241.536 555.496l0.037 8.811 4.945-0.022-0.037-8.8zM728.887 566.376l4.945 0.045 0.086-8.811-4.945-0.034zM241.597 568.707l0.049 8.811 4.945-0.022-0.049-8.8zM728.751 579.587l4.945 0.045 0.086-8.811-4.945-0.034zM241.659 581.919l0.049 8.811 4.945-0.022-0.037-8.811zM728.616 592.799l4.945 0.045 0.086-8.811-4.945-0.045zM241.732 595.13l0.037 8.811 4.957-0.022-0.049-8.811zM728.481 606.010l4.945 0.034 0.086-8.8-4.945-0.045zM241.794 608.342l0.049 8.8 4.945-0.011-0.037-8.811zM728.345 619.221l4.945 0.034 0.086-8.8-4.945-0.045zM241.868 621.553l0.037 8.8 4.957-0.022-0.049-8.8zM728.21 632.422l4.945 0.045 0.098-8.811-4.957-0.034zM241.929 634.764l0.049 8.8 4.945-0.022-0.049-8.8zM728.075 645.633l4.945 0.045 0.098-8.811-4.957-0.034zM241.991 647.965l0.049 8.811 4.945-0.022-0.037-8.8zM727.94 658.845l4.945 0.045 0.098-8.811-4.957-0.045zM242.064 661.176l0.037 8.811 4.957-0.022-0.049-8.811zM727.804 672.056l4.957 0.034 0.086-8.8-4.945-0.045zM242.126 674.387l0.049 8.811 4.945-0.022-0.037-8.811zM727.669 685.267l4.957 0.034 0.086-8.8-4.945-0.045zM242.2 687.599l0.037 8.8 4.957-0.011-0.049-8.811zM727.534 698.468l4.957 0.045 0.086-8.811-4.945-0.034zM242.261 700.81l0.049 8.8 4.945-0.011-0.049-8.811zM727.398 711.679l4.957 0.045 0.086-8.811-4.945-0.034zM242.335 714.022l0.037 8.8 4.945-0.022-0.037-8.8zM727.275 724.891l4.945 0.045 0.086-8.811-4.945-0.045zM242.397 727.222l0.049 8.811 4.945-0.022-0.049-8.8zM727.14 738.102l4.945 0.034 0.086-8.8-4.945-0.045zM242.458 740.433l0.049 8.811 4.945-0.022-0.037-8.811zM727.005 751.313l4.945 0.034 0.086-8.8-4.945-0.045zM242.532 753.645l0.037 7.914 0.013 2.189h3.469v-2.2l1.464-0.011-0.037-7.914zM726.919 759.347h-0.91v4.4h5.818l0.025-2.178 0.050-5.812-4.945-0.045zM250.994 763.748h9.902v-4.4h-9.902zM265.84 763.748h9.889v-4.4h-9.889zM280.686 763.748h9.889v-4.4h-9.889zM295.533 763.748h9.889v-4.4h-9.889zM310.366 763.748h9.902v-4.4h-9.902zM325.213 763.748h9.902v-4.4h-9.902zM340.059 763.748h9.902v-4.4h-9.902zM354.905 763.748h9.902v-4.4h-9.902zM369.751 763.748h9.889v-4.4h-9.889zM384.597 763.748h9.889v-4.4h-9.889zM399.443 763.748h9.889v-4.4h-9.889zM414.277 763.748h9.902v-4.4h-9.902zM429.123 763.748h9.902v-4.4h-9.902zM443.969 763.748h9.902v-4.4h-9.902zM458.815 763.748h9.902v-4.4h-9.902zM473.661 763.748h9.889v-4.4h-9.889zM488.507 763.748h9.889v-4.4h-9.889zM503.354 763.748h9.889v-4.4h-9.889zM518.187 763.748h9.902v-4.4h-9.902zM533.033 763.748h9.902v-4.4h-9.902zM547.88 763.748h9.901v-4.4h-9.901zM562.726 763.748h9.901v-4.4h-9.901zM577.572 763.748h9.889v-4.4h-9.889zM592.418 763.748h9.889v-4.4h-9.889zM607.264 763.748h9.889v-4.4h-9.889zM622.098 763.748h9.902v-4.4h-9.902zM636.944 763.748h9.902v-4.4h-9.902zM651.79 763.748h9.901v-4.4h-9.901zM666.636 763.748h9.901v-4.4h-9.901zM681.482 763.748h9.889v-4.4h-9.889zM696.329 763.748h9.889v-4.4h-9.889zM711.175 763.748h9.889v-4.4h-9.889zM766.329 74.077v761.051h17.698v-761.051zM705.972 726.279c1.988 0 4.97 0 5.467 0 0 0 0.497 0 0.497 0s2.982 0 5.467 0c44.727 2.926 71.066 37.453 71.066 80.758 0 21.067-5.964 45.061-20.873 67.884-28.327 45.061-74.545 69.64-114.799 69.64-31.309 0-58.145-14.63-71.066-44.476-3.976-11.704-5.964-22.823-5.964-35.112 0-63.787 60.63-134.597 130.205-138.694zM426.616-19.97l-59.016 0.697 0.682 41.469 34.107-0.403 0.029 12.213 49.224-0.073-0.073-33.204-0.044-21.003zM219.959-17.524l0.696 41.469 98.418-1.161-0.696-41.481zM72.331-15.776l0.682 41.469 98.433-1.161-0.696-41.481zM5.322-14.982l0.348 20.734-24.619 0.037 0.189 82.949 49.209-0.073-0.174-82.949-6.804 0.013-0.348-20.93zM402.52 75.474l0.174 82.949 49.224-0.073-0.189-82.949zM-18.674 130.207l0.189 82.949 49.209-0.073-0.174-82.949zM402.795 199.904l0.174 82.949 49.224-0.086-0.189-82.937zM-18.398 254.637l0.189 82.949 49.209-0.086-0.174-82.949zM403.071 324.322l0.174 82.949 49.224-0.073-0.189-82.949zM-18.122 379.055l0.189 82.949 49.209-0.073-0.174-82.949zM403.332 448.752l0.189 82.949 49.224-0.086-0.189-82.949zM-17.847 503.473l0.189 82.949 49.209-0.073-0.174-82.949zM403.608 573.17l0.189 82.949 49.209-0.073-0.174-82.949zM-17.571 627.903l0.189 82.949 49.209-0.086-0.189-82.949zM403.883 697.588l0.189 82.949 49.209-0.073-0.174-82.949zM-17.295 752.321l0.189 82.949 49.209-0.073-0.189-82.949zM404.159 822.018l0.189 82.949 49.209-0.086-0.174-82.949zM-17.020 876.751l0.189 82.937 49.209-0.073-0.189-82.949zM404.435 946.436l0.174 77.13 17.699-0.021 0.116 20.747 31.438-0.124-0.044-20.685-0.174-77.118zM-16.744 1001.169l0.058 24.060 0.044 20.795 94.559-0.378-0.232-41.469-45.205 0.171-0.015-3.252zM274.55 1003.394l0.218 41.481 98.433-0.391-0.232-41.469zM126.894 1003.981l0.232 41.469 98.433-0.379-0.232-41.481zM430.062-18.769l-0.24 39.212 437.465 3.118 1.579 977.514-440.634 1.559 0.126 39.212 477.704-1.692-1.705-1055.539z"],"width":917,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["note_select_left"],"defaultCode":59693,"grid":16},"attrs":[],"properties":{"id":68,"order":968,"ligatures":"","prevSize":32,"code":59694,"name":"note_select_left"},"setIdx":0,"setId":3,"iconIdx":78},{"icon":{"paths":["M253.551 126.775v697.264h30.090v-697.264zM270.121 197.589v-70.813h2.697c7.417 0 12.136 3.178 13.485 8.625 14.159 45.393 56.636 94.872 115.295 132.094 65.401 41.308 98.439 98.049 98.439 156.606 0 55.38-28.992 113.029-87.651 160.692-10.114 9.079-10.788 9.079-17.53 9.079-8.091 0-13.485-4.085-13.485-9.533 0-4.085 0.674-4.993 7.417-9.986 51.242-41.762 76.863-92.148 76.863-140.265 0-42.67-20.227-83.523-62.030-114.391-25.621-19.065-72.818-37.222-132.825-51.294 0-0.454-0.674-14.526-0.674-70.813zM170.087 734.012c2.721 0 6.803 0 7.484 0 0 0 0.681 0 0.681 0s4.082 0 7.484 0c61.231 3.65 97.29 46.718 97.29 100.737 0 26.279-8.164 56.208-28.575 84.677-38.78 56.208-102.052 86.867-157.161 86.867-42.862 0-79.601-18.249-97.29-55.478-5.443-14.6-8.164-28.469-8.164-43.799 0-79.567 83.003-167.894 178.252-173.004zM887.428 126.775c5.66-1.138 11.319-1.138 16.979-1.138 81.293 0 149.208 39.83 158.984 93.317 0.515 5.121 1.543 9.673 1.543 13.087 0 58.608-69.973 105.835-160.013 105.835s-158.469-48.366-158.469-105.835c0-6.828 0.515-13.656 2.573-21.053 12.348-44.952 69.973-79.661 138.403-84.213zM895.145 139.862c-2.573-0.569-6.174-0.569-8.747-0.569-32.414 0-51.966 30.726-51.966 68.85 0 20.484 5.66 42.676 17.493 64.867 19.551 34.14 47.849 51.211 72.031 51.211 20.58 0 38.588-11.949 46.82-36.985 3.602-10.242 5.145-20.484 5.145-31.295 0-51.211-35.501-108.111-80.778-116.077zM633.876 129.486v694.554c-15.26-7.455-34.185-12.179-56.433-13.15h-16.018c-97.547 3.83-182.55 70.016-182.55 129.649 0 11.489 2.778 21.885 8.352 32.826 18.116 27.902 55.743 41.573 99.639 41.573 56.438 0 121.231-22.981 160.946-65.107 20.903-21.337 29.27-43.756 29.27-63.451 0-17.166-6.713-32.823-19.141-45.411h0.762v-711.483zM624.128 839.332c3.484 0 6.961 0.542 9.748 1.636 7.664 1.094 11.144 6.022 11.144 12.040 0 18.054-32.032 53.073-82.199 84.257-48.773 30.637-101.738 49.775-130.305 49.775-13.238 0-20.893-3.83-20.893-13.13v-0.546c2.090-26.807 55.048-73.313 119.846-105.044 34.838-18.601 71.059-28.988 92.658-28.988zM840.552 909.028c0 26.064-21.847 47.192-48.797 47.192s-48.797-21.129-48.797-47.192c0-26.064 21.847-47.192 48.797-47.192s48.797 21.129 48.797 47.192z"],"width":1143,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["duration"],"defaultCode":59696,"grid":16},"attrs":[],"properties":{"id":69,"order":969,"ligatures":"","prevSize":32,"code":59697,"name":"duration"},"setIdx":0,"setId":3,"iconIdx":79},{"icon":{"paths":["M237.933 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM526.603 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM815.273 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM1103.943 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM1392.612 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM1681.282 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM1969.952 338.36c1.716 0 4.29 0 4.719 0 0 0 0.429 0 0.429 0s2.574 0 4.719 0c38.609 2.394 61.345 30.64 61.345 66.067 0 17.235-5.148 36.864-18.017 55.535-24.452 36.864-64.348 56.971-99.096 56.971-27.026 0-50.191-11.969-61.345-36.385-3.432-9.575-5.148-18.671-5.148-28.725 0-52.184 52.336-110.112 112.394-113.464zM125.54 427.407v583.945h22.916v-583.945zM414.197 427.407v583.945h22.916v-583.945zM702.884 427.407v583.945h22.916v-583.945zM991.541 427.407v583.945h22.916v-583.945zM1280.228 427.407v583.945h22.916v-583.945zM1568.885 427.407v583.945h22.916v-583.945zM1857.572 427.407v583.945h22.916v-583.945zM125.538 1024.139v-85.248h1747.297v85.248zM125.538 896.268v-85.247h1747.297v85.247zM2.421 106.338h889.747v17.049h-889.747v-17.049zM1181.072 106.338h889.747v17.049h-889.747v-17.049zM2.421 106.338h15.277v170.495h-15.277v-170.495zM2070.819 106.338h15.277v170.495h-15.277v-170.495zM1013.828 8.638c1.848-0.344 4.004-0.344 5.852-0.344 15.707 0 32.955 6.531 45.275 17.53 3.080 3.437 4.62 3.781 8.316 3.781h0.308c8.008 0 15.092-4.812 21.867-14.092 1.231-2.406 2.772-3.437 4.62-3.437 1.231 0 2.464 0.344 3.696 2.062 0.617 0.687 0.923 1.375 0.923 3.093 0 2.406-0.923 6.874-3.696 18.561-6.776 26.466-16.323 54.651-24.023 68.744-8.316 15.467-12.012 24.404-16.015 37.809-5.236 18.561-8.316 40.902-8.316 60.151 0 6.531-0.308 8.593-2.464 9.968l-1.231 0.344h-49.894l-0.925-0.344c-0.308-0.344-1.231-1.375-1.54-2.062l-0.617-0.687v-4.812c0-19.248 6.776-42.965 17.863-63.932 8.932-17.186 20.019-31.622 35.111-47.433 16.631-16.498 27.103-30.247 36.035-48.12l1.231-2.406-2.156 1.375c-12.935 10.999-27.719 16.842-41.579 16.842-12.935 0-24.639-4.812-34.187-13.749-6.468-5.843-10.472-8.593-13.859-8.593-0.925 0-1.848 0-2.464 0.344-5.236 1.375-10.164 9.968-13.86 24.748-1.231 4.812-2.156 5.843-5.236 5.843-1.848 0-3.080-0.344-4.004-2.406l-0.308-1.031v-50.527l0.308-1.031c0.925-1.719 2.464-2.75 4.62-2.75 0.308 0 1.231 0.344 2.156 1.031 4.004 3.093 4.928 3.093 8.008 3.093s9.548-1.375 14.475-4.125c0.925 0 1.848-0.344 2.464-0.344 0.925-0.687 2.464-1.031 4.004-1.719 2.464-0.344 6.16-1.375 9.24-1.375zM1036.31 231.711v0zM1036.31 0.045v0z"],"width":2088,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["septuplet"],"defaultCode":59699,"grid":16},"attrs":[],"properties":{"id":70,"order":970,"ligatures":"","prevSize":32,"code":59700,"name":"septuplet"},"setIdx":0,"setId":3,"iconIdx":80},{"icon":{"paths":["M212.635 324.704c1.575 0 3.938 0 4.332 0 0 0 0.394 0 0.394 0s2.363 0 4.332 0c35.44 2.441 56.31 31.245 56.31 67.373 0 17.575-4.725 37.592-16.538 56.632-22.445 37.592-59.066 58.097-90.962 58.097-24.808 0-46.072-12.205-56.31-37.104-3.15-9.764-4.725-19.040-4.725-29.292 0-53.215 48.040-112.288 103.169-115.705zM493.844 324.704c1.575 0 3.938 0 4.332 0 0 0 0.394 0 0.394 0s2.363 0 4.332 0c35.44 2.441 56.31 31.245 56.31 67.373 0 17.575-4.725 37.592-16.538 56.632-22.445 37.592-59.066 58.097-90.962 58.097-24.808 0-46.072-12.205-56.31-37.104-3.15-9.764-4.725-19.040-4.725-29.292 0-53.215 48.040-112.288 103.169-115.705zM775.052 324.704c1.575 0 3.938 0 4.332 0 0 0 0.394 0 0.394 0s2.363 0 4.332 0c35.44 2.441 56.31 31.245 56.31 67.373 0 17.575-4.725 37.592-16.538 56.632-22.445 37.592-59.066 58.097-90.962 58.097-24.808 0-46.072-12.205-56.31-37.104-3.15-9.764-4.725-19.040-4.725-29.292 0-53.215 48.040-112.288 103.169-115.705zM1056.261 324.704c1.575 0 3.938 0 4.332 0 0 0 0.394 0 0.394 0s2.363 0 4.332 0c35.44 2.441 56.31 31.245 56.31 67.373 0 17.575-4.725 37.592-16.538 56.632-22.445 37.592-59.066 58.097-90.962 58.097-24.808 0-46.072-12.205-56.31-37.104-3.15-9.764-4.725-19.040-4.725-29.292 0-53.215 48.040-112.288 103.169-115.705zM1337.469 324.704c1.575 0 3.938 0 4.332 0 0 0 0.394 0 0.394 0s2.363 0 4.332 0c35.44 2.441 56.31 31.245 56.31 67.373 0 17.575-4.725 37.592-16.538 56.632-22.445 37.592-59.066 58.097-90.962 58.097-24.808 0-46.072-12.205-56.31-37.104-3.15-9.764-4.725-19.040-4.725-29.292 0-53.215 48.040-112.288 103.169-115.705zM108.762 415.514v595.474h22.454v-595.474zM389.972 415.514v595.474h22.454v-595.474zM671.181 415.514v595.474h22.454v-595.474zM952.391 415.514v595.474h22.454v-595.474zM1233.581 415.514v595.474h22.473v-595.474zM109.467 1024.030v-86.931h1138.858v86.931zM109.467 893.633v-86.931h1138.858v86.931zM2.103 108.367h588.871v17.386h-588.871v-17.386zM846.835 108.367h588.871v17.386h-588.871v-17.386zM2.103 108.367h14.023v173.863h-14.023v-173.863zM1435.706 108.367h14.023v173.863h-14.023v-173.863zM674.378 12.593c0.565-0.351 0.848-0.351 1.696-0.351 0.565 0 2.262 0.351 4.523 1.402 12.722 5.258 26.009 8.412 39.862 8.412s28.554-3.155 43.255-8.412c2.544-1.052 4.241-1.402 5.371-1.402s1.979 0.351 2.827 1.402c1.13 1.402 1.414 2.454 1.414 3.856 0 1.052-0.283 2.454-1.13 4.557-7.068 20.329-15.549 31.546-26.857 36.803-5.937 2.454-14.701 3.856-24.313 3.856-13.853 0-29.967-2.804-41.558-8.062-0.848 0-1.13 0-1.13 0s0 0 0 0-2.827 36.803-2.827 38.205c0 0 0 0 0 0s0 0 0 0c0.565 0 1.13-0.351 2.827-1.402 5.371-3.155 11.874-6.309 18.093-7.711 5.654-2.103 11.591-2.454 16.963-2.454 35.339 0 63.327 30.845 63.327 69.050 0 5.959-0.848 12.268-2.262 18.577-7.35 30.144-32.229 51.875-57.673 51.875-3.958 0-7.35-0.351-10.743-1.402-13.287-3.155-27.706-13.67-38.448-26.639-4.806-5.959-6.502-12.618-6.502-19.979 0-14.020 8.764-28.041 21.486-28.041 1.414 0 3.11 0.351 4.523 0.351 11.308 2.804 16.963 15.072 16.963 26.639 0 10.866-5.089 21.381-14.701 24.886-0.565 0-1.414 0.351-1.414 0.351s0 0 0 0c0 0.701 6.785 3.505 9.612 4.557 1.979 0.351 3.393 0.351 5.371 0.351 16.397 0 31.946-21.381 32.794-48.37 0.283-1.753 0.283-3.155 0.283-4.557 0-22.432-6.22-43.813-15.549-52.576-2.544-2.804-4.523-3.505-8.764-3.505-0.283 0-0.848 0-1.414 0-12.439 0-24.313 4.907-34.208 13.67-3.958 3.505-4.241 3.505-5.371 3.505-2.827 0-4.806-2.103-4.806-5.258 0-3.505 5.937-87.977 6.22-89.029s1.13-2.454 2.262-3.155zM718.765 236.217v0zM718.765-0.025v0z"],"width":1452,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["quint"],"defaultCode":59700,"grid":16},"attrs":[],"properties":{"id":71,"order":971,"ligatures":"","prevSize":32,"code":59701,"name":"quint"},"setIdx":0,"setId":3,"iconIdx":81},{"icon":{"paths":["M261.155 323.259c-116.428 5.821-220.092 90.731-251.354 181.807h-3.675v11.233c-3.973 14.422-6.171 28.905-6.171 43.198 0 14.177 2.514 27.494 6.171 40.771v424.147h106.505v-333.521c13.342 2.683 27.273 4.16 41.811 4.16 80.748 0 173.522-41.81 230.345-118.57 29.907-38.879 41.811-79.77 41.811-115.658 0-73.77-52.842-132.584-142.561-137.569h-22.882zM30.676 0l-16.017 50.826c152.088 48.028 224.737 71.232 268.689 85.356l-264.529 138.054 24.685 47.22 366.873-191.515-46.596-23.298c0 0-2.917-1.3-3.952-1.664s-2.604-0.914-5.478-1.872c-5.748-1.916-16.605-5.449-37.582-12.204-41.953-13.511-124.302-39.812-286.093-90.904z"],"width":426,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["accent_above"],"defaultCode":59701,"grid":16},"attrs":[],"properties":{"id":72,"order":972,"ligatures":"","prevSize":32,"code":59702,"name":"accent_above"},"setIdx":0,"setId":3,"iconIdx":82},{"icon":{"paths":["M308.334 0v327.489c-13.082-2.626-26.803-4.085-41.055-4.085-79.287 0-170.316 41.122-226.111 116.494-29.366 38.175-41.123 78.327-41.123 113.566 0 72.435 51.886 130.187 139.983 135.081h22.536c114.322-5.716 216.044-89.158 246.74-178.587h3.609v-11.030c3.901-14.161 6.060-28.382 6.060-42.417 0-13.945-2.456-26.974-6.060-40.034v-416.477h-104.579zM72.011 716.46l-15.728 49.906c149.337 47.159 220.672 69.944 263.83 83.813l-259.745 135.557 24.238 46.366 360.238-188.051-45.753-22.877c0 0-2.864-1.276-3.881-1.634s-2.557-0.898-5.379-1.838c-5.644-1.881-16.305-5.35-36.902-11.983-41.194-13.266-122.054-39.092-280.919-89.26z"],"width":425,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["accent_below"],"defaultCode":59702,"grid":16},"attrs":[],"properties":{"id":73,"order":973,"ligatures":"","prevSize":32,"code":59703,"name":"accent_below"},"setIdx":0,"setId":3,"iconIdx":83},{"icon":{"paths":["M86.155 1023.16c3.206 1.069 81.212 1.069 157.080 1.069 68.389 0 135.709 0 137.846-1.069 16.029-5.343 23.509-18.166 23.509-30.989 0-14.96-7.48-28.851-23.509-33.126-2.137-1.069-73.732-1.069-146.394-1.069s-144.257 0-147.463 1.069c-16.029 4.274-22.44 18.166-22.44 30.989 0 14.96 6.411 27.783 21.371 33.126zM345.396 0v366.913c-14.656-2.942-30.030-4.577-45.998-4.577-88.832 0-190.819 46.072-253.33 130.517-32.901 42.771-46.074 87.756-46.074 127.237 0 81.155 58.132 145.859 156.834 151.342h25.249c128.084-6.404 242.051-99.891 276.443-200.086h4.043v-12.358c4.371-15.865 6.789-31.799 6.789-47.523 0-15.624-2.751-30.221-6.789-44.853v-466.613h-117.168z"],"width":469,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["tenuto_below"],"defaultCode":59703,"grid":16},"attrs":[],"properties":{"id":74,"order":974,"ligatures":"","prevSize":32,"code":59704,"name":"tenuto_below"},"setIdx":0,"setId":3,"iconIdx":84},{"icon":{"paths":["M287.346 252.796c-128.084 6.404-242.128 99.891-276.52 200.086h-4.043v12.358c-4.371 15.865-6.789 31.799-6.789 47.523 0 15.596 2.765 30.171 6.789 44.777v466.689h117.168v-366.913c14.675 2.951 30.007 4.577 45.998 4.577 88.832 0 190.895-46.072 253.406-130.517 32.901-42.771 45.998-87.756 45.998-127.237 0-81.155-58.132-145.859-156.834-151.342h-25.173zM86.155 1.069c3.206-1.069 81.212-1.069 157.080-1.069 68.389 0 135.709 0 137.846 1.069 16.029 5.343 23.509 18.166 23.509 30.989 0 14.96-7.48 28.851-23.509 33.126-2.137 1.069-73.732 1.069-146.394 1.069s-144.257 0-147.463-1.069c-16.029-4.274-22.44-18.166-22.44-30.989 0-14.96 6.411-27.783 21.371-33.126z"],"width":469,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["tenuto_above"],"defaultCode":59704,"grid":16},"attrs":[],"properties":{"id":75,"order":975,"ligatures":"","prevSize":32,"code":59705,"name":"tenuto_above"},"setIdx":0,"setId":3,"iconIdx":85},{"icon":{"paths":["M0 479.267l382.581-414.633v248.78h408.086v331.707h-408.086v248.78zM234.305 479.267l382.581-414.633v248.78h408.086v331.707h-408.086v248.78z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["rewind"],"defaultCode":59705,"grid":16},"attrs":[],"properties":{"id":76,"order":976,"ligatures":"","prevSize":32,"code":59706,"name":"rewind"},"setIdx":0,"setId":3,"iconIdx":86},{"icon":{"paths":["M1029.311 479.267l-382.581 414.633v-248.78h-408.086v-331.707h408.086v-248.78zM795.006 474.928l-382.581 414.633v-248.78h-408.086v-331.707h408.086v-248.78z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fforward"],"defaultCode":59706,"grid":16},"attrs":[],"properties":{"id":77,"order":977,"ligatures":"","prevSize":32,"code":59707,"name":"fforward"},"setIdx":0,"setId":3,"iconIdx":87},{"icon":{"paths":["M262.478 188.659c4.369-1.092 8.738-1.092 13.653-1.092 19.115 0 41.506 2.185 60.621 6.007 89.566 18.569 151.279 79.189 162.748 160.017 1.092 8.738 1.638 16.93 1.638 25.668 0 49.152-16.93 112.503-45.875 165.478-68.813 124.518-194.423 214.084-345.156 246.852-2.731 0-4.915 0.546-7.646 0.546-5.461 0-8.192-3.277-8.192-8.192 0-5.461 1.092-7.1 12.015-11.469 172.578-64.99 287.812-205.346 298.189-362.633 0.546-8.192 0.546-17.476 0.546-24.576 0-76.459-23.484-133.257-68.813-161.655-19.661-12.561-40.96-18.569-63.898-18.569-50.79 0-102.673 28.945-126.703 77.551-1.092 3.823-4.915 12.015-4.915 12.561 0 0 0 0 0 0s0.546-0.546 2.185-1.092c12.015-7.646 25.122-11.469 38.775-11.469 19.115 0 39.322 8.192 53.521 23.484 13.107 14.199 20.207 33.314 20.207 50.79 0 35.499-26.214 71.543-67.174 75.366-2.731 0-5.461 0.546-8.192 0.546-45.329 0-81.92-41.506-81.92-93.935 0-1.092 0-2.731 0-3.277 2.185-78.097 73.728-141.995 164.386-146.91zM553.021 261.841c1.092-0.546 1.638-0.546 3.277-0.546 3.823 0 8.192 0.546 9.284 1.638 13.653 3.823 20.207 15.838 20.207 27.307 0 9.83-4.915 19.661-14.746 25.122-3.823 2.731-8.738 3.277-13.653 3.277-7.646 0-15.838-3.277-21.299-10.377-4.369-5.461-6.554-11.469-6.554-17.476 0-13.653 8.738-27.307 23.484-28.945zM553.021 440.426c1.092 0 1.638 0 3.277 0 3.823 0 8.192 0.546 9.284 1.638 13.653 3.823 20.207 15.838 20.207 27.307 0 9.83-4.915 19.661-14.746 24.576-3.823 2.731-8.738 3.823-13.653 3.823-7.646 0-15.838-3.823-21.299-10.377-4.369-5.461-6.554-11.469-6.554-18.022 0-13.653 8.738-26.761 23.484-28.945z"],"width":796,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bass"],"defaultCode":59707,"grid":16},"attrs":[],"properties":{"id":78,"order":978,"ligatures":"","prevSize":32,"code":59708,"name":"bass"},"setIdx":0,"setId":3,"iconIdx":88},{"icon":{"paths":["M94.815 474.074v-383.932h89.566v768.956h-89.566v-385.024zM217.695 474.074v-383.932h23.484v367.548l3.277-3.277c5.461-4.369 15.292-14.746 21.845-23.484 23.484-31.676 42.598-73.182 54.067-121.788 3.277-12.015 4.369-13.653 10.377-13.653s8.192 2.731 9.284 11.469c4.369 60.621 43.691 104.311 88.474 104.311 7.1 0 14.746-1.092 21.845-3.823 29.491-9.83 39.868-36.045 42.052-105.95 0-14.199 0.546-27.307 0.546-39.322 0-79.189-9.83-116.873-31.676-134.895-12.015-9.284-30.037-14.746-49.152-14.746-19.661 0-38.775 4.915-56.798 13.653l-1.092 1.092 1.092 0.546c6.007 1.092 9.83 1.638 14.199 3.823 15.838 8.192 22.938 23.484 22.938 38.775 0 17.476-10.377 35.499-29.491 41.506-5.461 2.185-9.83 3.277-14.199 3.277-26.214 0-46.967-22.938-46.967-48.606 0-7.1 1.638-13.653 5.461-21.299 10.923-21.299 49.152-43.145 83.012-48.606 7.646-0.546 14.746-1.638 22.391-1.638 72.090 0 137.626 52.429 154.556 126.703 3.277 12.015 4.369 25.122 4.369 38.229 0 13.653-1.092 27.853-4.369 40.96-14.199 67.174-63.898 117.965-123.426 127.249-4.915 0.546-10.377 0.546-14.746 0.546-19.115 0-37.683-6.007-55.159-18.022-1.092-1.638-2.731-2.185-3.823-2.185 0 0 0 0 0 0s-8.738 14.746-19.115 33.314l-20.207 32.768 20.207 32.768c10.377 18.022 19.115 33.314 19.115 33.314s0 0 0 0c1.092 0 2.731-1.092 3.823-2.731 17.476-12.015 36.045-18.022 55.159-18.022 9.83 0 19.115 1.638 28.945 3.823 57.89 16.93 101.035 68.267 111.411 134.895 1.638 9.83 2.185 19.661 2.185 29.491 0 42.052-14.199 80.282-40.96 110.865-31.13 36.591-75.366 54.613-118.511 54.613-34.953 0-69.359-13.107-95.573-37.683-9.284-10.377-13.653-22.391-13.653-34.406 0-24.030 17.476-46.967 45.875-46.967 26.761 0 43.691 22.938 43.691 44.783 0 15.292-7.1 29.491-22.938 37.683-4.369 2.185-8.192 3.277-14.199 3.823l-1.092 1.092 1.092 0.546c18.022 9.284 37.137 13.653 56.798 13.653 19.115 0 37.137-5.461 49.152-14.199 21.845-18.569 31.676-56.252 31.676-134.349 0-13.107-0.546-25.668-0.546-40.414-3.277-78.643-16.384-105.404-57.344-109.227-2.185-0.546-4.369-0.546-6.554-0.546-45.329 0-84.105 44.783-88.474 104.858-1.092 8.192-3.277 10.923-9.284 10.923s-7.1-1.092-10.377-13.653c-11.469-48.060-30.583-90.112-54.067-121.788-6.554-8.192-16.384-19.115-21.845-23.484l-3.277-3.277v368.094h-23.484v-385.024zM0 94.815h853.333v18.963h-853.333zM0 284.444h853.333v18.963h-853.333zM0 474.074h853.333v18.963h-853.333zM0 663.704h853.333v18.963h-853.333zM0 853.333h853.333v18.963h-853.333z"],"width":796,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["alto"],"defaultCode":59708,"grid":16},"attrs":[],"properties":{"id":79,"order":979,"ligatures":"","prevSize":32,"code":59709,"name":"alto"},"setIdx":0,"setId":3,"iconIdx":89},{"icon":{"paths":["M225.96 417.589c-100.73 5.037-190.464 78.532-217.492 157.331h-3.119v9.657c-3.438 12.477-5.338 25.062-5.338 37.428 0 12.264 2.175 23.724 5.338 35.209v366.965h92.131v-288.51c11.539 2.32 23.595 3.599 36.169 3.599 69.85 0 150.104-36.227 199.258-102.628 25.87-33.632 36.169-69.004 36.169-100.049 0-63.814-45.71-114.691-123.321-119.003h-19.794zM323.142 322.124l-43.181 16.138c-48.374-129.208-71.709-190.915-85.9-228.245l-107.283 234.765-41.909-19.186 148.832-325.596 22.236 39.197c0 0 1.255 2.461 1.616 3.339s0.908 2.208 1.865 4.647c1.915 4.878 5.459 14.098 12.244 31.913 13.571 35.63 40.019 105.577 91.48 243.028z"],"width":369,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["marcato_above"],"defaultCode":59709,"grid":16},"attrs":[],"properties":{"id":80,"order":980,"ligatures":"","prevSize":32,"code":59710,"name":"marcato_above"},"setIdx":0,"setId":3,"iconIdx":90},{"icon":{"paths":["M284.495 0v302.248c-12.073-2.424-24.737-3.77-37.891-3.77-73.176 0-157.189 37.952-208.683 107.515-27.102 35.233-37.954 72.29-37.954 104.813 0 66.853 47.887 120.153 129.194 124.67h20.799c105.511-5.276 199.392-82.286 227.723-164.823h3.33v-10.18c3.6-13.069 5.593-26.195 5.593-39.148 0-12.87-2.266-24.895-5.593-36.948v-384.377h-96.518zM320.187 682.412l-45.8-15.317c-45.923 137.047-68.098 202.506-81.591 242.108l-120.907-241.872-43.176 21.62 167.728 335.452 21.847-41.852c0 0 1.224-2.623 1.57-3.555s0.87-2.345 1.783-4.934c1.827-5.178 5.2-14.96 11.652-33.86 12.905-37.8 38.040-112 86.893-257.79z"],"width":387,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["marcato_below"],"defaultCode":59710,"grid":16},"attrs":[],"properties":{"id":81,"order":981,"ligatures":"","prevSize":32,"code":59711,"name":"marcato_below"},"setIdx":0,"setId":3,"iconIdx":91},{"icon":{"paths":["M245.564 344.101c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM625.33 344.101c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM997.913 345.298c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM141.456 437.175v578.979h34.257v-578.979zM517.634 438.38v578.979h34.257v-578.979zM890.316 445.071v578.979h34.257v-578.979zM140.309 1024.049v-84.523h767.144v84.523zM2.219 105.402h403.935v16.904h-403.935v-16.904zM676.393 105.402h403.935v16.904h-403.935v-16.904zM2.219 105.402h14.795v169.045h-14.795v-169.045zM1080.328 105.402h14.795v169.045h-14.795v-169.045zM532.028 8.533c0.596 0 2.684 0 5.071 0 3.877 0 8.65 0 10.141 0 27.441 3.408 48.916 20.448 52.793 42.599 0.596 2.045 0.596 4.43 0.596 6.816 0 2.726 0 5.112-0.596 6.475-3.877 16.017-20.282 30.672-41.161 37.828-1.491 0.682-2.088 0.682-2.088 1.022 0 0 0 0 0 0 0.299 0 1.192 0.341 2.088 0.341 28.335 11.928 43.249 34.761 43.249 56.913 0 17.040-8.351 33.398-27.142 44.303-11.036 6.816-23.265 9.883-35.196 9.883-19.686 0-39.073-8.52-52.793-23.856-5.071-5.453-6.86-12.269-6.86-19.085 0-13.973 8.65-27.264 22.967-27.264v0c14.317 0 22.37 12.609 22.37 25.56 0 9.883-4.474 19.766-14.615 24.537 0 0 0 0 0 0 0 0.341 8.65 2.386 13.124 2.726 0.596 0 1.192 0 1.79 0 19.686 0 33.406-16.017 33.406-38.169 0-2.386 0-4.43-0.299-6.816-3.281-24.878-17.896-43.281-34.897-43.963-4.176-0.341-6.264-2.386-6.264-5.453 0-4.090 1.79-5.794 6.264-5.794 14.615-1.022 27.142-12.269 31.915-29.308 1.192-3.408 1.491-6.816 1.491-9.542 0-14.313-9.246-27.264-22.967-30.672-2.088-1.022-4.772-1.022-7.755-1.022-4.176 0-8.053 0.341-12.229 1.022l-1.192 0.341 1.192 1.022c7.755 4.771 11.036 13.291 11.036 21.811 0 11.246-6.562 22.492-17.896 25.56-1.491 0.341-3.281 0.341-4.772 0.341-13.124 0-22.967-13.632-22.967-27.945 0-6.134 1.79-12.269 6.264-17.381 10.439-12.95 26.248-20.448 45.933-22.833zM540.975 229.709v0zM540.975 0.014v0z"],"width":1097,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["triplet"],"defaultCode":59711,"grid":16},"attrs":[],"properties":{"id":82,"order":982,"ligatures":"","prevSize":32,"code":59712,"name":"triplet"},"setIdx":0,"setId":3,"iconIdx":92},{"icon":{"paths":["M245.564 344.101c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM625.33 344.101c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM997.913 345.298c1.662 0 4.154 0 4.57 0 0 0 0.416 0 0.416 0s2.493 0 4.57 0c37.39 2.373 59.408 30.379 59.408 65.506 0 17.088-4.985 36.55-17.449 55.063-23.68 36.55-62.317 56.487-95.967 56.487-26.173 0-48.607-11.867-59.408-36.076-3.324-9.494-4.985-18.512-4.985-28.481 0-51.74 50.684-109.176 108.846-112.499zM141.456 437.175v578.979h34.257v-578.979zM517.634 438.38v578.979h34.257v-578.979zM890.316 445.071v578.979h34.257v-578.979zM140.309 1024.049v-84.523h767.144v84.523zM2.219 105.402h403.935v16.904h-403.935v-16.904zM676.393 105.402h403.935v16.904h-403.935v-16.904zM2.219 105.402h14.795v169.045h-14.795v-169.045zM1080.328 105.402h14.795v169.045h-14.795v-169.045zM532.028 8.533c0.596 0 2.684 0 5.071 0 3.877 0 8.65 0 10.141 0 27.441 3.408 48.916 20.448 52.793 42.599 0.596 2.045 0.596 4.43 0.596 6.816 0 2.726 0 5.112-0.596 6.475-3.877 16.017-20.282 30.672-41.161 37.828-1.491 0.682-2.088 0.682-2.088 1.022 0 0 0 0 0 0 0.299 0 1.192 0.341 2.088 0.341 28.335 11.928 43.249 34.761 43.249 56.913 0 17.040-8.351 33.398-27.142 44.303-11.036 6.816-23.265 9.883-35.196 9.883-19.686 0-39.073-8.52-52.793-23.856-5.071-5.453-6.86-12.269-6.86-19.085 0-13.973 8.65-27.264 22.967-27.264v0c14.317 0 22.37 12.609 22.37 25.56 0 9.883-4.474 19.766-14.615 24.537 0 0 0 0 0 0 0 0.341 8.65 2.386 13.124 2.726 0.596 0 1.192 0 1.79 0 19.686 0 33.406-16.017 33.406-38.169 0-2.386 0-4.43-0.299-6.816-3.281-24.878-17.896-43.281-34.897-43.963-4.176-0.341-6.264-2.386-6.264-5.453 0-4.090 1.79-5.794 6.264-5.794 14.615-1.022 27.142-12.269 31.915-29.308 1.192-3.408 1.491-6.816 1.491-9.542 0-14.313-9.246-27.264-22.967-30.672-2.088-1.022-4.772-1.022-7.755-1.022-4.176 0-8.053 0.341-12.229 1.022l-1.192 0.341 1.192 1.022c7.755 4.771 11.036 13.291 11.036 21.811 0 11.246-6.562 22.492-17.896 25.56-1.491 0.341-3.281 0.341-4.772 0.341-13.124 0-22.967-13.632-22.967-27.945 0-6.134 1.79-12.269 6.264-17.381 10.439-12.95 26.248-20.448 45.933-22.833zM540.975 229.709v0zM540.975 0.014v0zM51.664 136.905l-21.913 26.345c17.706 14.724 35.106 29.188 52.206 43.407 485.733 403.909 728.897 605.856 850.629 706.842 60.866 50.493 91.361 75.748 106.669 88.387 7.654 6.319 11.513 9.479 13.482 11.090 0.985 0.806 1.498 1.227 1.823 1.489 0.163 0.131 0.265 0.206 0.451 0.351 0.093 0.069 0.173 0.154 0.468 0.368 0.147 0.107 0.836 0.552 0.837 0.552s0.937 0.552 0.937 0.552c0 0 1.439 0.719 1.439 0.719l6.841-32.835c0 0 6.825 1.422 6.825 1.422s2.392 1.271 2.392 1.271c-0.001 0 0.659 0.449 0.802 0.552 0.267 0.194 0.342 0.254 0.402 0.301-0.178-0.143-0.605-0.505-1.522-1.255-1.888-1.545-5.732-4.687-13.365-10.99-15.267-12.605-45.764-37.852-106.619-88.336-121.711-100.968-364.85-302.92-850.579-706.825-17.099-14.219-34.5-28.684-52.206-43.407zM1061.553 144.633c-511.81 425.61-768.018 638.401-896.261 744.796-64.121 53.197-96.254 79.803-112.34 93.087-8.043 6.642-12.075 9.962-14.068 11.592-0.99 0.81-1.473 1.208-1.656 1.355 0.060-0.043 0.119-0.113 0.402-0.318 0.141-0.102 0.803-0.535 0.802-0.535s0.937-0.552 0.937-0.552c0 0 1.439-0.719 1.439-0.719l6.875 32.819c0 0 6.875-1.455 6.875-1.455s2.375-1.254 2.375-1.255c0.001 0 0.657-0.446 0.802-0.552 0.291-0.211 0.392-0.295 0.485-0.368 0.186-0.144 0.283-0.216 0.451-0.351 0.337-0.271 0.871-0.708 1.907-1.556 2.072-1.695 6.121-5.034 14.185-11.692 16.126-13.317 48.276-39.915 112.407-93.12 128.262-106.412 384.479-319.231 896.294-744.846z"],"width":1097,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["no_tuplet"],"defaultCode":59712,"grid":16},"attrs":[],"properties":{"id":83,"order":983,"ligatures":"","prevSize":32,"code":59713,"name":"no_tuplet"},"setIdx":0,"setId":3,"iconIdx":93},{"icon":{"paths":["M13.798 6.282c-4.566 87.852-9.132 175.705-13.699 263.557 21.798 0 43.596 0 65.395 0 1.45-61.095 21.932-133.299 86.983-157.357 63.656-14.536 129.743-7.099 194.586-8.948-0.498 249.688 1.008 499.41-0.774 749.076 3.618 44.832-17.965 97.881-72.921 94.81-22.627 0.926-45.293 0.276-67.937 0.47 0 20.987 0 41.974 0 62.961 153.959 0 307.918 0 461.877 0 0-20.987 0-41.974 0-62.961-43.398-2.101-96.886 9.704-127.937-27.294-20.652-57.557-10.445-119.922-12.92-179.82 0-212.414 0-424.829 0-637.243 61.597 2.035 124.201-5.429 184.858 7.144 57.856 13.019 93.321 67.818 98.166 122.63 1.694 21.781 0.915 45.22 29.747 36.53 12.718-3.909 44.288 9.585 39.489-10.494-4.121-84.354-8.242-168.709-12.362-253.063-284.183 0-568.367 0-852.55 0zM49.714 42.823c260.207 0 520.414 0 780.621 0 2.614 53.701 5.228 107.403 7.842 161.104-5.333-71.652-72.536-126.795-144.027-133.997-68.268-5.733-137.014-1.837-205.503-2.982 0.464 263.273-0.937 526.572 0.718 789.828 1.534 41.642 7.163 94.836 53.371 112.647 25.317 9.171-23.315 3.181-34.636 4.891-63.989 0-127.977 0-191.966 0 42.882-12.123 67.113-53.617 66.916-95.089 3.719-138.877 0.885-277.913 1.771-416.858 0-131.806 0-263.612 0-395.419-74.966 1.61-150.501-4.349-224.939 5.889-57.414 10.195-101.405 58.125-117.477 110.805 2.436-46.94 4.873-93.88 7.309-140.82zM331.064 968.959c18.376-9.263 31.864-22.994 41.293-42.038 8.684-17.539 10.081-24.995 11.327-60.475 1.407-40.053 1.783-178.543 1.419-521.536l-0.296-278.686-74.336 0.001c-123.222 0.001-155.747 3.103-185.77 17.717-34.017 16.558-61.821 47.308-78.241 86.53l-2.728 6.515 0.038-6.515c0.021-3.584 1.464-33.436 3.208-66.34l3.17-59.824 780.082-0.596 0.008 5.036c0.005 2.77 1.331 31.424 2.947 63.676s2.902 61.571 2.857 65.155l-0.083 6.515-2.676-8.292c-17.935-55.574-73.352-98.65-136.325-105.968-21.671-2.518-62.314-3.607-134.752-3.609l-74.336-0.002 0.102 351.541c0.056 193.347 0.531 376.862 1.057 407.811 1.067 62.827 1.984 72.327 9.039 93.586 8.199 24.706 19.756 38.745 40.007 48.599l11.988 5.833-228.317 0.063 9.318-4.697zM23.918 24.381h804.571v48.762h-804.571v-48.762zM365.252 73.143h146.286v877.714h-146.286v-877.714zM316.49 950.857h243.81v24.381h-243.81v-24.381zM926.014 24.381v975.238h44.216v-975.238zM877.252 0v28.19h146.286v-28.19zM877.252 995.81v28.19h146.286v-28.19z"],"width":1023,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["text"],"defaultCode":59713,"grid":16},"attrs":[],"properties":{"id":84,"order":984,"ligatures":"","prevSize":32,"code":59714,"name":"text"},"setIdx":0,"setId":3,"iconIdx":94},{"icon":{"paths":["M506.973 92.47l-219.682 194.663h168.986v179.689h101.392v-179.689h168.986zM980.134 511.744l-219.682-194.663v149.741h-202.783v89.845h202.783v149.741zM506.973 931.019l219.682-194.663h-168.986v-179.689h-101.392v179.689h-168.986zM33.811 511.744l219.682 194.663v-149.741h202.783v-89.845h-202.783v-149.741zM458.602 466.514h96.919v94.686h-96.919v-94.686z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["move"],"defaultCode":59714,"grid":16},"attrs":[],"properties":{"id":85,"order":985,"ligatures":"","prevSize":32,"code":59715,"name":"move"},"setIdx":0,"setId":3,"iconIdx":95},{"icon":{"paths":["M674.512 392.256c0-27.54-22.786-49.865-50.893-49.865s-50.893 22.325-50.893 49.865v0zM572.726 392.256c0 27.54 22.786 49.865 50.893 49.865s50.893-22.325 50.893-49.865v0zM677.481 619.495c-0.015-26.961-23.025-48.812-51.407-48.812s-51.393 21.851-51.407 48.811v0.001zM574.667 619.495c0.015 26.961 23.025 48.812 51.407 48.812s51.393-21.851 51.407-48.811v-0.001zM844.908 64.084h108.845v896.746h-108.845v-896.746zM722.188 68.619h59.591v891.707h-59.591v-891.707zM69.377 62.702h777.204v41.16h-777.204v-41.16zM62.613 255.985h780.987v41.086h-780.987v-41.086zM62.655 479.423h779.017v41.004h-779.017v-41.004zM67.746 711.533h781.991v40.48h-781.991v-40.48zM63.315 919.947h781.592v40.883h-781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["end_rpt"],"defaultCode":59715,"grid":16},"attrs":[],"properties":{"id":86,"order":986,"ligatures":"","prevSize":32,"code":59716,"name":"end_rpt"},"setIdx":0,"setId":3,"iconIdx":96},{"icon":{"paths":["M559.643 2.58c1.721-2.622 6.872-2.622 12.026-2.622s10.308 0 12.026 2.622c8.59 1.313 18.898 6.556 24.052 13.113 6.872 9.179 6.872 9.179 6.872 59.007 0 44.583 1.721 45.894 1.721 45.894 17.18 0 70.439 17.046 97.927 28.848 109.954 47.205 187.265 129.815 226.779 242.583 6.872 19.669 18.898 72.119 18.898 87.854 0 0 18.898 0 56.695 0 60.131 0 60.131 0 72.157 6.556 12.026 5.245 18.898 17.046 18.898 26.225 0 13.113-6.872 23.603-18.898 28.848s-12.026 5.245-72.157 5.245c-37.797 0-56.695 2.622-56.695 2.622 0 14.424-12.026 66.874-18.898 86.543-39.515 112.768-116.826 195.378-226.779 242.583-27.488 13.113-80.747 27.536-97.927 27.536 0 0-1.721 2.622-1.721 44.583v6.556c0 44.583 0 44.583-10.308 53.762-6.872 9.179-20.616 13.113-30.924 13.113-13.744 0-27.488-3.935-34.36-13.113-10.308-9.179-10.308-9.179-10.308-53.762v-6.556c0-41.96 0-44.583-1.721-44.583-17.18 0-70.439-14.424-97.927-27.536-109.954-47.205-187.265-129.815-226.779-242.583-6.872-19.669-18.898-72.119-18.898-86.543 0 0-17.18-2.622-53.259-2.622-60.131 0-60.131 0-70.439-5.245-12.026-5.245-18.898-15.735-18.898-27.536 0-13.113 12.026-27.536 29.206-32.781 5.155 0 17.18-1.313 60.131-1.313 34.36 0 53.259 0 53.259 0 0-15.735 12.026-68.185 18.898-87.854 39.515-112.768 116.826-195.378 226.779-242.583 27.488-11.801 80.747-28.848 97.927-28.848 1.721 0 1.721-1.313 1.721-45.894 0-38.027 0-47.205 0-49.828 5.155-9.179 17.18-18.358 30.924-22.291zM528.719 333.015c0-79.987-1.721-145.55-1.721-145.55-5.155 0-42.951 27.536-56.695 40.649-58.413 57.695-103.081 154.729-106.517 239.96l-3.435 11.801h168.366v-146.861zM624.927 194.021c-3.435-3.935-8.59-6.556-8.59-6.556s-1.721 65.563-1.721 145.55v146.861h168.366l-3.435-11.801c-6.872-108.835-72.157-226.848-154.622-274.053zM528.716 694.922v-148.172h-168.364l3.435 11.801c3.435 86.543 48.105 183.576 106.517 241.272 13.744 13.113 51.541 40.649 56.695 40.649 0 0 1.721-65.563 1.721-145.55zM779.551 558.551l3.435-11.801h-168.366v148.172c0 79.987 1.721 145.55 1.721 145.55 5.155 0 42.951-27.536 56.695-40.649 58.413-57.695 103.081-154.729 106.517-241.272z"],"width":1148,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["coda"],"defaultCode":59716,"grid":16},"attrs":[],"properties":{"id":87,"order":987,"ligatures":"","prevSize":32,"code":59717,"name":"coda"},"setIdx":0,"setId":3,"iconIdx":97},{"icon":{"paths":["M305.637 1.058c8.308-1.058 15.232-1.058 22.156-1.058 91.392 0 174.477 46.503 204.941 117.314 4.154 8.455 5.539 17.967 5.539 26.422 0 36.991-34.618 66.583-83.084 66.583-41.542 0-70.621-17.967-85.854-48.616-18.002-47.56-63.698-75.039-110.779-75.039-11.078 0-22.156 1.058-33.234 4.228-33.234 10.569-49.85 30.65-49.85 60.242 0 7.398 0 14.796 2.769 22.194 22.156 95.119 138.473 197.637 293.564 259.993 12.463 4.228 24.925 8.455 26.31 9.512l4.154 2.113 1.385-2.113c2.769-3.171 41.542-49.673 148.167-175.442l99.701-116.257 73.391-87.721c27.695-33.82 30.464-35.934 36.003-38.048 6.924-3.171 12.463-4.228 20.771-4.228 18.002 0 34.618 11.626 34.618 27.479v1.058c0 7.398 0 9.512-29.079 43.332l-265.869 314.95-49.85 58.128-1.385 2.113 9.693 4.228c119.087 47.56 210.48 120.484 260.33 203.978 26.31 45.446 38.773 93.005 38.773 136.338 0 101.461-69.237 188.125-184.17 207.149-15.232 3.171-30.464 4.228-45.696 4.228-88.623 0-171.707-45.446-203.556-115.2-4.154-10.569-5.539-19.024-5.539-28.536 0-35.934 33.234-65.527 84.469-65.527 40.157 0 67.852 15.853 83.084 48.616 19.386 46.503 66.467 73.982 112.163 73.982 11.078 0 22.156-1.058 33.234-4.228 34.618-9.512 48.466-30.65 48.466-60.242 0-7.398 0-14.796-1.385-21.138-22.156-96.176-137.089-198.694-293.564-259.993-13.847-4.228-24.925-8.455-27.695-10.569l-2.769-1.058-2.769 1.058c-1.385 2.113-41.542 49.673-146.782 174.385l-99.701 117.314-73.391 88.778c-29.079 33.82-30.464 33.82-36.003 38.048-6.924 2.113-13.847 4.228-20.771 4.228-19.386 0-36.003-11.626-36.003-27.479v-2.113c0-8.455 2.769-8.455 30.464-42.275l265.869-316.007 51.235-58.128v-1.058l-9.693-5.284c-182.785-75.039-297.718-207.149-297.718-340.315v0c0-114.143 84.469-200.807 204.941-210.319zM841.529 324.462c5.539 0 11.078-2.113 16.617-2.113 29.079 0 56.774 12.683 73.391 31.706 9.693 9.512 13.847 23.251 13.847 35.934 0 13.739-4.154 26.422-13.847 38.048-16.617 19.024-44.312 29.593-70.621 29.593-24.925 0-47.081-7.398-65.083-22.194-15.232-12.683-22.156-28.536-22.156-45.446 0-28.536 24.925-58.128 67.852-65.527zM100.696 568.602c5.539-2.113 11.078-2.113 16.617-2.113 22.156 0 47.081 7.398 63.698 22.194 15.232 11.626 23.54 29.593 23.54 45.446 0 13.739-4.154 26.422-13.847 36.991-16.617 20.081-45.696 29.593-73.391 29.593-22.156 0-45.696-6.341-62.313-21.138-15.232-12.683-22.156-29.593-22.156-45.446 0-29.593 23.54-58.128 67.852-65.527z"],"width":978,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["segno"],"defaultCode":59717,"grid":16},"attrs":[],"properties":{"id":88,"order":988,"ligatures":"","prevSize":32,"code":59718,"name":"segno"},"setIdx":0,"setId":3,"iconIdx":98},{"icon":{"paths":["M844.908 64.084h55.422v896.746h-55.422v-896.746zM722.109 68.54h54.917v891.864h-54.917v-891.864zM69.377 62.702h777.204v41.16h-777.204v-41.16zM62.613 255.985h780.987v41.086h-780.987v-41.086zM65.070 479.423h779.017v41.004h-779.017v-41.004zM67.746 711.533h781.991v40.48h-781.991v-40.48zM63.315 919.947h781.592v40.883h-781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["double_bar"],"defaultCode":59718,"grid":16},"attrs":[],"properties":{"id":89,"order":989,"ligatures":"","prevSize":32,"code":59719,"name":"double_bar"},"setIdx":0,"setId":3,"iconIdx":99},{"icon":{"paths":["M126.437 62.702h-63.127v896.746h63.127v-896.746zM903.641 62.702h-777.204v41.16h777.204v-41.16zM910.404 255.985h-780.987v41.086h780.987v-41.086zM907.947 479.423h-779.017v41.004h779.017v-41.004zM905.271 711.533h-781.991v40.48h781.991v-40.48zM909.702 919.947h-781.592v40.883h781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["single_bar_start"],"defaultCode":59719,"grid":16},"attrs":[],"properties":{"id":90,"order":990,"ligatures":"","prevSize":32,"code":59720,"name":"single_bar_start"},"setIdx":0,"setId":3,"iconIdx":100},{"icon":{"paths":["M0 107.79v59.668h1336.286v-59.668zM1266.526 107.79v727.576h78.503v-727.576zM221.886 249.656l1.462-0.509h66.736l1.462 1.467c1.462 0.509 1.948 1.477 2.436 1.955l1.462 1.955v113.55c0 80.758 0 114.529 0.978 116.976 0.978 16.151 7.793 24.472 24.356 33.282 5.846 3.432 7.303 4.41 7.303 9.299 0 3.432-0.509 4.889-3.412 6.854l-1.945 0.509h-132.498l-1.462-0.509c-2.436-1.955-3.897-3.422-3.897-6.854 0-4.889 1.462-5.866 7.307-9.299 3.41-1.477 4.385-2.455 7.307-4.41 11.204-7.832 15.588-15.662 18.024-28.876 0-2.455 0-32.303 0-92.505v-89.566l-8.281 12.236-30.202 47.476c-6.82 10.767-7.307 11.256-11.691 11.256s-7.307-3.432-7.307-7.343c0-2.455 0.978-5.388 2.436-8.321 0.489-0.509 2.923-5.388 5.845-10.767l27.279-49.923 13.64-27.897c9.255-17.131 9.255-17.131 10.23-17.621 0.489-1.018 1.948-1.467 2.436-2.444zM243.809 561.887v0zM243.809 232.006v0zM738.486 236.948c1.679 0 4.611 0 7.969 0 6.711 0 15.518 0 17.614 1.018 31.455 4.471 56.619 23.318 67.523 49.61 3.77 8.932 5.453 18.353 5.453 28.275 0 24.31-11.324 52.091-31.874 72.925-14.259 14.386-28.519 23.316-50.746 31.751-28.938 10.915-53.682 30.261-69.619 53.577 0 0 0 0.407 0 0.407s0 0 0 0 1.262-0.407 2.098-1.986c15.937-15.38 37.326-24.309 56.618-24.309 15.937 0 27.261 3.483 42.359 13.395 9.226 5.459 17.615 7.934 25.583 7.934 3.357 0 6.708 0 10.485-1.018 5.453-1.487 11.323-6.447 13.421-10.425 1.254-3.483 3.357-4.96 5.874-4.96 3.357 0 6.708 2.974 6.708 7.435 0 3.483-3.77 15.874-7.127 24.307-13.421 31.75-36.907 51.595-59.555 51.595-1.679 0-2.936 0-4.611-0.407-5.872 0-8.387-1.986-15.937-7.934-15.936-12.404-36.067-18.852-53.682-18.852-7.549 0-14.26 1.018-20.55 3.982-8.388 3.473-16.356 9.431-18.873 13.888-1.262 3.483-3.355 4.471-5.872 4.471-2.098 0-4.193-1.018-5.453-3.982l-0.835-1.487v-6.936c0-5.958 0.418-7.934 0.418-9.92 0.418-1.487 0.835-4.471 0.835-6.936 7.549-41.67 33.132-78.877 67.941-97.234 28.519-15.874 47.392-44.151 50.747-79.871 0.835-2.974 0.835-5.449 0.835-8.433 0-31.751-20.131-53.576-48.65-53.576-2.098 0-4.617 0-6.711 0-4.193 0.407-5.453 0.407-5.453 1.487 0 0 0 0.407 1.262 1.487 9.646 6.447 14.26 18.85 14.26 30.757 0 15.379-6.71 29.765-19.712 35.719-4.192 1.487-8.387 1.986-11.743 1.986-17.614 0-32.293-17.859-32.293-39.19 0-3.982 0-7.924 0.835-12.404 6.291-22.819 36.068-41.672 70.458-46.135zM751.486 558.922h-0.009zM751.477 224.558h-0.009z"],"width":1480,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["ending"],"defaultCode":59720,"grid":16},"attrs":[],"properties":{"id":91,"order":991,"ligatures":"","prevSize":32,"code":59721,"name":"ending"},"setIdx":0,"setId":3,"iconIdx":101},{"icon":{"paths":["M302.051 76.465l-270.839 672.312 72.639 60.105 270.839-672.312zM303.266 83.057l66.833 55.3-267.475 663.961-66.833-55.3zM309.208 114.747l-249.56 619.49 36.404 30.122 249.56-619.49zM309.108 119.811l33.494 27.714-246.46 611.795-33.494-27.714zM170.233 416.133l133.427-331.21 65.745 54.4-266.854 662.42-65.745-54.4zM220.902 455.203l125.088-310.509-36.857-30.497-250.176 621.019 36.857 30.497zM373.104 135.692l-270.839 672.312 72.639 60.105 270.839-672.312zM374.319 142.284l66.833 55.3-267.475 663.961-66.833-55.3zM380.261 173.974l-249.56 619.49 36.404 30.122 249.56-619.49zM380.161 179.038l33.494 27.714-246.46 611.795-33.494-27.714zM241.285 475.359l133.427-331.21 65.745 54.4-266.854 662.42-65.745-54.4zM291.954 514.43l125.088-310.509-36.857-30.497-250.176 621.019 36.857 30.497zM442.833 193.389l-270.839 672.312 72.639 60.105 270.839-672.312zM444.048 199.981l66.833 55.3-267.475 663.961-66.833-55.3zM449.99 231.67l-249.56 619.49 36.404 30.122 249.56-619.49zM449.89 236.735l33.494 27.714-246.46 611.795-33.494-27.714zM311.014 533.056l133.427-331.21 65.745 54.4-266.854 662.42-65.745-54.4zM361.684 572.127l125.088-310.509-36.857-30.497-250.176 621.019 36.857 30.497zM447.268 64.448c-27.654-22.874-57.091-33.936-83.164-33.201s-48.973 13.361-62.739 38.434l-2.511 4.574 216.618 179.239 1.509-5.404c8.263-29.607 4.455-64.322-8.122-97.036s-33.965-63.714-61.591-86.606zM443.751 73.176c26.603 22.045 47.094 51.91 58.949 82.744 11.012 28.644 14.145 57.692 8.754 82.611l-201.55-166.771c12.37-19.161 31.506-29.805 54.336-30.449 24.575-0.693 52.881 9.838 79.511 31.865zM439.465 80.834c-20.324-16.812-41.64-25.734-60.267-26.524s-34.699 6.609-43.941 22.863l-1.686 2.965 159.205 131.733 0.949-3.575c5.198-19.588 1.642-43.221-8.137-65.935s-25.817-44.705-46.122-61.528zM437.16 86.555c19.553 16.199 34.923 37.38 44.14 58.789 8.563 19.888 11.5 39.66 8.243 56.224l-148.13-122.569c8.385-12.331 21.814-18.576 38.124-17.885 17.557 0.744 38.051 9.252 57.622 25.441zM312.583 68.792c6.811-9.478 16.284-16.434 29.055-21.335 20.615-7.911 41.171-6.632 66.199 4.119 14.9 6.401 42.36 26.948 55.466 41.503 25.955 28.825 44.897 69.002 49.007 103.948 1.213 10.316 0.964 28.24-0.508 36.607l-0.658 3.738-200.491-165.895zM494.623 207.151c3.545-14.449 1.799-35.51-4.488-54.133-16.892-50.034-64.168-94.028-106.003-98.646-22.379-2.47-37.28 4.276-49.329 22.334l-2.25 3.373 160.637 132.918zM55.305 761.001l-12.294 5.644-1.355 3.364 33.68 222.779 3.095-1.413 152.797-70.25 3.138-7.79-0.717-4.763zM54.634 770.163l172.971 143.124-0.321 0.797-147.573 67.845-31.55-208.781zM61.248 851.688l-7.388 2.7-0.755 1.875 25.39 129.621 1.86-0.675 91.824-33.62 1.749-4.341-0.541-2.771zM61.036 856.927l108.76 89.993-0.179 0.444-88.685 32.469-23.786-121.476zM76.93 955.024c-2.313-12.553-6.617-38.954-9.566-58.668l-5.361-35.844 25.477 20.572c14.012 11.315 36.519 29.938 50.015 41.384l24.538 20.812-38.668 17.688c-21.267 9.729-39.469 17.506-40.449 17.284-1.152-0.262-3.266-8.464-5.986-23.229z"],"width":553,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pencil"],"defaultCode":59721,"grid":16},"attrs":[],"properties":{"id":92,"order":992,"ligatures":"","prevSize":32,"code":59722,"name":"pencil"},"setIdx":0,"setId":3,"iconIdx":102},{"icon":{"paths":["M750.274 768.333h-88.626l-61.325-156.56h-270.5l-61.324 156.56h-84.426l227.657-561.731h110.888zM574.701 547.639l-109.628-275.773-110.048 275.773zM111.304 111.304v801.391h756.87v-801.391zM155.826 155.826h667.826v712.348h-667.826z"],"width":979,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["rehearsemark"],"defaultCode":59722,"grid":16},"attrs":[],"properties":{"id":93,"order":993,"ligatures":"","prevSize":32,"code":59723,"name":"rehearsemark"},"setIdx":0,"setId":3,"iconIdx":103},{"icon":{"paths":["M343.097 944.596h-52.060v-32.399q-22.43 19.384-46.799 30.184t-52.891 10.8q-55.383 0-88.059-42.645-32.399-42.645-32.399-118.243 0-39.322 11.077-70.059 11.354-30.738 30.461-52.337 18.83-21.046 43.753-32.122 25.199-11.077 52.060-11.077 24.368 0 43.199 5.261 18.83 4.984 39.599 15.784v-134.027h52.060zM291.037 868.445v-177.502q-21.046-9.415-37.66-13.015t-36.276-3.6q-43.753 0-68.121 30.461t-24.368 86.397q0 55.106 18.83 83.905 18.83 28.522 60.367 28.522 22.153 0 44.86-9.692 22.707-9.969 42.368-25.476zM680.371 784.484q0 75.598-38.768 119.35t-103.843 43.753q-65.629 0-104.397-43.753-38.491-43.753-38.491-119.35t38.491-119.35q38.768-44.029 104.397-44.029 65.075 0 103.843 44.029 38.768 43.753 38.768 119.35zM626.65 784.484q0-60.090-23.538-89.167-23.538-29.353-65.352-29.353-42.368 0-65.906 29.353-23.261 29.076-23.261 89.167 0 58.152 23.538 88.336 23.538 29.907 65.629 29.907 41.537 0 65.075-29.63 23.815-29.907 23.815-88.613zM909.046 783.184h-172.795v-50.122h172.795zM455.456 160.68v142.301c-6.68-1.141-13.687-1.775-20.965-1.775-40.488 0-86.971 17.868-115.463 50.619-14.996 16.588-21 34.035-21 49.347 0 31.475 26.495 56.569 71.482 58.695h11.508c58.378-2.484 110.322-38.741 125.997-77.6h1.843v-4.793c1.992-6.153 3.094-12.333 3.094-18.431 0-6.059-1.254-11.721-3.094-17.396v-180.968zM1237.090 70.819v142.301c-6.68-1.141-13.687-1.775-20.965-1.775-40.488 0-86.971 17.868-115.463 50.619-14.996 16.588-21 34.035-21 49.347 0 31.475 26.495 56.569 71.482 58.695h11.508c58.378-2.484 110.322-38.741 125.997-77.6h1.843v-4.793c1.992-6.153 3.094-12.333 3.094-18.431 0-6.059-1.254-11.721-3.094-17.396v-180.968zM1432.757 944.596h-52.060v-176.118q0-19.938-1.938-38.491-1.661-18.553-7.477-29.63-6.369-11.907-18.276-17.999t-34.337-6.092q-21.876 0-43.753 11.077-21.876 10.8-43.753 27.691 0.831 6.369 1.385 14.953 0.554 8.307 0.554 16.615v197.994h-52.060v-176.118q0-20.492-1.938-38.768-1.661-18.553-7.477-29.63-6.369-11.907-18.276-17.723-11.907-6.092-34.337-6.092-21.322 0-42.922 10.523-21.322 10.523-42.645 26.861v230.947h-52.060v-309.314h52.060v34.337q24.368-20.215 48.46-31.568 24.368-11.353 51.783-11.353 31.568 0 53.445 13.292 22.153 13.292 32.953 36.83 31.568-26.584 57.598-38.214 26.030-11.907 55.66-11.907 50.952 0 75.044 31.014 24.369 30.738 24.369 86.12zM1533 583.499h-58.706v-53.998h58.706zM1529.677 944.596h-52.060v-309.314h52.060z"],"width":1604,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["lyric"],"defaultCode":59723,"grid":16},"attrs":[],"properties":{"id":94,"order":994,"ligatures":"","prevSize":32,"code":59724,"name":"lyric"},"setIdx":0,"setId":3,"iconIdx":104},{"icon":{"paths":["M846.581 62.702h63.127v896.746h-63.127v-896.746zM69.377 62.702h777.204v41.16h-777.204v-41.16zM62.613 255.985h780.987v41.086h-780.987v-41.086zM65.070 479.423h779.017v41.004h-779.017v-41.004zM67.746 711.533h781.991v40.48h-781.991v-40.48zM63.315 919.947h781.592v40.883h-781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["single_bar"],"defaultCode":59724,"grid":16},"attrs":[],"properties":{"id":95,"order":995,"ligatures":"","prevSize":32,"code":59725,"name":"single_bar"},"setIdx":0,"setId":3,"iconIdx":105},{"icon":{"paths":["M844.908 64.084h108.845v896.746h-108.845v-896.746zM722.188 68.619h59.591v891.707h-59.591v-891.707zM69.377 62.702h777.204v41.16h-777.204v-41.16zM62.613 255.985h780.987v41.086h-780.987v-41.086zM62.655 479.423h779.017v41.004h-779.017v-41.004zM67.746 711.533h781.991v40.48h-781.991v-40.48zM63.315 919.947h781.592v40.883h-781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["end_bar"],"defaultCode":59725,"grid":16},"attrs":[],"properties":{"id":96,"order":996,"ligatures":"","prevSize":32,"code":59726,"name":"end_bar"},"setIdx":0,"setId":3,"iconIdx":106},{"icon":{"paths":["M343.183 392.256c0-27.54 22.786-49.865 50.893-49.865s50.893 22.325 50.893 49.865v0zM444.97 392.256c0 27.54-22.786 49.865-50.893 49.865s-50.893-22.325-50.893-49.865v0zM340.214 619.495c0.015-26.961 23.025-48.812 51.407-48.812s51.393 21.851 51.407 48.811v0.001zM443.029 619.495c-0.015 26.961-23.025 48.812-51.407 48.812s-51.393-21.851-51.407-48.811v-0.001zM172.788 64.084h-108.845v896.746h108.845v-896.746zM295.508 68.619h-59.591v891.707h59.591v-891.707zM948.319 62.702h-777.204v41.16h777.204v-41.16zM955.083 255.985h-780.987v41.086h780.987v-41.086zM955.041 479.423h-779.017v41.004h779.017v-41.004zM949.95 711.533h-781.991v40.48h781.991v-40.48zM954.381 919.947h-781.592v40.883h781.592v-40.883z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["start_rpt"],"defaultCode":59726,"grid":16},"attrs":[],"properties":{"id":97,"order":997,"ligatures":"","prevSize":32,"code":59727,"name":"start_rpt"},"setIdx":0,"setId":3,"iconIdx":107},{"icon":{"paths":["M111.225 100.024c-3.747 72.084-7.493 144.168-11.24 216.252 17.886 0 35.771 0 53.657 0 1.19-50.13 17.996-109.373 71.371-129.113 52.231-11.927 106.456-5.824 159.661-7.342-0.409 204.872 0.827 409.773-0.635 614.627 2.968 36.785-14.741 80.313-59.832 77.793-18.566 0.759-37.163 0.226-55.744 0.386 0 17.22 0 34.44 0 51.661 126.325 0 252.65 0 378.976 0 0-17.22 0-34.44 0-51.661-35.609-1.724-79.497 7.963-104.974-22.395-16.945-47.226-8.57-98.398-10.601-147.544 0-174.289 0-348.577 0-522.866 50.541 1.67 101.909-4.455 151.678 5.862 47.472 10.683 76.571 55.645 80.546 100.62 1.39 17.871 0.751 37.104 24.407 29.973 10.435-3.208 36.339 7.864 32.401-8.611-3.381-69.214-6.762-138.428-10.144-207.641-233.176 0-466.352 0-699.528 0zM140.694 130.006c213.503 0 427.006 0 640.509 0 2.145 44.063 4.289 88.125 6.434 132.188-4.376-58.792-59.517-104.037-118.176-109.946-56.015-4.704-112.421-1.507-168.618-2.446 0.38 216.019-0.769 432.059 0.589 648.064 1.259 34.168 5.877 77.814 43.791 92.428 20.773 7.525-19.13 2.61-28.419 4.013-52.504 0-105.007 0-157.511 0 35.185-9.947 55.067-43.993 54.906-78.022 3.051-113.951 0.726-228.031 1.453-342.037 0-108.149 0-216.297 0-324.446-61.51 1.321-123.488-3.569-184.566 4.832-47.109 8.365-83.204 47.692-96.391 90.917 1.999-38.515 3.998-77.030 5.997-115.544zM371.545 889.913c15.078-7.601 26.145-18.867 33.881-34.492 7.126-14.391 8.271-20.509 9.294-49.62 1.154-32.864 1.463-146.497 1.164-427.927l-0.243-228.665-60.994 0.001c-101.105 0.001-127.792 2.546-152.427 14.537-27.911 13.586-50.725 38.817-64.198 70.999l-2.238 5.346 0.031-5.346c0.017-2.94 1.202-27.435 2.632-54.432l2.601-49.086 640.068-0.489 0.007 4.132c0.004 2.273 1.092 25.784 2.418 52.247s2.381 50.52 2.344 53.46l-0.068 5.346-2.196-6.804c-14.716-45.599-60.186-80.944-111.856-86.948-17.782-2.066-51.13-2.959-110.566-2.961l-60.994-0.001 0.084 288.444c0.046 158.644 0.436 309.22 0.867 334.614 0.875 51.55 1.628 59.345 7.417 76.789 6.727 20.271 16.21 31.791 32.827 39.876l9.837 4.786-187.337 0.052 7.646-3.854zM119.528 114.874h660.161v40.010h-660.161v-40.010zM399.597 154.884h120.029v720.176h-120.029v-720.176zM359.587 875.060h200.049v20.005h-200.049v-20.005z"],"width":921,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["textBasic"],"defaultCode":59727,"grid":16},"attrs":[],"properties":{"id":98,"order":998,"ligatures":"","prevSize":32,"code":59728,"name":"textBasic"},"setIdx":0,"setId":3,"iconIdx":108},{"icon":{"paths":["M917.824 229.056c-22.208-30.272-53.184-65.728-87.168-99.712s-69.44-64.96-99.712-87.168c-51.584-37.824-76.608-42.176-90.944-42.176h-496c-44.096 0-80 35.904-80 80v864c0 44.096 35.904 80 80 80h736c44.096 0 80-35.904 80-80v-624c0-14.336-4.352-39.36-42.176-90.944v0zM785.344 174.656c30.72 30.72 54.784 58.368 72.576 81.344h-153.984v-153.92c22.976 17.792 50.688 41.856 81.344 72.576v0zM896 944c0 8.704-7.296 16-16 16h-736c-8.64 0-16-7.296-16-16v-864c0-8.64 7.36-16 16-16 0 0 495.936 0 496 0v224c0 17.664 14.336 32 32 32h224v624zM756.288 391.232c-7.424-6.080-17.152-8.512-26.56-6.656l-320 64c-14.976 3.008-25.728 16.128-25.728 31.36v236.864c-18.816-8.192-40.704-12.864-64-12.864-70.72 0-128 43.008-128 96s57.28 96 128 96 128-43.008 128-96v-229.76l256-51.2v133.824c-18.816-8.192-40.704-12.864-64-12.864-70.72 0-128 43.008-128 96s57.28 96 128 96 128-43.008 128-96v-320c0-9.6-4.288-18.688-11.712-24.768z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["file-music"],"defaultCode":59728,"grid":16},"attrs":[],"properties":{"id":99,"order":999,"ligatures":"","prevSize":32,"code":59729,"name":"file-music"},"setIdx":0,"setId":3,"iconIdx":109},{"icon":{"paths":["M864 0c88.384 0 160 71.616 160 160 0 36.032-11.904 69.248-32 96l-64 64-224-224 64-64c26.752-20.096 59.968-32 96-32zM64 736l-64 288 288-64 592-592-224-224-592 592zM715.584 363.584l-448 448-55.168-55.168 448-448 55.168 55.168z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pencil1"],"defaultCode":59729,"grid":16},"attrs":[],"properties":{"id":100,"order":1000,"ligatures":"","prevSize":32,"code":59730,"name":"pencil1"},"setIdx":0,"setId":3,"iconIdx":110},{"icon":{"paths":["M0 576c0 152.896 67.072 290.176 173.376 384l84.672-96c-79.744-70.336-129.984-173.312-129.984-288 0-212.096 171.904-384 384-384 106.048 0 202.048 43.008 271.552 112.448l-143.552 143.552h384v-384l-149.952 149.952c-92.672-92.672-220.672-149.952-362.048-149.952-282.752 0-512 229.248-512 512z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["redo"],"defaultCode":59730,"grid":16},"attrs":[],"properties":{"id":101,"order":1001,"ligatures":"","prevSize":32,"code":59731,"name":"redo"},"setIdx":0,"setId":3,"iconIdx":111},{"icon":{"paths":["M896 0h-896v1024h1024v-896l-128-128zM512 128h128v256h-128v-256zM896 896h-768v-768h64v320h576v-320h75.008l52.992 52.992v715.008z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["floppy-disk"],"defaultCode":59731,"grid":16},"attrs":[],"properties":{"id":102,"order":1002,"ligatures":"","prevSize":32,"code":59732,"name":"floppy-disk"},"setIdx":0,"setId":3,"iconIdx":112},{"icon":{"paths":["M512 64c-141.376 0-269.376 57.344-362.048 149.952l-149.952-149.952v384h384l-143.552-143.552c69.504-69.504 165.504-112.448 271.552-112.448 212.096 0 384 171.904 384 384 0 114.688-50.304 217.664-130.048 288l84.672 96c106.304-93.824 173.376-231.104 173.376-384 0-282.752-229.248-512-512-512z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["undo"],"defaultCode":59732,"grid":16},"attrs":[],"properties":{"id":103,"order":1003,"ligatures":"","prevSize":32,"code":59733,"name":"undo"},"setIdx":0,"setId":3,"iconIdx":113},{"icon":{"paths":["M1088 128h-1024c-35.2 0-64 28.8-64 64v640c0 35.2 28.8 64 64 64h1024c35.2 0 64-28.8 64-64v-640c0-35.2-28.8-64-64-64zM640 256h128v128h-128v-128zM832 448v128h-128v-128h128zM448 256h128v128h-128v-128zM640 448v128h-128v-128h128zM256 256h128v128h-128v-128zM448 448v128h-128v-128h128zM128 256h64v128h-64v-128zM128 448h128v128h-128v-128zM192 768h-64v-128h64v128zM768 768h-512v-128h512v128zM1024 768h-192v-128h192v128zM1024 576h-128v-128h128v128zM1024 384h-192v-128h192v128z"],"width":1152,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["keyboard"],"defaultCode":59733,"grid":16},"attrs":[],"properties":{"id":104,"order":1004,"ligatures":"","prevSize":32,"code":59734,"name":"keyboard"},"setIdx":0,"setId":3,"iconIdx":114},{"icon":{"paths":["M832 960l192-512h-832l-192 512zM128 384l-128 576v-832h288l128 128h416v128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["folder-open"],"defaultCode":59734,"grid":16},"attrs":[],"properties":{"id":105,"order":1005,"ligatures":"","prevSize":32,"code":59735,"name":"folder-open"},"setIdx":0,"setId":3,"iconIdx":115},{"icon":{"paths":["M704 128h-128v-64c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v64h-128v128h512v-128zM512 128h-128v-63.872c0.064-0.064 0.064-0.064 0.128-0.128h127.744c0.064 0.064 0.064 0.064 0.128 0.128v63.872zM832 320v-160c0-17.6-14.4-32-32-32h-64v64h32v128h-192l-192 192v256h-256v-576h32v-64h-64c-17.6 0-32 14.4-32 32v640c0 17.6 14.4 32 32 32h288v192h640v-704h-192zM576 410.496v101.504h-101.504l101.504-101.504zM960 960h-512v-384h192v-192h320v576z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["paste"],"defaultCode":59735,"grid":16},"attrs":[],"properties":{"id":106,"order":1006,"ligatures":"","prevSize":32,"code":59736,"name":"paste"},"setIdx":0,"setId":3,"iconIdx":116},{"icon":{"paths":["M640 256v-256h-448l-192 192v576h384v256h640v-768h-384zM192 90.496v101.504h-101.504l101.504-101.504zM64 704v-448h192v-192h320v192l-192 192v256h-320zM576 346.496v101.504h-101.504l101.504-101.504zM960 960h-512v-448h192v-192h320v640z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["copy"],"defaultCode":59736,"grid":16},"attrs":[],"properties":{"id":107,"order":1007,"ligatures":"","prevSize":32,"code":59737,"name":"copy"},"setIdx":0,"setId":3,"iconIdx":117},{"icon":{"paths":["M928 128h-288c0-70.72-57.28-128-128-128s-128 57.28-128 128h-288c-17.664 0-32 14.336-32 32v832c0 17.664 14.336 32 32 32h832c17.664 0 32-14.336 32-32v-832c0-17.664-14.336-32-32-32zM512 64c35.328 0 64 28.672 64 64s-28.672 64-64 64c-35.328 0-64-28.672-64-64s28.672-64 64-64zM896 960h-768v-768h128v96c0 17.664 14.336 32 32 32h448c17.664 0 32-14.336 32-32v-96h128v768zM448 858.496l-205.248-237.248 58.496-58.496 146.752 114.752 274.752-242.752 58.496 58.496z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["clipboard"],"defaultCode":59737,"grid":16},"attrs":[],"properties":{"id":108,"order":1008,"ligatures":"","prevSize":32,"code":59738,"name":"clipboard"},"setIdx":0,"setId":3,"iconIdx":118},{"icon":{"paths":["M268.169 80.74c3.12 0 8.581 0 14.822 0 10.922 0 25.744 0 31.205 1.329 46.807 5.981 96.734 34.559 106.096 60.479 2.341 5.981 3.12 11.298 3.12 16.615 0 29.907-29.644 52.503-61.629 52.503-12.482 0-24.964-2.658-36.665-10.634-14.042-10.634-21.843-23.926-21.843-39.211 0-20.603 14.822-41.87 40.566-47.851 2.341 0 3.12-0.665 3.12-0.665s-0.781-1.329-3.12-1.994c-17.163-6.646-34.325-9.304-49.927-9.304-24.184 0-45.247 7.311-60.849 21.267-16.382 16.615-28.084 50.51-35.885 100.355-0.781 11.963-3.12 34.559-3.12 39.211 0 0 0 0 0 0s0 0 0 0 3.12-1.329 6.241-1.994c24.964-8.64 46.807-11.963 70.21-11.963 28.084 0 54.608 5.317 84.252 18.609 54.608 22.596 85.033 55.826 85.033 95.703 0 5.317-1.56 11.298-2.341 17.28-7.801 37.218-41.346 67.789-95.954 87.727-24.964 9.304-47.587 14.621-70.21 14.621s-46.027-5.981-71.771-17.28c-67.869-29.242-114.676-83.74-127.158-146.877-2.34-12.627-3.12-25.255-3.12-39.211 0-27.913 4.681-55.826 15.602-78.423 29.644-63.802 105.316-112.982 183.327-120.293zM279.091 270.152c-3.12 0-6.241 0-9.361 0-16.382 0-28.864 4.652-36.665 11.963-10.922 13.957-18.723 48.516-18.723 79.088 0 6.646 0 13.292 0.781 18.609 3.12 31.236 11.702 57.156 20.283 68.454 6.241 7.975 19.503 12.627 34.325 12.627 3.12 0 7.021 0 10.141-0.665 22.623-2.658 31.205-14.621 39.786-52.503 3.901-17.944 6.241-33.23 6.241-48.516s-2.341-29.907-6.241-47.851c-7.801-27.249-17.943-38.547-40.566-41.205zM253.348 512.066v0zM253.348 64.125v0zM233.454 528.681c6.241 0 14.042-0.666 21.843-0.666 76.451 0 144.321 35.888 162.264 88.392 1.56 8.64 3.901 16.615 3.901 25.255 0 25.255-13.262 53.168-35.885 71.777 0 0.666-0.781 0.666-0.781 0.666 0 1.329 0.781 1.329 3.12 2.658 36.665 22.596 56.948 55.826 56.948 89.057 0 15.286-3.901 29.907-12.482 43.864-29.644 52.503-104.535 81.081-178.646 81.081-50.707 0-102.195-12.627-140.421-40.541-33.544-23.926-49.146-54.497-49.146-85.734 0-33.23 18.723-65.131 56.948-87.727l3.12-2.658-3.901-3.323c-23.403-21.267-33.545-44.528-33.545-67.789 0-53.833 57.729-105.672 146.662-114.311zM265.438 557.259c-3.901 0-8.581-0.666-12.482-0.666-34.325 0-66.31 17.28-66.31 35.888 0 2.658 1.56 5.317 2.341 7.311 12.482 25.255 63.969 59.15 124.038 85.069l14.042 6.646 0.781-1.994c10.922-14.621 16.382-30.572 16.382-46.522 0-40.541-31.985-79.088-78.792-85.734zM171.826 742.682c-3.12-1.329-6.241-2.658-6.241-2.658s0 0 0 0c-2.341 0-14.042 11.298-17.943 16.615-12.482 15.95-17.943 32.565-17.943 49.18 0 49.845 52.268 96.367 124.038 96.367 1.56 0 2.341-0.666 4.681-0.666 42.126-0.666 76.451-21.932 76.451-45.857 0-3.988-1.56-7.311-2.341-10.634-14.822-36.553-67.87-72.442-146.662-97.696-3.901-1.994-9.361-3.323-14.042-4.652zM253.738 960.005v0zM253.738 512.064v0z"],"width":509,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sixeight"],"defaultCode":59738,"grid":16},"attrs":[],"properties":{"id":109,"order":1009,"ligatures":"","prevSize":32,"code":59739,"name":"sixeight"},"setIdx":0,"setId":3,"iconIdx":119},{"icon":{"paths":["M235.54 70.155c1.788 0 8.049 0 15.203 0 11.626 0 25.934 0 30.406 0 82.275 6.826 146.663 40.953 158.289 85.319 1.788 4.095 1.788 8.873 1.788 13.651 0 5.46 0 10.238-1.788 12.969-11.626 32.080-60.812 61.43-123.412 75.764-4.471 1.365-6.26 1.365-6.26 2.048 0 0 0 0 0 0 0.896 0 3.577 0.683 6.26 0.683 84.957 23.889 129.672 69.621 129.672 113.987 0 34.128-25.040 66.89-81.38 88.732-33.089 13.651-69.755 19.794-105.526 19.794-59.023 0-117.152-17.064-158.289-47.779-15.203-10.921-20.569-24.572-20.569-38.223 0-27.985 25.934-54.604 68.86-54.604v0c42.926 0 67.072 25.255 67.072 51.192 0 19.794-13.414 39.588-43.82 49.144 0 0 0 0 0 0 0 0.683 25.934 4.778 39.349 5.46 1.788 0 3.577 0 5.366 0 59.023 0 100.16-32.080 100.16-76.446 0-4.778 0-8.873-0.896-13.651-9.837-49.826-53.657-86.684-104.632-88.050-12.52-0.683-18.78-4.778-18.78-10.921 0-8.191 5.366-11.603 18.78-11.603 43.82-2.048 81.38-24.572 95.689-58.7 3.577-6.826 4.471-13.651 4.471-19.112 0-28.667-27.723-54.604-68.86-61.43-6.26-2.048-14.309-2.048-23.252-2.048-12.52 0-24.146 0.683-36.666 2.048l-3.577 0.683 3.577 2.048c23.252 9.556 33.089 26.62 33.089 43.683 0 22.524-19.674 45.049-53.657 51.192-4.471 0.683-9.837 0.683-14.309 0.683-39.349 0-68.86-27.302-68.86-55.969 0-12.286 5.366-24.572 18.78-34.81 31.3-25.937 78.697-40.953 137.721-45.731zM262.367 513.133v0zM262.367 53.091v0zM208.708 535.598c0.896-0.683 13.414-0.683 51.869-0.683 11.626 0 24.146 0 40.243 0h90.323l2.684 2.048c4.471 2.048 7.154 5.46 7.154 8.191 0 4.095-2.684 6.826-6.26 9.556-0.896 2.048-8.943 7.508-14.309 13.651l-47.397 41.636-60.812 52.557-32.194 27.985-48.292 42.318-63.495 55.287c-10.731 10.238-22.357 18.429-22.357 18.429s0 0 0 0c0 1.365 8.049 1.365 82.275 1.365h81.38v-44.366c0-45.049 0-45.731 0.896-46.414 1.788-2.048 9.837-9.556 41.137-37.54l25.040-20.477 18.78-18.429 19.674-15.699 9.837-9.556c3.577-4.095 8.943-4.778 13.414-4.778 5.366 0 9.837 2.048 12.52 5.46 0.896 2.048 0.896 3.413 0.896 53.922 0 11.603 0 25.937 0 43.001v94.875h22.357c20.569 0 21.463 0 24.146 0.683 7.154 2.048 10.731 7.508 10.731 13.651 0 3.413-0.896 7.508-4.471 10.238-5.366 3.413-6.26 3.413-30.406 3.413h-22.357v11.603c0.896 34.81 9.837 48.461 44.714 62.795 12.52 4.778 15.203 6.143 15.203 12.969 0 4.778-1.788 6.826-6.26 9.556l-2.684 0.683h-244.141l-2.684-0.683c-5.366-2.73-6.26-4.778-6.26-9.556 0-6.826 0.896-8.191 14.309-12.969 34.877-14.334 43.82-27.985 43.82-62.795v-11.603h-102.845c-18.78 1.365-33.983 1.365-46.503 1.365-56.34 0-57.234-1.365-58.129-1.365-5.366-1.365-7.154-5.46-7.154-10.238 0 0 0 0 0 0 0-4.778 0-4.778 17.886-20.477 75.12-69.621 127.883-170.639 127.883-251.18 0-12.286 2.684-16.381 9.837-18.429zM262.366 971.068v0zM262.366 511.026v0z"],"width":525,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["threefour"],"defaultCode":59739,"grid":16},"attrs":[],"properties":{"id":110,"order":1010,"ligatures":"","prevSize":32,"code":59740,"name":"threefour"},"setIdx":0,"setId":3,"iconIdx":120},{"icon":{"paths":["M200.777 74.698c0.861-0.656 12.902-0.656 49.888-0.656 11.182 0 23.224 0 38.707 0h86.875l2.581 1.969c4.301 1.969 6.881 5.252 6.881 7.878 0 3.939-2.581 6.565-6.021 9.191-0.861 1.969-8.601 7.221-13.762 13.13l-45.588 40.046-58.49 50.55-30.965 26.916-46.448 40.703-61.070 53.176c-10.322 9.847-21.504 17.725-21.504 17.725s0 0 0 0c0 1.313 7.741 1.313 79.133 1.313h78.273v-42.672c0-43.329 0-43.985 0.861-44.642 1.72-1.969 9.462-9.191 39.567-36.107l24.084-19.695 18.063-17.725 18.923-15.099 9.462-9.191c3.441-3.939 8.601-4.595 12.902-4.595 5.161 0 9.462 1.969 12.042 5.252 0.861 1.969 0.861 3.282 0.861 51.863 0 11.16 0 24.947 0 41.359v91.253h21.504c19.783 0 20.643 0 23.224 0.656 6.881 1.969 10.322 7.221 10.322 13.13 0 3.282-0.861 7.221-4.301 9.847-5.161 3.282-6.021 3.282-29.245 3.282h-21.504v11.16c0.861 33.481 9.462 46.611 43.007 60.397 12.042 4.595 14.622 5.908 14.622 12.473 0 4.595-1.72 6.565-6.021 9.191l-2.581 0.656h-234.82l-2.581-0.656c-5.161-2.626-6.021-4.595-6.021-9.191 0-6.565 0.861-7.878 13.762-12.473 33.546-13.786 42.147-26.916 42.147-60.397v-11.16h-98.919c-18.063 1.313-32.686 1.313-44.728 1.313-54.189 0-55.049-1.313-55.909-1.313-5.161-1.313-6.881-5.252-6.881-9.847 0 0 0 0 0 0 0-4.595 0-4.595 17.203-19.695 72.252-66.962 123.001-164.124 123.001-241.59 0-11.817 2.581-15.756 9.462-17.725zM252.386 493.542v0zM252.386 51.064v0zM200.775 554.112c0.861-0.656 12.902-0.656 49.888-0.656 11.182 0 23.224 0 38.707 0h86.875l2.581 1.969c4.301 1.969 6.881 5.252 6.881 7.878 0 3.939-2.581 6.565-6.021 9.191-0.861 1.969-8.601 7.221-13.762 13.13l-45.588 40.046-58.49 50.55-30.965 26.916-46.448 40.703-61.070 53.176c-10.322 9.847-21.504 17.725-21.504 17.725s0 0 0 0c0 1.313 7.741 1.313 79.133 1.313h78.273v-42.672c0-43.329 0-43.985 0.861-44.642 1.72-1.969 9.462-9.191 39.567-36.107l24.084-19.695 18.063-17.725 18.923-15.099 9.462-9.191c3.441-3.939 8.601-4.595 12.902-4.595 5.161 0 9.462 1.969 12.042 5.252 0.861 1.969 0.861 3.282 0.861 51.863 0 11.16 0 24.947 0 41.359v91.253h21.504c19.783 0 20.643 0 23.224 0.656 6.881 1.969 10.322 7.221 10.322 13.13 0 3.282-0.861 7.221-4.301 9.847-5.161 3.282-6.021 3.282-29.245 3.282h-21.504v11.16c0.861 33.481 9.462 46.611 43.007 60.397 12.042 4.595 14.622 5.908 14.622 12.473 0 4.595-1.72 6.565-6.021 9.191l-2.581 0.656h-234.82l-2.581-0.656c-5.161-2.626-6.021-4.595-6.021-9.191 0-6.565 0.861-7.878 13.762-12.473 33.546-13.786 42.147-26.916 42.147-60.397v-11.16h-98.919c-18.063 1.313-32.686 1.313-44.728 1.313-54.189 0-55.049-1.313-55.909-1.313-5.161-1.313-6.881-5.252-6.881-9.847 0 0 0 0 0 0 0-4.595 0-4.595 17.203-19.695 72.252-66.962 123.001-164.124 123.001-241.59 0-11.817 2.581-15.756 9.462-17.725zM252.384 972.956v0zM252.384 530.478v0z"],"width":505,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["fourfour"],"defaultCode":59740,"grid":16},"attrs":[],"properties":{"id":111,"order":1011,"ligatures":"","prevSize":32,"code":59741,"name":"fourfour"},"setIdx":0,"setId":3,"iconIdx":121},{"icon":{"paths":["M305.615 51.639v949.889h73.971v-723.445c84.238 23.243 150.455 55.904 189.697 80.432 78.455 48.661 116.416 113.067 116.416 180.334 0 75.855-48.084 155.287-144.254 221.123-12.653 7.872-13.92 9.304-13.92 15.744 0 8.587 10.124 15.027 25.309 15.027 12.654 0 13.919 0 32.9-14.312 110.090-75.139 164.5-166.020 164.5-253.324 0-92.314-62.004-181.766-184.748-246.887-81.907-43.658-146.995-98.010-185.9-152.449v-72.131h-73.971zM352.457 76.361h2.406v5.445c-0.837-1.818-1.635-3.634-2.406-5.445zM330.338 266.107c8.32 1.751 16.487 3.62 24.525 5.572v705.125h-24.525v-710.697zM316.803 119.351v864.649h67.596v-864.649z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flag"],"defaultCode":59741,"grid":16},"attrs":[],"properties":{"id":112,"order":1012,"ligatures":"","prevSize":32,"code":59742,"name":"flag"},"setIdx":0,"setId":3,"iconIdx":122},{"icon":{"paths":["M141.212 131.63v709.364h42.479v-540.259c48.375 17.358 86.401 41.748 108.936 60.065 45.054 36.34 66.853 84.437 66.853 134.671 0 56.647-27.613 115.966-82.84 165.132-7.266 5.878-7.994 6.948-7.994 11.758 0 6.413 5.814 11.222 14.534 11.222 7.267 0 7.993 0 18.893-10.688 63.22-56.113 94.466-123.981 94.466-189.179 0-68.938-35.607-135.741-106.094-184.372-47.036-32.603-84.414-73.193-106.756-113.847v-53.866zM168.111 150.092h1.382v4.066c-0.481-1.358-0.939-2.713-1.382-4.066zM155.409 291.792c4.778 1.308 9.468 2.704 14.084 4.161v526.578h-14.084zM147.637 182.197v645.708h38.818v-645.708zM521.606 131.63v709.364h42.479v-540.259c48.375 17.358 86.401 41.748 108.936 60.065 45.054 36.34 66.853 84.437 66.853 134.671 0 56.647-27.613 115.966-82.84 165.132-7.266 5.878-7.994 6.948-7.994 11.758 0 6.413 5.814 11.222 14.534 11.222 7.267 0 7.993 0 18.893-10.688 63.22-56.113 94.466-123.981 94.466-189.179 0-68.938-35.607-135.741-106.094-184.372-47.036-32.603-84.414-73.193-106.756-113.847v-53.866zM548.505 150.092h1.382v4.066c-0.481-1.358-0.939-2.713-1.382-4.066zM535.803 291.792c4.778 1.308 9.468 2.704 14.084 4.161v526.578h-14.084zM528.031 182.197v645.708h38.818v-645.708zM1431.169 134.867v740.945h37.060v-740.945zM2026.827 143.192v740.945h37.060v-740.945zM1431.169 197.499h632.717v-87.608h-632.717zM1335.025 24.974h69.932v-23.311h-69.932zM1428.268 24.974h69.932v-23.311h-69.932zM1521.51 24.974h69.932v-23.311h-69.932zM1614.753 24.974h69.932v-23.311h-69.932zM1707.995 24.974h69.932v-23.311h-69.932zM1801.238 24.974h69.932v-23.311h-69.932zM1894.48 24.974h69.932v-23.311h-69.932zM1987.723 24.974h69.932v-23.311h-69.932zM2080.966 24.974h69.932v-23.311h-69.932zM1335.025 1024.002h69.932v-23.311h-69.932zM1428.268 1024.002h69.932v-23.311h-69.932zM1521.51 1024.002h69.932v-23.311h-69.932zM1614.753 1024.002h69.932v-23.311h-69.932zM1707.995 1024.002h69.932v-23.311h-69.932zM1801.238 1024.002h69.932v-23.311h-69.932zM1894.48 1024.002h69.932v-23.311h-69.932zM1987.723 1024.002h69.932v-23.311h-69.932zM2080.966 1024.002h69.932v-23.311h-69.932zM1288.745 77.872h25.958v-77.873h-25.958zM1288.745 181.701h25.958v-77.872h-25.958zM1288.745 285.533h25.958v-77.873h-25.958zM1288.745 389.364h25.958v-77.873h-25.958zM1288.745 493.193h25.958v-77.873h-25.958zM1288.745 597.025h25.958v-77.873h-25.958zM1288.745 700.854h25.958v-77.872h-25.958zM1288.745 804.685h25.958v-77.873h-25.958zM1288.745 908.515h25.958v-77.872h-25.958zM1288.745 1012.346h25.958v-77.873h-25.958zM2154.569 77.872h25.958v-77.873h-25.958zM2154.569 181.701h25.958v-77.872h-25.958zM2154.569 285.533h25.958v-77.873h-25.958zM2154.569 389.364h25.958v-77.873h-25.958zM2154.569 493.193h25.958v-77.873h-25.958zM2154.569 597.025h25.958v-77.873h-25.958zM2154.569 700.854h25.958v-77.872h-25.958zM2154.569 804.685h25.958v-77.873h-25.958zM2154.569 908.515h25.958v-77.872h-25.958zM2154.569 1012.346h25.958v-77.873h-25.958zM46.28 24.974h69.932v-23.311h-69.932zM139.522 24.974h69.932v-23.311h-69.932zM232.765 24.974h69.932v-23.311h-69.932zM326.007 24.974h69.932v-23.311h-69.932zM419.25 24.974h69.932v-23.311h-69.932zM512.493 24.974h69.932v-23.311h-69.932zM605.735 24.974h69.932v-23.311h-69.932zM698.978 24.974h69.932v-23.311h-69.932zM792.22 24.974h69.932v-23.311h-69.932zM46.28 1024.002h69.932v-23.311h-69.932zM139.522 1024.002h69.932v-23.311h-69.932zM232.765 1024.002h69.932v-23.311h-69.932zM326.007 1024.002h69.932v-23.311h-69.932zM419.25 1024.002h69.932v-23.311h-69.932zM512.493 1024.002h69.932v-23.311h-69.932zM605.735 1024.002h69.932v-23.311h-69.932zM698.978 1024.002h69.932v-23.311h-69.932zM792.22 1024.002h69.932v-23.311h-69.932zM0 77.872h25.958v-77.873h-25.958zM0 181.701h25.958v-77.872h-25.958zM0 285.533h25.958v-77.873h-25.958zM0 389.364h25.958v-77.873h-25.958zM0 493.193h25.958v-77.873h-25.958zM0 597.025h25.958v-77.873h-25.958zM0 700.854h25.958v-77.872h-25.958zM0 804.685h25.958v-77.873h-25.958zM0 908.515h25.958v-77.872h-25.958zM0 1012.346h25.958v-77.873h-25.958zM865.824 77.872h25.958v-77.873h-25.958zM865.824 181.701h25.958v-77.872h-25.958zM865.824 285.533h25.958v-77.873h-25.958zM865.824 389.364h25.958v-77.873h-25.958zM865.824 493.193h25.958v-77.873h-25.958zM865.824 597.025h25.958v-77.873h-25.958zM865.824 700.854h25.958v-77.872h-25.958zM865.824 804.685h25.958v-77.873h-25.958zM865.824 908.515h25.958v-77.872h-25.958zM865.824 1012.346h25.958v-77.873h-25.958zM1266.248 502.62l-164.33 170.113v-102.068h-175.285v-136.090h175.285v-102.068z"],"width":2181,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["beam"],"defaultCode":59742,"grid":16},"attrs":[],"properties":{"id":113,"order":1013,"ligatures":"","prevSize":32,"code":59743,"name":"beam"},"setIdx":0,"setId":3,"iconIdx":123},{"icon":{"paths":["M120 94v890h44.515v-890zM835.485 104v890h44.515v-890zM120 169.232h280v-105.232h-280zM600 169.232h280v-105.232h-280zM465.686 149.889h28.629v-85.889h-28.629zM465.686 264.404h28.629v-85.887h-28.629zM465.686 378.922h28.629v-85.887h-28.629zM465.686 493.439h28.629v-85.889h-28.629zM465.686 607.957h28.629v-85.889h-28.629zM465.686 722.475h28.629v-85.889h-28.629zM465.686 836.99h28.629v-85.887h-28.629zM465.686 951.508h28.629v-85.887h-28.629zM465.686 984h28.629v-3.863h-28.629z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["beamBreak"],"defaultCode":59743,"grid":16},"attrs":[],"properties":{"id":114,"order":1014,"ligatures":"","prevSize":32,"code":59744,"name":"beamBreak"},"setIdx":0,"setId":3,"iconIdx":124},{"icon":{"paths":["M1024 576v-64h-193.28c-5.888-72.704-31.808-139.008-71.68-192.256h161.92l70.080-280.256-62.080-15.552-57.92 231.744h-174.656c-0.896-0.704-1.792-1.344-2.688-2.048 6.72-19.52 10.368-40.448 10.368-62.208 0-105.792-85.952-191.488-192-191.488s-192 85.76-192 191.488c0 21.76 3.648 42.688 10.368 62.208-0.896 0.704-1.792 1.344-2.688 2.048h-174.656l-57.92-231.744-62.080 15.552 70.080 280.256h161.92c-39.872 53.248-65.792 119.552-71.68 192.256h-193.28v64h193.344c3.776 45.632 15.488 88.832 33.664 127.744h-123.968l-70.080 280.256 62.080 15.552 57.92-231.744h112.384c58.688 78.016 147.392 127.744 246.656 127.744s187.968-49.728 246.656-127.744h112.384l57.92 231.744 62.080-15.552-70.080-280.256h-123.968c18.112-38.912 29.824-82.112 33.664-127.744h193.344z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bug"],"defaultCode":59744,"grid":16},"attrs":[],"properties":{"id":115,"order":1015,"ligatures":"","prevSize":32,"code":59745,"name":"bug"},"setIdx":0,"setId":3,"iconIdx":125},{"icon":{"paths":["M0 512h128v64h-128zM192 512h192v64h-192zM448 512h128v64h-128zM640 512h192v64h-192zM896 512h128v64h-128zM880 0l16 448h-768l16-448h32l16 384h640l16-384zM144 1024l-16-384h768l-16 384h-32l-16-320h-640l-16 320z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["page-break"],"defaultCode":59745,"grid":16},"attrs":[],"properties":{"id":116,"order":1016,"ligatures":"","prevSize":32,"code":59746,"name":"page-break"},"setIdx":0,"setId":3,"iconIdx":126},{"icon":{"paths":["M437.601 246.968v511.313h62.199v-389.422c70.832 12.511 126.512 30.092 159.509 43.295 65.969 26.194 97.89 60.862 97.89 97.072 0 40.832-40.432 83.589-121.297 119.028-10.639 4.237-11.705 5.008-11.705 8.475 0 4.622 8.513 8.089 21.281 8.089 10.64 0 11.704 0 27.665-7.704 92.57-40.446 138.321-89.367 138.321-136.361 0-49.691-52.137-97.843-155.347-132.896-68.872-23.501-123.602-52.758-156.316-82.062v-38.827zM476.988 260.276h2.023v2.931c-0.704-0.979-1.374-1.956-2.023-2.931zM458.389 362.414c6.996 0.943 13.864 1.949 20.622 2.999v379.56h-20.622zM447.008 283.417v465.43h56.839v-465.43zM376.299 751.628v-511.313h-62.604v389.422c-71.293-12.511-127.335-30.092-160.547-43.295-66.399-26.194-98.527-60.862-98.527-97.072 0-40.832 40.695-83.589 122.087-119.028 10.709-4.237 11.781-5.008 11.781-8.475 0-4.622-8.568-8.089-21.419-8.089-10.709 0-11.78 0-27.845 7.704-93.172 40.446-139.222 89.367-139.222 136.361 0 49.691 52.476 97.843 156.358 132.896 69.321 23.501 124.407 52.758 157.334 82.062v38.827zM336.656 738.32h-2.036v-2.931c0.709 0.979 1.383 1.956 2.036 2.931zM355.376 636.182c-7.042-0.943-13.954-1.949-20.757-2.999v-379.56h20.757zM366.831 715.179v-465.43h-57.209v465.43zM336.234 0c-45.537-0.026-91.689 9.918-118.121 31.018-57.419 45.837-79.808 90.556-121.966 176.701l23.915 5.679c42.139-86.107 62.852-127.513 117.087-170.809 19.005-15.172 59.138-25.012 99.064-24.989s78.040 9.612 95.7 27.655c20.098 20.534 52.669 63.226 79.67 100.303s48.755 68.795 48.755 68.795l22.798-7.588c0 0-21.866-31.882-49.021-69.17s-59.279-79.727-81.329-102.256c-24.489-25.021-71.015-35.314-116.553-35.34zM556.253 1.071c-3.184 0.052-5.936 1.29-7.389 3.102l-0.023 0.031c-38.078 48.26-115.599 74.235-192.266 64.037-0.489-0.068-1.050-0.107-1.625-0.107-4.797 0-8.686 2.709-8.686 6.051 0 1.697 1.003 3.231 2.618 4.33l0.002 0.001 231.657 157.331c1.563 1.062 3.703 1.717 6.062 1.717 4.797 0 8.686-2.709 8.686-6.051 0-0.198-0.014-0.394-0.040-0.587l0.003 0.025-30.153-224.398c-0.429-3.089-4.137-5.484-8.648-5.484-0.070 0-0.139 0.001-0.208 0.002h0.010zM550.145 25.105l25.612 190.593-196.519-133.466c66.798 2.536 131.165-19.108 170.907-57.127zM181.322 809.648l-22.798 7.588c0 0 21.866 31.881 49.021 69.169s59.279 79.727 81.329 102.256c24.489 25.021 71.015 35.314 116.553 35.34s91.689-9.918 118.121-31.018c57.419-45.837 79.808-90.556 121.966-176.701l-23.915-5.679c-42.139 86.107-62.852 127.513-117.087 170.809-19.005 15.172-59.138 25.013-99.064 24.99s-78.040-9.613-95.7-27.656c-20.098-20.534-52.669-63.226-79.67-100.303s-48.755-68.794-48.755-68.794zM154.818 786.437c-4.693 0.093-8.447 2.765-8.447 6.048 0 0.198 0.014 0.394 0.040 0.587l-0.003-0.025 30.153 224.398c0.43 3.088 4.137 5.483 8.648 5.483 3.261 0 6.102-1.252 7.587-3.103l0.023-0.031c38.078-48.26 115.599-74.236 192.266-64.037 0.489 0.068 1.050 0.107 1.625 0.107 4.797 0 8.686-2.709 8.686-6.051 0-1.697-1.003-3.231-2.618-4.33l-0.002-0.001-231.657-157.33c-1.564-1.063-3.703-1.718-6.063-1.718-0.084 0-0.167 0.001-0.25 0.002h0.012zM165.903 808.301l196.519 133.467c-66.798-2.536-131.165 19.108-170.907 57.127zM462.42 137.693l-78.759-53.596 18.341-1.169c10.088-0.643 26.479-2.569 36.425-4.28 14.935-2.57 18.415-2.759 19.986-1.086 9.948 10.591 84.868 112.313 83.433 113.279-0.367 0.247-36.108-23.67-79.426-53.148zM546.573 153.514c-12.461-17.437-32.048-43.91-43.526-58.828-17.723-23.035-20.369-27.35-17.55-28.627 24.519-11.104 32.132-15.25 46.56-25.355 9.287-6.504 17.143-11.578 17.458-11.274 0.897 0.865 21.084 154.929 20.36 155.383-0.355 0.222-10.841-13.863-23.302-31.3zM191.77 992.351c-0.547-1.849-4.947-33.8-9.779-71.003s-9.332-71.362-10.001-75.909l-1.216-8.267 13.862 19.541c15.318 21.593 61.767 83.681 69.804 93.307l5.114 6.125-18.092 8.561c-9.95 4.708-24.978 13.611-33.395 19.784-13.648 10.009-15.411 10.859-16.298 7.861zM282.391 945.595c-14.594-16.387-81.965-109.048-80.186-110.287 0.622-0.433 36.222 23.146 79.112 52.397l77.982 53.184-22.344 1.004c-12.289 0.552-28.952 2.332-37.028 3.955l-14.684 2.951z"],"width":811,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flagFlip"],"defaultCode":59746,"grid":16},"attrs":[],"properties":{"id":117,"order":1017,"ligatures":"","prevSize":32,"code":59747,"name":"flagFlip"},"setIdx":0,"setId":3,"iconIdx":127},{"icon":{"paths":["M523.471 263.319c2.861-1.431 5.725-1.431 8.587-1.431 5.725 0 11.45 1.431 15.744 1.431 2.861 1.431 32.918 31.487 125.948 124.517 68.699 70.13 123.086 123.086 123.086 123.086s42.937-52.956 97.324-120.224c101.617-127.38 100.186-125.948 110.205-128.811 1.433 0 2.861 0 7.156 0s10.019 1.431 14.312 1.431c2.861 1.431 55.818 55.818 233.291 231.86l17.175 17.175 41.506-50.093c42.937-54.387 45.799-57.249 54.387-60.112 1.433-1.431 5.725-1.431 10.019-1.431 15.744 0 28.625 12.881 28.625 30.056 0 2.862 0 7.156-1.433 11.45-4.295 10.019-243.31 306.284-253.328 314.871-4.295 2.862-11.45 5.725-18.606 5.725-5.725 0-8.587 0-12.881-2.862-4.295-1.431-32.918-31.487-127.38-124.517-67.268-70.13-121.655-124.517-121.655-124.517s-44.368 54.387-98.755 123.086c-100.186 125.948-98.755 124.517-108.774 125.948-1.433 2.862-4.295 2.862-7.156 2.862-4.295 0-10.019-2.862-14.312-2.862-4.295-1.431-55.818-52.956-233.291-231.86l-17.175-17.175-41.506 48.662c-42.937 55.818-47.231 60.112-54.387 61.543-2.861 2.862-5.725 2.862-10.019 2.862-15.744 0-28.625-14.312-28.625-30.056 0-4.294 0-8.587 1.433-12.881 4.295-8.587 247.603-309.146 253.328-316.302 1.433 0 5.725-1.431 7.156-1.431z"],"width":1672,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mordent"],"defaultCode":59747,"grid":16},"attrs":[],"properties":{"id":118,"order":1018,"ligatures":"","prevSize":32,"code":59748,"name":"mordent"},"setIdx":0,"setId":3,"iconIdx":128},{"icon":{"paths":["M566.931 212.312c1.157 0 1.157-1.155 3.467-1.155s5.776 1.155 6.931 2.31c2.31 2.31 3.467 3.466 3.467 6.931 0 1.155 0 4.621-1.157 8.087-2.31 4.621-6.931 20.794-11.552 36.968l-25.415 83.177-15.018 57.762-2.31 3.466h12.708c6.931 0 19.639-2.31 28.881-2.31 58.917-1.155 122.455-9.242 179.062-21.95 4.621 0 11.552-1.155 16.173-1.155 17.329 0 31.191 5.776 38.123 17.329 0 1.155 0 1.155 1.157 1.155 3.467 0 13.863-3.466 51.986-12.708 60.072-12.708 57.762-12.708 73.935-13.863 3.467 0 4.621 0 8.087 0 23.105 0 40.433 10.397 51.986 33.502 4.621 9.242 6.931 21.95 6.931 34.657 0 10.397-2.31 19.639-6.931 20.794-3.467 2.31-99.35 24.26-103.971 24.26 0 0 0 0 0 0-6.931 0-8.087-3.466-8.087-9.242 0-2.31 0-3.466 0-4.621 1.157-5.776 1.157-8.087 1.157-11.552 0-16.173-6.931-32.347-18.484-40.433l-4.621-3.466-6.931 5.776c-24.26 15.018-43.899 39.278-58.917 68.159-8.087 12.708-3.467 2.31-47.365 146.715-39.278 130.542-38.123 130.542-42.744 132.852-3.467 1.155-98.195 24.26-102.816 24.26 0 0 0 0 0 0-4.621-2.31-6.931-2.31-6.931-8.087 0-4.621 2.31-12.708 6.931-27.726 3.467-12.708 6.931-24.26 6.931-25.415 0 0 0 0 0 0v0c0 0-21.95 12.708-47.365 28.881-63.538 38.123-63.538 38.123-82.022 42.744-10.397 4.621-23.105 4.621-34.657 4.621-61.228 0-113.213-49.675-113.213-114.369 0-3.466 0-6.931 0-11.552 2.31-15.018 0-8.087 34.657-127.076 17.329-58.917 31.191-107.437 31.191-107.437v0c0 0-1.157 0-4.621 0-12.708 0-43.899 0-80.867 0s-58.917 2.31-71.625 2.31c-10.397 0-15.018-2.31-15.018-2.31-4.621-1.155-6.931-4.621-6.931-8.087s2.31-5.776 4.621-8.087c2.31 0 25.415-5.776 51.986-12.708l50.83-11.552 42.744-1.155c23.105 0 43.899 0 43.899 0s1.157-8.087 4.621-17.329c19.639-70.47 26.57-90.109 26.57-91.264 1.157-2.31 5.776-4.621 13.863-11.552l64.693-42.744c27.726-19.639 51.986-35.812 51.986-35.812zM669.752 427.186c-2.31-1.155-3.467-1.155-4.621-1.155-3.467 0-4.621 0-10.397 1.155-41.589 9.242-83.177 16.173-131.697 20.794-9.242 0-9.242 0-9.242 8.087-2.31 4.621-11.552 40.433-34.657 123.61-32.347 103.971-38.123 125.921-38.123 139.784 0 2.31 0 4.621 1.157 8.087 3.467 17.329 15.018 28.881 26.57 28.881 3.467 0 8.087-2.31 11.552-3.466 1.157-2.31 139.784-85.488 142.094-86.643 0 0 30.036-101.661 30.036-103.971 0-5.776 2.31-13.863 8.087-27.726 4.621-11.552 27.726-87.798 27.726-91.264 0-8.087-9.242-15.018-18.484-16.173z"],"width":1205,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["trill"],"defaultCode":59748,"grid":16},"attrs":[],"properties":{"id":119,"order":1019,"ligatures":"","prevSize":32,"code":59749,"name":"trill"},"setIdx":0,"setId":3,"iconIdx":129},{"icon":{"paths":["M627.14 200.583c1.093 0 4.365-1.091 6.547-1.091 8.729 0 17.458 5.456 21.823 13.094 1.093 3.273 1.093 3.273 1.093 113.48v111.298l49.102-61.105c52.375-65.469 52.375-65.469 60.013-67.652 1.093 0 2.182 0 5.456 0s7.638 1.091 10.912 1.091c2.182 1.091 42.555 42.555 177.858 176.767l13.094 13.094 31.643-38.19c32.735-41.464 34.917-43.646 41.464-45.828 1.093-1.091 4.365-1.091 7.638-1.091 12.003 0 21.823 9.82 21.823 22.914 0 2.182 0 5.456-1.093 8.729-3.274 7.638-185.496 233.507-193.134 240.054-3.274 2.182-8.729 4.365-14.185 4.365-4.365 0-6.547 0-9.82-2.182-3.274-1.091-25.097-24.005-97.113-94.93-51.284-53.467-92.748-94.93-92.748-94.93s-3.274 2.182-6.547 6.547l-4.365 6.547v147.306c0 28.37 0 51.284 0 68.743 0 94.93-1.093 84.019-7.638 89.475-4.365 5.456-8.729 7.638-13.094 7.638-8.729 0-18.55-4.365-20.732-13.094-2.182-3.273-2.182-3.273-3.274-123.3v-121.118l-45.828 58.922c-48.011 57.831-52.375 64.378-60.013 64.378-1.093 0-2.182 0-4.365 0-9.82-2.182 0 8.729-186.587-178.949l-13.094-13.094-31.643 37.099c-32.735 42.555-36.008 45.828-41.464 46.92-2.182 2.182-4.365 2.182-7.638 2.182-12.003 0-21.823-10.912-21.823-22.914 0-3.273 0-6.547 1.093-9.82 3.274-6.547 185.496-233.507 193.134-238.963 3.274-3.273 8.729-4.365 13.094-4.365s7.638 0 10.912 1.091c2.182 1.091 55.649 55.649 177.858 176.767l12.003 13.094 3.274-2.182 1.093-3.273v-137.485c0-137.485 0-139.668 1.093-141.85 3.274-6.547 7.638-10.912 14.185-14.185z"],"width":1275,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["mordent-inv"],"defaultCode":59749,"grid":16},"attrs":[],"properties":{"id":120,"order":1020,"ligatures":"","prevSize":32,"code":59750,"name":"mordent-inv"},"setIdx":0,"setId":3,"iconIdx":130},{"icon":{"paths":["M185.306 433.595c1.845 0 4.611 0 5.073 0 0 0 0.461 0 0.461 0s2.767 0 5.073 0c41.503 1.861 65.944 23.818 65.944 51.357 0 13.397-5.534 28.656-19.368 43.169-26.285 28.656-69.172 44.286-106.524 44.286-29.052 0-53.954-9.304-65.944-28.283-3.689-7.443-5.534-14.514-5.534-22.329 0-40.564 56.26-85.594 120.82-88.2zM228.851 60.931h31.249v437.32h-31.249v-437.32zM482.505 723.45c3.236 0 8.090 0 8.899 0 0 0 0.81 0 0.81 0s4.854 0 8.899 0c72.809 3.301 115.685 42.253 115.685 91.109 0 23.767-9.708 50.836-33.977 76.584-46.112 50.836-121.348 78.565-186.875 78.565-50.966 0-94.651-16.505-115.685-50.176-6.472-13.204-9.708-25.748-9.708-39.612 0-71.963 98.696-151.848 211.954-156.469zM558.897 62.33h54.82v775.822h-54.82v-775.822zM229.387 9.277v427.809h22.674v-325.824c25.821 10.468 46.118 25.178 58.146 36.225 24.048 21.916 35.684 50.923 35.684 81.218 0 34.163-14.739 69.938-44.217 99.589-3.878 3.545-4.267 4.19-4.267 7.091 0 3.868 3.103 6.768 7.758 6.768 3.879 0 4.267 0 10.085-6.446 33.745-33.841 50.423-74.772 50.423-114.092 0-41.576-19.006-81.863-56.629-111.192-25.106-19.663-45.057-44.142-56.983-68.66v-32.486zM243.745 20.412h0.738v2.452c-0.257-0.819-0.501-1.636-0.738-2.452zM236.965 105.869c2.55 0.789 5.054 1.631 7.518 2.51v317.572h-7.518zM232.816 39.774v389.418h20.72v-389.418zM49.546 50.945l22.529-18.293 330.781 407.387-22.529 18.293-330.781-407.387zM382.208 50.945l-22.529-18.293-330.781 407.387 22.529 18.293 330.781-407.387z"],"width":681,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["grace_remove"],"defaultCode":59750,"grid":16},"attrs":[],"properties":{"id":121,"order":1021,"ligatures":"","prevSize":32,"code":59751,"name":"grace_remove"},"setIdx":0,"setId":3,"iconIdx":131},{"icon":{"paths":["M185.306 433.595c1.845 0 4.611 0 5.073 0 0 0 0.461 0 0.461 0s2.767 0 5.073 0c41.503 1.861 65.944 23.818 65.944 51.357 0 13.397-5.534 28.656-19.368 43.169-26.285 28.656-69.172 44.286-106.524 44.286-29.052 0-53.954-9.304-65.944-28.283-3.689-7.443-5.534-14.514-5.534-22.329 0-40.564 56.26-85.594 120.82-88.2zM228.851 60.931h31.249v437.32h-31.249v-437.32zM482.505 723.451c3.236 0 8.090 0 8.899 0 0 0 0.81 0 0.81 0s4.854 0 8.899 0c72.809 3.301 115.685 42.253 115.685 91.109 0 23.767-9.708 50.836-33.977 76.584-46.112 50.836-121.348 78.565-186.875 78.565-50.966 0-94.651-16.505-115.685-50.176-6.472-13.204-9.708-25.748-9.708-39.612 0-71.963 98.696-151.848 211.954-156.469zM558.897 62.33h54.82v775.822h-54.82v-775.822zM229.387 9.277v427.809h22.674v-325.824c25.821 10.468 46.118 25.178 58.146 36.225 24.048 21.916 35.684 50.923 35.684 81.218 0 34.163-14.739 69.938-44.217 99.589-3.878 3.545-4.267 4.19-4.267 7.091 0 3.868 3.103 6.768 7.758 6.768 3.879 0 4.267 0 10.085-6.446 33.745-33.841 50.423-74.772 50.423-114.092 0-41.576-19.006-81.863-56.629-111.192-25.106-19.663-45.057-44.142-56.983-68.66v-32.486zM243.745 20.412h0.738v2.452c-0.257-0.819-0.501-1.636-0.738-2.452zM236.965 105.869c2.55 0.789 5.054 1.631 7.518 2.51v317.572h-7.518zM232.816 39.774v389.418h20.72v-389.418z"],"width":681,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["grace_note"],"defaultCode":59751,"grid":16},"attrs":[],"properties":{"id":122,"order":1022,"ligatures":"","prevSize":32,"code":59752,"name":"grace_note"},"setIdx":0,"setId":3,"iconIdx":132},{"icon":{"paths":["M377.871 170.575c4.74 0 13.034 0 22.513 0 18.958 0 43.841 0 49.766 2.189 88.867 9.849 159.961 51.433 190.769 109.431 10.664 19.698 15.404 40.49 15.404 62.376 0 53.621-31.992 114.903-90.052 160.864-40.287 31.735-80.573 51.433-143.373 70.036-81.758 24.075-151.667 66.753-196.693 118.186 0 0 0 1.094 0 1.094s0 0 0 0 3.556-1.094 5.924-4.377c45.026-33.924 105.456-53.621 159.961-53.621 45.026 0 77.018 7.66 119.675 29.546 26.068 12.037 49.766 17.509 72.279 17.509 9.479 0 18.958 0 29.622-2.189 15.404-3.283 31.992-14.226 37.917-22.981 3.556-7.66 9.479-10.943 16.589-10.943 9.479 0 18.958 6.566 18.958 16.415 0 7.66-10.664 35.018-20.143 53.621-37.917 70.036-104.271 113.809-168.255 113.809-4.74 0-8.294 0-13.034-1.094-16.589 0-23.698-4.377-45.026-17.509-45.026-27.358-101.901-41.584-151.667-41.584-21.328 0-40.287 2.189-58.060 8.755-23.698 7.66-46.211 20.792-53.32 30.641-3.556 7.66-9.479 9.849-16.589 9.849-5.924 0-11.849-2.189-15.404-8.755l-2.369-3.283v-15.32c0-13.132 1.187-17.509 1.187-21.886 1.187-3.283 2.369-9.849 2.369-15.32 21.328-91.922 93.607-173.996 191.953-214.485 80.573-35.018 133.893-97.394 143.373-176.184 2.369-6.566 2.369-12.037 2.369-18.603 0-70.036-56.875-118.186-137.448-118.186-5.924 0-13.034 0-18.958 0-11.849 1.094-15.404 1.094-15.404 3.283 0 0 0 1.094 3.556 3.283 27.253 14.226 40.287 41.584 40.287 67.847 0 33.924-18.958 65.659-55.69 78.791-11.849 3.283-23.698 4.377-33.177 4.377-49.766 0-91.237-39.395-91.237-86.451 0-8.755 0-17.509 2.369-27.358 17.773-50.338 101.901-91.922 199.063-101.771zM414.604 880.784v0zM414.604 143.217v0z"],"width":830,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["glyph2"],"defaultCode":59752,"grid":16},"attrs":[],"properties":{"id":123,"order":1023,"ligatures":"","prevSize":32,"code":59753,"name":"glyph2"},"setIdx":0,"setId":3,"iconIdx":133},{"icon":{"paths":["M386.898 179.289c2.676 0 12.046 0 22.753 0 17.399 0 38.814 0 45.506 0 123.134 10.667 219.499 64.001 236.898 133.336 2.676 6.4 2.676 13.867 2.676 21.334 0 8.533 0 16-2.676 20.267-17.399 50.134-91.012 96.002-184.7 118.402-6.692 2.133-9.369 2.133-9.369 3.2 0 0 0 0 0 0 1.34 0 5.354 1.067 9.369 1.067 127.149 37.334 194.069 108.802 194.069 178.136 0 53.334-37.475 104.535-121.795 138.669-49.521 21.334-104.396 30.934-157.932 30.934-88.335 0-175.332-26.667-236.898-74.668-22.753-17.067-30.783-38.401-30.783-59.734 0-43.734 38.814-85.335 103.058-85.335v0c64.244 0 100.381 39.467 100.381 80.001 0 30.934-20.076 61.868-65.582 76.801 0 0 0 0 0 0 0 1.067 38.814 7.467 58.89 8.533 2.676 0 5.354 0 8.030 0 88.335 0 149.902-50.134 149.902-119.469 0-7.467 0-13.867-1.34-21.334-14.723-77.868-80.305-135.469-156.594-137.602-18.738-1.067-28.107-7.467-28.107-17.067 0-12.8 8.030-18.134 28.107-18.134 65.582-3.2 121.795-38.401 143.21-91.735 5.354-10.667 6.692-21.334 6.692-29.867 0-44.801-41.491-85.335-103.058-96.002-9.369-3.2-21.415-3.2-34.799-3.2-18.738 0-36.137 1.067-54.875 3.2l-5.354 1.067 5.354 3.2c34.799 14.934 49.521 41.601 49.521 68.268 0 35.201-29.445 70.401-80.305 80.001-6.692 1.067-14.723 1.067-21.415 1.067-58.89 0-103.058-42.667-103.058-87.468 0-19.2 8.030-38.401 28.107-54.401 46.844-40.534 117.78-64.001 206.115-71.468zM427.049 871.568v0zM427.049 152.622v0z"],"width":854,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["glyph3"],"defaultCode":59753,"grid":16},"attrs":[],"properties":{"id":124,"order":1024,"ligatures":"","prevSize":32,"code":59754,"name":"glyph3"},"setIdx":0,"setId":3,"iconIdx":134},{"icon":{"paths":["M395.415 210.223c1.273-1.003 19.073-1.003 73.749-1.003 16.53 0 34.332 0 57.219 0h128.425l3.816 3.009c6.358 3.009 10.172 8.025 10.172 12.037 0 6.018-3.816 10.031-8.901 14.043-1.273 3.009-12.715 11.034-20.345 20.061l-67.392 61.187-86.465 77.236-45.775 41.126-68.663 62.19-90.279 81.249c-15.258 15.046-31.788 27.083-31.788 27.083s0 0 0 0c0 2.006 11.444 2.006 116.981 2.006h115.71v-65.2c0-66.203 0-67.206 1.273-68.209 2.542-3.009 13.987-14.043 58.491-55.169l35.603-30.092 26.702-27.083 27.974-23.071 13.987-14.043c5.086-6.018 12.715-7.021 19.073-7.021 7.629 0 13.987 3.009 17.802 8.025 1.273 3.009 1.273 5.015 1.273 79.243 0 17.052 0 38.117 0 63.193v139.427h31.788c29.245 0 30.517 0 34.332 1.003 10.172 3.009 15.258 11.034 15.258 20.061 0 5.015-1.273 11.034-6.358 15.046-7.629 5.015-8.901 5.015-43.232 5.015h-31.788v17.052c1.273 51.157 13.987 71.218 63.577 92.282 17.802 7.021 21.616 9.028 21.616 19.058 0 7.021-2.542 10.031-8.901 14.043l-3.816 1.003h-347.13l-3.816-1.003c-7.629-4.012-8.901-7.021-8.901-14.043 0-10.031 1.273-12.037 20.345-19.058 49.59-21.064 62.305-41.126 62.305-92.282v-17.052h-146.23c-26.702 2.006-48.318 2.006-66.12 2.006-80.107 0-81.378-2.006-82.65-2.006-7.629-2.006-10.172-8.025-10.172-15.046 0 0 0 0 0 0 0-7.021 0-7.021 25.431-30.092 106.809-102.313 181.83-250.767 181.83-369.13 0-18.055 3.816-24.074 13.987-27.083zM471.707 850.182v0zM471.707 174.113v0z"],"width":943,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["glyph4"],"defaultCode":59754,"grid":16},"attrs":[],"properties":{"id":125,"order":1025,"ligatures":"","prevSize":32,"code":59755,"name":"glyph4"},"setIdx":0,"setId":3,"iconIdx":135},{"icon":{"paths":["M301.484 140.486l4.854-1.235h221.623l4.854 3.704c4.854 1.235 6.471 3.704 8.088 4.939l4.854 4.939v286.446c0 203.722 0 288.915 3.234 295.088 3.234 40.744 25.883 61.734 80.884 83.958 19.412 8.643 24.265 11.112 24.265 23.459 0 8.643-1.62 12.347-11.324 17.286l-6.471 1.235h-440.011l-4.854-1.235c-8.088-4.939-12.942-8.643-12.942-17.286 0-12.347 4.854-14.816 24.265-23.459 11.324-3.704 14.559-6.173 24.265-11.112 37.207-19.755 51.766-39.51 59.854-72.846 0-6.173 0-81.489 0-233.354v-225.946l-27.501 30.867-100.297 119.764c-22.648 27.163-24.265 28.398-38.825 28.398s-24.265-8.643-24.265-18.52c0-6.173 3.234-13.581 8.088-20.99 1.62-1.235 9.706-13.581 19.412-27.163l90.591-125.937 45.295-70.377c30.736-43.214 30.736-43.214 33.971-44.448 1.62-2.469 6.471-3.704 8.088-6.173zM374.282 928.211h0.006zM374.287 96.038h0.006z"],"width":750,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["glyph1"],"defaultCode":59755,"grid":16},"attrs":[],"properties":{"id":126,"order":1026,"ligatures":"","prevSize":32,"code":59756,"name":"glyph1"},"setIdx":0,"setId":3,"iconIdx":136},{"icon":{"paths":["M1054.687 0v27.175q-52.881 9.549-80.056 33.785-38.926 35.989-69.039 110.169l-347.4 847.569h-27.175l-373.107-858.585q-28.644-66.102-40.395-80.791-18.363-22.769-45.537-35.254-26.441-13.22-71.977-16.892v-27.175h406.892v27.175q-69.039 6.611-89.604 23.503t-20.566 43.333q0 36.723 33.785 114.576l253.389 583.897 235.028-576.552q34.52-85.198 34.52-118.248 0-21.3-21.3-40.395-21.3-19.831-71.977-27.91-3.672-0.734-12.486-2.203v-27.175zM1013.518 548.559q101.845 0 163.54 77.363 52.392 66.101 52.392 151.789 0 60.226-28.889 121.921t-79.811 93.032q-50.433 31.337-112.618 31.337-101.355 0-161.092-80.791-50.433-68.060-50.433-152.768 0-61.695 30.358-122.41 30.847-61.205 80.791-90.094 49.943-29.378 105.762-29.378zM998.339 580.385q-25.951 0-52.392 15.67-25.951 15.179-42.109 53.86t-16.157 99.397q0 97.928 38.682 168.926 39.171 70.998 102.825 70.998 47.495 0 78.343-39.171t30.847-134.651q0-119.472-51.412-188.022-34.764-47.006-88.625-47.006z"],"width":1229,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["Vo"],"defaultCode":59756,"grid":16},"attrs":[],"properties":{"id":127,"order":1027,"ligatures":"","prevSize":32,"code":59757,"name":"Vo"},"setIdx":0,"setId":3,"iconIdx":137},{"icon":{"paths":["M847.261 194.076v16.83q-32.75 5.914-49.58 20.924-24.108 22.288-42.757 68.23l-215.151 524.914h-16.83l-231.071-531.736q-17.74-40.938-25.018-50.035-11.372-14.101-28.202-21.833-16.375-8.187-44.577-10.461v-16.83h251.995v16.83q-42.757 4.094-55.494 14.556t-12.737 26.837q0 22.743 20.924 70.959l156.928 361.617 145.557-357.069q21.379-52.764 21.379-73.233 0-13.192-13.192-25.018-13.192-12.282-44.577-17.285-2.274-0.455-7.733-1.364v-16.83zM205.613 158.497l-23.209 23.209 659.876 659.876 23.209-23.209zM842.28 158.497l-659.876 659.876 23.209 23.209 659.876-659.876z"],"width":1065,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["Vx"],"defaultCode":59757,"grid":16},"attrs":[],"properties":{"id":128,"order":1028,"ligatures":"","prevSize":32,"code":59758,"name":"Vx"},"setIdx":0,"setId":3,"iconIdx":138},{"icon":{"paths":["M847.261 194.076v16.83q-32.75 5.914-49.58 20.924-24.108 22.288-42.757 68.23l-215.151 524.914h-16.83l-231.071-531.736q-17.74-40.938-25.018-50.035-11.372-14.101-28.202-21.833-16.375-8.187-44.577-10.461v-16.83h251.995v16.83q-42.757 4.094-55.494 14.556t-12.737 26.837q0 22.743 20.924 70.959l156.928 361.617 145.557-357.069q21.379-52.764 21.379-73.233 0-13.192-13.192-25.018-13.192-12.282-44.577-17.285-2.274-0.455-7.733-1.364v-16.83zM966.787 706.039h-53.756v111.229h-46.702v-111.229h-173.431v-61.057l175.377-222.989h44.757v241.571h53.756zM866.329 663.565v-178.391l-140.35 178.391z"],"width":1065,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["V4"],"defaultCode":59758,"grid":16},"attrs":[],"properties":{"id":129,"order":1029,"ligatures":"","prevSize":32,"code":59759,"name":"V4"},"setIdx":0,"setId":3,"iconIdx":139},{"icon":{"paths":["M847.261 194.076v16.83q-32.75 5.914-49.58 20.924-24.108 22.288-42.757 68.23l-215.151 524.914h-16.83l-231.071-531.736q-17.74-40.938-25.018-50.035-11.372-14.101-28.202-21.833-16.375-8.187-44.577-10.461v-16.83h251.995v16.83q-42.757 4.094-55.494 14.556t-12.737 26.837q0 22.743 20.924 70.959l156.928 361.617 145.557-357.069q21.379-52.764 21.379-73.233 0-13.192-13.192-25.018-13.192-12.282-44.577-17.285-2.274-0.455-7.733-1.364v-16.83zM943.61 646.555q11.303 10.293 18.603 25.854t7.3 40.217q0 24.417-8.713 44.765t-24.49 35.429q-17.661 16.757-41.681 24.896-23.784 7.9-52.277 7.9-29.2 0-57.458-7.181-28.258-6.942-46.39-15.321v-50.032h3.533q20.016 13.405 47.097 22.263t52.277 8.857q14.835 0 31.555-5.028t27.081-14.842q10.833-10.533 16.013-23.221 5.416-12.688 5.416-32.078 0-19.151-6.123-31.599-5.887-12.688-16.484-19.869-10.597-7.421-25.668-10.054-15.071-2.872-32.497-2.872h-21.193v-39.738h16.484q35.793 0 56.987-15.081 21.429-15.321 21.429-44.526 0-12.926-5.416-22.502-5.416-9.816-15.071-16.039-10.125-6.224-21.664-8.617t-26.139-2.393q-22.371 0-47.568 8.14t-47.568 22.981h-2.354v-50.034q16.719-8.379 44.506-15.321 28.023-7.181 54.161-7.181 25.668 0 45.213 4.788t35.323 15.321q16.955 11.49 25.668 27.769t8.713 38.062q0 29.684-20.723 51.947-20.487 22.024-48.51 27.769v3.352q11.303 1.915 25.903 8.14 14.6 5.985 24.726 15.081z"],"width":1065,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["V3"],"defaultCode":59759,"grid":16},"attrs":[],"properties":{"id":130,"order":1030,"ligatures":"","prevSize":32,"code":59760,"name":"V3"},"setIdx":0,"setId":3,"iconIdx":140},{"icon":{"paths":["M847.261 194.076v16.83q-32.75 5.914-49.58 20.924-24.108 22.288-42.757 68.23l-215.151 524.914h-16.83l-231.071-531.736q-17.74-40.938-25.018-50.035-11.372-14.101-28.202-21.833-16.375-8.187-44.577-10.461v-16.83h251.995v16.83q-42.757 4.094-55.494 14.556t-12.737 26.837q0 22.743 20.924 70.959l156.928 361.617 145.557-357.069q21.379-52.764 21.379-73.233 0-13.192-13.192-25.018-13.192-12.282-44.577-17.285-2.274-0.455-7.733-1.364v-16.83zM929.61 822.866h-247.534v-47.278q25.785-20.359 51.57-40.718 26.030-20.359 48.377-40.492 47.149-42.076 64.585-66.733 17.436-24.883 17.436-53.613 0-26.241-18.909-40.944-18.663-14.93-52.306-14.93-22.347 0-48.377 7.239t-50.833 22.169h-2.456v-47.505q17.435-7.917 46.413-14.478 29.223-6.56 56.481-6.56 56.235 0 88.159 25.11 31.924 24.883 31.924 67.638 0 19.228-5.403 35.968-5.157 16.514-15.471 31.444-9.578 14.025-22.592 27.598-12.769 13.573-31.187 30.086-26.276 23.752-54.271 46.147-27.995 22.169-52.306 41.171h196.701z"],"width":1065,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["V2"],"defaultCode":59760,"grid":16},"attrs":[],"properties":{"id":131,"order":1031,"ligatures":"","prevSize":32,"code":59761,"name":"V2"},"setIdx":0,"setId":3,"iconIdx":141},{"icon":{"paths":["M847.261 194.076v16.83q-32.75 5.914-49.58 20.924-24.108 22.288-42.757 68.23l-215.151 524.914h-16.83l-231.071-531.736q-17.74-40.938-25.018-50.035-11.372-14.101-28.202-21.833-16.375-8.187-44.577-10.461v-16.83h251.995v16.83q-42.757 4.094-55.494 14.556t-12.737 26.837q0 22.743 20.924 70.959l156.928 361.617 145.557-357.069q21.379-52.764 21.379-73.233 0-13.192-13.192-25.018-13.192-12.282-44.577-17.285-2.274-0.455-7.733-1.364v-16.83zM871.096 829.925h-173.272v-36.187h66.643v-237.598h-66.643v-32.378q13.543 0 29.022-2.381 15.478-2.618 23.433-7.381 9.889-5.951 15.478-14.998 5.805-9.285 6.665-24.76h33.322v319.496h65.353z"],"width":1065,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["V1"],"defaultCode":59761,"grid":16},"attrs":[],"properties":{"id":132,"order":1032,"ligatures":"","prevSize":32,"code":59762,"name":"V1"},"setIdx":0,"setId":3,"iconIdx":142},{"icon":{"paths":["M463.397 178.544c5.795-1.931 10.625-1.931 17.386-1.931 22.216 0 50.228 4.83 69.546 8.693 90.796 24.148 156.478 101.421 156.478 180.626 0 5.795 0 10.625 0 16.421-6.761 53.125-47.33 83.069-89.83 83.069-33.807 0-69.546-21.25-82.103-64.716-5.795-14.489-7.727-25.114-7.727-32.841 0-12.557 4.83-17.386 14.489-17.386 8.693 0 12.557 3.864 15.455 12.557 3.864 16.421 19.318 26.080 37.671 26.080 12.557 0 25.114-3.864 36.705-12.557 13.523-8.693 20.284-22.216 20.284-41.534 0-3.864 0-8.693-0.967-13.523-10.625-59.887-76.307-109.148-151.649-112.046l-9.659-1.931-7.727 15.455c-28.977 53.125-44.432 86.932-44.432 117.842s17.386 56.023 50.228 89.83c16.421 17.386 21.25 22.216 27.046 34.773 9.659 16.421 13.523 31.875 13.523 51.194 0 8.693-0.967 19.318-3.864 28.977-10.625 44.432-39.603 102.387-71.478 148.751-1.931 2.898-3.864 5.795-3.864 5.795s0 0 0 0c1.931 0 2.898 0 5.795-1.931 10.625 0 20.284-0.967 29.943-0.967 51.194 0 97.557 18.352 138.126 55.057l2.898 0.967 18.352-14.489c10.625-7.727 19.318-14.489 19.318-16.421 0 0 0.967 0 0.967-0.967s-0.967-3.864-0.967-7.727c-2.898-13.523-2.898-27.046-2.898-40.568 0-56.023 17.386-104.319 51.194-141.024 6.761-4.83 37.671-30.909 49.262-38.637 12.557-9.659 27.046-14.489 43.466-14.489 15.455 0 30.909 6.761 45.398 18.352 17.386 14.489 27.046 36.705 27.046 57.955 0 23.182-9.659 45.398-28.012 61.819-3.864 3.864-31.875 25.114-33.807 27.046-1.931 0.967-75.341 56.989-78.239 59.887 0 0 0 0 0 0 0 3.864 9.659 28.012 16.421 40.568 7.727 17.386 12.557 22.216 25.114 28.012 9.659 4.83 22.216 7.727 33.807 7.727 29.943 0 61.819-14.489 87.898-41.534 5.795-4.83 6.761-7.727 6.761-10.625 0-0.967 0-2.898 0-3.864-2.898-9.659-3.864-23.182-3.864-36.705 0-17.386 2.898-35.739 6.761-52.159 15.455-68.58 59.887-123.637 131.365-162.274 1.931-0.967 1.931-0.967 1.931-2.898 0-0.967-0.967-1.931-4.83-7.727-61.819-76.307-155.512-132.33-259.831-156.478-16.421-3.864-21.25-8.693-21.25-19.318s6.761-15.455 16.421-15.455c4.83 0 6.761 0 10.625 0.967 210.57 41.534 378.639 176.763 414.378 335.173 3.864 18.352 6.761 37.671 6.761 55.057 0 93.694-56.989 175.797-137.16 184.49-5.795 0.967-12.557 0.967-19.318 0.967-53.125 0-98.523-26.080-123.637-74.376-3.864-4.83-3.864-6.761-4.83-6.761 0 0 0 0 0 1.931-34.773 50.228-88.864 79.205-137.16 79.205-28.977 0-55.057-8.693-76.307-27.046-10.625-9.659-22.216-32.841-31.875-58.921l-1.931-6.761-2.898 1.931-55.057 46.364c-55.055 43.465-55.055 43.465-60.851 43.465 0 0 0 0 0 0-8.693 0-12.557-3.864-15.455-14.489-14.489-52.159-57.955-86.932-102.387-86.932-5.795 0-10.625 0-17.386 0.967l-6.761 1.931-8.693 11.591c-31.875 39.603-72.444 85.001-76.307 85.966-2.898 0.967-5.795 1.931-7.727 1.931-8.693 0-16.421-6.761-16.421-15.455 0-2.898 1.931-3.864 1.931-4.83 0.967-1.931 1.931-6.761 3.864-10.625 12.557-41.534 40.568-75.341 81.137-96.592 4.83-2.898 9.659-4.83 10.625-5.795 47.33-62.785 68.58-103.353 68.58-136.194 0-20.284-6.761-29.943-35.739-55.057-29.943-27.046-50.228-64.716-54.091-103.353 0-3.864 0-8.693 0-12.557 0-45.398 22.216-105.285 67.614-186.422l5.795-10.625h-1.931c-43.466 5.795-70.512 13.523-103.353 30.909-62.785 31.875-106.251 85.966-114.944 144.887-1.931 5.795-1.931 12.557-1.931 17.386 0 21.25 5.795 42.5 16.421 48.296 5.795 3.864 14.489 5.795 20.284 5.795 28.977 0 56.023-27.046 56.989-61.819 0.967-15.455 4.83-20.284 15.455-20.284 12.557 0 16.421 4.83 16.421 25.114v1.931c-1.931 49.262-16.421 87.898-46.364 112.046-17.386 15.455-37.671 21.25-56.989 21.25-27.046 0-51.194-12.557-62.785-36.705-8.693-19.318-13.523-40.568-13.523-63.75 0-59.887 31.875-128.467 86.932-177.728 56.023-47.33 116.876-72.444 199.945-79.205zM1071.924 510.819c-1.931-2.898-3.864-4.83-4.83-4.83-0.967 0-2.898 1.931-6.761 4.83-55.057 40.568-87.898 107.217-87.898 174.831 0 12.557 2.898 28.012 4.83 41.534 8.693 43.466 32.841 81.137 59.887 89.83 1.931 0 3.864 0 5.795 0 19.318 0 42.5-27.046 57.955-70.512 8.693-24.148 13.523-53.125 13.523-84.035 0-16.421-0.967-31.875-3.864-48.296-6.761-34.773-20.284-69.546-38.637-103.353zM783.115 532.069c-2.898 0-4.83 0-7.727 0-7.727 0-14.489 2.898-20.284 9.659-18.352 27.046-28.977 58.921-28.977 97.557 0 1.931 0 4.83 0 6.761 1.931 12.557 1.931 23.182 2.898 24.148v0c0 0 10.625-7.727 22.216-17.386l38.637-28.977c18.352-15.455 21.25-16.421 25.114-27.046 1.931-6.761 3.864-12.557 3.864-18.352 0-20.284-14.489-40.568-35.739-46.364z"],"width":1381,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pedal"],"defaultCode":59762,"grid":16},"attrs":[],"properties":{"id":133,"order":1033,"ligatures":"","prevSize":32,"code":59763,"name":"pedal"},"setIdx":0,"setId":3,"iconIdx":143},{"icon":{"paths":["M219.993 357.788c2.911 0 4.851 0 6.792 0 3.881 0 9.703 0 16.495 0.958l212.49 59.188 256.152 69.859c64.038 17.466 56.276 16.494 62.097 19.405 6.792 3.88 10.673 11.643 10.673 19.405 0 8.731-3.881 17.466-10.673 21.345-1.941 0.958-1.941 0.958-1.941 0.958s0 0 0 0c0 0.958-15.524 5.82-316.309 87.325l-212.49 59.185c-6.792 1.95-10.673 1.95-14.554 1.95-5.822 0-9.703-1.95-13.584-3.883-7.762-4.851-11.643-12.614-11.643-20.374 0-9.703 3.881-17.466 11.643-21.349 3.881-4.851-18.435 1.95 185.322-53.365l135.838-36.868 95.087-26.2c15.524-4.851 29.108-7.759 29.108-8.731 0 0-13.584-1.95-29.108-7.763l-95.087-25.225-135.838-37.843c-195.995-54.333-181.441-49.482-184.352-51.425-8.732-4.851-12.614-13.582-12.614-22.313 0-11.646 6.792-20.377 16.495-24.257zM376.207 419.867v-184.352c38.811-29.108 38.811 0 0-29.108l38.811 29.108v582.164c-38.811 29.108-38.811 0 0 29.108l-38.811-29.108v-397.812l135.838 19.405zM512.045 439.272v-232.866c38.811-29.108 38.811 0 0-29.108l38.811 29.108v582.164c-38.811 29.108-38.811 0 0 29.108l-38.811-29.108v-349.298z"],"width":962,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sori"],"defaultCode":59763,"grid":16},"attrs":[],"properties":{"id":134,"order":1034,"ligatures":"","prevSize":32,"code":59764,"name":"sori"},"setIdx":0,"setId":3,"iconIdx":144},{"icon":{"paths":["M165.696 168.179c13.539 0 20.308 0 0-8.462l23.693 52.463 2.539 645.639c-11.847 11.845-14.385 11.845-19.462 11.845l-17.77-14.385v-700.641l0.847 13.54zM186.006 168.179l248.778 169.237h-59.233l-189.545-118.466v220.008l189.543-101.542h59.233l-248.778 169.237z"],"width":589,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["koron"],"defaultCode":59764,"grid":16},"attrs":[],"properties":{"id":135,"order":1035,"ligatures":"","prevSize":32,"code":59765,"name":"koron"},"setIdx":0,"setId":3,"iconIdx":145},{"icon":{"paths":["M288.401 130.537c2.132-0.701 3.552-0.701 5.683-0.701 6.394 0 12.077 3.552 14.208 9.236 0.711 2.129 0.711 2.841 0.711 95.905 0 86.669 0 93.064 1.42 93.064 0 0 0 0 0 0 7.814-2.843 37.652-9.236 39.783-9.236 6.394 0 12.077 3.552 14.208 9.236 0.711 1.428 1.42 18.469 1.42 35.52 0 17.049-0.711 33.389-1.42 35.52-2.842 7.104-3.552 7.104-32.679 14.917l-22.733 4.972v78.145c0 71.752 0 77.436 1.42 77.436 0 0 0 0 0 0 7.814-2.843 37.652-9.236 39.783-9.236 4.973 0 7.814 1.428 10.656 4.263 4.262 4.261 4.262 2.841 4.262 30.545 0 0 0 9.947 0 9.947s0 9.945 0 9.945c0 27.707 0 26.996-4.262 30.548-2.842 3.552-2.842 3.552-29.127 9.945l-22.733 5.684v93.773c0 93.776 0 94.485-0.711 97.328-2.132 5.681-7.814 9.233-14.208 9.233-3.552 0-7.814-1.428-10.656-4.261-3.552-4.263-4.262 2.129-4.262-55.412 0-12.076 0-25.576 0-42.624 0-50.44 0-90.932 0-90.932s-14.919 3.552-32.679 7.816c-17.76 4.261-31.968 7.813-31.968 7.813-0.711 0-0.711 44.047-0.711 97.328 0 95.905 0 96.614-0.711 98.745-2.132 6.393-8.525 9.236-14.208 9.236-3.552 0-7.814-1.428-10.656-4.263-3.552-3.552-4.262 2.843-4.262-56.832 0-11.365 0-26.285 0-43.333 0-86.672 0-93.064-0.711-93.064 0 0 0 0 0 0-8.525 2.841-36.231 8.524-38.362 8.524-6.394 0-12.077-3.552-14.208-9.236-0.711-1.428-0.711-18.469-0.711-35.52 0-17.049 0-33.389 0.711-35.52 2.842-7.104 4.262-7.813 31.968-14.208l21.312-5.681v-77.436c0-72.461 0-77.433-0.711-77.433 0 0 0 0 0 0-8.525 2.129-36.231 8.524-38.362 8.524-6.394 0-12.077-3.552-14.208-9.236-0.711-2.129-0.711-18.469-0.711-35.52 0-17.049 0-34.1 0.711-35.52 2.842-7.104 4.262-7.813 31.968-14.917l21.312-4.975v-94.482c0-93.776 0-94.485 0.711-97.328 2.842-5.681 8.525-9.233 14.208-9.233 4.262 0 7.814 1.428 10.656 4.261 4.262 4.263 4.262-2.129 4.262 56.124 0 11.365 0 25.573 0 42.624 0 49.728 0 90.93 0 90.93 0.711 0 14.919-3.552 32.679-8.524 17.76-4.261 32.679-7.813 32.679-7.813s0-43.336 0-96.616 0-97.325 1.42-99.457c0.711-3.552 4.262-7.104 7.814-8.524zM279.161 504.22c0-61.805 0-77.433 0-77.433v0c-0.711 0-5.683 0.701-11.366 2.841-6.394 1.428-20.602 4.975-32.679 7.816l-21.312 4.972v78.145c0 42.624 0 77.436 0 77.436 0.711 0 14.919-3.552 32.679-7.816s32.679-7.816 32.679-7.816c0 0 0-35.52 0-78.145zM455.342 144.756c2.132-0.701 3.552-1.428 5.683-1.428 6.394 0 12.077 4.261 14.208 9.945 1.42 2.129 1.42 2.841 1.42 91.641v90.224l18.471-6.395c17.050-5.684 19.181-6.393 22.023-6.393 0 0 0.711 0 0.711 0 6.394 0 10.656 2.841 13.498 8.524l0.711 2.129v33.389c0 7.104 0 12.788 0 17.049 0 19.892 0 19.892-2.842 22.735-2.132 3.552-4.262 4.261-29.127 12.785l-23.443 7.816v78.145c0 51.149 0 78.145 0 78.145 0.711 0 8.525-2.841 18.471-6.393s18.471-6.395 19.891-6.395c0.711-0.701 1.42-0.701 2.132-0.701 6.394 0 12.077 4.261 14.208 9.233 0.711 2.129 1.42 22.024 1.42 40.495 0 14.917-0.711 29.125-0.711 30.545-2.842 6.395-3.552 7.104-31.258 17.051l-24.154 8.524v97.325l-0.711 97.325-0.711 2.129c-2.842 4.972-8.525 8.524-14.208 8.524-3.552 0-7.104-1.428-10.656-4.972-3.552-3.552-4.262 2.843-4.262-55.412 0-11.365 0-25.573 0-42.624 0-50.437 0-91.641 0-91.641s-7.814 2.841-17.050 6.393c-12.787 4.263-19.181 6.395-23.443 6.395s-6.394-1.428-9.235-4.263c-4.256-4.266-4.256-2.846-4.256-30.553 0-2.841 0-6.393 0-9.945 0-2.841 0-5.684 0-8.524 0-29.128 0-27.707 4.262-31.968 2.842-2.843 2.842-2.843 28.416-12.076l21.312-7.816v-78.145c0-43.336 0-78.856 0-78.856s-8.525 2.843-17.76 5.684c-12.077 4.263-18.471 6.395-23.443 6.395-3.552 0-5.683-1.428-8.525-4.263-4.262-4.263-4.262-2.841-4.262-31.257 0-2.843 0-6.395 0-9.947 0-7.104 0-13.497 0-18.469 0-25.576 2.132-22.735 31.258-32.68l22.733-7.816v-94.482c0-93.776 0-94.485 1.42-96.616 1.42-3.552 4.973-7.104 7.814-8.524z"],"width":662,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sharp125"],"defaultCode":59765,"grid":16},"attrs":[],"properties":{"id":136,"order":1036,"ligatures":"","prevSize":32,"code":59766,"name":"sharp125"},"setIdx":0,"setId":3,"iconIdx":146},{"icon":{"paths":["M378.076 129.663c0.707-0.707 2.117-0.707 3.528-0.707 4.94 0 10.585 3.528 14.113 8.468l0.707 2.823v93.146l0.707 93.146 17.641-2.823c11.29-2.117 18.347-2.823 22.581-2.823 4.94 0 7.057 0.707 9.879 3.528 3.528 4.234 3.528 3.528 3.528 31.754v41.634l-0.707 3.528c-3.528 6.351-4.94 6.351-30.343 11.29-12.702 2.117-22.581 4.234-23.287 4.94 0 0 0 19.053 0 45.867 0 9.879 0 21.17 0 32.46l0.707 76.916 17.641-2.823c11.29-2.117 18.347-2.823 22.581-2.823 4.94 0 7.057 0.707 9.879 3.528 3.528 4.234 3.528 2.823 3.528 31.754v41.634l-0.707 2.823c-3.528 7.057-4.94 7.057-28.932 11.996-10.585 2.117-21.17 4.234-21.875 4.234h-2.823v116.433c0 73.388 0 70.565-2.117 74.094-2.823 4.234-7.762 6.351-12.702 6.351-4.234 0-9.173-2.117-11.996-6.351-2.117-3.528-2.823-0.707-2.823-71.977v-112.905h-1.411c0 0-14.113 2.823-30.343 5.645l-31.049 6.351v92.441l-0.707 93.146-0.707 2.117c-2.117 5.645-7.762 9.173-14.113 9.173-4.234 0-10.585-3.528-13.407-9.173l-0.707-2.117v-179.942l-31.754 5.645-31.754 6.351v184.881l-0.707 2.823c-2.823 5.645-8.468 9.173-13.407 9.173-5.645 0-11.996-3.528-13.407-9.173l-2.117-2.823v-90.324c0-48.69 0-88.912 0-88.912s-8.468 0.707-16.936 2.823c-11.996 2.117-17.641 2.823-22.581 2.823s-6.351-0.707-9.173-3.528c-2.823-4.94-3.528-2.823-3.528-29.637 0-3.528 0.707-7.057 0.707-10.585v-34.577l0.707-2.117c0.707-2.823 3.528-5.645 6.351-6.351 2.117-1.411 4.234-2.117 27.52-6.351l16.936-2.823v-78.328c0-42.339 0-77.622 0-77.622s-8.468 1.411-16.936 2.823c-11.996 2.117-17.641 2.823-22.581 2.823s-6.351-0.707-9.173-3.528c-2.823-4.94-3.528-2.823-3.528-29.637 0-3.528 0.707-6.351 0.707-10.585v-34.577l0.707-1.411c0.707-3.528 3.528-6.351 6.351-7.057 2.117-0.707 4.234-2.117 27.52-5.645l16.936-3.528v-94.558c0-9.879 0-19.053 0-25.404 0-77.622 0-72.682 2.823-76.916s7.762-6.351 12.702-6.351c3.528 0 8.468 2.117 11.29 6.351s2.823 0 2.823 74.094v25.404c0 83.973 0 91.735 1.411 91.735 0 0 58.569-10.585 61.392-11.996h0.707v-192.643l0.707-2.117c2.823-5.645 9.173-8.468 13.407-8.468 6.351 0 11.996 2.823 14.113 8.468l0.707 2.117 0.707 93.852v93.146h1.411c2.823-0.707 61.392-11.996 61.392-11.996s0.707-33.871 0.707-95.969v-95.969l0.707-2.823c2.117-3.528 6.351-6.351 9.879-7.762zM366.792 500.835c0-61.392 0-78.328 0-78.328v0c0 0-14.819 2.823-31.754 6.351l-31.049 5.645v155.949h1.411c2.823-0.707 61.392-11.996 61.392-11.996s0-27.52 0-77.622zM274.351 596.099c0 0 0-19.053 0-45.867 0-9.879 0-21.875 0-32.46v-77.622l-31.754 5.645-31.754 6.351v77.622c0 16.23 0 30.343 0 40.222 0 35.283 0 38.105 1.411 38.105 0.707 0 61.392-11.996 62.097-11.996z"],"width":580,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sharp75"],"defaultCode":59766,"grid":16},"attrs":[],"properties":{"id":137,"order":1037,"ligatures":"","prevSize":32,"code":59767,"name":"sharp75"},"setIdx":0,"setId":3,"iconIdx":147},{"icon":{"paths":["M195.828 135.721c2.193-2.193 2.923-2.193 7.307-2.193 5.845 0 10.96 2.923 13.883 8.768l0.732 2.193v92.064c0 51.147 0 92.795 0 92.795 1.461 0 8.768-2.193 18.997-6.576l18.997-5.845h3.653c6.576 0.732 10.96 2.923 13.152 8.768l2.193 2.193v46.032c0 28.496-1.461 26.304-4.384 29.957s-3.653 4.384-29.227 12.421l-23.381 8.037v80.374c0 43.84 0 78.912 0 78.912s8.768-2.923 18.997-5.845c18.267-7.307 18.997-7.307 21.92-7.307v0c7.307 0 13.152 4.384 14.613 9.499 0 2.193 1.461 18.997 1.461 35.072 0 18.267-1.461 37.995-1.461 38.726-2.923 7.307-2.923 6.576-48.224 23.381l-7.307 2.193v199.473l-0.732 2.193c-2.923 5.845-8.768 9.499-13.883 9.499-5.845 0-12.421-3.653-15.344-9.499l-0.732-2.193v-94.256c0-83.296 0-94.256 0-94.256s0 0 0 0c-0.732 0-7.307 2.923-13.152 5.115l-16.805 5.845c-3.653 1.461-6.576 2.193-9.499 2.193-4.384 0-8.037-2.193-10.96-5.115-2.922-3.655-2.922-1.463-2.922-29.959 0-3.653 0-6.576 0-11.691v-34.342l0.732-2.193c0.732-2.923 2.923-5.845 5.115-6.576 0.732 0 11.691-5.115 24.843-9.499l22.651-8.037v-81.104c0-6.576 0-14.613 0-20.459 0-34.342 0-59.915 0-59.915s-8.768 2.923-17.536 5.845c-12.421 4.384-18.997 6.576-23.381 6.576-5.115 0-6.576-2.193-9.499-5.115-2.924-4.383-2.924-2.191-2.924-30.688 0-2.923 0-5.845 0-10.229v-35.072l0.732-2.193c2.923-7.307 2.923-7.307 30.688-16.075l21.92-7.307v-195.82l0.732-2.193c2.193-2.923 5.115-5.845 8.037-6.576z"],"width":408,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["sharp25"],"defaultCode":59767,"grid":16},"attrs":[],"properties":{"id":138,"order":1038,"ligatures":"","prevSize":32,"code":59768,"name":"sharp25"},"setIdx":0,"setId":3,"iconIdx":148},{"icon":{"paths":["M405.747 153.17c2.501-0.823 5.002-0.823 6.669-0.823 7.502 0 14.171 4.168 16.672 10.834 1.667 2.498 1.667 3.336 1.667 96.698 0 51.682 0 93.362 0 93.362s25.008-11.669 54.184-26.674l54.184-27.509h4.168c0.834 0 0.834 0 0.834 0 10.837 0 18.339 8.336 18.339 17.507 0 2.498-0.834 4.168-1.667 6.669-2.501 6.666 0 5-68.355 39.178l-61.686 31.677v161.716l1.667-1.676c31.677-26.674 65.854-40.848 98.364-40.848 12.504 0 25.841 2.498 38.345 6.669 37.512 13.339 58.352 48.349 58.352 89.194 0 22.51-6.669 47.517-19.173 70.856-18.339 33.344-42.513 60.021-109.201 120.040-36.678 32.509-45.014 40.013-65.854 59.183-11.67 11.672-13.338 12.504-20.006 12.504-7.502 0-14.171-4.168-16.672-10.834-0.834-3.336-0.834-3.336-0.834-225.906 0-123.373-0.834-223.404-0.834-223.404s-24.174 12.504-54.184 26.674l-54.184 27.509h-4.168c0 0-0.834 0-0.834 0-10.837 0-18.339-7.501-18.339-17.504 0-1.676 0.834-4.168 1.667-6.669 2.501-6.669 0-5.003 68.355-39.178l62.52-30.845v-103.365c0-101.698 0-102.533 0.834-105.034 1.667-4.168 5.835-8.336 9.17-10.003zM506.612 569.968c-3.334-0.823-7.502-0.823-10.837-0.823-2.501 0-4.168 0-5.835 0-21.673 3.333-40.846 16.672-55.017 38.344l-4.168 5.835v197.565l2.501-3.336c62.52-67.519 102.532-145.044 102.532-195.895v-0.823c0-25.843-7.502-36.68-29.176-40.848zM163.171 153.188v0c1.667-0.823 4.168-0.823 6.669-0.823 6.669 0 14.171 4.168 16.672 10.834 0.834 2.498 0.834 3.336 0.834 197.565v195.060l2.501-1.676c31.677-26.674 65.020-40.848 97.531-40.848 13.338 0 25.841 2.498 38.345 6.669 37.512 13.339 58.352 48.349 58.352 89.194 0 22.51-5.835 47.517-19.173 70.856-18.339 33.344-42.513 60.021-109.201 120.040-35.845 32.509-45.014 40.013-65.854 59.183-11.67 11.672-13.338 12.504-20.006 12.504-7.502 0-14.171-4.168-16.672-10.834l-0.834-3.336v-691.885l0.834-2.498c1.667-4.168 5.835-8.336 10.003-10.003zM264.036 569.99v0c-3.334-0.823-8.336-0.823-11.67-0.823-1.667 0-4.168 0-5.002 0-22.507 3.333-41.68 16.672-55.851 38.344l-4.168 5.835v197.565l3.334-3.336c61.686-67.519 102.532-145.044 102.532-195.895v-0.823c0-25.843-8.336-36.68-29.176-40.848z"],"width":780,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flat125ar"],"defaultCode":59768,"grid":16},"attrs":[],"properties":{"id":139,"order":1039,"ligatures":"","prevSize":32,"code":59769,"name":"flat125ar"},"setIdx":0,"setId":3,"iconIdx":149},{"icon":{"paths":["M292.993 153.457c1.67-0.835 3.341-0.835 5.846-0.835 7.516 0 14.198 3.341 16.703 10.022 0.836 3.341 0.836 5.011 0.836 97.712 0 50.944 0 93.537 0 93.537s24.219-12.527 53.45-27.56l52.614-26.725h4.176c0.836 0 0.836 0 0.836 0 10.857 0 18.373 8.351 18.373 17.538 0 1.67-0.836 4.176-2.506 6.681-1.67 5.846 0 5.011-66.812 39.252l-60.131 31.736v162.019l0.836-2.505c31.736-26.725 65.142-40.087 96.877-40.087 12.527 0 25.054 1.67 37.582 6.681 37.582 12.527 57.625 47.603 57.625 89.361 0 21.714-6.681 45.933-19.208 70.153-18.373 33.406-41.757 60.131-106.899 118.591l-64.306 60.966c-11.692 11.692-14.198 11.692-19.208 11.692-7.516 0-14.198-4.176-16.703-10.857-0.836-3.341-0.836-3.341-0.836-225.49 0-122.767 0-223.82 0-223.82s-24.219 11.692-53.45 26.725l-52.614 28.395h-4.176c-1.67 0-1.67 0-1.67 0-10.022 0-17.538-8.351-17.538-17.538 0-2.505 0.836-5.011 1.67-6.681 2.506-7.516 0-5.846 67.647-40.087l60.131-30.901v-103.558c0-101.888 0-101.888 0.836-105.229 2.506-3.341 5.846-8.351 10.022-9.187zM391.544 571.032c-3.341-1.67-8.351-1.67-11.692-1.67-2.506 0-4.176 0-5.846 0-21.714 3.341-40.922 16.703-54.285 38.417l-3.341 5.846v197.095l2.506-3.341c60.966-66.812 101.053-143.646 101.053-194.59v-1.67c0-25.054-8.351-35.911-28.395-40.087z"],"width":662,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flat25ar"],"defaultCode":59769,"grid":16},"attrs":[],"properties":{"id":140,"order":1040,"ligatures":"","prevSize":32,"code":59770,"name":"flat25ar"},"setIdx":0,"setId":3,"iconIdx":150},{"icon":{"paths":["M504.763 109.083c4.896-0.938 9.792-0.938 11.423-0.938 14.687 0 29.375 3.753 32.638 11.258l3.264 3.753v776.791l-3.264 3.753c-3.264 7.505-17.951 12.196-31.006 12.196s-17.951 0-39.166-13.134l-124.026-68.485c-114.234-58.165-159.928-87.248-194.198-118.207-37.534-31.897-52.221-63.794-52.221-93.815 0-60.98 68.541-107.888 181.143-107.888 13.055 0 26.111 0.938 42.43 1.876 50.589 5.629 97.915 18.763 148.505 43.155l4.896 2.814v-220.466c0-218.59 0-218.59 1.632-222.342 3.264-3.753 9.792-9.382 17.951-10.32zM382.369 578.16c-8.16-1.876-17.951-1.876-26.111-1.876-35.902 0-66.909 12.196-73.436 29.083 0 4.691-1.632 10.32-1.632 15.010 0 12.196 3.264 28.145 8.16 42.217 22.847 50.66 97.915 122.898 189.303 181.064l6.528 3.753v-221.404l-9.792-6.567c-24.479-22.516-57.117-36.588-93.019-41.279z"],"width":660,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flat25sz"],"defaultCode":59770,"grid":16},"attrs":[],"properties":{"id":141,"order":1041,"ligatures":"","prevSize":32,"code":59771,"name":"flat25sz"},"setIdx":0,"setId":3,"iconIdx":151},{"icon":{"paths":["M557.278 130.050c-3.528-0.889-7.056-0.889-8.231-0.889-10.583 0-21.167 3.557-23.518 10.672l-2.352 3.557v736.346l2.352 3.557c2.352 7.114 12.935 11.561 22.343 11.561s12.935 0 28.222-12.45l89.37-64.919c82.315-55.137 115.241-82.705 139.935-112.053 27.046-30.236 37.63-60.473 37.63-88.931 0-57.805-49.389-102.27-130.528-102.27-9.407 0-18.815 0.889-30.574 1.779-36.454 5.336-70.555 17.786-107.009 40.908l-3.528 2.668v-208.987c0-207.208 0-207.208-1.176-210.766-2.352-3.557-7.056-8.893-12.935-9.782zM645.472 574.703c5.88-1.779 12.935-1.779 18.815-1.779 25.87 0 48.213 11.561 52.917 27.568 0 4.447 1.176 9.782 1.176 14.229 0 11.561-2.352 26.679-5.88 40.019-16.463 48.023-70.555 116.499-136.407 171.636l-4.704 3.557v-209.876l7.056-6.225c17.639-21.343 41.157-34.683 67.028-39.129zM434.982 130.050c-1.176-0.889-4.704-0.889-7.056-0.889-11.759 0-21.167 3.557-24.694 10.672-1.176 3.557-1.176 3.557-1.176 210.766v208.987l-2.352-2.668c-44.685-28.458-90.546-42.687-135.231-42.687-17.639 0-35.278 1.779-52.917 7.114-52.917 13.34-82.315 50.69-82.315 95.156 0 23.122 10.583 48.912 28.222 74.702 24.694 35.572 58.796 64.030 150.518 126.282l90.546 64.919c16.463 12.45 18.815 12.45 27.046 12.45 11.759 0 21.167-4.447 24.694-11.561l1.176-3.557v-736.346l-1.176-3.557c-3.528-3.557-8.231-8.893-15.287-9.782zM296.223 574.703c4.704-1.779 11.759-1.779 16.463-1.779 2.352 0 5.88 0 7.056 0 30.574 3.557 57.62 17.786 77.611 40.908l4.704 6.225v209.876l-3.528-3.557c-85.842-71.145-142.287-152.961-142.287-207.208v-1.779c0-26.679 10.583-38.24 39.981-42.687z"],"width":972,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["flat75sz"],"defaultCode":59771,"grid":16},"attrs":[],"properties":{"id":142,"order":1042,"prevSize":32,"code":59772,"name":"flat75sz"},"setIdx":0,"setId":3,"iconIdx":152},{"icon":{"paths":["M557.278 130.050c-3.528-0.889-7.056-0.889-8.231-0.889-10.583 0-21.167 3.557-23.518 10.672l-2.352 3.557v736.346l2.352 3.557c2.352 7.114 12.935 11.561 22.343 11.561s12.935 0 28.222-12.45l89.37-64.919c82.315-55.137 115.241-82.705 139.935-112.053 27.046-30.236 37.63-60.473 37.63-88.931 0-57.805-49.389-102.27-130.528-102.27-9.407 0-18.815 0.889-30.574 1.779-36.454 5.336-70.555 17.786-107.009 40.908l-3.528 2.668v-208.987c0-207.208 0-207.208-1.176-210.766-2.352-3.557-7.056-8.893-12.935-9.782zM645.472 574.703c5.88-1.779 12.935-1.779 18.815-1.779 25.87 0 48.213 11.561 52.917 27.568 0 4.447 1.176 9.782 1.176 14.229 0 11.561-2.352 26.679-5.88 40.019-16.463 48.023-70.555 116.499-136.407 171.636l-4.704 3.557v-209.876l7.056-6.225c17.639-21.343 41.157-34.683 67.028-39.129zM434.982 130.050c-1.176-0.889-4.704-0.889-7.056-0.889-11.759 0-21.167 3.557-24.694 10.672-1.176 3.557-1.176 3.557-1.176 210.766v208.987l-2.352-2.668c-44.685-28.458-90.546-42.687-135.231-42.687-17.639 0-35.278 1.779-52.917 7.114-52.917 13.34-82.315 50.69-82.315 95.156 0 23.122 10.583 48.912 28.222 74.702 24.694 35.572 58.796 64.030 150.518 126.282l90.546 64.919c16.463 12.45 18.815 12.45 27.046 12.45 11.759 0 21.167-4.447 24.694-11.561l1.176-3.557v-736.346l-1.176-3.557c-3.528-3.557-8.231-8.893-15.287-9.782zM296.223 574.703c4.704-1.779 11.759-1.779 16.463-1.779 2.352 0 5.88 0 7.056 0 30.574 3.557 57.62 17.786 77.611 40.908l4.704 6.225v209.876l-3.528-3.557c-85.842-71.145-142.287-152.961-142.287-207.208v-1.779c0-26.679 10.583-38.24 39.981-42.687z"],"width":972,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["microtone"],"defaultCode":59772,"grid":16},"attrs":[],"properties":{"id":143,"order":1043,"ligatures":"","prevSize":32,"code":59773,"name":"microtone"},"setIdx":0,"setId":3,"iconIdx":153},{"icon":{"paths":["M435.96 912.084h-57.871v-314.343h57.871v314.343zM675.361 956.843h-297.272v-64.072h297.272v64.072zM675.361 597.742h-297.272v-59.090h297.272v59.090zM435.96 433.283h-57.871v-314.343h57.871v314.343zM675.361 478.042h-297.272v-64.072h297.272v64.072zM675.361 118.94h-297.272v-59.090h297.272v59.090zM293.484 964.325l-233.617-48.968v-794.92l233.617-53.865-3.974 112.219h-152.801v678.212h152.801z"],"width":735,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["bracket"],"defaultCode":59773,"grid":16},"attrs":[],"properties":{"id":144,"order":1044,"ligatures":"","prevSize":32,"code":59774,"name":"bracket"},"setIdx":0,"setId":3,"iconIdx":154},{"icon":{"paths":["M471.441 53.351c-232.16 0-416.139 205.199-416.139 451.639s183.979 451.686 416.139 451.686c202.827 0 368.742-156.766 407.485-360.69h-93.604c-36.417 157.192-164.42 270.622-313.881 270.622-177.085 0-324.605-158.949-324.605-361.618s147.52-361.432 324.605-361.432c131.002 0 245.546 87.096 296.429 214.393h96.616c-56.012-175.851-209.281-304.6-393.045-304.6zM956.565 348.499l-136.677 169.065-133.701-165.375 4.346-5.354h264.708z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["refresh"],"defaultCode":59774,"grid":16},"attrs":[],"properties":{"id":145,"order":1045,"ligatures":"","prevSize":32,"code":59775,"name":"refresh"},"setIdx":0,"setId":3,"iconIdx":155},{"icon":{"paths":["M236.161 236.161c-152.342 152.342-152.342 399.336 0 551.678s399.336 152.342 551.678 0c152.342-152.342 152.342-399.336 0-551.678s-399.336-152.342-551.678 0zM736.119 736.119c-123.777 123.777-324.461 123.777-448.238 0s-123.777-324.461 0-448.238c123.777-123.777 324.461-123.777 448.238 0s123.777 324.461 0 448.238zM748.667 452.81l-486.095 1.428 0.381 119.476 486.048-1.476z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["zoomminus"],"defaultCode":59775,"grid":16},"attrs":[],"properties":{"id":146,"order":1046,"ligatures":"","prevSize":32,"code":59776,"name":"zoomminus"},"setIdx":0,"setId":3,"iconIdx":156},{"icon":{"paths":["M236.161 236.161c-152.342 152.342-152.342 399.336 0 551.678s399.336 152.342 551.678 0c152.342-152.342 152.342-399.336 0-551.678s-399.336-152.342-551.678 0zM736.119 736.119c-123.777 123.777-324.461 123.777-448.238 0s-123.777-324.461 0-448.238c123.777-123.777 324.461-123.777 448.238 0s123.777 324.461 0 448.238zM460.28 287.881v172.399h-172.399v103.44h172.399v172.399h103.44v-172.399h172.399v-103.44h-172.399v-172.399z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["zoomplus"],"defaultCode":59776,"grid":16},"attrs":[],"properties":{"id":147,"order":1047,"ligatures":"","prevSize":32,"code":59777,"name":"zoomplus"},"setIdx":0,"setId":3,"iconIdx":157},{"icon":{"paths":["M34.33 528.665h45.037v-34.33h-45.037zM124.403 528.665h45.091v-34.33h-45.091zM214.53 528.665h45.091v-34.33h-45.091zM304.658 528.665h45.037v-34.33h-45.037zM394.785 528.665h45.037v-34.33h-45.037zM484.913 528.665h45.037v-34.33h-45.037zM574.986 528.665h45.091v-34.33h-45.091zM665.113 528.665h45.091v-34.33h-45.091zM755.241 528.665h45.037v-34.33h-45.037zM251.001 67.665h-59.896c0.009 119.341 0.009 238.678 0 358.011h59.896c0.009-119.333 0.009-238.669 0-358.011zM637.392 82.378v-48.048c-148.767 0.007-297.53 0.007-446.287 0v48.048c148.758 0.007 297.519 0.007 446.287 0zM637.392 425.676v-48.048c-148.767 0.007-297.53 0.007-446.287 0v48.048c148.758 0.007 297.519 0.007 446.287 0zM251.001 631.654h-59.896c0.009 119.341 0.009 238.678 0 358.011h59.896c0.009-119.333 0.009-238.669 0-358.011zM637.392 646.367v-48.048c-148.767 0.007-297.53 0.007-446.287 0v48.048c148.758 0.007 297.519 0.007 446.287 0zM637.392 989.665v-48.048c-148.767 0.007-297.53 0.007-446.287 0v48.048c148.758 0.007 297.519 0.007 446.287 0z"],"width":835,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["systemBreak"],"defaultCode":59777,"grid":16},"attrs":[],"properties":{"id":148,"order":1048,"ligatures":"","prevSize":32,"code":59778,"name":"systemBreak"},"setIdx":0,"setId":3,"iconIdx":158},{"icon":{"paths":["M684.098 409.878q0 29.128-14.981 52.014-14.98 22.589-39.377 40.125-23.969 16.942-55.214 31.803t-66.343 28.831v66.875h-76.615v-90.653q27.821-10.997 59.923-24.075 32.529-13.077 53.074-26.453 24.825-15.456 38.522-31.803 13.697-16.644 13.697-42.205 0-33.586-32.957-49.934-32.529-16.645-84.32-16.645-46.226 0-87.744 10.106-41.090 10.106-65.059 20.508h-4.28v-60.633q29.961-8.025 75.759-14.267 46.226-6.539 87.316-6.539 92.024 0 145.098 31.208 53.502 30.911 53.502 81.736zM515.031 748.415h-87.316v-62.714h87.316zM488.113 134.587c0 0 0 0 0 0-222.047 0-402.051 175.049-402.051 390.983v0c0 0 0 0 0 0.001 0 215.934 180.004 390.983 402.051 390.983 0 0 0 0 0.001 0v0c0 0 0 0 0 0 222.047 0 402.051-175.049 402.051-390.983 0 0 0 0 0-0.001v0c0-215.934-180.004-390.983-402.051-390.983 0 0 0 0-0.001 0v0zM490.942 212.784c0 0 0 0 0.001 0 177.637 0 321.641 140.039 321.641 312.787v0c0 172.747-144.003 312.787-321.641 312.787 0 0 0 0-0.001 0v0c-177.637 0-321.64-140.040-321.64-312.787v0c0-172.747 144.003-312.787 321.641-312.787v0z"],"width":1025,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["help"],"defaultCode":59778,"grid":16},"attrs":[],"properties":{"id":149,"order":1049,"ligatures":"","prevSize":32,"code":59779,"name":"help"},"setIdx":0,"setId":3,"iconIdx":159},{"icon":{"paths":["M349.828 464.227h-202.533v148.978h174.022v62.429h-174.022v254.327h-53.256v-528.163h255.789zM672.052 480.899l-181.285 449.062h-57.559l192.85-466.088h-228.085v-62.074h274.079zM819.771 488.331c1.514 0 3.789-1.063 6.441-3.892 7.199-5.309 15.156-10.969 23.112-16.276 47.74-31.845 73.504-75.366 73.504-130.919 0-7.077 0-13.8-1.136-20.876-2.652-24.768-17.808-39.276-40.92-39.276-4.926 0-10.23 1.063-16.292 2.835-7.578 1.765-15.156 5.309-23.112 8.492l-0.379 0.334v-13.092c0-19.461 1.136-38.568 2.275-58.029 0-11.323 1.136-21.938 1.136-33.26 0-10.615-1.136-21.938-3.788-32.553-1.136-3.537-1.136-10.261-6.82-10.261h-0.379c-6.062 0.709-10.609 5.309-10.609 12.384-0.379 14.153-1.893 29.014-1.515 43.168v15.923c0 30.075-1.515 60.152-2.652 90.228-1.515 43.168-9.472 85.628-9.472 128.796 0 16.984 1.136 34.676 6.062 51.659 1.136 2.835 2.275 4.601 4.547 4.601zM834.55 419.319c1.136-13.092 1.514-26.891 3.031-41.398 1.136-10.969 1.893-22.292 1.893-33.615l1.893-0.709c10.609-4.246 20.839-9.199 32.205-9.199 3.788 0 8.335 1.063 12.503 2.474 9.093 2.835 13.261 7.077 12.882 12.738 0 2.829-0.758 6.011-3.031 10.261-14.019 25.83-37.131 43.168-61.38 59.444zM1145.041 300.996q0 44.065-8.416 79.995-8.229 35.93-25.061 61.239-17.019 25.761-42.641 39.771t-60.221 14.010q-9.725 0-18.328-1.357-8.603-1.129-15.336-3.843v-43.161h1.87q5.423 3.386 15.336 6.55 9.912 2.936 22.068 2.936 41.332 0 64.709-29.828 23.565-30.055 27.305-82.706-17.393 12.655-32.729 18.078t-33.477 5.422q-17.206 0-31.232-4.072-13.839-4.064-27.866-15.818-16.458-13.785-24.874-35.026-8.229-21.241-8.229-50.844 0-51.522 28.053-83.837t68.45-32.314q20.198 0 37.404 7.683 17.206 7.457 30.11 22.597 15.897 18.756 24.5 48.359 8.603 29.376 8.603 76.153zM1107.262 291.279q0-35.026-5.985-56.268t-16.458-32.992q-8.79-10.169-18.889-14.463-10.099-4.522-21.881-4.522-26.931 0-42.641 20.338-15.523 20.338-15.523 57.171 0 21.468 5.050 35.026t17.019 23.727q8.416 7.007 18.515 9.49 10.099 2.257 22.442 2.257 14.588 0 29.549-4.743t28.053-13.785q0.189-4.743 0.372-9.265 0.372-4.743 0.372-11.977zM817.345 553.804h-42.813q-33.091-47.234-51.412-103.078t-18.322-125.881 18.322-125.881 51.412-103.078h42.813v2.327q-15.143 16.986-28.978 39.323-13.648 22.105-25.426 51.655-11.217 28.62-18.322 63.057-6.917 34.437-6.917 72.596 0 39.788 6.73 72.829 6.917 33.041 18.509 62.824 11.217 28.62 25.613 51.656 14.395 23.268 28.791 39.323zM1242.381 323.919q0 70.32-19.582 126.39t-54.949 103.495h-45.757v-2.334q15.386-16.12 30.771-39.482 15.586-23.129 27.375-51.864 12.388-29.904 19.582-63.078 7.393-33.174 7.393-73.124 0-38.314-7.393-72.89t-19.582-63.312q-12.588-29.67-27.375-51.864-14.586-22.428-30.771-39.482v-2.334h45.757q35.367 47.426 54.949 103.494t19.582 126.39z"],"width":1336,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["chordSymbol"],"defaultCode":59779,"grid":16},"attrs":[],"properties":{"id":150,"order":1050,"ligatures":"","prevSize":32,"code":59780,"name":"chordSymbol"},"setIdx":0,"setId":3,"iconIdx":160},{"icon":{"paths":["M176.808 459.636c1.76 0 4.4 0 4.84 0 0 0 0.44 0 0.44 0s2.64 0 4.84 0c39.6 1.775 62.92 22.725 62.92 49.002 0 12.783-5.28 27.341-18.48 41.19-25.080 27.341-66 42.255-101.639 42.255-27.72 0-51.48-8.877-62.92-26.986-3.52-7.102-5.28-13.848-5.28-21.305 0-38.704 53.68-81.669 115.279-84.155zM218.357 104.060h29.816v417.266h-29.816v-417.266zM460.378 736.199c3.088 0 7.719 0 8.491 0 0 0 0.772 0 0.772 0s4.631 0 8.491 0c69.47 3.15 110.38 40.316 110.38 86.931 0 22.678-9.263 48.505-32.419 73.072-43.998 48.505-115.783 74.962-178.306 74.962-48.629 0-90.311-15.748-110.38-47.875-6.175-12.599-9.263-24.567-9.263-37.796 0-68.663 94.17-144.885 202.234-149.294zM533.268 105.395h52.306v740.245h-52.306v-740.245zM218.868 54.776v408.191h21.634v-310.882c24.637 9.988 44.003 24.023 55.48 34.563 22.945 20.911 34.048 48.588 34.048 77.494 0 32.597-14.063 66.731-42.189 95.022-3.701 3.383-4.071 3.998-4.071 6.766 0 3.69 2.961 6.458 7.402 6.458 3.701 0 4.071 0 9.622-6.15 32.197-32.289 48.111-71.343 48.111-108.86 0-39.669-18.134-78.109-54.033-106.093-23.955-18.761-42.991-42.117-54.37-65.511v-30.996zM232.568 65.4h0.704v2.34c-0.245-0.781-0.478-1.561-0.704-2.34zM226.099 146.938c2.433 0.753 4.822 1.556 7.173 2.395v303.010h-7.173zM222.141 83.873v371.561h19.77v-371.561zM376.96 85.597c-0.137-0.004-0.298-0.007-0.459-0.007-3.364 0-6.469 1.108-8.971 2.979l0.039-0.028c-89.932 64.947-179.873 129.918-269.834 194.895-3.983 2.736-6.561 7.265-6.561 12.397 0 8.28 6.712 14.993 14.993 14.993 3.447 0 6.623-1.163 9.155-3.119l-0.035 0.026c89.961-64.976 179.903-129.911 269.834-194.858 3.895-2.746 6.408-7.225 6.408-12.291 0-8.131-6.473-14.75-14.547-14.986l-0.022-0.001z"],"width":650,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["grace_slash"],"defaultCode":59780,"grid":16},"attrs":[],"properties":{"id":151,"order":1051,"ligatures":"","prevSize":32,"code":59781,"name":"grace_slash"},"setIdx":0,"setId":3,"iconIdx":161},{"icon":{"paths":["M1024 0h-416l160 160-192 192 96 96 192-192 160 160zM1024 1024v-416l-160 160-192-192-96 96 192 192-160 160zM0 1024h416l-160-160 192-192-96-96-192 192-160-160zM0 0v416l160-160 192 192 96-96-192-192 160-160z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["enlarge"],"defaultCode":59785,"grid":16},"attrs":[],"properties":{"id":152,"order":1052,"ligatures":"","prevSize":32,"code":59785,"name":"enlarge"},"setIdx":0,"setId":3,"iconIdx":162},{"icon":{"paths":["M1024 0v416l-160-160-192 192-96-96 192-192-160-160zM448 672l-192 192 160 160h-416v-416l160 160 192-192z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["enlarge2"],"defaultCode":59787,"grid":16},"attrs":[],"properties":{"id":153,"order":1053,"ligatures":"","prevSize":32,"code":59787,"name":"enlarge2"},"setIdx":0,"setId":3,"iconIdx":163},{"icon":{"paths":["M536.233 920.023h-57.608v-312.914h57.608v312.914zM774.546 964.578h-295.921v-63.781h295.921v63.781zM774.546 607.109h-295.921v-58.821h295.921v58.821zM536.233 443.398h-57.608v-312.914h57.608v312.914zM774.545 487.953h-295.921v-63.781h295.921v63.781zM774.545 130.484h-295.921v-58.821h295.921v58.821zM374.403 964.578h-50.233q-59.945 0-97.453-46.458-37.173-45.993-37.173-133.334v-69.222q0-78.514-27.796-122.649-27.796-44.6-85.062-44.6h-17.079v-72.474h17.079q57.266 0 85.062-44.135 27.796-44.6 27.796-123.113v-69.222q0-87.341 37.173-133.334 37.508-46.458 97.453-46.458h50.233v64.112h-38.177q-45.545 0-66.308 29.268-20.428 29.268-20.428 94.31v81.301q0 64.576-25.787 108.712-25.786 43.67-71.666 69.222v11.15q45.88 25.552 71.666 69.687 25.787 43.67 25.787 108.247v81.301q0 65.041 20.428 94.31 20.763 29.268 66.308 29.268h38.177z"],"width":834,"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["brace"],"defaultCode":59793,"grid":16},"attrs":[],"properties":{"id":154,"order":1054,"ligatures":"","prevSize":32,"code":59793,"name":"brace"},"setIdx":0,"setId":3,"iconIdx":164},{"icon":{"paths":["M896 448h16c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h-128v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v576h128v-576zM768 256h128v128h-128v-128zM592 832c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-576h-128v576h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v192h128v-192h16zM448 640h128v128h-128v-128zM272 448c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h-128v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v576h128v-576h16zM128 256h128v128h-128v-128z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["equalizer2"],"defaultCode":59795,"grid":16},"attrs":[],"properties":{"id":155,"order":1055,"ligatures":"","prevSize":32,"code":59795,"name":"equalizer2"},"setIdx":0,"setId":3,"iconIdx":165},{"icon":{"paths":["M665.832 327.048l-64.952-64.922-324.81 324.742c-53.814 53.792-53.814 141.048 0 194.844 53.804 53.792 141.060 53.792 194.874 0l389.772-389.708c89.714-89.662 89.714-235.062 0-324.726-89.666-89.704-235.112-89.704-324.782 0l-409.23 409.178c-0.29 0.304-0.612 0.576-0.876 0.846-125.102 125.096-125.102 327.856 0 452.906 125.054 125.056 327.868 125.056 452.988 0 0.274-0.274 0.516-0.568 0.82-0.876l0.032 0.034 279.332-279.292-64.986-64.92-279.33 279.262c-0.296 0.268-0.564 0.57-0.846 0.844-89.074 89.058-233.98 89.058-323.076 0-89.062-89.042-89.062-233.922 0-322.978 0.304-0.304 0.604-0.582 0.888-0.846l-0.046-0.060 409.28-409.166c53.712-53.738 141.144-53.738 194.886 0 53.712 53.734 53.712 141.148 0 194.84l-389.772 389.7c-17.936 17.922-47.054 17.922-64.972 0-17.894-17.886-17.894-47.032 0-64.92l324.806-324.782z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["attachment"],"defaultCode":59853,"grid":16},"attrs":[],"properties":{"id":156,"order":1056,"ligatures":"","prevSize":32,"code":59853,"name":"attachment"},"setIdx":0,"setId":3,"iconIdx":166},{"icon":{"paths":["M992 384h-352v-352c0-17.672-14.328-32-32-32h-192c-17.672 0-32 14.328-32 32v352h-352c-17.672 0-32 14.328-32 32v192c0 17.672 14.328 32 32 32h352v352c0 17.672 14.328 32 32 32h192c17.672 0 32-14.328 32-32v-352h352c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["plus"],"defaultCode":59914,"grid":16},"attrs":[],"properties":{"id":157,"order":1057,"ligatures":"","prevSize":32,"code":59914,"name":"plus"},"setIdx":0,"setId":3,"iconIdx":167},{"icon":{"paths":["M0 416v192c0 17.672 14.328 32 32 32h960c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32h-960c-17.672 0-32 14.328-32 32z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["minus"],"defaultCode":59915,"grid":16},"attrs":[],"properties":{"id":158,"order":1058,"ligatures":"","prevSize":32,"code":59915,"name":"minus"},"setIdx":0,"setId":3,"iconIdx":168},{"icon":{"paths":["M448 304c0-26.4 21.6-48 48-48h32c26.4 0 48 21.6 48 48v32c0 26.4-21.6 48-48 48h-32c-26.4 0-48-21.6-48-48v-32zM640 768h-256v-64h64v-192h-64v-64h192v256h64zM512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["info"],"defaultCode":59916,"grid":16},"attrs":[],"properties":{"id":159,"order":1059,"ligatures":"","prevSize":32,"code":59916,"name":"info"},"setIdx":0,"setId":3,"iconIdx":169},{"icon":{"paths":["M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM672 256l-160 160-160-160-96 96 160 160-160 160 96 96 160-160 160 160 96-96-160-160 160-160z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["cancel-circle"],"defaultCode":59917,"grid":16},"attrs":[],"properties":{"id":160,"order":1060,"ligatures":"","prevSize":32,"code":59917,"name":"cancel-circle"},"setIdx":0,"setId":3,"iconIdx":170},{"icon":{"paths":["M1014.662 822.66c-0.004-0.004-0.008-0.008-0.012-0.010l-310.644-310.65 310.644-310.65c0.004-0.004 0.008-0.006 0.012-0.010 3.344-3.346 5.762-7.254 7.312-11.416 4.246-11.376 1.824-24.682-7.324-33.83l-146.746-146.746c-9.148-9.146-22.45-11.566-33.828-7.32-4.16 1.55-8.070 3.968-11.418 7.31 0 0.004-0.004 0.006-0.008 0.010l-310.648 310.652-310.648-310.65c-0.004-0.004-0.006-0.006-0.010-0.010-3.346-3.342-7.254-5.76-11.414-7.31-11.38-4.248-24.682-1.826-33.83 7.32l-146.748 146.748c-9.148 9.148-11.568 22.452-7.322 33.828 1.552 4.16 3.97 8.072 7.312 11.416 0.004 0.002 0.006 0.006 0.010 0.010l310.65 310.648-310.65 310.652c-0.002 0.004-0.006 0.006-0.008 0.010-3.342 3.346-5.76 7.254-7.314 11.414-4.248 11.376-1.826 24.682 7.322 33.83l146.748 146.746c9.15 9.148 22.452 11.568 33.83 7.322 4.16-1.552 8.070-3.97 11.416-7.312 0.002-0.004 0.006-0.006 0.010-0.010l310.648-310.65 310.648 310.65c0.004 0.002 0.008 0.006 0.012 0.008 3.348 3.344 7.254 5.762 11.414 7.314 11.378 4.246 24.684 1.826 33.828-7.322l146.746-146.748c9.148-9.148 11.57-22.454 7.324-33.83-1.552-4.16-3.97-8.068-7.314-11.414z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["cross"],"defaultCode":59919,"grid":16},"attrs":[],"properties":{"id":161,"order":1061,"ligatures":"","prevSize":32,"code":59919,"name":"cross"},"setIdx":0,"setId":3,"iconIdx":171},{"icon":{"paths":["M864 128l-480 480-224-224-160 160 384 384 640-640z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["checkmark"],"defaultCode":59920,"grid":16},"attrs":[],"properties":{"id":162,"order":1062,"ligatures":"","prevSize":32,"code":59920,"name":"checkmark"},"setIdx":0,"setId":3,"iconIdx":172},{"icon":{"paths":["M397.434 917.696l-397.868-391.6 197.378-194.27 200.49 197.332 429.62-422.852 197.378 194.27-626.998 617.12zM107.912 526.096l289.524 284.962 518.656-510.482-89.036-87.632-429.62 422.852-200.49-197.334-89.034 87.634z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["checkmark2"],"defaultCode":59921,"grid":16},"attrs":[],"properties":{"id":163,"order":1063,"ligatures":"","prevSize":32,"code":59921,"name":"checkmark2"},"setIdx":0,"setId":3,"iconIdx":173},{"icon":{"paths":["M192 128l640 384-640 384z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["play3"],"defaultCode":59932,"grid":16},"attrs":[],"properties":{"id":164,"order":1064,"ligatures":"","prevSize":32,"code":59932,"name":"play3"},"setIdx":0,"setId":3,"iconIdx":174},{"icon":{"paths":["M128 128h320v768h-320zM576 128h320v768h-320z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["pause2"],"defaultCode":59933,"grid":16},"attrs":[],"properties":{"id":165,"order":1065,"ligatures":"","prevSize":32,"code":59933,"name":"pause2"},"setIdx":0,"setId":3,"iconIdx":175},{"icon":{"paths":["M128 128h768v768h-768z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["stop2"],"defaultCode":59934,"grid":16},"attrs":[],"properties":{"id":166,"order":1066,"ligatures":"","prevSize":32,"code":59934,"name":"stop2"},"setIdx":0,"setId":3,"iconIdx":176},{"icon":{"paths":["M128 896v-768h128v352l320-320v320l320-320v704l-320-320v320l-320-320v352z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["first"],"defaultCode":59937,"grid":16},"attrs":[],"properties":{"id":167,"order":1067,"ligatures":"","prevSize":32,"code":59937,"name":"first"},"setIdx":0,"setId":3,"iconIdx":177},{"icon":{"paths":["M960 619.148v84.852h-84.852l-107.148-107.148-107.148 107.148h-84.852v-84.852l107.148-107.148-107.148-107.148v-84.852h84.852l107.148 107.148 107.148-107.148h84.852v84.852l-107.148 107.148 107.148 107.148zM416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["volume-mute2"],"defaultCode":59946,"grid":16},"attrs":[],"properties":{"id":168,"order":1068,"ligatures":"","prevSize":32,"code":59946,"name":"volume-mute2"},"setIdx":0,"setId":3,"iconIdx":178},{"icon":{"paths":["M1024 576h-192v192h-128v-192h-192v-128h192v-192h128v192h192v128zM416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["volume-increase"],"defaultCode":59947,"grid":16},"attrs":[],"properties":{"id":169,"order":1069,"ligatures":"","prevSize":32,"code":59947,"name":"volume-increase"},"setIdx":0,"setId":3,"iconIdx":179},{"icon":{"paths":["M512 448h512v128h-512v-128zM416.006 960c-8.328 0-16.512-3.25-22.634-9.374l-246.626-246.626h-114.746c-17.672 0-32-14.326-32-32v-320c0-17.672 14.328-32 32-32h114.746l246.626-246.628c9.154-9.154 22.916-11.89 34.874-6.936 11.958 4.952 19.754 16.622 19.754 29.564v832c0 12.944-7.796 24.612-19.754 29.564-3.958 1.64-8.118 2.436-12.24 2.436z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["volume-decrease"],"defaultCode":59948,"grid":16},"attrs":[],"properties":{"id":170,"order":1070,"ligatures":"","prevSize":32,"code":59948,"name":"volume-decrease"},"setIdx":0,"setId":3,"iconIdx":180},{"icon":{"paths":["M512 32l-480 480h288v512h384v-512h288z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-up"],"defaultCode":59954,"grid":16},"attrs":[],"properties":{"id":171,"order":1071,"ligatures":"","prevSize":32,"code":59954,"name":"arrow-up"},"setIdx":0,"setId":3,"iconIdx":181},{"icon":{"paths":["M992 512l-480-480v288h-512v384h512v288z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-right"],"defaultCode":59956,"grid":16},"attrs":[],"properties":{"id":172,"order":1072,"ligatures":"","prevSize":32,"code":59956,"name":"arrow-right"},"setIdx":0,"setId":3,"iconIdx":182},{"icon":{"paths":["M512 992l480-480h-288v-512h-384v512h-288z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-down"],"defaultCode":59958,"grid":16},"attrs":[],"properties":{"id":173,"order":1073,"ligatures":"","prevSize":32,"code":59958,"name":"arrow-down"},"setIdx":0,"setId":3,"iconIdx":183},{"icon":{"paths":["M32 512l480 480v-288h512v-384h-512v-288z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-left"],"defaultCode":59960,"grid":16},"attrs":[],"properties":{"id":174,"order":1074,"ligatures":"","prevSize":32,"code":59960,"name":"arrow-left"},"setIdx":0,"setId":3,"iconIdx":184},{"icon":{"paths":["M621.254 877.254l320-320c24.994-24.992 24.994-65.516 0-90.51l-320-320c-24.994-24.992-65.516-24.992-90.51 0-24.994 24.994-24.994 65.516 0 90.51l210.746 210.746h-613.49c-35.346 0-64 28.654-64 64s28.654 64 64 64h613.49l-210.746 210.746c-12.496 12.496-18.744 28.876-18.744 45.254s6.248 32.758 18.744 45.254c24.994 24.994 65.516 24.994 90.51 0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-right2"],"defaultCode":59964,"grid":16},"attrs":[],"properties":{"id":175,"order":1075,"ligatures":"","prevSize":32,"code":59964,"name":"arrow-right2"},"setIdx":0,"setId":3,"iconIdx":185},{"icon":{"paths":["M402.746 877.254l-320-320c-24.994-24.992-24.994-65.516 0-90.51l320-320c24.994-24.992 65.516-24.992 90.51 0 24.994 24.994 24.994 65.516 0 90.51l-210.746 210.746h613.49c35.346 0 64 28.654 64 64s-28.654 64-64 64h-613.49l210.746 210.746c12.496 12.496 18.744 28.876 18.744 45.254s-6.248 32.758-18.744 45.254c-24.994 24.994-65.516 24.994-90.51 0z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["arrow-left2"],"defaultCode":59968,"grid":16},"attrs":[],"properties":{"id":176,"order":1076,"ligatures":"","prevSize":32,"code":59968,"name":"arrow-left2"},"setIdx":0,"setId":3,"iconIdx":186},{"icon":{"paths":["M0 512c0 282.77 229.23 512 512 512s512-229.23 512-512-229.23-512-512-512-512 229.23-512 512zM928 512c0 229.75-186.25 416-416 416s-416-186.25-416-416 186.25-416 416-416 416 186.25 416 416zM706.744 669.256l90.512-90.512-285.256-285.254-285.254 285.256 90.508 90.508 194.746-194.744z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["circle-up"],"defaultCode":59969,"grid":16},"attrs":[],"properties":{"id":177,"order":1077,"ligatures":"","prevSize":32,"code":59969,"name":"circle-up"},"setIdx":0,"setId":3,"iconIdx":187},{"icon":{"paths":["M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 928c-229.75 0-416-186.25-416-416s186.25-416 416-416 416 186.25 416 416-186.25 416-416 416zM354.744 706.744l90.512 90.512 285.254-285.256-285.256-285.254-90.508 90.508 194.744 194.746z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["circle-right"],"defaultCode":59970,"grid":16},"attrs":[],"properties":{"id":178,"order":1078,"ligatures":"","prevSize":32,"code":59970,"name":"circle-right"},"setIdx":0,"setId":3,"iconIdx":188},{"icon":{"paths":["M1024 512c0-282.77-229.23-512-512-512s-512 229.23-512 512 229.23 512 512 512 512-229.23 512-512zM96 512c0-229.75 186.25-416 416-416s416 186.25 416 416-186.25 416-416 416-416-186.25-416-416zM317.256 354.744l-90.512 90.512 285.256 285.254 285.254-285.256-90.508-90.508-194.746 194.744z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["circle-down"],"defaultCode":59971,"grid":16},"attrs":[],"properties":{"id":179,"order":1079,"ligatures":"","prevSize":32,"code":59971,"name":"circle-down"},"setIdx":0,"setId":3,"iconIdx":189},{"icon":{"paths":["M512 1024c282.77 0 512-229.23 512-512s-229.23-512-512-512-512 229.23-512 512 229.23 512 512 512zM512 96c229.75 0 416 186.25 416 416s-186.25 416-416 416-416-186.25-416-416 186.25-416 416-416zM669.256 317.256l-90.512-90.512-285.254 285.256 285.256 285.254 90.508-90.508-194.744-194.746z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["circle-left"],"defaultCode":59972,"grid":16},"attrs":[],"properties":{"id":180,"order":1080,"ligatures":"","prevSize":32,"code":59972,"name":"circle-left"},"setIdx":0,"setId":3,"iconIdx":190},{"icon":{"paths":["M192 64v768h768v-768h-768zM896 768h-640v-640h640v640zM128 896v-672l-64-64v800h800l-64-64h-672zM352 256l160 160-192 192 96 96 192-192 160 160v-416z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"tags":["new-tab"],"defaultCode":60030,"grid":16},"attrs":[],"properties":{"id":181,"order":1081,"ligatures":"","prevSize":32,"code":60030,"name":"new-tab"},"setIdx":0,"setId":3,"iconIdx":191}],"height":1024,"metadata":{"name":"smoosic"},"preferences":{"showGlyphs":true,"showCodes":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"smoosic","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":0},"embed":false,"noie8":true,"ie7":false,"showSelector":false,"showMetrics":true,"showMetadata":false,"autoHost":true},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"name":"icomoon","classSelector":".icon","autoHost":true},"historySize":50,"gridSize":16,"showGrid":true,"showLiga":false,"quickUsageToken":{"UntitledProject2":"OTFhMmM1YzA3MiMxNzI1MjEzNzYxI3FFYTBuMjJmeHJ1YjJRb01pVlhLK1RTajdqeUJBNHVnK3hYY3ovT3RLTWhX"}}} \ No newline at end of file diff --git a/release/styles/fonts/smoosic.svg b/release/styles/fonts/smoosic.svg index d13478bb..cf01ebe3 100644 --- a/release/styles/fonts/smoosic.svg +++ b/release/styles/fonts/smoosic.svg @@ -161,6 +161,8 @@ + + diff --git a/release/styles/fonts/smoosic.ttf b/release/styles/fonts/smoosic.ttf index 87a31c6f32f8192e8768ae91822b19a2c3cf908d..6a203c1a0bb469fcdbd507c2b3c14c4209bc4ac5 100644 GIT binary patch delta 6287 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 uR9Pw@B^) diff --git a/release/styles/fonts/smoosic.woff b/release/styles/fonts/smoosic.woff index 7536c926e152a14ecdf883c3ff94165410e1169d..b5d9e5dddecaed3a45c2dad71fabeba8493e5c03 100644 GIT binary patch delta 6397 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 diff --git a/release/styles/images/metronome.svg b/release/styles/images/metronome.svg new file mode 100644 index 00000000..6bd0fe16 --- /dev/null +++ b/release/styles/images/metronome.svg @@ -0,0 +1,242 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/release/styles/media.css b/release/styles/media.css index cb8d66c8..52533192 100644 --- a/release/styles/media.css +++ b/release/styles/media.css @@ -114,9 +114,17 @@ } body { margin:0; - overflow:hidden; + overflow:hidden; +} +/* override bootstrap */ +body.modal { + display: block; +} +li.nav-item button.nav-link { + text-align: left; + display: flex; + justify-content: space-between; } - /* @font-face { font-family:'Bubblegum Sans',cursive; font-family:'Yatra One',cursive; @@ -222,7 +230,9 @@ body.printing .piano-container { display:none; } body.printing .hide-print, -body.printing .vf-hide-print{ +body.printing .vf-hide-print, +body.printing .media div.d-flex +{ display: none; } diff --git a/release/styles/menus.css b/release/styles/menus.css index 355279e6..26fa18cb 100644 --- a/release/styles/menus.css +++ b/release/styles/menus.css @@ -14,11 +14,6 @@ body.slash-menu .control-menu-message { border:solid #8d8 2px; border-radius:3px; } - -body.slash-menu button.menu-select { - background: #33ee66; -} - .menuElement { position:absolute; list-style:none; @@ -28,15 +23,16 @@ body.slash-menu button.menu-select { max-height: calc(100% - 80px); overflow-y: auto; } - -.menuOption { - width: 200px; - height: auto; - padding:0; - position:relative; - background:#fff; +.menuContainer .menuElement .menuOption { + display: flex; + flex-flow: row; +} +.menuContainer .menuElement .menuOption a.dropdown-item { + display: flex; +} +.menuContainer .menuElement .menuOption a.dropdown-item span { + margin-right: 10px; } - .menuOption .menuText { display:block; flex:3; diff --git a/release/styles/ribbon.css b/release/styles/ribbon.css index f9fb6686..5b36b8bb 100644 --- a/release/styles/ribbon.css +++ b/release/styles/ribbon.css @@ -110,17 +110,32 @@ div.ribbonButtonContainer.expanded { .controls-top button { padding: 5px 0; - font-size: 0.7em; border: 1px #44e solid; position:relative; + font-size: 0.7em; border-radius:5px; -} - - -.controls-top button { - width:30px; + min-width: 50px; height:50px; - font-size:0.7em; +} +.controls-top button.button-wide { + font-size: 1em; +} +button.hover-text .ribbon-button-hotkey { + display: none; +} +button.hover-text .ribbon-button-hotkey { + display: none; +} +#controls-left .nav-item { + min-width: 150px; +} +button.hover-text:hover .ribbon-button-text.icon, +body.alt-key button.hover-text .ribbon-button-text.icon { + display: none; +} +button.hover-text:hover .ribbon-button-hotkey, +body.alt-key button.hover-text .ribbon-button-hotkey { + display: inline-block; } .controls-top div { @@ -134,11 +149,64 @@ div.ribbonButtonContainer.expanded { opacity:0.7; } -.controls-top button span.ribbon-button-text { +.controls-top .text-span { position:absolute; - left:2px; + top: 30%; + left: 10px; +} +.controls-top .ribbonButtonContainer .text-span .icon-bravura { + display: block; + left: 12px; +} +.controls-top button span.ribbon-button-hotkey { + position: absolute; + right: 2px; + top: 33%; + font-family: sans-serif; +} +.controls-top button.beams .ribbon-button-hotkey { + font-size:0.6em; } +.controls-top button.textButton { + font-size:1.2em; +} + +.controls-top button.duration.expanded.tuplet span.ribbon-button-hotkey { + font-size:1em; + padding-left: 7px; +} +.controls-top button.duration.expanded span.ribbon-button-text.icon { + font-size:2.2em; + top:25%; +} + +.controls-top button.duration span.ribbon-button-text, +.controls-top button.repetext span.ribbon-button-text { + font-size:1.6em; +} + +.controls-top button.repetext { + font-style:italic; +} +.controls-top button.duration span.ribbon-button-hotkey { + font-size:1.6em; +} + +button.addChord .left-text .icon { + left:2em; +} + +.ribbonButtonContainer button.player{ + width:55px; +} + +.controls-top .ribbonButtonContainer button.player span.ribbon-button-text { + top:25%; +} +#controls-left .text-span { + margin-right: 10px; +} button#MicrotoneButtons { width:35px; } @@ -154,10 +222,70 @@ button#MicrotoneButtons { width:35px; height:40px; } +.ribbonButtonContainer[data-group="quickButtons"] .button-wide button { + font-size: 1.2em; +} +.ribbonButtonContainer[data-group="quickButtons"] .button-wide button .icon { + font-size: 2em; +} +.controls-top .ribbonButtonContainer .ribbon-button-text.icon-smo.icon { + position: absolute; + top:8px; + left:12px; +} +.controls-top .ribbonButtonContainer .button-wide .ribbon-button-text.icon-smo.icon, +.controls-top .ribbonButtonContainer .button-wide .ribbon-button-text.icon-bravura.icon { + right: 5px; + left:inherit; + bottom:inherit; +} +.controls-top .ribbonButtonContainer .button-wide .ribbon-button-text.icon-bravura.icon { + top: 0; +} +.controls-top .ribbonButtonContainer .button-wide .ribbon-button-text.icon-smo.icon { + top: 5px; +} +.controls-top .ribbonButtonContainer .left-text { + position: relative; + display: block; + width: 100%; + height: 100%; +} +.controls-top .ribbonButtonContainer .button-wide .text-span { + top: 8px; + left: 5px; +} -.controls-top .ribbonButtonContainer[data-group="quickButtons"] button .icon { - top:25%; - left:25%; +.controls-top button.articulation { + width:50px; +} + +.controls-top button.articulation span.ribbon-button-text.icon { + top:30%; +} + +.controls-top button.selection-icon span.ribbon-button-text.icon { + top:30%; + left: 20%; +} + +.controls-top button.articulation span.ribbon-button-text.icon:before { + font-size:1.8em; +} +.controls-top button.selection-icon { + width:50px; +} +.controls-top button.selection-icon span.ribbon-button-text.icon:before { + font-size: 2.2em; +} +.ribbon-button-hotkey { + display: none; +} +button.select-part-button .ribbon-button-hotkey { + display: inline-block; +} +.ribbonButtonContainer[data-group="quickButtons"] button.button-wide { + width:100px; } .controls-top .ribbonButtonContainer[data-group="quickButtons"] .select-part-button { width: 120px; @@ -172,15 +300,9 @@ button#MicrotoneButtons { .ribbonButtonContainer[data-group="microtone"] { font-size:1.5em; } - -.ribbonButtonContainer[data-group="microtone"] button.expanded span.ribbon-button-text { - top:10px; - left:4px; -} #addDynamicsMenu { font-size:.9em; } - #addDynamicsMenu .left-text { left:0; top:20%; @@ -202,16 +324,6 @@ button#MicrotoneButtons { left:20%; font-size:1.4em; } -#articulationButtons .left-text { - font-size: 1.4em; - position: absolute; - top: 10%; - left: 12%; -} -#StaveButtons { - width:55px; - font-size:1.2em; -} #clefAddRemove .icon { font-size:0.7em; @@ -250,10 +362,6 @@ button#MicrotoneButtons { left:20%; } -#NoteButtons span.icon { - font-size:2em; -} - #articulationButtons .icon-articulation{ left:30%; } @@ -289,63 +397,6 @@ button#MicrotoneButtons { left: 0; } -.controls-top button.beams .ribbon-button-hotkey { - font-size:0.6em; -} - -.controls-top button.textButton { - font-size:1.2em; -} - -.controls-top button.duration.expanded.tuplet span.ribbon-button-hotkey { - font-size:1em; - padding-left: 7px; -} -.controls-top button.duration.expanded span.ribbon-button-text.icon { - font-size:2.2em; - top:25%; -} - -.controls-top button.duration span.ribbon-button-text, -.controls-top button.repetext span.ribbon-button-text { - font-size:1.6em; -} - -.controls-top button.repetext { - font-style:italic; -} -.controls-top button.duration span.ribbon-button-hotkey { - font-size:1.6em; -} - - -.controls-top .text-span { - position:absolute; - top: 30%; - left: 0; -} - -button.addChord .left-text .icon { - left:2em; -} - -.ribbonButtonContainer button.player{ - width:55px; -} - -.controls-top .ribbonButtonContainer button.player span.ribbon-button-text { - top:25%; -} -#playerButtons .ribbon-button-text { - top: 15%; - left: 15%; -} - -#playerButtons,#VoiceButtons { - width:55px; - font-size:1.3em; -} - [data-group="voices"] .expanded .icon { font-size:1.7em; } @@ -363,69 +414,7 @@ button.addChord .left-text .icon { background-color:green; } -#addTextMenu .left-text { - left:18%; - top: 15%; - font-size: 1em; - position:absolute; -} -#DurationButtons .left-text { - position:absolute; - font-size:1.2em; - left:12%; - top:12%; -} - -#MeasureButtons .left-text { - position:absolute; - top: 12%; - left: 15%; - font-size: 1.9em; -} - -#GrowDuration .ribbon-button-hotkey , -#LessDuration .ribbon-button-hotkey { - font-size:3em; - top:0; -} - -#TripletButton { - width:65px; -} -#SeptupletButton { - width:90px; -} -#QuintupletButton { - width:75px; -} - -#toCoda .icon { - left:10px; -} - -.controls-top button.articulation { - width:50px; -} - -.controls-top button.articulation span.ribbon-button-text.icon { - top:30%; -} - -.controls-top button.selection-icon span.ribbon-button-text.icon { - top:30%; - left: 20%; -} - -.controls-top button.articulation span.ribbon-button-text.icon:before { - font-size:1.8em; -} -.controls-top button.selection-icon { - width:50px; -} -.controls-top button.selection-icon span.ribbon-button-text.icon:before { - font-size: 2.2em; -} .controls-top button.addChord { width:55px; @@ -449,17 +438,15 @@ button.addChord .left-text .icon { left:30%; top:30%; } -#NavigationButtons { - width:55px; - font-size:1.7em; -} #NavigationButtons.expandedChildren { font-size: 1.4em; width: 50px; left: 0; } - +li.nav-item:hover { + background: var(--bs-gray-200); +} .expanded .ribbonButtonContainer button.graceIcon { width:60px; font-size:1.6em; @@ -468,34 +455,15 @@ button.addChord .left-text .icon { font-size:0.5em; } -#UpOctaveButton,#DownOctaveButton { - width:50px; - font-size:0.6em; -} -#ToggleAccidental ,#ToggleCourtesy { - font-size:1em; - width:60px; -} + #ToggleAccidental .ribbon-button-hotkey,#ToggleCourtesy .ribbon-button-hotkey { font-size:0.7em; } -.controls-left button.icon span.icon, -.controls-top button.icon span.icon { - top:10%; -} - .controls-left button.icon span.icon:before, .controls-top button.icon span.icon:before{ font-size:1.6em; } - -.controls-top button span.ribbon-button-hotkey { - position:absolute; - right:2px; - top:33%; -} - .controls-left .articulations button span.ribbon-button-text { font-size:2em; } diff --git a/src/render/sui/piano.ts b/src/render/sui/piano.ts index a0b803ce..a6dae816 100644 --- a/src/render/sui/piano.ts +++ b/src/render/sui/piano.ts @@ -42,7 +42,7 @@ export class SuiPiano { } static createAndDisplay() { // Called by ribbon button. - $('body').trigger('show-piano-event'); + // $('body').trigger('show-piano-event'); $('body').trigger('forceScrollEvent'); } @@ -259,7 +259,6 @@ export class SuiPiano { playNote() { } render() { - $('body').addClass('show-piano'); var b = SvgBuilder.b; var d = SuiPiano.dimensions; // https://www.mathpages.com/home/kmath043.htm diff --git a/src/smo/data/score.ts b/src/smo/data/score.ts index 898a912c..4b468b71 100644 --- a/src/smo/data/score.ts +++ b/src/smo/data/score.ts @@ -270,7 +270,7 @@ export class SmoScore { this.numberStaves(); } if (typeof (this.preferences.showPiano) === 'undefined') { - this.preferences.showPiano = true; + this.preferences.showPiano = false; } this.audioSettings = new SmoAudioPlayerSettings(params.audioSettings); this.updateMeasureFormats(); diff --git a/src/smo/data/scoreModifiers.ts b/src/smo/data/scoreModifiers.ts index 14e277c9..a06b253f 100644 --- a/src/smo/data/scoreModifiers.ts +++ b/src/smo/data/scoreModifiers.ts @@ -155,7 +155,7 @@ export class SmoScorePreferences { autoAdvance: boolean = true; defaultDupleDuration: number = 4096; defaultTripleDuration: number = 6144; - showPiano: boolean = true; + showPiano: boolean = false; hideEmptyLines: boolean = false; transposingScore: boolean = false; static get defaults(): SmoScorePreferencesParams { @@ -164,7 +164,7 @@ export class SmoScorePreferences { autoAdvance: true, defaultDupleDuration: 4096, defaultTripleDuration: 6144, - showPiano: true, + showPiano: false, hideEmptyLines: false, transposingScore: false };